unixcmd 0.1.0 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- OTdhMmZkYzFhNGI4YWY4MTFiZDA3MjM3NWY3ZmU3ZDEzZTk0OTI2OQ==
4
+ ZTg3MWQ0NTJmNjU5ZTIyODVmYzI0NjM0NWM3MjJhNmRkMTEyODFlNA==
5
5
  data.tar.gz: !binary |-
6
- NTcwNDMzOWZmMDMxNGMyNDlkNWM5ZGVhYTE2MDVlOTBmZjY0MjRjNA==
7
- !binary "U0hBNTEy":
6
+ ZjkxOGZlYzEzNjZlZjA4ZTI3MGY1MDllNDQ2NzFlMmNkMzZmYmYyZg==
7
+ SHA512:
8
8
  metadata.gz: !binary |-
9
- YjNmOTcyYmEzYjUwMWU2ZTRiNWYyZDMzNmJlMTUyYzEyYTkxNTQ3MDA3ZTBk
10
- MTNiZGY4ZWMyNGYyZTFlN2NlMTQxNTIyMmI4NGVlMjQzYjNiMDFlY2RlYzJl
11
- YTJjZTIwZWYwNmNhMjhkYzIzNzQ0MGI1MGZlN2NlMjk1ZDU4YzY=
9
+ ZDQ4NWI2ZmIxYWI2YWVmZjRmYzU3N2Q3NjgxZjU0YTAzMDVjNThiODY0MThj
10
+ Y2Y5MzhmYjlmZjJjNTdkMWVjMWY5MjhiYjc4Mjk1MDRjMGRhOWVhMmJkZTQ2
11
+ OTQzZmI0NGM0ZTljNDY0MTdlOTBjMmRjOGU2NzliMGUwY2RlNDI=
12
12
  data.tar.gz: !binary |-
13
- Mjg4YzE0YjFlZjlkYWE0Nzk0ZWMwOGNiMWVkMjhhZGEwMWIzN2JiMTYxOWUz
14
- MDBjM2Y0YTZmOTgyMjQ0MDBmNmU5NmJkMmFmZDY5ZWQxOTI2OGZmZTk2MTBh
15
- MzExMDMxZGQ1MjcwNGIwYTI2YTg0Y2U4NmUwMzIyYjNkNzU2ZDA=
13
+ MWMyMzRiOTM0ZmU0ZGJiYTg4Y2IyODM2ODc1Mzg2NjM4YmY4MzNiZTQ4YTlm
14
+ N2Y2OWU3MWQ5YzgyNjQ1ZTM4ZDdiY2VkODMxMTBlYzkxZmEwYWFhMTgzOWFj
15
+ OGY3NjM0MWFkNDNhZGMwZDVmYmM3NzJjYWZlYjMwN2I3NjAxMGQ=
data/bin/unixcmd CHANGED
@@ -1,12 +1,31 @@
1
1
  #!/usr/bin/ruby19
2
2
 
3
3
  require 'gtk2'
4
+ require 'vte'
4
5
  require 'open3'
6
+ require 'pathname'
5
7
 
6
- require 'unixcmd/panel'
7
- require 'unixcmd/version'
8
- require 'unixcmd/config'
8
+ class Unixcmd
9
+ @devel = false
9
10
 
11
+ class << self
12
+ attr_accessor :devel
13
+ end
14
+ end
15
+
16
+ begin
17
+ gem 'unixcmd'
18
+ rescue Gem::LoadError
19
+ Unixcmd.devel = true
20
+ end
21
+
22
+ [ 'panel', 'version', 'config' ].each do |lib|
23
+ if Unixcmd.devel
24
+ require_relative "../lib/unixcmd/#{lib}"
25
+ else
26
+ require lib
27
+ end
28
+ end
10
29
 
11
30
  class CmdWnd < Gtk::Window
12
31
  @vbox
@@ -14,6 +33,8 @@ class CmdWnd < Gtk::Window
14
33
  @panes
15
34
  @left
16
35
  @right
36
+ @terminal
37
+ @curpanel
17
38
 
