Germinal 1.1.7

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.
data/README.md ADDED
@@ -0,0 +1,166 @@
1
+ # Germinal
2
+
3
+ <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
+
5
+ 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.
6
+
7
+ ## Features
8
+
9
+ * tabs supports
10
+ * tabs can be reordered or selected through the preview mode ( `Shift + Ctrl + o` )
11
+ <a href="https://raw.github.com/cedlemo/germinal/master/screenshot2.png"><img src="https://raw.github.com/cedlemo/germinal/master/screenshot2_prev.png" width="576" height="324" alt="Screenshot"></a>
12
+
13
+ * Each tab can be renammed
14
+ * The configuration can be done via a Css file
15
+ * Terminal colors can be changed on the fly and saved in the CSS configuration file
16
+ <a href="https://raw.github.com/cedlemo/germinal/master/screenshot3.png"><img src="https://raw.github.com/cedlemo/germinal/master/screenshot3_prev.png" width="576" height="324" alt="Screenshot"></a>
17
+ * Terminal font can be changed on the fly and saved in the CSS configuration file
18
+ <a href="https://raw.github.com/cedlemo/germinal/master/screenshot4.png"><img src="https://raw.github.com/cedlemo/germinal/master/screenshot4_prev.png" width="576" height="324" alt="Screenshot"></a>
19
+
20
+ * The Css file can be edited in a tab of Germinal and saved. Each modifications are applied while you are writting them. (Use `Shift + Ctrl + w` to close the editor)
21
+ <a href="https://raw.github.com/cedlemo/germinal/master/screenshot5.png"><img src="https://raw.github.com/cedlemo/germinal/master/screenshot5_prev.png" width="576" height="324" alt="Screenshot"></a>
22
+
23
+ ## TODO:
24
+ * Regex support in the terminals in order to launch web navigator if there is an url or launch a media player if there is a match for avi file for example.
25
+ * Create more Css properties in oder to configure the terminals (cursor shape or blink mode, audible bell or not ...)
26
+
27
+ ## Shortcuts
28
+
29
+ * `Shift + Ctrl + t` new tab
30
+
31
+ * `Shift + Ctrl + q` quit Germinal
32
+
33
+ * `Shift + Ctrl + w` close current tab
34
+
35
+ * `Shift + Ctrl + left` previous tab
36
+
37
+ * `Shift + Ctrl + right` next tab
38
+
39
+ * ` Shift + Ctrl + c` display color selectors for the vte in overlay mod (Esc to leave)
40
+
41
+ * `Shift + Ctrl + f` display font selector for the vte in overlay mod (Esc to leave)
42
+
43
+ * `Shift + Ctrl + o` display previews of all tabs (Esc to leave)
44
+
45
+ * `Shift + Ctrl + e` open the Css configuration editor in a new notebook tab.
46
+
47
+
48
+ ## User configuration
49
+
50
+ It can be found in the file `$HOME/.config/Germinal/germinal.css` (Be carefull by default Germinal use fish as a default shell, if you want to use another one specify it in the germinal.css file)
51
+
52
+ ```css
53
+ *{
54
+ /* Default css properties
55
+ -GerminalTerminal-foreground: #aeafad;
56
+ -GerminalTerminal-background: #323232;
57
+ -GerminalTerminal-black: #000000;
58
+ -GerminalTerminal-red: #b9214f;
59
+ -GerminalTerminal-green: #A6E22E;
60
+ -GerminalTerminal-yellow: #ff9800;
61
+ -GerminalTerminal-blue: #3399ff;
62
+ -GerminalTerminal-magenta: #8e33ff;
63
+ -GerminalTerminal-cyan: #06a2dc;
64
+ -GerminalTerminal-white: #B0B0B0;
65
+ -GerminalTerminal-brightblack: #5D5D5D;
66
+ -GerminalTerminal-brightred: #ff5c8d;
67
+ -GerminalTerminal-brightgreen: #CDEE69;
68
+ -GerminalTerminal-brightyellow: #ffff00;
69
+ -GerminalTerminal-brightblue: #9CD9F0;
70
+ -GerminalTerminal-brightmagenta: #FBB1F9;
71
+ -GerminalTerminal-brightcyan: #77DFD8;
72
+ -GerminalTerminal-brightwhite: #F7F7F7;
73
+ -GerminalTerminal-font: Monospace 11;
74
+ -GerminalWindow-shell: "/usr/bin/fish";
75
+ -GerminalWindow-css-editor-style: "monokai-extended";
76
+ -GerminalWindow-height: 500;
77
+ -GerminalWindow-width: 1000;*/
78
+ }
79
+
80
+ GerminalWindow GtkHeaderBar GtkEntry{
81
+ border-radius: 4px;
82
+ }
83
+
84
+ GerminalWindow GtkOverlay GtkBox#resize_box{
85
+ background-color: rgba(49, 150, 188, 0.5);
86
+ border-top: 1px;
87
+ border-left: 1px;
88
+ border-bottom: 1px;
89
+ border-style: solid;
90
+ border-color: rgba(49, 150, 188, 1);
91
+ border-radius: 6px 0px 0px 0px;
92
+ }
93
+
94
+ GerminalWindow GtkOverlay GtkScrolledWindow#terminal_chooser GtkBox{
95
+ background-color: rgba(49, 150, 188, 0.5);
96
+ border-top: 1px;
97
+ border-left: 1px;
98
+ border-bottom: 1px;
99
+ border-style: solid;
100
+ border-color: rgba(49, 150, 188, 1);
101
+ border-radius: 6px 0px 0px 6px;
102
+ }
103
+
104
+ GerminalWindow GtkOverlay GtkScrolledWindow GtkBox GtkButton {
105
+ margin: 0px;
106
+ padding: 0px;
107
+ }
108
+ GerminalWindow GtkOverlay GtkScrolledWindow GtkBox GtkImage {
109
+ border: solid 3px rgba(0, 0, 0, 0.0);
110
+ }
111
+ ```
112
+
113
+ Each time you modify this configuration via the interface of Germinal (terminal colors selector, terminal font selector, css editor) and that you save your modifications, Germinal create a copy of your previous Css file under a new name with :
114
+
115
+ FileUtils.mv(USR_CSS, "#{USR_CSS}_#{Time.new.strftime('%Y-%m-%d-%H-%M-%S')}.backup")
116
+
117
+ Which means that the old file can be something like that : *germinal.css_2016-12-5-13-20.backup*.
118
+
119
+ ## Installation
120
+
121
+ ### Dependancies
122
+
123
+ * gtk3 vte3 sass
124
+
125
+ ### Create the gem if needed:
126
+
127
+ gem build Germinal.gemspec
128
+
129
+ ### Install the gem :
130
+
131
+ gem install Germinal-x.x.x.gem
132
+
133
+ ### Launch the terminal
134
+
135
+ ~> Germinal
136
+
137
+ ### Tips:
138
+
139
+ Don't forget, if you install it localy, you need that your system know the path of
140
+ the ruby gem binaries (for example).
141
+
142
+ export PATH="${PATH}:/home/${USER}/bin:${HOME}/gem/ruby/2.3.0/bin"
143
+
144
+ #### Modifying or testing Germinal is easy:
145
+
146
+ ##### Get the sources
147
+
148
+ git clone https://github.com/cedlemo/germinal.git
149
+ cd germinal/bin
150
+
151
+ ##### Edit the files Germinal and test
152
+ The filenames correspond to their functionnalities.
153
+ Simply run `./Germinal` when you have done your modifications.
154
+
155
+ You will need fish shell if you want to test it.
156
+
157
+ ### Copying:
158
+
159
+ Copyright 2015-2016 Cédric Le Moigne
160
+
161
+ This program is free software: you can redistribute it and/or modify
162
+ it under the terms of the GNU General Public License as published by
163
+ the Free Software Foundation, either version 3 of the License, or
164
+ any later version.
165
+
166
+ Author : cedlemo@gmx.com
data/bin/Germinal ADDED
@@ -0,0 +1,167 @@
1
+ #!/usr/bin/env ruby
2
+ # Copyright 2015-2016 Cédric LE MOIGNE, cedlemo@gmx.com
3
+ # This file is part of Germinal.
4
+ #
5
+ # Germinal is free software: you can redistribute it and/or modify
6
+ # it under the terms of the GNU General Public License as published by
7
+ # the Free Software Foundation, either version 3 of the License, or
8
+ # any later version.
9
+ #
10
+ # Germinal is distributed in the hope that it will be useful,
11
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
+ # GNU General Public License for more details.
14
+ #
15
+ # You should have received a copy of the GNU General Public License
16
+ # along with Germinal. If not, see <http://www.gnu.org/licenses/>.
17
+ #
18
+ # Germinal is a terminal emulator written with the ruby gtk3 and
19
+ # vte 3 bindings.
20
+ # Author:: Cedlemo (mailto:cedlemo@gmx.com)
21
+ require "gtk3"
22
+ require "vte3"
23
+ require "fileutils"
24
+ require "sass"
25
+
26
+ CURRENT_PATH = File.expand_path(File.dirname(__FILE__))
27
+ LIB_PATH = "#{CURRENT_PATH}/../lib"
28
+ DATA_PATH = "#{CURRENT_PATH}/../data"
29
+ CONFIG_DIR = "#{ENV['HOME']}/.config/Germinal"
30
+ USR_CSS = "#{CONFIG_DIR}/germinal.css"
31
+
32
+ gresource_bin = "#{DATA_PATH}/germinal.gresource"
33
+ gresource_xml = "#{DATA_PATH}/germinal.gresource.xml"
34
+
35
+ system("glib-compile-resources",
36
+ "--target", gresource_bin,
37
+ "--sourcedir", File.dirname(gresource_xml),
38
+ gresource_xml)
39
+
40
+ at_exit do
41
+ FileUtils.rm_f(gresource_bin)
42
+ end
43
+
44
+ resource = Gio::Resource.load(gresource_bin)
45
+ Gio::Resources.register(resource)
46
+
47
+ require "#{LIB_PATH}/terminal.rb"
48
+ require "#{LIB_PATH}/notebook.rb"
49
+ require "#{LIB_PATH}/color_selector.rb"
50
+ require "#{LIB_PATH}/font_selector.rb"
51
+ require "#{LIB_PATH}/terminal_chooser.rb"
52
+ require "#{LIB_PATH}/window.rb"
53
+ require "#{LIB_PATH}/resize_message.rb"
54
+ require "#{LIB_PATH}/css_editor.rb"
55
+
56
+ class GerminalApplication < Gtk::Application
57
+ attr_reader :provider
58
+ def initialize
59
+ super("com.github.cedlemo.germinal", :non_unique)
60
+
61
+ signal_connect "startup" do
62
+ load_css_config
63
+ display = Gdk::Display.default
64
+ screen = display.default_screen
65
+ Gtk::StyleContext.add_provider_for_screen(screen, @provider, Gtk::StyleProvider::PRIORITY_USER)
66
+ end
67
+
68
+ signal_connect "activate" do |application|
69
+ window = GerminalWindow.new(application)
70
+ window.present
71
+ window.add_terminal
72
+ window.notebook.current.grab_focus
73
+ end
74
+ end
75
+
76
+ def update_css(new_props = nil)
77
+ css_properties
78
+ @props.merge!(new_props) if new_props
79
+ css = update_css_properties
80
+ merged_css = Sass::Engine.new(css, :syntax => :scss).render
81
+ if File.exist?(USR_CSS)
82
+ FileUtils.mv(USR_CSS, "#{USR_CSS}_#{Time.new.strftime('%Y-%m-%d-%H-%M-%S')}.backup")
83
+ File.open(USR_CSS, "w") do |file|
84
+ file.puts merged_css
85
+ end
86
+ else
87
+ File.open(USR_CSS, "w") do |file|
88
+ file.puts merged_css
89
+ end
90
+ end
91
+ end
92
+
93
+ private
94
+
95
+ def load_css_config
96
+ @provider = Gtk::CssProvider.new
97
+ default_css = Gio::Resources.lookup_data("/com/github/cedlemo/germinal/germinal.css", 0)
98
+ if File.exist?(USR_CSS)
99
+ begin
100
+ @provider.load(:path => USR_CSS)
101
+ rescue
102
+ puts "Bad css file using default css"
103
+ @provider.load(:data => default_css)
104
+ end
105
+ else
106
+ puts "No custom CSS, using default css"
107
+ @provider.load(:data => default_css)
108
+ end
109
+ end
110
+
111
+ def load_css_to_tree
112
+ engine = Sass::Engine.new(@provider.to_s, :syntax => :scss)
113
+ engine.to_tree
114
+ end
115
+
116
+ def update_css_properties
117
+ modified_sass = change_existing_properties
118
+ sass_to_add = @props.empty? ? "" : add_new_css_properties
119
+ Sass::Engine.new(sass_to_add + modified_sass, :syntax => :sass).render
120
+ end
121
+
122
+ def add_new_css_properties
123
+ new_sass = "*"
124
+ @props.each do |k, v|
125
+ new_sass += "\n #{k}: #{v}"
126
+ end
127
+ new_sass + "\n"
128
+ end
129
+
130
+ def change_existing_properties
131
+ keys_found = []
132
+ tree = load_css_to_tree
133
+ # we search for properties that are already configured
134
+ tree.children.each do |node|
135
+ node.each do |prop|
136
+ next if prop.class != Sass::Tree::PropNode
137
+ name = prop.name[0]
138
+ next unless @props[name]
139
+ keys_found << name unless keys_found.include?(name)
140
+ if @props[name] != prop.value.value
141
+ value_object = prop.value.value.class.new(@props[name])
142
+ prop.value = Sass::Script::Tree::Literal.new(value_object)
143
+ end
144
+ end
145
+ end
146
+ keys_found.each do |k|
147
+ @props.delete(k)
148
+ end
149
+ tree.to_sass
150
+ end
151
+
152
+ def css_properties
153
+ @props = {}
154
+ if windows[0].notebook.current.class == GerminalTerminal
155
+ terminal_colors = windows[0].notebook.current.colors
156
+ TERMINAL_COLOR_NAMES.each_with_index do |c, i|
157
+ @props["-GerminalTerminal-#{c}"] = terminal_colors[i].to_s
158
+ end
159
+ @props["-GerminalTerminal-font"] = DEFAULT_TERMINAL_FONT
160
+ @props["-GerminalWindow-shell"] = "\'/usr/bin/fish\'"
161
+ end
162
+ end
163
+ end
164
+
165
+ germinal = GerminalApplication.new
166
+
167
+ exit(germinal.run([$PROGRAM_NAME] + ARGV))
data/data/germinal.css ADDED
@@ -0,0 +1,54 @@
1
+ *{
2
+ /* Default css properties
3
+ -GerminalTerminal-foreground: #aeafad;
4
+ -GerminalTerminal-background: #323232;
5
+ -GerminalTerminal-black: #000000;
6
+ -GerminalTerminal-red: #b9214f;
7
+ -GerminalTerminal-green: #A6E22E;
8
+ -GerminalTerminal-yellow: #ff9800;
9
+ -GerminalTerminal-blue: #3399ff;
10
+ -GerminalTerminal-magenta: #8e33ff;
11
+ -GerminalTerminal-cyan: #06a2dc;
12
+ -GerminalTerminal-white: #B0B0B0;
13
+ -GerminalTerminal-brightblack: #5D5D5D;
14
+ -GerminalTerminal-brightred: #ff5c8d;
15
+ -GerminalTerminal-brightgreen: #CDEE69;
16
+ -GerminalTerminal-brightyellow: #ffff00;
17
+ -GerminalTerminal-brightblue: #9CD9F0;
18
+ -GerminalTerminal-brightmagenta: #FBB1F9;
19
+ -GerminalTerminal-brightcyan: #77DFD8;
20
+ -GerminalTerminal-brightwhite: #F7F7F7;
21
+ -GerminalTerminal-font: Monospace 11;
22
+ -GerminalWindow-shell: "/usr/bin/fish";
23
+ -GerminalWindow-css-editor-style: "monokai-extended";
24
+ -GerminalWindow-height: 500;
25
+ -GerminalWindow-width: 1000;*/
26
+ }
27
+ GerminalWindow GtkHeaderBar GtkEntry{
28
+ border-radius: 4px;
29
+ }
30
+ GerminalWindow GtkOverlay GtkBox#resize_box{
31
+ background: rgba(49, 150, 188, 0.5);
32
+ border-top: 1px;
33
+ border-left: 1px;
34
+ border-bottom: 1px;
35
+ border-style: solid;
36
+ border-color: rgba(49, 150, 188, 1);
37
+ border-radius: 6px 0px 0px 0px;
38
+ }
39
+ GerminalWindow GtkOverlay GtkScrolledWindow#terminal_chooser GtkBox{
40
+ background-color: rgba(49, 150, 188, 0.5);
41
+ border-top: 1px;
42
+ border-left: 1px;
43
+ border-bottom: 1px;
44
+ border-style: solid;
45
+ border-color: rgba(49, 150, 188, 1);
46
+ border-radius: 6px 0px 0px 6px;
47
+ }
48
+ GerminalWindow GtkOverlay GtkScrolledWindow GtkGrid GtkButton {
49
+ margin: 0px;
50
+ padding: 0px;
51
+ }
52
+ GerminalWindow GtkOverlay GtkScrolledWindow GtkGrid GtkButton GtkImage {
53
+ border: solid 3px rgba(0, 0, 0, 0.0);
54
+ }
@@ -0,0 +1,7 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <gresources>
3
+ <gresource prefix="/com/github/cedlemo/germinal">
4
+ <file preprocess="xml-stripblanks">window.ui</file>
5
+ <file>germinal.css</file>
6
+ </gresource>
7
+ </gresources>
data/data/window.ui ADDED
@@ -0,0 +1,58 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!-- Generated with glade 3.18.3 -->
3
+ <interface>
4
+ <requires lib="gtk+" version="3.12"/>
5
+ <template class="window" parent="GtkWindow">
6
+ <property name="can_focus">False</property>
7
+ <child>
8
+ <object class="GtkNotebook" id="notebook">
9
+ <property name="visible">True</property>
10
+ <property name="can_focus">True</property>
11
+ <property name="show_border">False</property>
12
+ <property name="scrollable">True</property>
13
+ <property name="enable_popup">True</property>
14
+ <child>
15
+ <placeholder/>
16
+ </child>
17
+ <child type="tab">
18
+ <object class="GtkLabel" id="label1">
19
+ <property name="visible">True</property>
20
+ <property name="can_focus">False</property>
21
+ <property name="label" translatable="yes">page 1</property>
22
+ </object>
23
+ <packing>
24
+ <property name="tab_fill">False</property>
25
+ </packing>
26
+ </child>
27
+ <child>
28
+ <placeholder/>
29
+ </child>
30
+ <child type="tab">
31
+ <object class="GtkLabel" id="label2">
32
+ <property name="visible">True</property>
33
+ <property name="can_focus">False</property>
34
+ <property name="label" translatable="yes">page 2</property>
35
+ </object>
36
+ <packing>
37
+ <property name="position">1</property>
38
+ <property name="tab_fill">False</property>
39
+ </packing>
40
+ </child>
41
+ <child>
42
+ <placeholder/>
43
+ </child>
44
+ <child type="tab">
45
+ <object class="GtkLabel" id="label3">
46
+ <property name="visible">True</property>
47
+ <property name="can_focus">False</property>
48
+ <property name="label" translatable="yes">page 3</property>
49
+ </object>
50
+ <packing>
51
+ <property name="position">2</property>
52
+ <property name="tab_fill">False</property>
53
+ </packing>
54
+ </child>
55
+ </object>
56
+ </child>
57
+ </template>
58
+ </interface>
@@ -0,0 +1,82 @@
1
+ # Copyright 2015-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
+ class GerminalColorSelector < Gtk::Box
17
+ attr_reader :colors
18
+ def initialize(window)
19
+ @window = window
20
+ super(:horizontal, 0)
21
+
22
+ reset_button = Gtk::Button.new(:label => "Reset")
23
+ reset_button.signal_connect "clicked" do
24
+ get_default_colors
25
+ children[1..-2].each_with_index do |child, i|
26
+ child.rgba = @default_colors[i]
27
+ end
28
+ apply_new_colors
29
+ end
30
+ pack_start(reset_button, :expand => false, :fill => false, :padding => 0)
31
+
32
+ get_default_colors
33
+ add_color_selectors
34
+
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|
39
+ new_props["-GerminalTerminal-#{c}"] = @colors[i].to_s
40
+ end
41
+ toplevel.application.update_css(new_props)
42
+ toplevel.notebook.each do |tab|
43
+ if tab.class == GerminalTerminal
44
+ tab.colors = @colors
45
+ tab.apply_colors
46
+ end
47
+ end
48
+ toplevel.exit_overlay_mode
49
+ end
50
+ pack_start(save_button, :expand => false, :fill => false, :padding => 0)
51
+
52
+ show_all
53
+ set_halign(:center)
54
+ set_valign(:end)
55
+ set_name("color_selector")
56
+ end
57
+
58
+ private
59
+
60
+ def get_default_colors
61
+ @default_colors = @window.notebook.current.get_css_colors
62
+ @colors = @default_colors.dup
63
+ end
64
+
65
+ def add_color_selectors
66
+ TERMINAL_COLOR_NAMES.each_with_index do |name, i|
67
+ color_sel = Gtk::ColorButton.new(@default_colors[i])
68
+ color_sel.set_title(name.to_s)
69
+ color_sel.signal_connect "color-set" do
70
+ @colors[i] = color_sel.rgba
71
+ apply_new_colors
72
+ end
73
+ pack_start(color_sel, :expand => false, :fill => false, :padding => 0)
74
+ end
75
+ end
76
+
77
+ def apply_new_colors
78
+ @window.notebook.current.colors = @colors
79
+ @window.notebook.current.apply_colors
80
+ end
81
+ end
82
+
data/lib/css_editor.rb ADDED
@@ -0,0 +1,159 @@
1
+ # Copyright 2015-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
+ require "gtksourceview3"
17
+ class GerminalCssEditor < Gtk::Grid
18
+ attr_accessor :tab_label, :preview
19
+ def initialize(window)
20
+ super()
21
+ @window = window
22
+ @provider = window.application.provider
23
+ @default_css = @provider.to_s
24
+ @modified_css = @default_css
25
+ @tab_label = "Css Editor"
26
+
27
+ gen_source_view
28
+
29
+ sw = Gtk::ScrolledWindow.new(nil, nil)
30
+ sw.vexpand = true
31
+ sw.hexpand = true
32
+ sw.add(@view)
33
+ attach(sw, 0, 0, 3, 1)
34
+
35
+ button = gen_reset_button
36
+ attach(button, 0, 1, 1, 1)
37
+
38
+ @style_button = gen_style_chooser_button
39
+ attach(@style_button, 1, 1, 1, 1)
40
+
41
+ button = gen_save_button
42
+ attach(button, 2, 1, 1, 1)
43
+ manage_buffer_changes
44
+ manage_css_errors
45
+ show_all
46
+ end
47
+
48
+ private
49
+
50
+ def gen_source_view
51
+ @view = GtkSource::View.new
52
+ @manager = GtkSource::LanguageManager.new
53
+ @language = @manager.get_language("css")
54
+ @sm = GtkSource::StyleSchemeManager.default
55
+
56
+ @view.show_line_numbers = true
57
+ @view.insert_spaces_instead_of_tabs = true
58
+ @view.buffer.language = @language
59
+ @view.buffer.highlight_syntax = true
60
+ @view.buffer.highlight_matching_brackets = true
61
+ @view.buffer.text = @default_css
62
+ @view.show_right_margin = true
63
+ @view.right_margin_position = 80
64
+ @view.smart_backspace = true
65
+ end
66
+
67
+ def gen_reset_button
68
+ button = Gtk::Button.new(:label => "Reset")
69
+ button.signal_connect "clicked" do
70
+ @view.buffer.text = @default_css
71
+ end
72
+ button.vexpand = false
73
+ button.hexpand = false
74
+ button
75
+ end
76
+
77
+ def gen_style_chooser_button
78
+ style_scheme = nil
79
+ if @sm.scheme_ids.include?(@window.css_editor_style)
80
+ style_scheme = @sm.get_scheme(@window.css_editor_style)
81
+ else
82
+ style_scheme = @sm.get_scheme("classic")
83
+ end
84
+ @view.buffer.style_scheme = style_scheme
85
+ button = GtkSource::StyleSchemeChooserButton.new
86
+ button.vexpand = false
87
+ button.hexpand = true
88
+ button.style_scheme = @view.buffer.style_scheme
89
+ button.signal_connect "style-updated" do |widget|
90
+ @view.buffer.style_scheme = widget.style_scheme
91
+ end
92
+ button
93
+ end
94
+
95
+ def gen_save_button
96
+ button = Gtk::Button.new(:label => "Save")
97
+ button.signal_connect "clicked" do
98
+ @window.application.update_css
99
+ reload_custom_css_properties
100
+ end
101
+ button.vexpand = false
102
+ button.hexpand = false
103
+ button
104
+ end
105
+ def manage_buffer_changes
106
+ @view.buffer.signal_connect "changed" do |buffer|
107
+ @modified_css = buffer.get_text(buffer.start_iter,
108
+ buffer.end_iter,
109
+ false)
110
+ begin
111
+ @provider.load_from_data(@modified_css)
112
+ rescue
113
+ @provider.load_from_data(@default_css)
114
+ end
115
+
116
+ reload_custom_css_properties
117
+ Gtk::StyleContext.reset_widgets
118
+ style_scheme = nil
119
+ if @sm.scheme_ids.include?(@window.css_editor_style)
120
+ style_scheme = @sm.get_scheme(@window.css_editor_style)
121
+ else
122
+ style_scheme = @sm.get_scheme("classic")
123
+ end
124
+ @view.buffer.style_scheme = style_scheme
125
+ @style_button.style_scheme = style_scheme
126
+ end
127
+ end
128
+
129
+ def manage_css_errors
130
+ @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
138
+ end
139
+ end
140
+
141
+ def reload_custom_css_properties
142
+ reload_terminal_custom_css_properties
143
+ reload_window_custom_css_properties
144
+ end
145
+
146
+ def reload_terminal_custom_css_properties
147
+ @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
154
+ end
155
+ end
156
+ def reload_window_custom_css_properties
157
+ @window.load_css_properties
158
+ end
159
+ end