Germinal 1.2.3 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1579e313faeaff4192cfd683b8c2cd15e3318be0
4
- data.tar.gz: 3042b6c45b20080aa6f953619ba19656c85283cb
3
+ metadata.gz: f7729cf82193fd7907e5f37569fd895ce386805f
4
+ data.tar.gz: a136e4d7effc44ba8de5a5799c8beb387d27badc
5
5
  SHA512:
6
- metadata.gz: cabf90971caa3c42e2c0d9c6b6b8b742bd5e865c8e26c0dc38a6e678464fe5ffee3b05d33cdc5680b9fa4d9240111fe55e7e6ec561a83bf87a1199b48816de85
7
- data.tar.gz: 29592d26427c67d074825932061a3051b59b7a7738af563fb2d2d05f90220887341a59a576abae255caa005f4752cd2721d69d3cc49f83e08b7fa0756c549cc0
6
+ metadata.gz: 9c8c8f621fdb0575ffc697b13ebcd031c1a119a27c850a177877abf81612c0737415b33ad422292abe44b341279aefff7534280d52ec15dc36f1ee29bd98e8bf
7
+ data.tar.gz: 7475f134f688f0f5b86a091e58b21ca2fcce9a61f739f55686378329630adef130d33d180c745fc3f275dc93cd0d3cc80b9edb8560a3910ebb2032d1671122e1
data/README.md CHANGED
@@ -1,5 +1,7 @@
1
1
  # Germinal
2
2
 
