topinambour 1.0.6 → 1.0.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +3 -1
- data/bin/topinambour +2 -2
- data/lib/actions.rb +10 -1
- data/lib/application.rb +3 -14
- data/lib/css_editor.rb +20 -7
- data/lib/notebook.rb +2 -1
- data/lib/terminal.rb +30 -11
- data/lib/window.rb +3 -3
- metadata +2 -7
- data/data/topinambour-icon-128.png +0 -0
- data/data/topinambour-icon-16.png +0 -0
- data/data/topinambour-icon-32.png +0 -0
- data/data/topinambour-icon-64.png +0 -0
- data/data/topinambour-icon.png +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 76fa93f28cb01a9f218e3f9bc87e64adf76ef14d
|
4
|
+
data.tar.gz: 834c19b5bdc2ea89740083164ef3bed96ef12c15
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 49e9f72f92b495e00b42802938f22b0359a8c5f48316b50c22ad80b2abb7c4b123a908f5f8d36546fa76535d66f31b1e365c64649fa0d200247f99c8cbdf2777
|
7
|
+
data.tar.gz: 432e048bb7e5546f9e8fe3c053362fe3a0e3d3959c6b921654f6478df01b391f8d2eb0f178e0eda659ab27fa887c5df04b6d6fed3fe00c9c268883e9e8b57ba0
|
data/README.md
CHANGED
@@ -4,7 +4,9 @@
|
|
4
4
|
[![Code Climate](https://codeclimate.com/github/cedlemo/topinambour/badges/gpa.svg)](https://codeclimate.com/github/cedlemo/topinambour)
|
5
5
|
|
6
6
|
|
7
|
-
<a href="https://raw.github.com/cedlemo/topinambour/master/
|
7
|
+
<a href="https://raw.github.com/cedlemo/topinambour/master/terminal_selector_screen.gif"><img src="https://raw.github.com/cedlemo/topinambour/master/terminal_selector_screen.gif" style="width:576px;height:324px;" alt="Color selection gif"></a>
|
8
|
+
|
9
|
+
<a href="https://raw.github.com/cedlemo/topinambour/master/color_selection_screen.gif"><img src="https://raw.github.com/cedlemo/topinambour/master/color_selection_screen.gif" style="width:576px;height:324px;" alt="Color selection gif"></a>
|
8
10
|
|
9
11
|
Topinambour is Terminal written with the Gtk3 and Vte3 ruby bindings from the project [ruby-gnome2](https://github.com/ruby-gnome2/ruby-gnome2). I have written it for testing purpose, but Topinambour works well and I use it as my primary terminal emulator.
|
10
12
|
|
data/bin/topinambour
CHANGED
@@ -46,8 +46,8 @@ end
|
|
46
46
|
resource = Gio::Resource.load(gresource_bin)
|
47
47
|
Gio::Resources.register(resource)
|
48
48
|
# Load default libraries !!WARNING!! loading order matters
|
49
|
-
#%w(actions style_properties css_handler application
|
50
|
-
%w(actions style_properties css_handler application terminal notebook color_selector font_selector
|
49
|
+
#%w(actions style_properties css_handler application terminal notebook color_selector font_selector
|
50
|
+
%w(actions style_properties css_handler application terminal_regex terminal notebook color_selector font_selector
|
51
51
|
terminal_chooser headerbar shortcuts window resize_message css_editor).each do |l|
|
52
52
|
if File.exist?("#{USR_LIB_PATH}/#{l}.rb")
|
53
53
|
require "#{USR_LIB_PATH}/#{l}.rb"
|
data/lib/actions.rb
CHANGED
@@ -53,7 +53,16 @@ module TopinambourActions
|
|
53
53
|
|
54
54
|
def self.generate_term_copy_action(application)
|
55
55
|
action = generate_action("term_copy") do |_act, _param|
|
56
|
-
application.windows[0].notebook.current
|
56
|
+
term = application.windows[0].notebook.current
|
57
|
+
event = Gtk.current_event
|
58
|
+
|
59
|
+
_match, regex_type = term.match_check_event(event)
|
60
|
+
if term.has_selection? || regex_type == -1
|
61
|
+
term.copy_clipboard
|
62
|
+
else
|
63
|
+
clipboard = Gtk::Clipboard.get_default(Gdk::Display.default)
|
64
|
+
clipboard.text = term.last_match
|
65
|
+
end
|
57
66
|
end
|
58
67
|
action
|
59
68
|
end
|
data/lib/application.rb
CHANGED
@@ -53,8 +53,6 @@ class TopinambourApplication < Gtk::Application
|
|
53
53
|
end
|
54
54
|
end
|
55
55
|
|
56
|
-
private
|
57
|
-
|
58
56
|
def replace_old_conf_with(new_conf)
|
59
57
|
if File.exist?(USR_CSS)
|
60
58
|
new_name = "#{USR_CSS}_#{Time.new.strftime('%Y-%m-%d-%H-%M-%S')}.backup"
|
@@ -64,8 +62,11 @@ class TopinambourApplication < Gtk::Application
|
|
64
62
|
File.open(USR_CSS, "w") do |file|
|
65
63
|
file.puts new_conf
|
66
64
|
end
|
65
|
+
@css_content = new_conf
|
67
66
|
end
|
68
67
|
|
68
|
+
private
|
69
|
+
|
69
70
|
def load_menu_ui_in(application)
|
70
71
|
builder = Gtk::Builder.new(:resource => "/com/github/cedlemo/topinambour/app-menu.ui")
|
71
72
|
app_menu = builder["appmenu"]
|
@@ -99,18 +100,6 @@ class TopinambourApplication < Gtk::Application
|
|
99
100
|
end
|
100
101
|
end
|
101
102
|
|
102
|
-
def css_properties
|
103
|
-
@props = {}
|
104
|
-
return @props if windows[0].notebook.current.class == TopinambourTerminal
|
105
|
-
|
106
|
-
terminal_colors = windows[0].notebook.current.colors
|
107
|
-
TERMINAL_COLOR_NAMES.each_with_index do |c, i|
|
108
|
-
@props["-TopinambourTerminal-#{c}"] = terminal_colors[i].to_s
|
109
|
-
end
|
110
|
-
@props["-TopinambourTerminal-font"] = DEFAULT_TERMINAL_FONT
|
111
|
-
@props["-TopinambourWindow-shell"] = "\'/usr/bin/fish\'"
|
112
|
-
end
|
113
|
-
|
114
103
|
def check_and_create_if_no_config_dir
|
115
104
|
Dir.mkdir(CONFIG_DIR) unless Dir.exist?(CONFIG_DIR)
|
116
105
|
end
|
data/lib/css_editor.rb
CHANGED
@@ -20,7 +20,7 @@ class TopinambourCssEditor < Gtk::Grid
|
|
20
20
|
super()
|
21
21
|
@window = window
|
22
22
|
@provider = window.application.provider
|
23
|
-
@default_css =
|
23
|
+
@default_css = window.application.css_content
|
24
24
|
@modified_css = @default_css
|
25
25
|
@tab_label = "Css Editor"
|
26
26
|
|
@@ -32,14 +32,17 @@ class TopinambourCssEditor < Gtk::Grid
|
|
32
32
|
sw.add(@view)
|
33
33
|
attach(sw, 0, 0, 3, 1)
|
34
34
|
|
35
|
-
button =
|
35
|
+
button = gen_close_button
|
36
36
|
attach(button, 0, 1, 1, 1)
|
37
37
|
|
38
|
+
button = gen_reset_button
|
39
|
+
attach(button, 1, 1, 1, 1)
|
40
|
+
|
38
41
|
@style_button = gen_style_chooser_button
|
39
|
-
attach(@style_button,
|
42
|
+
attach(@style_button, 2, 1, 1, 1)
|
40
43
|
|
41
|
-
button = gen_save_button
|
42
|
-
attach(button,
|
44
|
+
button = gen_save_button(@view.buffer)
|
45
|
+
attach(button, 3, 1, 1, 1)
|
43
46
|
manage_buffer_changes
|
44
47
|
manage_css_errors
|
45
48
|
show_all
|
@@ -64,6 +67,16 @@ class TopinambourCssEditor < Gtk::Grid
|
|
64
67
|
@view.smart_backspace = true
|
65
68
|
end
|
66
69
|
|
70
|
+
def gen_close_button
|
71
|
+
button = Gtk::Button.new(:label => "Close Tab")
|
72
|
+
button.signal_connect "clicked" do
|
73
|
+
toplevel.close_current_tab
|
74
|
+
end
|
75
|
+
button.vexpand = false
|
76
|
+
button.hexpand = false
|
77
|
+
button
|
78
|
+
end
|
79
|
+
|
67
80
|
def gen_reset_button
|
68
81
|
button = Gtk::Button.new(:label => "Reset")
|
69
82
|
button.signal_connect "clicked" do
|
@@ -92,10 +105,10 @@ class TopinambourCssEditor < Gtk::Grid
|
|
92
105
|
button
|
93
106
|
end
|
94
107
|
|
95
|
-
def gen_save_button
|
108
|
+
def gen_save_button(buffer)
|
96
109
|
button = Gtk::Button.new(:label => "Save")
|
97
110
|
button.signal_connect "clicked" do
|
98
|
-
@window.application.
|
111
|
+
@window.application.replace_old_conf_with(buffer.text)
|
99
112
|
reload_custom_css_properties
|
100
113
|
end
|
101
114
|
button.vexpand = false
|
data/lib/notebook.rb
CHANGED
@@ -22,12 +22,13 @@ class TopinambourNotebook < Gtk::Notebook
|
|
22
22
|
signal_connect "hide" do
|
23
23
|
@visible = false
|
24
24
|
end
|
25
|
+
|
25
26
|
signal_connect "show" do
|
26
27
|
@visible = true
|
27
28
|
end
|
28
29
|
|
29
30
|
signal_connect "switch-page" do |_widget, next_page, next_page_num|
|
30
|
-
toplevel.current_label.text = next_page.terminal_title
|
31
|
+
toplevel.current_label.text = next_page.terminal_title if next_page.class == TopinambourTerminal
|
31
32
|
toplevel.current_tab.text = "#{next_page_num + 1}/#{n_pages}"
|
32
33
|
|
33
34
|
if page >= 0 && @gen_preview
|
data/lib/terminal.rb
CHANGED
@@ -17,7 +17,7 @@
|
|
17
17
|
##
|
18
18
|
# The default vte terminal customized
|
19
19
|
class TopinambourTerminal
|
20
|
-
attr_reader :pid, :menu
|
20
|
+
attr_reader :pid, :menu, :regexes, :last_match
|
21
21
|
attr_accessor :preview, :colors, :custom_title
|
22
22
|
|
23
23
|
##
|
@@ -48,6 +48,7 @@ class TopinambourTerminal
|
|
48
48
|
signal_connect "button-press-event" do |widget, event|
|
49
49
|
if event.type == Gdk::EventType::BUTTON_PRESS &&
|
50
50
|
event.button == Gdk::BUTTON_SECONDARY
|
51
|
+
manage_regex_on_right_click(widget, event)
|
51
52
|
display_copy_past_menu(widget, event)
|
52
53
|
true
|
53
54
|
elsif event.button == Gdk::BUTTON_PRIMARY
|
@@ -108,15 +109,15 @@ class TopinambourTerminal
|
|
108
109
|
end
|
109
110
|
|
110
111
|
def add_matches
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
112
|
+
@regexes = [:REGEX_URL_AS_IS, :REGEX_URL_FILE, :REGEX_URL_HTTP,
|
113
|
+
:REGEX_URL_VOIP, :REGEX_EMAIL, :REGEX_NEWS_MAN]
|
114
|
+
@regexes.each do |name|
|
115
|
+
regex_name = TopinambourRegex.const_get(name)
|
116
|
+
flags = [GLib::RegexCompileFlags::OPTIMIZE,
|
117
|
+
GLib::RegexCompileFlags::MULTILINE]
|
118
|
+
regex = GLib::Regex.new(regex_name, :compile_options => flags)
|
119
|
+
match_add_gregex(regex, 0)
|
120
|
+
end
|
120
121
|
end
|
121
122
|
|
122
123
|
def display_copy_past_menu(widget, event)
|
@@ -130,8 +131,26 @@ class TopinambourTerminal
|
|
130
131
|
widget.menu.show
|
131
132
|
end
|
132
133
|
|
134
|
+
def manage_regex_on_right_click(_widget, event)
|
135
|
+
@last_match, _regex_type = match_check_event(event)
|
136
|
+
end
|
137
|
+
|
133
138
|
def manage_regex_on_click(_widget, event)
|
134
|
-
|
139
|
+
match, regex_type = match_check_event(event)
|
140
|
+
return nil if regex_type == -1
|
141
|
+
modified_match = case @regexes[regex_type]
|
142
|
+
when :REGEX_EMAIL
|
143
|
+
"mailto:" + match
|
144
|
+
when :REGEX_URL_HTTP
|
145
|
+
"http://" + match
|
146
|
+
else
|
147
|
+
match
|
148
|
+
end
|
149
|
+
begin
|
150
|
+
Gio::AppInfo.launch_default_for_uri(modified_match)
|
151
|
+
rescue => e
|
152
|
+
puts "error : #{e.message}\n\tfor match: #{match} of type :#{@regexes[regex_type]}"
|
153
|
+
end
|
135
154
|
end
|
136
155
|
|
137
156
|
def when_terminal_title_change
|
data/lib/window.rb
CHANGED
@@ -19,7 +19,7 @@ class TopinambourWindow
|
|
19
19
|
|
20
20
|
def initialize(application)
|
21
21
|
super(:application => application)
|
22
|
-
|
22
|
+
set_icon_name("utilities-terminal-symbolic")
|
23
23
|
load_css_properties
|
24
24
|
set_position(:center)
|
25
25
|
create_header_bar
|
@@ -114,9 +114,9 @@ class TopinambourWindow
|
|
114
114
|
"comments" => "Terminal Emulator based on the ruby bindings of Gtk3 and Vte3",
|
115
115
|
"copyright" => "Copyright (C) 2015-2016 Cédric Le Moigne",
|
116
116
|
"license" => "This program is licenced under the licence GPL-3.0 and later.",
|
117
|
-
"
|
117
|
+
"logo_icon_name" => "utilities-terminal-symbolic",
|
118
118
|
"program_name" => "Topinambour",
|
119
|
-
"version" => "1.
|
119
|
+
"version" => "1.0.7",
|
120
120
|
"website" => "https://github.com/cedlemo/topinambour",
|
121
121
|
"website_label" => "Topinambour github repository"
|
122
122
|
)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: topinambour
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Cédric LE MOIGNE
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-04-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: vte3
|
@@ -90,11 +90,6 @@ files:
|
|
90
90
|
- data/pan-start-symbolic.svg
|
91
91
|
- data/tab-new-symbolic.svg
|
92
92
|
- data/terminal-menu.ui
|
93
|
-
- data/topinambour-icon-128.png
|
94
|
-
- data/topinambour-icon-16.png
|
95
|
-
- data/topinambour-icon-32.png
|
96
|
-
- data/topinambour-icon-64.png
|
97
|
-
- data/topinambour-icon.png
|
98
93
|
- data/topinambour.css
|
99
94
|
- data/topinambour.gresource.xml
|
100
95
|
- data/window-close-symbolic.svg
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
data/data/topinambour-icon.png
DELETED
Binary file
|