18
39
  def left() @left end
19
40
  def right() @right end
@@ -25,43 +46,86 @@ class CmdWnd < Gtk::Window
25
46
 
26
47
  set_border_width 5
27
48
 
28
- @vbox = Gtk::VBox.new
49
+ @vbox = Gtk::VPaned.new
29
50
  @panes = Gtk::HPaned.new
30
51
  @left = CmdPanelWidget.new
31
52
  @right = CmdPanelWidget.new
53
+ @terminal = Vte::Terminal.new
54
+
55
+ @terminal.height_request = 10
56
+ @terminal.fork_command({:argv => ['bash']})
57
+ @terminal.set_font 'DejaVu Sans Mono Book 9.5'
58
+ @terminal.allow_bold = false
59
+ @terminal.scrollback_lines = 99999
60
+
61
+ # add hotkey to switch to/from console (Ctrl-C)
62
+ # inactivate console when execute commands in bash
63
+ @terminal.sensitive = false
32
64
 
33
65
  @panes.pack1 @left, true, true
34
66
  @panes.pack2 @right, true, true
35
67
 
36
- @vbox.pack_start @panes, true
68
+ @vbox.pack1 @panes, true, true
69
+ @vbox.pack2 @terminal, true, true
37
70
 
38
71
  add @vbox
39
72
 
73
+ @left.signal_connect('dir-changed') { dir_changed @left }
74
+ @right.signal_connect('dir-changed') { dir_changed @right }
40
75
  signal_connect('destroy') { destroy }
76
+ signal_connect('set-focus') { |s, w| focus_changed w }
41
77
 
42
78
  self.focus_chain = [@left, @right]
43
79
 
44
80
  set_default_size 1024, 768
45
81
  show_all
82
+
83
+ sleep 1
84
+ @terminal.feed_child 'bind -x \'"\033d":". /tmp/tmp.sh"\'' + "\nclear\n"
85
+ cmd "cd #{curpanel.path}\n"
86
+ #cmd "export PROMPT_COMMAND='echo a'"
87
+ @terminal.feed_child "clear\n"
88
+ @terminal.signal_connect('child-exited') { destroy }
89
+
90
+ @curpanel = @left
46
91
  end
47
92
 
48
93
  def curpanel
49
- return @left if self.focus.parent.parent.parent == @left
50
- @right
94
+ @curpanel
51
95
  end
52
96
 
53
97
  def otherpanel
54
- return @left if self.focus.parent.parent.parent == @right
98
+ return @left if @curpanel == @right
55
99
  @right
56
100
  end
57
101
 
102
+ def focus_changed widget
103
+ return unless widget
104
+
105
+ oldcur = curpanel
106
+
107
+ @curpanel = @left if widget.inside? @left
108
+ @curpanel = @right if widget.inside? @right
109
+
110
+ cmd "cd #{curpanel.path}" unless oldcur == curpanel
111
+ end
112
+
113
+ def dir_changed pane
114
+ cmd "cd #{pane.path}"
115
+ end
116
+
58
117
  def selected_file
59
- curpanel().path + curpanel().selection[0]
118
+ curpanel.path + curpanel.selection[0]
60
119
  end
61
120
 
62
121
  def destroy
63
122
  Gtk.main_quit
64
123
  end
124
+
125
+ def cmd data
126
+ IO.write '/tmp/tmp.sh', data + "\n"
127
+ @terminal.feed_child "\033d\n"
128
+ end
65
129
  end
66
130
 
67
131
 
@@ -85,7 +149,11 @@ Gtk::AccelMap.add_entry '<unixcmd>/file/info', Gdk::Keyval::GDK_Return, Gdk::Win
85
149
  Gtk::AccelMap.add_entry '<unixcmd>/app/quit', Gdk::Keyval::GDK_F4, Gdk::Window::MOD1_MASK
86
150
 
87
151
 
88
- require 'unixcmd/cmd'
152
+ if Unixcmd.devel
153
+ require_relative '../lib/unixcmd/cmd'
154
+ else
155
+ require 'unixcmd/cmd'
156
+ end
89
157
 
