unixcmd 0.1.0 → 0.2.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 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>