topinambour 1.0.0 → 1.0.1
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 +4 -4
- data/README.md +12 -10
- data/bin/topinambour +6 -6
- data/data/{germinal-icon-128.png → topinambour-icon-128.png} +0 -0
- data/data/{germinal-icon-16.png → topinambour-icon-16.png} +0 -0
- data/data/{germinal-icon-32.png → topinambour-icon-32.png} +0 -0
- data/data/{germinal-icon-64.png → topinambour-icon-64.png} +0 -0
- data/data/{germinal-icon.png → topinambour-icon.png} +0 -0
- data/data/{germinal.css → topinambour.css} +0 -0
- data/data/{germinal.gresource.xml → topinambour.gresource.xml} +3 -3
- data/lib/application.rb +3 -3
- data/lib/css_handler.rb +92 -18
- data/lib/headerbar.rb +1 -1
- data/lib/terminal.rb +1 -1
- data/lib/window.rb +3 -3
- metadata +9 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b2c58d89e07204813f4116f6fb82d4ae0d3469f7
|
4
|
+
data.tar.gz: 1cc5cd49e4893852c8aef7336de6bcadfbf80218
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bc8234743007101b0b8a1edbb3e995c9afea0c898f3543306c37121b8019f192eaac418c14bea5e5932438b61d097f11d3d6b6e85a350e1e6142fea54a6a40fe
|
7
|
+
data.tar.gz: 7efda03dabd821aa1b82e87f9cdb5935c195f23f54c23f36a6b23168b82c2226abf4698e77709870ecc1aef8a9cf8355456b7085470bf98a2fd1d8a10c425977
|
data/README.md
CHANGED
@@ -1,8 +1,10 @@
|
|
1
1
|
# Topinambour
|
2
2
|
|
3
|
-
[](https://badge.fury.io/rb/topinambour)
|
4
|
+
[](https://codeclimate.com/github/cedlemo/topinambour)
|
4
5
|
|
5
|
-
|
6
|
+
|
7
|
+
<a href="https://raw.github.com/cedlemo/topinambour/master/screenshot1.png"><img src="https://raw.github.com/cedlemo/topinambour/master/screenshot1_prev.png" width="576" height="324" alt="Screenshot"></a>
|
6
8
|
|
7
9
|
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.
|
8
10
|
|
@@ -10,17 +12,17 @@ Topinambour is Terminal written with the Gtk3 and Vte3 ruby bindings from the pr
|
|
10
12
|
|
11
13
|
* tabs supports
|
12
14
|
* tabs can be reordered or selected through the preview mode ( `Shift + Ctrl + o` )
|
13
|
-
<a href="https://raw.github.com/cedlemo/
|
15
|
+
<a href="https://raw.github.com/cedlemo/topinambour/master/screenshot2.png"><img src="https://raw.github.com/cedlemo/topinambour/master/screenshot2_prev.png" width="576" height="324" alt="Screenshot"></a>
|
14
16
|
|
15
17
|
* Each tab can be named.
|
16
18
|
* The configuration can be done via a Css file
|
17
19
|
* Terminal colors can be changed on the fly and saved in the CSS configuration file
|
18
|
-
<a href="https://raw.github.com/cedlemo/
|
20
|
+
<a href="https://raw.github.com/cedlemo/topinambour/master/screenshot3.png"><img src="https://raw.github.com/cedlemo/topinambour/master/screenshot3_prev.png" width="576" height="324" alt="Screenshot"></a>
|
19
21
|
* Terminal font can be changed on the fly and saved in the CSS configuration file
|
20
|
-
<a href="https://raw.github.com/cedlemo/
|
22
|
+
<a href="https://raw.github.com/cedlemo/topinambour/master/screenshot4.png"><img src="https://raw.github.com/cedlemo/topinambour/master/screenshot4_prev.png" width="576" height="324" alt="Screenshot"></a>
|
21
23
|
|
22
24
|
* The Css file can be edited in a tab of Topinambour and saved. Each modifications are applied while you are writting them. (Use `Shift + Ctrl + w` to close the editor)
|
23
|
-
<a href="https://raw.github.com/cedlemo/
|
25
|
+
<a href="https://raw.github.com/cedlemo/topinambour/master/screenshot5.png"><img src="https://raw.github.com/cedlemo/topinambour/master/screenshot5_prev.png" width="576" height="324" alt="Screenshot"></a>
|
24
26
|
* Topinambour allows users to modify existing modules. For example if a user copy the css_editor.rb in the directory *~/.config/Topinambour/lib/css_editor.rb*, he should be able to modify it in order to fit its needs.
|
25
27
|
|
26
28
|
## TODO:
|
@@ -51,7 +53,7 @@ Topinambour is Terminal written with the Gtk3 and Vte3 ruby bindings from the pr
|
|
51
53
|
|
52
54
|
## User configuration
|
53
55
|
|
54
|
-
It can be found in the file `$HOME/.config/Topinambour/
|
56
|
+
It can be found in the file `$HOME/.config/Topinambour/topinambour.css` (Be carefull by default Topinambour use fish as a default shell, if you want to use another one specify it in the topinambour.css file)
|
55
57
|
|
56
58
|
```css
|
57
59
|
*{
|
@@ -125,7 +127,7 @@ Each time you modify this configuration via the interface of Topinambour (termin
|
|
125
127
|
|
126
128
|
FileUtils.mv(USR_CSS, "#{USR_CSS}_#{Time.new.strftime('%Y-%m-%d-%H-%M-%S')}.backup")
|
127
129
|
|
128
|
-
Which means that the old file can be something like that : *
|
130
|
+
Which means that the old file can be something like that : *topinambour.css_2016-12-5-13-20.backup*.
|
129
131
|
|
130
132
|
## Installation
|
131
133
|
|
@@ -156,8 +158,8 @@ the ruby gem binaries (for example).
|
|
156
158
|
|
157
159
|
##### Get the sources
|
158
160
|
|
159
|
-
git clone https://github.com/cedlemo/
|
160
|
-
cd
|
161
|
+
git clone https://github.com/cedlemo/topinambour.git
|
162
|
+
cd topinambour/bin
|
161
163
|
|
162
164
|
##### Edit the files Topinambour and test
|
163
165
|
The filenames correspond to their functionnalities.
|
data/bin/topinambour
CHANGED
@@ -29,10 +29,10 @@ ROOT_PATH = File.expand_path("#{CURRENT_PATH}/..")
|
|
29
29
|
LIB_PATH = "#{CURRENT_PATH}/../lib"
|
30
30
|
DATA_PATH = "#{CURRENT_PATH}/../data"
|
31
31
|
CONFIG_DIR = File.expand_path("#{ENV['HOME']}/.config/Topinambour")
|
32
|
-
USR_CSS = "#{CONFIG_DIR}/
|
32
|
+
USR_CSS = "#{CONFIG_DIR}/topinambour.css"
|
33
33
|
USR_LIB_PATH = "#{CONFIG_DIR}/lib"
|
34
|
-
gresource_bin = "#{DATA_PATH}/
|
35
|
-
gresource_xml = "#{DATA_PATH}/
|
34
|
+
gresource_bin = "#{DATA_PATH}/topinambour.gresource"
|
35
|
+
gresource_xml = "#{DATA_PATH}/topinambour.gresource.xml"
|
36
36
|
|
37
37
|
system("glib-compile-resources",
|
38
38
|
"--target", gresource_bin,
|
@@ -55,8 +55,8 @@ terminal_chooser headerbar shortcuts window resize_message css_editor).each do |
|
|
55
55
|
end
|
56
56
|
end
|
57
57
|
|
58
|
-
Gtk::IconTheme.default.add_resource_path("/com/github/cedlemo/
|
58
|
+
Gtk::IconTheme.default.add_resource_path("/com/github/cedlemo/topinambour/icons")
|
59
59
|
|
60
|
-
|
60
|
+
topinambour = TopinambourApplication.new
|
61
61
|
|
62
|
-
exit(
|
62
|
+
exit(topinambour.run([$PROGRAM_NAME] + ARGV))
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
@@ -1,11 +1,11 @@
|
|
1
1
|
<?xml version="1.0" encoding="UTF-8"?>
|
2
2
|
<gresources>
|
3
|
-
<gresource prefix="/com/github/cedlemo/
|
3
|
+
<gresource prefix="/com/github/cedlemo/topinambour">
|
4
4
|
<file preprocess="xml-stripblanks">window.ui</file>
|
5
5
|
<file preprocess="xml-stripblanks">app-menu.ui</file>
|
6
6
|
<file preprocess="xml-stripblanks">window-menu.ui</file>
|
7
7
|
<file preprocess="xml-stripblanks">terminal-menu.ui</file>
|
8
|
-
<file>
|
8
|
+
<file>topinambour.css</file>
|
9
9
|
<file>application-exit-symbolic.svg</file>
|
10
10
|
<file>color-select-symbolic.svg</file>
|
11
11
|
<file>emblem-photos-symbolic.svg</file>
|
@@ -15,7 +15,7 @@
|
|
15
15
|
<file>tab-new-symbolic.svg</file>
|
16
16
|
<file>window-close-symbolic.svg</file>
|
17
17
|
</gresource>
|
18
|
-
<gresource prefix="/com/github/cedlemo/
|
18
|
+
<gresource prefix="/com/github/cedlemo/topinambour/icons">
|
19
19
|
<file>application-exit-symbolic.svg</file>
|
20
20
|
<file>color-select-symbolic.svg</file>
|
21
21
|
<file>emblem-photos-symbolic.svg</file>
|
data/lib/application.rb
CHANGED
@@ -17,7 +17,7 @@
|
|
17
17
|
class TopinambourApplication < Gtk::Application
|
18
18
|
attr_reader :provider
|
19
19
|
def initialize
|
20
|
-
super("com.github.cedlemo.
|
20
|
+
super("com.github.cedlemo.topinambour", :non_unique)
|
21
21
|
|
22
22
|
signal_connect "startup" do |application|
|
23
23
|
load_css_config
|
@@ -55,14 +55,14 @@ class TopinambourApplication < Gtk::Application
|
|
55
55
|
private
|
56
56
|
|
57
57
|
def load_menu_ui_in(application)
|
58
|
-
builder = Gtk::Builder.new(:resource => "/com/github/cedlemo/
|
58
|
+
builder = Gtk::Builder.new(:resource => "/com/github/cedlemo/topinambour/app-menu.ui")
|
59
59
|
app_menu = builder["appmenu"]
|
60
60
|
application.app_menu = app_menu
|
61
61
|
end
|
62
62
|
|
63
63
|
def load_css_config
|
64
64
|
@provider = Gtk::CssProvider.new
|
65
|
-
default_css = Gio::Resources.lookup_data("/com/github/cedlemo/
|
65
|
+
default_css = Gio::Resources.lookup_data("/com/github/cedlemo/topinambour/topinambour.css", 0)
|
66
66
|
if File.exist?(USR_CSS)
|
67
67
|
begin
|
68
68
|
@provider.load(:path => USR_CSS)
|
data/lib/css_handler.rb
CHANGED
@@ -1,47 +1,121 @@
|
|
1
|
+
require "sass"
|
2
|
+
require "gtk3" # to remove
|
3
|
+
|
1
4
|
module CssHandler
|
2
|
-
def css_file?(filename)
|
5
|
+
def self.css_file?(filename)
|
3
6
|
filename =~ /^.*\.css$/ ? true : false
|
4
7
|
end
|
5
|
-
|
6
|
-
def scss_file?(filename)
|
8
|
+
|
9
|
+
def self.scss_file?(filename)
|
7
10
|
filename =~ /^.*\.scss$/ ? true : false
|
8
11
|
end
|
9
|
-
|
10
|
-
def sass_file?(filename)
|
12
|
+
|
13
|
+
def self.sass_file?(filename)
|
11
14
|
filename =~ /^.*\.sass$/ ? true : false
|
12
15
|
end
|
13
16
|
|
14
|
-
def to_css(filename)
|
17
|
+
def self.to_css(filename)
|
15
18
|
content = File.open(filename, "r").read
|
16
19
|
if css_file?(filename) || scss_file?(filename)
|
17
20
|
Sass::Engine.new(content, :syntax => :scss).render
|
18
|
-
|
21
|
+
elsif sass_file?(filename)
|
19
22
|
Sass::Engine.new(content, :syntax => :sass).render
|
20
23
|
else
|
21
24
|
puts "Your theme file must be a css, scss or sass file"
|
22
25
|
exit 1
|
23
26
|
end
|
24
27
|
end
|
25
|
-
|
26
|
-
def
|
28
|
+
|
29
|
+
def self.to_engine(filename)
|
30
|
+
content = File.open(filename, "r").read
|
31
|
+
if css_file?(filename) || scss_file?(filename)
|
32
|
+
Sass::Engine.new(content, :syntax => :scss)
|
33
|
+
elsif sass_file?(filename)
|
34
|
+
Sass::Engine.new(content, :syntax => :sass)
|
35
|
+
else
|
36
|
+
puts "Your theme file must be a css, scss or sass file"
|
37
|
+
exit 1
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def self.color_property?(value)
|
42
|
+
parsed_color = nil
|
27
43
|
begin
|
28
|
-
Gdk::RGBA.parse(value)
|
44
|
+
parsed_color = Gdk::RGBA.parse(value)
|
29
45
|
rescue
|
30
|
-
|
46
|
+
parsed_color = nil
|
31
47
|
end
|
32
|
-
true
|
48
|
+
parsed_color ? true : false
|
33
49
|
end
|
34
|
-
|
35
|
-
def property_to_css_instructions(name, value)
|
36
|
-
if value.class == String && color_property?(value)
|
50
|
+
|
51
|
+
def self.property_to_css_instructions(name, value)
|
52
|
+
if value.class == String && color_property?(value)
|
37
53
|
"#{name}: #{value};\n"
|
38
|
-
|
54
|
+
elsif value.class == String
|
39
55
|
"#{name}: \"#{value}\";\n"
|
40
56
|
else
|
41
57
|
"#{name}: #{value};\n"
|
42
|
-
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
def self.props_with_name(tree, prop_name)
|
62
|
+
props = []
|
63
|
+
tree.children.each do |node|
|
64
|
+
node.each do |prop|
|
65
|
+
next if prop.class != Sass::Tree::PropNode
|
66
|
+
name = prop.name[0]
|
67
|
+
props << prop if name == prop_name
|
68
|
+
end
|
69
|
+
end
|
70
|
+
props
|
43
71
|
end
|
44
72
|
|
45
|
-
def
|
73
|
+
def self.prop_position(prop)
|
74
|
+
source_range = prop.source_range
|
75
|
+
[source_range.start_pos, source_range.end_pos]
|
76
|
+
end
|
77
|
+
|
78
|
+
def self.property_defined?(tree, name)
|
79
|
+
tree.children.each do |node|
|
80
|
+
node.each do |prop|
|
81
|
+
next if prop.class != Sass::Tree::PropNode
|
82
|
+
return true if prop.name[0] == name
|
83
|
+
end
|
84
|
+
end
|
85
|
+
false
|
86
|
+
end
|
46
87
|
|
88
|
+
def self.modify_property(filename, tree, prop)
|
89
|
+
# Get the property line/pos via the tree
|
90
|
+
# modify the existing prop in the file
|
91
|
+
# create a temp file
|
92
|
+
# copy initial file and modify the part we want
|
93
|
+
# replace initial file with temp file
|
94
|
+
end
|
95
|
+
|
96
|
+
def self.append_property_in_universal_selector(filename, tree, prop)
|
97
|
+
# Get the universal selector line/pos via the tree
|
98
|
+
# append our property at the end of this selector
|
99
|
+
end
|
100
|
+
|
101
|
+
def self.selectors_with_name(tree, sel_name)
|
102
|
+
selectors = []
|
103
|
+
tree.children.each do |node|
|
104
|
+
next unless node.class == Sass::Tree::RuleNode
|
105
|
+
selectors << node
|
106
|
+
end
|
107
|
+
selectors
|
108
|
+
end
|
109
|
+
|
110
|
+
def self.update_css(filename, properties)
|
111
|
+
engine = to_engine(filename)
|
112
|
+
tree = engine.to_tree
|
113
|
+
properties.each do |prop|
|
114
|
+
if property_defined?(tree, prop[:name])
|
115
|
+
modify_property(filename, tree, prop)
|
116
|
+
else
|
117
|
+
append_property_in_universal_selector(filename, tree, prop)
|
118
|
+
end
|
119
|
+
end
|
120
|
+
end
|
47
121
|
end
|
data/lib/headerbar.rb
CHANGED
@@ -83,7 +83,7 @@ SECTOOLTIP
|
|
83
83
|
|
84
84
|
def self.generate_open_menu_button(window)
|
85
85
|
gen_icon_button("open-menu-symbolic", "Main Menu") do |button|
|
86
|
-
builder = Gtk::Builder.new(:resource => "/com/github/cedlemo/
|
86
|
+
builder = Gtk::Builder.new(:resource => "/com/github/cedlemo/topinambour/window-menu.ui")
|
87
87
|
menu = Gtk::Menu.new(builder["winmenu"])
|
88
88
|
menu.attach_to_widget(button)
|
89
89
|
menu.children[0].signal_connect("activate") { window.show_css_editor }
|
data/lib/terminal.rb
CHANGED
@@ -70,7 +70,7 @@ class TopinambourTerminal < Vte::Terminal
|
|
70
70
|
end
|
71
71
|
end
|
72
72
|
|
73
|
-
builder = Gtk::Builder.new(:resource => "/com/github/cedlemo/
|
73
|
+
builder = Gtk::Builder.new(:resource => "/com/github/cedlemo/topinambour/terminal-menu.ui")
|
74
74
|
@menu = Gtk::Popover.new(self, builder["termmenu"])
|
75
75
|
|
76
76
|
signal_connect "button-press-event" do |widget, event|
|
data/lib/window.rb
CHANGED
@@ -26,7 +26,7 @@ class TopinambourWindow < Gtk::ApplicationWindow
|
|
26
26
|
|
27
27
|
def initialize(application)
|
28
28
|
super(:application => application)
|
29
|
-
set_icon_from_file("#{DATA_PATH}/
|
29
|
+
set_icon_from_file("#{DATA_PATH}/topinambour-icon.png")
|
30
30
|
load_css_properties
|
31
31
|
set_position(:center)
|
32
32
|
create_header_bar
|
@@ -118,10 +118,10 @@ class TopinambourWindow < Gtk::ApplicationWindow
|
|
118
118
|
"comments" => "Terminal Emulator based on the ruby bindings of Gtk3 and Vte3",
|
119
119
|
"copyright" => "Copyright (C) 2015-2016 Cédric Le Moigne",
|
120
120
|
"license" => "This program is licenced under the licence GPL-3.0 and later.",
|
121
|
-
"logo" => Gdk::Pixbuf.new("#{DATA_PATH}/
|
121
|
+
"logo" => Gdk::Pixbuf.new("#{DATA_PATH}/topinambour-icon-128.png"),
|
122
122
|
"program_name" => "Topinambour",
|
123
123
|
"version" => "1.2.3",
|
124
|
-
"website" => "https://github.com/cedlemo/
|
124
|
+
"website" => "https://github.com/cedlemo/topinambour",
|
125
125
|
"website_label" => "Topinambour github repository"
|
126
126
|
)
|
127
127
|
end
|
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.1
|
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-03-
|
11
|
+
date: 2016-03-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: vte3
|
@@ -86,17 +86,17 @@ files:
|
|
86
86
|
- data/color-select-symbolic.svg
|
87
87
|
- data/emblem-photos-symbolic.svg
|
88
88
|
- data/font-select-symbolic.svg
|
89
|
-
- data/germinal-icon-128.png
|
90
|
-
- data/germinal-icon-16.png
|
91
|
-
- data/germinal-icon-32.png
|
92
|
-
- data/germinal-icon-64.png
|
93
|
-
- data/germinal-icon.png
|
94
|
-
- data/germinal.css
|
95
|
-
- data/germinal.gresource.xml
|
96
89
|
- data/pan-end-symbolic.svg
|
97
90
|
- data/pan-start-symbolic.svg
|
98
91
|
- data/tab-new-symbolic.svg
|
99
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
|
+
- data/topinambour.css
|
99
|
+
- data/topinambour.gresource.xml
|
100
100
|
- data/window-close-symbolic.svg
|
101
101
|
- data/window-menu.ui
|
102
102
|
- data/window.ui
|