90
158
 
91
159
  $wnd = CmdWnd.new
@@ -94,3 +162,6 @@ $wnd.add_accel_group $accels
94
162
  Gtk.main
95
163
 
96
164
  Gdk::Threads.leave
165
+
166
+ # vim: sw=2 sts=2 ts=8:
167
+
@@ -0,0 +1,256 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <interface>
3
+ <requires lib="gtk+" version="2.24"/>
4
+ <!-- interface-naming-policy project-wide -->
5
+ <object class="GtkListStore" id="SrcListStore">
6
+ <columns>
7
+ <!-- column-name filepath -->
8
+ <column type="gchararray"/>
9
+ </columns>
10
+ </object>
11
+ <object class="GtkDialog" id="CopyDlg">
12
+ <property name="can_focus">False</property>
13
+ <property name="border_width">5</property>
14
+ <property name="title" translatable="yes">Copying files...</property>
15
+ <property name="resizable">False</property>
16
+ <property name="modal">True</property>
17
+ <property name="type_hint">dialog</property>
18
+ <child internal-child="vbox">
19
+ <object class="GtkVBox" id="dialog-vbox1">
20
+ <property name="visible">True</property>
21
+ <property name="can_focus">False</property>
22
+ <property name="spacing">2</property>
23
+ <child>
24
+ <object class="GtkVBox" id="vbox1">
25
+ <property name="visible">True</property>
26
+ <property name="can_focus">False</property>
27
+ <child>
28
+ <object class="GtkHBox" id="hbox1">
29
+ <property name="visible">True</property>
30
+ <property name="can_focus">False</property>
31
+ <child>
32
+ <object class="GtkLabel" id="SrcLine">
33
+ <property name="visible">True</property>
34
+ <property name="can_focus">False</property>
35
+ <property name="label" translatable="yes">from</property>
36
+ </object>
37
+ <packing>
38
+ <property name="expand">True</property>
39
+ <property name="fill">True</property>
40
+ <property name="position">0</property>
41
+ </packing>
42
+ </child>
43
+ <child>
44
+ <object class="GtkTreeView" id="SrcList">
45
+ <property name="can_focus">True</property>
46
+ <property name="model">SrcListStore</property>
47
+ <property name="headers_visible">False</property>
48
+ <property name="enable_search">False</property>
49
+ <child>
50
+ <object class="GtkTreeViewColumn" id="filepath">
51
+ <property name="title" translatable="yes">filepath</property>
52
+ <property name="sort_column_id">0</property>
53
+ <child>
54
+ <object class="GtkCellRendererText" id="cellrenderertext1"/>
55
+ <attributes>
56
+ <attribute name="text">0</attribute>
57
+ </attributes>
58
+ </child>
59
+ </object>
60
+ </child>
61
+ </object>
62
+ <packing>
63
+ <property name="expand">True</property>
64
+ <property name="fill">True</property>
65
+ <property name="position">1</property>
66
+ </packing>
67
+ </child>
68
+ <child>
69
+ <object class="GtkLabel" id="label1">
70
+ <property name="visible">True</property>
71
+ <property name="can_focus">False</property>
72
+ <property name="label" translatable="yes">→</property>
73
+ <property name="justify">center</property>
74
+ <property name="width_chars">1</property>
75
+ </object>
76
+ <packing>
77
+ <property name="expand">True</property>
78
+ <property name="fill">True</property>
79
+ <property name="position">2</property>
80
+ </packing>
81
+ </child>
82
+ <child>
83
+ <object class="GtkEntry" id="DstEntry">
84
+ <property name="visible">True</property>
85
+ <property name="can_focus">True</property>
86
+ <property name="invisible_char">●</property>
87
+ <property name="primary_icon_activatable">False</property>
88
+ <property name="secondary_icon_activatable">False</property>
89
+ <property name="primary_icon_sensitive">True</property>
90
+ <property name="secondary_icon_sensitive">True</property>
91
+ </object>
92
+ <packing>
93
+ <property name="expand">True</property>
94
+ <property name="fill">True</property>
95
+ <property name="position">3</property>
96
+ </packing>
97
+ </child>
98
+ <child>
99
+ <object class="GtkLabel" id="DstLine">
100
+ <property name="can_focus">False</property>
101
+ <property name="label" translatable="yes">to</property>
102
+ </object>
103
+ <packing>
104
+ <property name="expand">True</property>
105
+ <property name="fill">True</property>
106
+ <property name="position">4</property>
107
+ </packing>
108
+ </child>
109
+ </object>
110
+ <packing>
111
+ <property name="expand">True</property>
112
+ <property name="fill">True</property>
113
+ <property name="position">0</property>
114
+ </packing>
115
+ </child>
116
+ </object>
117
+ <packing>
118
+ <property name="expand">True</property>
119
+ <property name="fill">True</property>
120
+ <property name="position">0</property>
121
+ </packing>
122
+ </child>
123
+ <child>
124
+ <object class="GtkHSeparator" id="hseparator1">
125
+ <property name="visible">True</property>
126
+ <property name="can_focus">False</property>
127
+ </object>
128
+ <packing>
129
+ <property name="expand">False</property>
130
+ <property name="fill">True</property>
131
+ <property name="position">1</property>
132
+ </packing>
133
+ </child>
134
+ <child>
135
+ <object class="GtkVBox" id="vbox2">
136
+ <property name="visible">True</property>
137
+ <property name="can_focus">False</property>
138
+ <child>
139
+ <object class="GtkCheckButton" id="RecursiveFlag">
140
+ <property name="label" translatable="yes">Copy directories recursively</property>
141
+ <property name="visible">True</property>
142
+ <property name="can_focus">True</property>
143
+ <property name="receives_default">False</property>
144
+ <property name="has_tooltip">True</property>
145
+ <property name="tooltip_text" translatable="yes">Equivalent to option -r for `cp`</property>
146
+ <property name="draw_indicator">True</property>
147
+ </object>
148
+ <packing>
149
+ <property name="expand">True</property>
150
+ <property name="fill">True</property>
151
+ <property name="position">0</property>
152
+ </packing>
153
+ </child>
154
+ <child>
155
+ <object class="GtkCheckButton" id="VerboseFlag">
156
+ <property name="label" translatable="yes">Verbose mode</property>
157
+ <property name="visible">True</property>
158
+ <property name="can_focus">True</property>
159
+ <property name="receives_default">False</property>
160
+ <property name="has_tooltip">True</property>
161
+ <property name="tooltip_text" translatable="yes">Equivalent to option -v for `cp`</property>
162
+ <property name="draw_indicator">True</property>
163
+ </object>
164
+ <packing>
165
+ <property name="expand">True</property>
166
+ <property name="fill">True</property>
167
+ <property name="position">1</property>
168
+ </packing>
169
+ </child>
170
+ <child>
171
+ <object class="GtkCheckButton" id="ArchiveFlag">
172
+ <property name="label" translatable="yes">Archive mode</property>
173
+ <property name="visible">True</property>
174
+ <property name="can_focus">True</property>
175
+ <property name="receives_default">False</property>
176
+ <property name="has_tooltip">True</property>
177
+ <property name="tooltip_text" translatable="yes">Equivalent to option -a for `cp`</property>
178
+ <property name="draw_indicator">True</property>
179
+ </object>
180
+ <packing>
181
+ <property name="expand">True</property>
182
+ <property name="fill">True</property>
183
+ <property name="position">2</property>
184
+ </packing>
185
+ </child>
186
+ </object>
187
+ <packing>
188
+ <property name="expand">True</property>
189
+ <property name="fill">True</property>
190
+ <property name="position">2</property>
191
+ </packing>
192
+ </child>
193
+ <child internal-child="action_area">
194
+ <object class="GtkHButtonBox" id="dialog-action_area1">
195
+ <property name="visible">True</property>
196
+ <property name="can_focus">False</property>
197
+ <property name="layout_style">end</property>
198
+ <child>
199
+ <object class="GtkButton" id="OKButton">
200
+ <property name="label">gtk-ok</property>
201
+ <property name="visible">True</property>
202
+ <property name="can_focus">True</property>
203
+ <property name="has_focus">True</property>
204
+ <property name="can_default">True</property>
205
+ <property name="has_default">True</property>
206
+ <property name="receives_default">True</property>
207
+ <property name="use_stock">True</property>
208
+ </object>
209
+ <packing>
210
+ <property name="expand">False</property>
211
+ <property name="fill">False</property>
212
+ <property name="position">0</property>
213
+ </packing>
214
+ </child>
215
+ <child>
216
+ <object class="GtkButton" id="CancelButton">
217
+ <property name="label">gtk-cancel</property>
218
+ <property name="visible">True</property>
219
+ <property name="can_focus">True</property>
220
+ <property name="can_default">True</property>
221
+ <property name="has_default">True</property>
222
+ <property name="receives_default">False</property>
223
+ <property name="use_stock">True</property>
224
+ </object>
225
+ <packing>
226
+ <property name="expand">False</property>
227
+ <property name="fill">False</property>
228
+ <property name="position">1</property>
229
+ </packing>
230
+ </child>
231
+ </object>
232
+ <packing>
233
+ <property name="expand">True</property>
234
+ <property name="fill">True</property>
235
+ <property name="position">3</property>
236
+ </packing>
237
+ </child>
238
+ <child>
239
+ <object class="GtkHSeparator" id="hseparator2">
240
+ <property name="visible">True</property>
241
+ <property name="can_focus">False</property>
242
+ </object>
243
+ <packing>
244
+ <property name="expand">False</property>
245
+ <property name="fill">True</property>
246
+ <property name="position">4</property>
247
+ </packing>
248
+ </child>
249
+ </object>
250
+ </child>
251
+ <action-widgets>
252
+ <action-widget response="0">OKButton</action-widget>
253
+ <action-widget response="1">CancelButton</action-widget>
254
+ </action-widgets>
255
+ </object>
256
+ </interface>
@@ -0,0 +1,156 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <interface>
3
+ <requires lib="gtk+" version="2.24"/>
4
+ <!-- interface-naming-policy project-wide -->
5
+ <object class="GtkDialog" id="MkDirDlg">
6
+ <property name="can_focus">False</property>
7
+ <property name="border_width">5</property>
8
+ <property name="title" translatable="yes">Making directory…</property>
9
+ <property name="resizable">False</property>
10
+ <property name="modal">True</property>
11
+ <property name="type_hint">dialog</property>
12
+ <child internal-child="vbox">
13
+ <object class="GtkVBox" id="dialog-vbox1">
14
+ <property name="visible">True</property>
15
+ <property name="can_focus">False</property>
16
+ <property name="spacing">2</property>
17
+ <child>
18
+ <object class="GtkVBox" id="vbox1">
19
+ <property name="visible">True</property>
20
+ <property name="can_focus">False</property>
21
+ <child>
22
+ <object class="GtkHBox" id="hbox1">
23
+ <property name="visible">True</property>
24
+ <property name="can_focus">False</property>
25
+ <child>
26
+ <object class="GtkEntry" id="MkDirEntry">
27
+ <property name="visible">True</property>
28
+ <property name="can_focus">True</property>
29
+ <property name="invisible_char">●</property>
30
+ <property name="primary_icon_activatable">False</property>
31
+ <property name="secondary_icon_activatable">False</property>
32
+ <property name="primary_icon_sensitive">True</property>
33
+ <property name="secondary_icon_sensitive">True</property>
34
+ </object>
35
+ <packing>
36
+ <property name="expand">True</property>
37
+ <property name="fill">True</property>
38
+ <property name="position">0</property>
39
+ </packing>
40
+ </child>
41
+ </object>
42
+ <packing>
43
+ <property name="expand">True</property>
44
+ <property name="fill">True</property>
45
+ <property name="position">0</property>
46
+ </packing>
47
+ </child>
48
+ </object>
49
+ <packing>
50
+ <property name="expand">True</property>
51
+ <property name="fill">True</property>
52
+ <property name="position">0</property>
53
+ </packing>
54
+ </child>
55
+ <child>
56
+ <object class="GtkHSeparator" id="hseparator1">
57
+ <property name="visible">True</property>
58
+ <property name="can_focus">False</property>
59
+ </object>
60
+ <packing>
61
+ <property name="expand">False</property>
62
+ <property name="fill">True</property>
63
+ <property name="position">1</property>
64
+ </packing>
65
+ </child>
66
+ <child>
67
+ <object class="GtkVBox" id="vbox2">
68
+ <property name="visible">True</property>
69
+ <property name="can_focus">False</property>
70
+ <child>
71
+ <object class="GtkCheckButton" id="VerboseFlag">
72
+ <property name="label" translatable="yes">Verbose mode</property>
73
+ <property name="visible">True</property>
74
+ <property name="can_focus">True</property>
75
+ <property name="receives_default">False</property>
76
+ <property name="has_tooltip">True</property>
77
+ <property name="tooltip_text" translatable="yes">Equivalent to option -v for `mkdir`</property>
78
+ <property name="draw_indicator">True</property>
79
+ </object>
80
+ <packing>
81
+ <property name="expand">True</property>
82
+ <property name="fill">True</property>
83
+ <property name="position">0</property>
84
+ </packing>
85
+ </child>
86
+ </object>
87
+ <packing>
88
+ <property name="expand">True</property>
89
+ <property name="fill">True</property>
90
+ <property name="position">2</property>
91
+ </packing>
92
+ </child>
93
+ <child internal-child="action_area">
94
+ <object class="GtkHButtonBox" id="dialog-action_area1">
95
+ <property name="visible">True</property>
96
+ <property name="can_focus">False</property>
97
+ <property name="layout_style">end</property>
98
+ <child>
99
+ <object class="GtkButton" id="OKButton">
100
+ <property name="label">gtk-ok</property>
101
+ <property name="visible">True</property>
102
+ <property name="can_focus">True</property>
103
+ <property name="has_focus">True</property>
104
+ <property name="can_default">True</property>
105
+ <property name="has_default">True</property>
106
+ <property name="receives_default">True</property>
107
+ <property name="use_stock">True</property>
108
+ </object>
109
+ <packing>
110
+ <property name="expand">False</property>
111
+ <property name="fill">False</property>
112
+ <property name="position">0</property>
113
+ </packing>
114
+ </child>
115
+ <child>
116
+ <object class="GtkButton" id="CancelButton">
117
+ <property name="label">gtk-cancel</property>
118
+ <property name="visible">True</property>
119
+ <property name="can_focus">True</property>
120
+ <property name="can_default">True</property>
121
+ <property name="has_default">True</property>
122
+ <property name="receives_default">False</property>
123
+ <property name="use_stock">True</property>
124
+ </object>
125
+ <packing>
126
+ <property name="expand">False</property>
127
+ <property name="fill">False</property>
128
+ <property name="position">1</property>
129
+ </packing>
130
+ </child>
131
+ </object>
132
+ <packing>
133
+ <property name="expand">True</property>
134
+ <property name="fill">True</property>
135
+ <property name="position">3</property>
136
+ </packing>
137
+ </child>
138
+ <child>
139
+ <object class="GtkHSeparator" id="hseparator2">
140
+ <property name="visible">True</property>
141
+ <property name="can_focus">False</property>
142
+ </object>
143
+ <packing>
144
+ <property name="expand">False</property>
145
+ <property name="fill">True</property>
146
+ <property name="position">4</property>
147
+ </packing>
148
+ </child>
149
+ </object>
150
+ </child>
151
+ <action-widgets>
152
+ <action-widget response="0">OKButton</action-widget>
153
+ <action-widget response="1">CancelButton</action-widget>
154
+ </action-widgets>
155
+ </object>
156
+ </interface>