3
+ [![Gem Version](https://badge.fury.io/rb/Germinal.svg)](https://badge.fury.io/rb/Germinal)
4
+
3
5
  <a href="https://raw.github.com/cedlemo/germinal/master/screenshot1.png"><img src="https://raw.github.com/cedlemo/germinal/master/screenshot1_prev.png" width="576" height="324" alt="Screenshot"></a>
4
6
 
5
7
  Germinal 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 Germinal works well and I use it as my primary terminal emulator.
data/bin/Germinal CHANGED
@@ -45,9 +45,9 @@ end
45
45
 
46
46
  resource = Gio::Resource.load(gresource_bin)
47
47
  Gio::Resources.register(resource)
48
- # Load default libraries
49
- %w(application terminal notebook color_selector font_selector
50
- terminal_chooser window resize_message css_editor).each do |l|
48
+ # Load default libraries !!WARNING!! loading order matters
49
+ %w(actions style_properties application terminal notebook color_selector font_selector
50
+ terminal_chooser headerbar shortcuts window resize_message css_editor).each do |l|
51
51
  if File.exist?("#{USR_LIB_PATH}/#{l}.rb")
52
52
  require "#{USR_LIB_PATH}/#{l}.rb"
53
53
  else
data/lib/actions.rb ADDED
@@ -0,0 +1,73 @@
1
+ # Copyright 2016 Cédric LE MOIGNE, cedlemo@gmx.com
2
+ # This file is part of Germinal.
3
+ #
4
+ # Germinal is free software: you can redistribute it and/or modify
5
+ # it under the terms of the GNU General Public License as published by
6
+ # the Free Software Foundation, either version 3 of the License, or
7
+ # any later version.
8
+ #
9
+ # Germinal is distributed in the hope that it will be useful,
10
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
+ # GNU General Public License for more details.
13
+ #
14
+ # You should have received a copy of the GNU General Public License
15
+ # along with Germinal. If not, see <http://www.gnu.org/licenses/>.
16
+
17
+ module GerminalActions
18
+ def self.generate_action(name)
19
+ action = Gio::SimpleAction.new(name)
20
+ action.signal_connect("activate") do |act, param|
21
+ yield(act, param) if block_given?
22
+ end
23
+ action
24
+ end
25
+
26
+ def self.add_action_to(name, application)
27
+ method_name = "generate_#{name}_action".to_sym
28
+ return false unless methods.include?(method_name)
29
+ action = method(method_name).call(application)
30
+ application.add_action(action)
31
+ end
32
+
33
+ def self.generate_about_action(application)
34
+ action = generate_action("about") do |_act, _param|
35
+ application.windows[0].display_about
36
+ end
37
+ action
38
+ end
39
+
40
+ def self.generate_preferences_action(application)
41
+ action = generate_action("preferences") do |_act, _param|
42
+ puts "TODO"
43
+ end
44
+ action
45
+ end
46
+
47
+ def self.generate_quit_action(application)
48
+ action = generate_action("quit") do |_act, _param|
49
+ application.quit
50
+ end
51
+ action
52
+ end
53
+
54
+ def self.generate_term_copy_action(application)
55
+ action = generate_action("term_copy") do |_act, _param|
56
+ application.windows[0].notebook.current.copy_clipboard
57
+ end
58
+ action
59
+ end
60
+
61
+ def self.generate_term_paste_action(application)
62
+ action = generate_action("term_copy") do |_act, _param|
63
+ application.windows[0].notebook.current.paste_clipboard
64
+ end
65
+ action
66
+ end
67
+
68
+ def self.add_actions_to(application)
69
+ %w(about preferences quit term_copy term_paste).each do |name|
70
+ add_action_to(name, application)
71
+ end
72
+ end
73
+ end
data/lib/application.rb CHANGED
@@ -21,43 +21,10 @@ class GerminalApplication < Gtk::Application
21
21
 
22
22
  signal_connect "startup" do |application|
23
23
  load_css_config
24
- display = Gdk::Display.default
25
- screen = display.default_screen
24
+ screen = Gdk::Display.default.default_screen
26
25
  Gtk::StyleContext.add_provider_for_screen(screen, @provider, Gtk::StyleProvider::PRIORITY_USER)
27
-
28
- action = Gio::SimpleAction.new("preferences")
29
- action.signal_connect("activate") do |_action, _parameter|
30
- puts "TODO"
31
- end
32
- application.add_action(action)
33
-
34
- action = Gio::SimpleAction.new("about")
35
- action.signal_connect("activate") do |_action, _parameter|
36
- application.windows[0].display_about
37
- end
38
- application.add_action(action)
39
-
40
- action = Gio::SimpleAction.new("quit")
41
- action.signal_connect("activate") do |_action, _parameter|
42
- application.quit
43
- end
44
- application.add_action(action)
45
-
46
- action = Gio::SimpleAction.new("term_copy")
47
- action.signal_connect("activate") do |_action, _parameter|
48
- application.windows[0].notebook.current.copy_clipboard
49
- end
50
- application.add_action(action)
51
-
52
- action = Gio::SimpleAction.new("term_paste")
53
- action.signal_connect("activate") do |_action, _parameter|
54
- application.windows[0].notebook.current.paste_clipboard
55
- end
56
- application.add_action(action)
57
-
58
- builder = Gtk::Builder.new(:resource => "/com/github/cedlemo/germinal/app-menu.ui")
59
- app_menu = builder.get_object("appmenu")
60
- application.set_app_menu(app_menu)
26
+ GerminalActions.add_actions_to(application)
27
+ load_menu_ui_in(application)
61
28
  end
62
29
 
63
30
  signal_connect "activate" do |application|
@@ -87,6 +54,12 @@ class GerminalApplication < Gtk::Application
87
54
 
88
55
  private
89
56
 
57
+ def load_menu_ui_in(application)
58
+ builder = Gtk::Builder.new(:resource => "/com/github/cedlemo/germinal/app-menu.ui")
59
+ app_menu = builder["appmenu"]
60
+ application.app_menu = app_menu
61
+ end
62
+
90
63
  def load_css_config
91
64
  @provider = Gtk::CssProvider.new
92
65
  default_css = Gio::Resources.lookup_data("/com/github/cedlemo/germinal/germinal.css", 0)
@@ -146,13 +119,13 @@ class GerminalApplication < Gtk::Application
146
119
 
147
120
  def css_properties
148
121
  @props = {}
149
- if windows[0].notebook.current.class == GerminalTerminal
150
- terminal_colors = windows[0].notebook.current.colors
151
- TERMINAL_COLOR_NAMES.each_with_index do |c, i|
152
- @props["-GerminalTerminal-#{c}"] = terminal_colors[i].to_s
153
- end
154
- @props["-GerminalTerminal-font"] = DEFAULT_TERMINAL_FONT
155
- @props["-GerminalWindow-shell"] = "\'/usr/bin/fish\'"
122
+ return @props if windows[0].notebook.current.class == GerminalTerminal
123
+
124
+ terminal_colors = windows[0].notebook.current.colors
125
+ TERMINAL_COLOR_NAMES.each_with_index do |c, i|
126
+ @props["-GerminalTerminal-#{c}"] = terminal_colors[i].to_s
156
127
  end
128
+ @props["-GerminalTerminal-font"] = DEFAULT_TERMINAL_FONT
129
+ @props["-GerminalWindow-shell"] = "\'/usr/bin/fish\'"
157
130
  end
158
131
  end
@@ -18,24 +18,24 @@ class GerminalColorSelector < Gtk::Box
18
18
  def initialize(window)
19
19
  @window = window
20
20
  super(:horizontal, 0)
21
-
21
+
22
22
  reset_button = Gtk::Button.new(:label => "Reset")
23
23
  reset_button.signal_connect "clicked" do
24
- get_default_colors
24
+ initialize_default_colors
25
25
  children[1..-2].each_with_index do |child, i|
26
26
  child.rgba = @default_colors[i]
27
27
  end
28
28
  apply_new_colors
29
29
  end
30
30
  pack_start(reset_button, :expand => false, :fill => false, :padding => 0)
31
-
32
- get_default_colors
31
+
32
+ initialize_default_colors
33
33
  add_color_selectors
34
34
 
35
35
  save_button = Gtk::Button.new(:label => "Save")
36
- save_button.signal_connect "clicked" do
37
- new_props={}
38
- TERMINAL_COLOR_NAMES.each_with_index do |c,i|
36
+ save_button.signal_connect "clicked" do
37
+ new_props = {}
38
+ TERMINAL_COLOR_NAMES.each_with_index do |c, i|
39
39
  new_props["-GerminalTerminal-#{c}"] = @colors[i].to_s
40
40
  end
41
41
  toplevel.application.update_css(new_props)
@@ -48,7 +48,7 @@ class GerminalColorSelector < Gtk::Box
48
48
  toplevel.exit_overlay_mode
49
49
  end
50
50
  pack_start(save_button, :expand => false, :fill => false, :padding => 0)
51
-
51
+
52
52
  show_all
53
53
  set_halign(:center)
54
54
  set_valign(:end)
@@ -57,7 +57,7 @@ class GerminalColorSelector < Gtk::Box
57
57
 
58
58
  private
59
59
 
60
- def get_default_colors
60
+ def initialize_default_colors
61
61
  @default_colors = @window.notebook.current.get_css_colors
62
62
  @colors = @default_colors.dup
63
63
  end
@@ -79,4 +79,3 @@ class GerminalColorSelector < Gtk::Box
79
79
  @window.notebook.current.apply_colors
80
80
  end
81
81
  end
82
-
data/lib/css_editor.rb CHANGED
@@ -14,7 +14,7 @@
14
14
  # You should have received a copy of the GNU General Public License
15
15
  # along with Germinal. If not, see <http://www.gnu.org/licenses/>.
16
16
  require "gtksourceview3"
17
- class GerminalCssEditor < Gtk::Grid
17
+ class GerminalCssEditor < Gtk::Grid
18
18
  attr_accessor :tab_label, :preview
19
19
  def initialize(window)
20
20
  super()
@@ -23,7 +23,7 @@ class GerminalCssEditor < Gtk::Grid
23
23
  @default_css = @provider.to_s
24
24
  @modified_css = @default_css
25
25
  @tab_label = "Css Editor"
26
-
26
+
27
27
  gen_source_view
28
28
 
29
29
  sw = Gtk::ScrolledWindow.new(nil, nil)
@@ -35,7 +35,7 @@ class GerminalCssEditor < Gtk::Grid
35
35
  button = gen_reset_button
36
36
  attach(button, 0, 1, 1, 1)
37
37
 
38
- @style_button = gen_style_chooser_button
38
+ @style_button = gen_style_chooser_button
39
39
  attach(@style_button, 1, 1, 1, 1)
40
40
 
41
41
  button = gen_save_button
@@ -52,7 +52,7 @@ class GerminalCssEditor < Gtk::Grid
52
52
  @manager = GtkSource::LanguageManager.new
53
53
  @language = @manager.get_language("css")
54
54
  @sm = GtkSource::StyleSchemeManager.default
55
-
55
+
56
56
  @view.show_line_numbers = true
57
57
  @view.insert_spaces_instead_of_tabs = true
58
58
  @view.buffer.language = @language
@@ -63,17 +63,17 @@ class GerminalCssEditor < Gtk::Grid
63
63
  @view.right_margin_position = 80
64
64
  @view.smart_backspace = true
65
65
  end
66
-
66
+
67
67
  def gen_reset_button
68
68
  button = Gtk::Button.new(:label => "Reset")
69
- button.signal_connect "clicked" do
69
+ button.signal_connect "clicked" do
70
70
  @view.buffer.text = @default_css
71
71
  end
72
72
  button.vexpand = false
73
73
  button.hexpand = false
74
74
  button
75
75
  end
76
-
76
+
77
77
  def gen_style_chooser_button
78
78
  style_scheme = nil
79
79
  if @sm.scheme_ids.include?(@window.css_editor_style)
@@ -81,7 +81,7 @@ class GerminalCssEditor < Gtk::Grid
81
81
  else
82
82
  style_scheme = @sm.get_scheme("classic")
83
83
  end
84
- @view.buffer.style_scheme = style_scheme
84
+ @view.buffer.style_scheme = style_scheme
85
85
  button = GtkSource::StyleSchemeChooserButton.new
86
86
  button.vexpand = false
87
87
  button.hexpand = true
@@ -94,7 +94,7 @@ class GerminalCssEditor < Gtk::Grid
94
94
 
95
95
  def gen_save_button
96
96
  button = Gtk::Button.new(:label => "Save")
97
- button.signal_connect "clicked" do
97
+ button.signal_connect "clicked" do
98
98
  @window.application.update_css
99
99
  reload_custom_css_properties
100
100
  end
@@ -102,6 +102,7 @@ class GerminalCssEditor < Gtk::Grid
102
102
  button.hexpand = false
103
103
  button
104
104
  end
105
+
105
106
  def manage_buffer_changes
106
107
  @view.buffer.signal_connect "changed" do |buffer|
107
108
  @modified_css = buffer.get_text(buffer.start_iter,
@@ -122,19 +123,19 @@ class GerminalCssEditor < Gtk::Grid
122
123
  style_scheme = @sm.get_scheme("classic")
123
124
  end
124
125
  @view.buffer.style_scheme = style_scheme
125
- @style_button.style_scheme = style_scheme
126
+ @style_button.style_scheme = style_scheme
126
127
  end
127
128
  end
128
129
 
129
130
  def manage_css_errors
130
131
  @provider.signal_connect "parsing-error" do |_css_provider, section, error|
131
- #@start_i = @view.buffer.get_iter_at(:line => section.start_line,
132
- # :index => section.start_position)
133
- #@end_i = @view.buffer.get_iter_at(:line => section.end_line,
134
- # :index => section.end_position)
135
- #if error == Gtk::CssProviderError::DEPRECATED
136
- #else
137
- #end
132
+ # @start_i = @view.buffer.get_iter_at(:line => section.start_line,
133
+ # :index => section.start_position)
134
+ # @end_i = @view.buffer.get_iter_at(:line => section.end_line,
135
+ # :index => section.end_position)
136
+ # if error == Gtk::CssProviderError::DEPRECATED
137
+ # else
138
+ # end
138
139
  end
139
140
  end
140
141
 
@@ -145,14 +146,13 @@ class GerminalCssEditor < Gtk::Grid
145
146
 
146
147
  def reload_terminal_custom_css_properties
147
148
  @window.notebook.each do |tab|
148
- colors = nil
149
- if tab.class == GerminalTerminal
150
- colors = tab.get_css_colors unless colors
151
- tab.colors = colors
152
- tab.apply_colors
153
- end
149
+ next unless tab.class == GerminalTerminal
150
+ colors = tab.get_css_colors unless colors
151
+ tab.colors = colors
152
+ tab.apply_colors
154
153
  end
155
154
  end
155
+
156
156
  def reload_window_custom_css_properties
157
157
  @window.load_css_properties
158
158
  end
data/lib/font_selector.rb CHANGED
@@ -26,7 +26,7 @@ class GerminalFontSelector < Gtk::Box
26
26
  @window.notebook.current.set_font(font_desc)
27
27
  end
28
28
  pack_start(reset_button, :expand => false, :fill => false, :padding => 0)
29
-
29
+
30
30
  font_button = Gtk::FontButton.new
31
31
  font_button.set_font(@font)
32
32
  font_button.set_show_style(true)
@@ -38,20 +38,18 @@ class GerminalFontSelector < Gtk::Box
38
38
  @window.notebook.current.set_font(font_desc)
39
39
  end
40
40
  pack_start(font_button, :expand => false, :fill => false, :padding => 0)
41
-
41
+
42
42
  save_button = Gtk::Button.new(:label => "Save")
43
- save_button.signal_connect "clicked" do
44
- new_props={}
43
+ save_button.signal_connect "clicked" do
44
+ new_props = {}
45
45
  font = @window.notebook.current.font
46
46
  new_props["-GerminalTerminal-font"] = font.to_s
47
47
  toplevel.application.update_css(new_props)
48
48
  toplevel.notebook.each do |tab|
49
- if tab.class == GerminalTerminal
50
- tab.set_font(font)
51
- end
49
+ tab.set_font(font) if tab.class == GerminalTerminal
52
50
  end
53
51
  toplevel.exit_overlay_mode
54
- end
52
+ end
55
53
  pack_start(save_button, :expand => false, :fill => false, :padding => 0)
56
54
  set_name("font_selector")
57
55
  show_all
data/lib/headerbar.rb ADDED
@@ -0,0 +1,127 @@
1
+ # Copyright 2016 Cédric LE MOIGNE, cedlemo@gmx.com
2
+ # This file is part of Germinal.
3
+ #
4
+ # Germinal is free software: you can redistribute it and/or modify
5
+ # it under the terms of the GNU General Public License as published by
6
+ # the Free Software Foundation, either version 3 of the License, or
7
+ # any later version.
8
+ #
9
+ # Germinal is distributed in the hope that it will be useful,
10
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
+ # GNU General Public License for more details.
13
+ #
14
+ # You should have received a copy of the GNU General Public License
15
+ # along with Germinal. If not, see <http://www.gnu.org/licenses/>.
16
+
17
+ module GerminalHeaderBar
18
+ def self.generate_header_bar(window)
19
+ bar = Gtk::HeaderBar.new
20
+ bar.title = "Germinal"
21
+ bar.has_subtitle = false
22
+ bar.show_close_button = true
23
+ window.set_titlebar(bar)
24
+ bar
25
+ end
26
+
27
+ def self.generate_current_label_tooltips(label)
28
+ label.tooltip_text = <<-TOOLTIP
29
+ Change the name of the tab and hit
30
+ enter in order to validate
31
+ TOOLTIP
32
+ label.set_icon_tooltip_text(:secondary, <<-SECTOOLTIP)
33
+ Reset your changes and use the
34
+ default label for the current tab
35
+ SECTOOLTIP
36
+ end
37
+
38
+ def self.generate_current_label_signals(label, window)
39
+ label.signal_connect "activate" do |entry|
40
+ window.notebook.current.tab_label = entry.text
41
+ end
42
+
43
+ label.signal_connect "icon-release" do |entry, position|
44
+ if position == :secondary
45
+ window.notebook.current.tab_label = nil
46
+ entry.text = window.notebook.current.window_title
47
+ end
48
+ end
49
+ end
50
+
51
+ def self.generate_current_label(window)
52
+ label = Gtk::Entry.new
53
+ label.has_frame = false
54
+ label.width_chars = 35
55
+ label.set_icon_from_icon_name(:secondary, "edit-clear")
56
+
57
+ generate_current_label_tooltips(label)
58
+ generate_current_label_signals(label, window)
59
+ label
60
+ end
61
+
62
+ def self.generate_prev_button(window)
63
+ gen_icon_button("pan-start-symbolic", "prev") do
64
+ window.show_prev_tab
65
+ end
66
+ end
67
+
68
+ def self.generate_current_tab
69
+ Gtk::Label.new("1/1")
70
+ end
71
+
72
+ def self.generate_next_button(window)
73
+ gen_icon_button("pan-end-symbolic", "next") do
74
+ window.show_next_tab
75
+ end
76
+ end
77
+
78
+ def self.generate_new_tab_button(window)
79
+ gen_icon_button("tab-new-symbolic", "New terminal") do
80
+ window.add_terminal
81
+ end
82
+ end
83
+
84
+ def self.generate_open_menu_button(window)
85
+ gen_icon_button("open-menu-symbolic", "Main Menu") do |button|
86
+ builder = Gtk::Builder.new(:resource => "/com/github/cedlemo/germinal/window-menu.ui")
87
+ menu = Gtk::Menu.new(builder["winmenu"])
88
+ menu.attach_to_widget(button)
89
+ menu.children[0].signal_connect("activate") { window.show_css_editor }
90
+
91
+ menu.show_all
92
+ event = Gtk.current_event
93
+ menu.popup(nil, nil, event.button, event.time)
94
+ end
95
+ end
96
+
97
+ def self.generate_font_sel_button(window)
98
+ gen_icon_button("font-select-symbolic", "Set font") do
99
+ window.show_font_selector
100
+ end
101
+ end
102
+
103
+ def self.generate_color_sel_button(window)
104
+ gen_icon_button("color-select-symbolic", "Set colors") do
105
+ window.show_color_selector
106
+ end
107
+ end
108
+
109
+ def self.generate_term_overv_button(window)
110
+ gen_icon_button("emblem-photos-symbolic", "Terminals overview") do
111
+ window.show_terminal_chooser
112
+ end
113
+ end
114
+
115
+ def self.gen_icon_button(icon_name, tooltip)
116
+ button = Gtk::Button.new
117
+ image = Gtk::Image.new(:icon_name => icon_name, :size => :button)
118
+ button.add(image)
119
+ button.tooltip_text = tooltip
120
+ if block_given?
121
+ button.signal_connect "clicked" do |widget|
122
+ yield(widget)
123
+ end
124
+ end
125
+ button
126
+ end
127
+ end
data/lib/notebook.rb CHANGED
@@ -19,40 +19,35 @@ class GerminalNotebook < Gtk::Notebook
19
19
  def initialize
20
20
  super()
21
21
  @gen_preview = true
22
- signal_connect "hide" do |widget|
22
+ signal_connect "hide" do
23
23
  @visible = false
24
24
  end
25
- signal_connect "show" do |widget|
25
+ signal_connect "show" do
26
26
  @visible = true
27
27
  end
28
28
 
29
- signal_connect "switch-page" do |widget, next_page, next_page_num|
30
- if next_page.tab_label
31
- toplevel.current_label.text = next_page.tab_label
32
- else
33
- next_label = get_tab_label(next_page)
34
- toplevel.current_label.text = next_label.text
35
- end
29
+ signal_connect "switch-page" do |_widget, next_page, next_page_num|
30
+ toplevel.current_label.text = next_page.tab_label || get_tab_label(next_page).text
36
31
  toplevel.current_tab.text = "#{next_page_num + 1}/#{n_pages}"
37
-
38
- if page >= 0 && @gen_preview
32
+
33
+ if page >= 0 && @gen_preview
39
34
  current.queue_draw
40
- _x,_y,w,h = current.allocation.to_a
35
+ _x, _y, w, h = current.allocation.to_a
41
36
  pix = current.window.to_pixbuf(0, 0, w, h)
42
37
  current.preview = pix if pix
43
38
  elsif !@gen_preview
44
39
  @gen_preview = true
45
- end
40
+ end
46
41
  end
47
-
48
- signal_connect "page-reordered" do |widget, child, new_page_num|
42
+
43
+ signal_connect "page-reordered" do
49
44
  toplevel.current_tab.text = "#{page + 1}/#{n_pages}"
50
45
  end
51
-
52
- signal_connect "page-removed" do
46
+
47
+ signal_connect "page-removed" do
53
48
  toplevel.current_tab.text = "#{page + 1}/#{n_pages}" if toplevel.class == GerminalWindow
54
49
  end
55
-
50
+
56
51
  set_show_tabs(false)
57
52
  end
58
53
 
@@ -16,7 +16,7 @@
16
16
  class GerminalResizeMessage < Gtk::Box
17
17
  def initialize(text)
18
18
  super(:vertical)
19
- text = text || ""
19
+ text ||= ""
20
20
  add(Gtk::Label.new(text))
21
21
  set_halign(:end)
22
22
  set_valign(:end)
@@ -24,7 +24,7 @@ class GerminalResizeMessage < Gtk::Box
24
24
  show_all
25
25
  set_name("resize_box")
26
26
  end
27
-
27
+
28
28
  def text=(text)
29
29
  children[0].text = text
30
30
  show_all
data/lib/shortcuts.rb ADDED
@@ -0,0 +1,76 @@
1
+ # Copyright 2016 Cédric LE MOIGNE, cedlemo@gmx.com
2
+ # This file is part of Germinal.
3
+ #
4
+ # Germinal is free software: you can redistribute it and/or modify
5
+ # it under the terms of the GNU General Public License as published by
6
+ # the Free Software Foundation, either version 3 of the License, or
7
+ # any later version.
8
+ #
9
+ # Germinal is distributed in the hope that it will be useful,
10
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
+ # GNU General Public License for more details.
13
+ #
14
+ # You should have received a copy of the GNU General Public License
15
+ # along with Germinal. If not, see <http://www.gnu.org/licenses/>.
16
+
17
+ module GerminalShortcuts
18
+ def self.ctrl_shift?(event)
19
+ (event.state & (Gdk::ModifierType::CONTROL_MASK |
20
+ Gdk::ModifierType::SHIFT_MASK)) ==
21
+ (Gdk::ModifierType::CONTROL_MASK | Gdk::ModifierType::SHIFT_MASK)
22
+ end
23
+
24
+ def self.handle_simple(keyval, window)
25
+ case keyval
26
+ when Gdk::Keyval::KEY_Escape # escape from overlay mode
27
+ if window.in_overlay_mode?
28
+ window.exit_overlay_mode
29
+ window.notebook.current.grab_focus
30
+ end
31
+ true
32
+ end
33
+ end
34
+
35
+ def self.handle_ctrl_shift(keyval, window)
36
+ case keyval
37
+ when Gdk::Keyval::KEY_W # close the current tab
38
+ window.close_current_tab
39
+ true
40
+ when Gdk::Keyval::KEY_Q # Quit
41
+ window.quit_gracefully
42
+ true
43
+ when Gdk::Keyval::KEY_T # New tab
44
+ window.add_terminal
45
+ true
46
+ when Gdk::Keyval::KEY_C
47
+ window.show_color_selector
48
+ true
49
+ when Gdk::Keyval::KEY_F
50
+ window.show_font_selector
51
+ true
52
+ when Gdk::Keyval::KEY_Left # previous tab
53
+ window.show_prev_tab
54
+ true
55
+ when Gdk::Keyval::KEY_Right # next tab
56
+ window.show_next_tab
57
+ true
58
+ when Gdk::Keyval::KEY_O # next tab
59
+ window.show_terminal_chooser
60
+ true
61
+ when Gdk::Keyval::KEY_E
62
+ window.show_css_editor
63
+ true
64
+ end
65
+ end
66
+
67
+ def self.handle_key_press(window, event)
68
+ keyval = event.keyval
69
+ # puts "#{Gdk::Keyval.to_name(keyval)} = #{keyval}"
70
+ if ctrl_shift?(event)
71
+ handle_ctrl_shift(keyval, window)
72
+ else
73
+ handle_simple(keyval, window)
74
+ end
75
+ end
76
+ end