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.
data/lib/unixcmd/cmd.rb CHANGED
@@ -1,17 +1,29 @@
1
+ # encoding: UTF-8
2
+
3
+ require 'thread'
4
+
5
+
1
6
  $accels = Gtk::AccelGroup.new
2
7
 
3
8
  $actMap = Hash.new
4
9
 
5
- require 'thread'
10
+ $actMap['<unixcmd>/panel/reload'] = Proc.new { $wnd.curpanel.reload }
6
11
 
7
- #require_relative './copier.rb'
8
- #require_relative './copyctrl.rb'
9
- #require_relative './fileinfodlg.rb'
12
+ $actMap['<unixcmd>/file/copy'] = Proc.new do
13
+ cmd_file_copy $wnd.curpanel.selection, $wnd.curpanel.path, $wnd.otherpanel.path
14
+ end
10
15
 
11
- $actMap['<unixcmd>/panel/reload'] = Proc.new { $wnd.curpanel.reload }
16
+ $actMap['<unixcmd>/file/move'] = Proc.new do
17
+ cmd_file_move $wnd.curpanel.selection, $wnd.curpanel.path, $wnd.otherpanel.path
18
+ end
19
+
20
+ $actMap['<unixcmd>/file/remove'] = Proc.new do
21
+ cmd_file_remove $wnd.curpanel.selection, $wnd.curpanel.path
22
+ end
12
23
 
13
- $actMap['<unixcmd>/file/copy'] = Proc.new { cmd_file_copy $wnd.curpanel.selection, $wnd.curpanel.path, $wnd.otherpanel.path }
14
- $actMap['<unixcmd>/file/remove'] = Proc.new { cmd_file_remove $wnd.curpanel.selection }
24
+ $actMap['<unixcmd>/file/mkdir'] = Proc.new do
25
+ cmd_file_mkdir $wnd.curpanel.path
26
+ end
15
27
 
16
28
  $actMap['<unixcmd>/file/view'] = Proc.new { cmd_file_view $wnd.selected_file }
17
29
  $actMap['<unixcmd>/file/edit'] = Proc.new { cmd_file_edit $wnd.selected_file }
@@ -20,151 +32,145 @@ $actMap['<unixcmd>/file/info'] = Proc.new { cmd_file_info $wnd.selected_file }
20
32
 
21
33
  $actMap['<unixcmd>/app/quit'] = Proc.new { $wnd.destroy }
22
34
 
23
- $actMap['<unixcmd>/test/print_selection'] = Proc.new { p $wnd.curpanel.selection }
35
+ $actMap['<unixcmd>/test/print_selection'] = Proc.new { p $wnd.curpanel.selection; $wnd.cmd "cd #{$wnd.curpanel.path.to_s}" }
24
36
 
25
37
  $actMap.each_key do |key|
26
38
  $accels.connect(key, &$actMap[key])
27
39
  end
28
40
 
29
- #module MyCopyModel
30
- # include CopyModel
31
- #
32
- # def cp(src, dst)
33
- # return if src == dst
34
- #
35
- # p [:cp, [src, dst]]
36
- #
37
- # srcfile = File.new src.expand_path, 'rb'
38
- # dstfile = File.new dst.expand_path, 'wb'
39
- # copied_sum = 0
40
- # size = srcfile.stat.size
41
- # block_size = $cfg['copy']['block_size']
42
- # time_start = Time::now.to_f
43
- # elapsed = 0.0
44
- #
45
- # begin
46
- # copied = IO::copy_stream srcfile, dstfile, block_size
47
- # copied_sum += copied
48
- #
49
- # view.file_progress copied_sum.to_f/size.to_f
50
- #
51
- # elapsed = Time::now.to_f - time_start
52
- # view.file_speed (copied_sum/elapsed).to_i if elapsed > 0
53
- # end while copied > 0
54
- #
55
- # nil
56
- # end
57
- #
58
- # def mkdir(path)
59
- # p [:mkdir, [path]]
60
- # path.mkdir
61
- # end
62
- #end
63
-
64
- #module MyCopyView
65
- # include CopyView
66
- #
67
- # class << View
68
- # @queue
69
- #
70
- # def queue=(queue) @queue = queue end
71
- #
72
- # def start() end
73
- # def end() @queue.push [:end] end
74
- #
75
- # def file_start(src, dst) @queue.push [:file_start, [src, dst]] end
76
- #
77
- # def file_end() end
78
- #
79
- # def file_progress(percent) @queue.push [:file_progress, [percent]] end
80
- # def progress(percent) @queue.push [:progress, [percent]] end
81
- # def dir_create(path) @queue.push [:dir_create, [path]] end
82
- #
83
- # def file_speed(speed) @queue.push [:file_speed, [speed]] end
84
- # end
85
- #end
41
+ [ 'copydlg', 'removedlg', 'movedlg', 'mkdirdlg' ].each do |lib|
42
+ if Unixcmd.devel
43
+ require_relative "./#{lib}"
44
+ else
45
+ require lib
46
+ end
47
+ end
86
48
 
87
49
  def cmd_file_copy(files, srcdir, dstdir)
88
- # (dlg = CopyOptionsDlg.new files, srcdir, dstdir).run do |res|
89
- # case res
90
- # when Gtk::Dialog::RESPONSE_CANCEL, Gtk::Dialog::RESPONSE_DELETE_EVENT
91
- # dlg.destroy
92
- # return
93
- # when Gtk::Dialog::RESPONSE_OK then dlg.destroy
94
- # else
95
- # raise ArgumentError, res.to_s
96
- # end
97
- # end
98
- #
99
- # queue = Queue.new
100
- #
101
- # copier = Copier.new dlg.files, dlg.src, dlg.dst, false, false
102
- # copier.view = MyCopyView
103
- # copier.model = MyCopyModel
104
- # copier.view.queue = queue
105
- #
106
- # dlg = CopyDlg.new
107
- #
108
- # cpthread = Thread.new do
109
- # begin
110
- # copier.run
111
- # rescue => err
112
- # print 'error: '
113
- # p err.hash[:type]
114
- #
115
- # if err.hash[:type] == :not_exist
116
- # p err.hash[:path]
117
- # #err.hash[:stop] = true
118
- # end
119
- #
120
- # if err.hash[:type] == :srcdstdifftype
121
- # p err.hash[:src]
122
- # p err.hash[:dst]
123
- # #err.hash[:stop] = true
124
- # end
125
- #
126
- # if err.hash[:type] == :access_denied
127
- # p err.hash[:path]
128
- # #err.hash[:stop] = true
129
- # end
130
- #
131
- # if err.hash[:type] == :exist
132
- # p err.hash[:path]
133
- # err.hash[:overwrite] = true if err.hash[:path].basename.to_s == '6'
134
- # #err.hash[:stop] = true
135
- # end
136
- #
137
- # err.continue
138
- # end
139
- # end
140
- #
141
- # cpthread.abort_on_exception = true
142
- #
143
- # idle = Gtk.idle_add do
144
- # if !queue.empty?
145
- # call = queue.pop
146
- # args = call[1]
147
- #
148
- # dlg.dispatch_model_call call[0], args
149
- # end
150
- #
151
- # true
152
- # end
153
- #
154
- # dlg.run do |res|
155
- # case res
156
- # when Gtk::Dialog::RESPONSE_CANCEL then copy.stop
157
- # end
158
- # end
159
- #
160
- # Gtk.idle_remove idle
161
- # cpthread.join
162
- # cpthread.exit
50
+ files_s = files.map do |file|
51
+ file.to_s
52
+ end
53
+
54
+ dlg = CopyDlg.new files_s, dstdir.to_s
55
+ res = dlg.run
56
+
57
+ flags = ''
58
+
59
+ flags << '-r ' if dlg.recursive?
60
+ flags << '-a ' if dlg.archive?
61
+ flags << '-v ' if dlg.verbose?
62
+ flags.strip!
63
+
64
+ dstdir = Pathname.new(dlg.dest)
65
+
66
+ unless res == 0
67
+ dlg.destroy
68
+ return
69
+ end
70
+
71
+ cpthread = Thread.new do
72
+ Dir.chdir(srcdir.expand_path.to_s) do
73
+ $wnd.cmd "cp #{flags} #{files_s.join ' '} #{dstdir.to_s}"
74
+ end
75
+ end
76
+
77
+ cpthread.abort_on_exception = true
78
+ cpthread.join
79
+ cpthread.exit
80
+
81
+ dlg.destroy
82
+ end
83
+
84
+ def cmd_file_move(files, srcdir, dstdir)
85
+ files_s = files.map do |file|
86
+ file.to_s
87
+ end
88
+
89
+ dlg = MoveDlg.new files_s, dstdir
90
+ res = dlg.run
91
+
92
+ flags = ''
93
+
94
+ flags << '-v ' if dlg.verbose?
95
+ flags.strip!
96
+
97
+ unless res == 0
98
+ dlg.destroy
99
+ return
100
+ end
101
+
102
+ mvthread = Thread.new do
103
+ Dir.chdir(srcdir.expand_path.to_s) do
104
+ puts $wnd.cmd "mv #{flags} #{files_s.join ' '} #{dstdir.to_s}"
105
+ end
106
+ end
107
+
108
+ mvthread.abort_on_exception = true
109
+ mvthread.join
110
+ mvthread.exit
111
+
112
+ dlg.destroy
163
113
  end
164
114
 
165
- def cmd_file_remove(files)
166
- files.each do |file|
115
+ def cmd_file_remove(files, dir)
116
+ files_s = files.map do |file|
117
+ file.to_s
118
+ end
119
+
120
+ dlg = RemoveDlg.new files_s
121
+ res = dlg.run
122
+
123
+ flags = ''
124
+
125
+ flags << '-r ' if dlg.recursive?
126
+ flags << '-v ' if dlg.verbose?
127
+ flags.strip!
128
+
129
+ unless res == 0
130
+ dlg.destroy
131
+ return
132
+ end
133
+
134
+ thread = Thread.new do
135
+ Dir.chdir(dir.expand_path.to_s) do
136
+ $wnd.cmd "rm #{flags} #{files_s.join ' '}"
137
+ end
167
138
  end
139
+
140
+ thread.abort_on_exception = true
141
+ thread.join
142
+ thread.exit
143
+
144
+ dlg.destroy
145
+ end
146
+
147
+ def cmd_file_mkdir(dir)
148
+ dlg = MkDirDlg.new
149
+ res = dlg.run
150
+
151
+ flags = ''
152
+
153
+ flags << '-v ' if dlg.verbose?
154
+ flags.strip!
155
+
156
+ dirname = dlg.dirname
157
+
158
+ unless res == 0
159
+ dlg.destroy
160
+ return
161
+ end
162
+
163
+ thread = Thread.new do
164
+ Dir.chdir(dir.expand_path.to_s) do
165
+ $wnd.cmd "mkdir #{flags} #{dirname}"
166
+ end
167
+ end
168
+
169
+ thread.abort_on_exception = true
170
+ thread.join
171
+ thread.exit
172
+
173
+ dlg.destroy
168
174
  end
169
175
 
170
176
  def cmd_file_view(file)
@@ -0,0 +1,79 @@
1
+ # encoding: UTF-8
2
+
3
+ class CopyDlg
4
+ FILES_FEW = 3
5
+
6
+ @builder
7
+ @dlg
8
+ @srcline
9
+ @srclist
10
+ @dstline
11
+ @dstentry
12
+ @flags
13
+ @singlesrc
14
+ @fewsrc
15
+
16
+ def initialize files, dest
17
+ @builder = Gtk::Builder.new
18
+ @builder.add_from_file 'data/forms/copydlg.glade'
19
+ @dlg = @builder.get_object 'CopyDlg'
20
+ @srcline = @builder.get_object 'SrcLine'
21
+ @srclist = @builder.get_object 'SrcList'
22
+ @dstline = @builder.get_object 'DstLine'
23
+ @dstentry = @builder.get_object 'DstEntry'
24
+
25
+ @singlesrc = files.count == 1
26
+ @fewsrc = files.count <= FILES_FEW
27
+
28
+ unless @singlesrc == true
29
+ @dstline.text = dest
30
+ else
31
+ @dstentry.text = dest
32
+ end
33
+
34
+ unless @fewsrc == true
35
+ @srcline.hide
36
+ @srclist.show
37
+
38
+ files.each do |file|
39
+ row = @srclist.model.append
40
+ row[0] = file
41
+ end
42
+ else
43
+ @srcline.text = files.join ' '
44
+ end
45
+
46
+ @flags = {
47
+ :recursive => @builder.get_object('RecursiveFlag'),
48
+ :archive => @builder.get_object('ArchiveFlag'),
49
+ :verbose => @builder.get_object('VerboseFlag'),
50
+ }
51
+ end
52
+
53
+ def run
54
+ @dlg.run
55
+ end
56
+
57
+ def destroy
58
+ @dlg.destroy
59
+ end
60
+
61
+ def recursive?
62
+ @flags[:recursive].active?
63
+ end
64
+
65
+ def archive?
66
+ @flags[:archive].active?
67
+ end
68
+
69
+ def verbose?
70
+ @flags[:verbose].active?
71
+ end
72
+
73
+ def dest
74
+ @singlesrc == true ? @dstentry.text : @dstline.text
75
+ end
76
+ end
77
+
78
+ # vim: sw=2 sts=2 ts=8:
79
+
@@ -0,0 +1 @@
1
+
@@ -1,6 +1,7 @@
1
1
  require 'launchy'
2
2
  require 'mime/types'
3
- require 'unixcmd/aux'
3
+
4
+ require_relative './aux'
4
5
 
5
6
 
6
7
  class CmdDirWidget < Gtk::Frame
@@ -70,14 +71,14 @@ class CmdDirWidget < Gtk::Frame
70
71
  def path() @path end
71
72
  def expanded_path() @path.expand_path end
72
73
 
73
- def back() chdir(@path + Pathname.new('..')) end
74
+ def back() chdir @path + '..' end
74
75
 
75
76
  def reload
76
77
  model = @view.model
77
78
 
78
79
  model.clear
79
80
 
80
- @view.columns[0].set_visible(false)
81
+ @view.columns[0].set_visible false
81
82
 
82
83
  files = expanded_path.entries.sort
83
84
 
@@ -97,17 +98,17 @@ class CmdDirWidget < Gtk::Frame
97
98
 
98
99
  row[0] = file.to_s
99
100
 
100
- if full_path.directory? then
101
+ if full_path.directory?
101
102
  row[1] = file.to_s + '/'
102
103
  row[3] = '<DIR>'
103
104
  else
104
105
  row[1] = file.basename('.*').to_s
105
- row[3] = full_path.stat.size.to_i.to_szstr
106
+ row[3] = full_path.exist? ? full_path.size.to_i.to_szstr : 0.to_szstr
106
107
  end
107
108
 
108
109
  row[2] = file.extname
109
- row[4] = Time.at(full_path.stat.mtime).strftime '%x %R'
110
- row[5] = full_path.stat.mode.to_rwx
110
+ row[4] = Time.at(full_path.mtime).strftime '%x %R' if full_path.exist?
111
+ row[5] = full_path.stat.mode.to_rwx if full_path.exist?
111
112
  row[6] = Gdk::Pixbuf.new file_icon_path.to_s
112
113
  row[7] = 0
113
114
  end
@@ -121,7 +122,7 @@ class CmdDirWidget < Gtk::Frame
121
122
 
122
123
  file = iter.get_value 0
123
124
 
124
- if (expanded_path + Pathname.new(file)).directory? then
125
+ if (expanded_path + Pathname.new(file)).directory?
125
126
  chdir @path + Pathname.new(file)
126
127
  else
127
128
  Launchy.open (expanded_path + Pathname.new(file)).to_s
@@ -136,11 +137,11 @@ class CmdDirWidget < Gtk::Frame
136
137
 
137
138
  reload
138
139
 
139
- if path == old_path.parent then
140
+ if path == old_path.parent
140
141
  dirname = old_path.basename
141
142
 
142
143
  @view.model.each do |model, path, iter|
143
- if iter.get_value(0) == dirname.to_s then
144
+ if iter.get_value(0) == dirname.to_s
144
145
  @view.selection.select_path path
145
146
  @view.set_cursor path, nil, false
146
147
  break
@@ -149,7 +150,7 @@ class CmdDirWidget < Gtk::Frame
149
150
 
150
151
  end
151
152
 
152
- if @view.selection.count_selected_rows == 0 then
153
+ if @view.selection.count_selected_rows == 0
153
154
  @view.selection.select_iter @view.model.iter_first
154
155
  @view.set_cursor @view.model.iter_first.path, nil, false
155
156
  end
@@ -0,0 +1,38 @@
1
+ # encoding: UTF-8
2
+
3
+ class MkDirDlg
4
+ @builder
5
+ @dlg
6
+ @mkdirentry
7
+ @flags
8
+
9
+ def initialize
10
+ @builder = Gtk::Builder.new
11
+ @builder.add_from_file 'data/forms/mkdirdlg.glade'
12
+ @dlg = @builder.get_object 'MkDirDlg'
13
+ @mkdirentry = @builder.get_object 'MkDirEntry'
14
+
15
+ @flags = {
16
+ :verbose => @builder.get_object('VerboseFlag'),
17
+ }
18
+ end
19
+
20
+ def run
21
+ @dlg.run
22
+ end
23
+
24
+ def destroy
25
+ @dlg.destroy
26
+ end
27
+
28
+ def verbose?
29
+ @flags[:verbose].active?
30
+ end
31
+
32
+ def dirname
33
+ @mkdirentry.text
34
+ end
35
+ end
36
+
37
+ # vim: sw=2 sts=2 ts=8:
38
+
@@ -0,0 +1,36 @@
1
+ # encoding: UTF-8
2
+
3
+ class MoveDlg
4
+ @builder
5
+ @dlg
6
+ @cmdline
7
+ @flags
8
+
9
+ def initialize files, dest
10
+ @builder = Gtk::Builder.new
11
+ @builder.add_from_file 'data/forms/movedlg.glade'
12
+ @dlg = @builder.get_object 'MoveDlg'
13
+ @cmdline = @builder.get_object 'CmdLine'
14
+
15
+ @cmdline.text = "#{files.join ' '} → #{dest}"
16
+
17
+ @flags = {
18
+ :verbose => @builder.get_object('VerboseFlag'),
19
+ }
20
+ end
21
+
22
+ def run
23
+ @dlg.run
24
+ end
25
+
26
+ def destroy
27
+ @dlg.destroy
28
+ end
29
+
30
+ def verbose?
31
+ @flags[:verbose].active?
32
+ end
33
+ end
34
+
35
+ # vim: sw=2 sts=2 ts=8:
36
+
data/lib/unixcmd/panel.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  require 'sys/filesystem'
2
- require 'unixcmd/dirview'
2
+ require_relative './dirview'
3
3
 
4
4
  class CmdPanelCaptionWidget < Gtk::HBox
5
5
  @mounts
@@ -108,7 +108,7 @@ class CmdPanelWidget < Gtk::VBox
108
108
  pack_start @caption, false
109
109
  pack_end @dir
110
110
 
111
- @dir.signal_connect('dir-changed') { update_caption }
111
+ @dir.signal_connect('dir-changed') { update_caption; signal_emit 'dir-changed' }
112
112
  @caption.signal_connect('go-root') { @dir.chdir Pathname.new '/' }
113
113
  @caption.signal_connect('go-home') { @dir.chdir Pathname.new '~' }
114
114
  @caption.signal_connect('go-back') { @dir.back }
@@ -156,4 +156,10 @@ class CmdPanelWidget < Gtk::VBox
156
156
  def reload
157
157
  @dir.reload
158
158
  end
159
+
160
+ type_register
161
+
162
+ signal_new('dir_changed', GLib::Signal::RUN_FIRST, nil, nil)
163
+
164
+ def signal_do_dir_changed() nil end
159
165
  end
@@ -0,0 +1,62 @@
1
+ # encoding: UTF-8
2
+
3
+ class RemoveDlg
4
+ FILES_FEW = 3
5
+ FILES_MANY = 5
6
+
7
+ @builder
8
+ @dlg
9
+ @filesline
10
+ @fileslist
11
+ @flags
12
+ @fewfiles
13
+
14
+ def initialize files
15
+ @builder = Gtk::Builder.new
16
+ @builder.add_from_file 'data/forms/removedlg.glade'
17
+ @dlg = @builder.get_object 'RemoveDlg'
18
+ @filesline = @builder.get_object 'FilesLine'
19
+ @fileslist = @builder.get_object 'FilesList'
20
+
21
+ @fewfiles = files.count <= FILES_FEW
22
+
23
+ unless @fewfiles == true
24
+ @fileslist.show
25
+ @filesline.hide
26
+
27
+ files.each_with_index do |file, i|
28
+ row = @fileslist.model.append
29
+ row[0] = file
30
+
31
+ # *TODO!* remove 110 magic number
32
+ @fileslist.set_height_request 110 if i+1 == FILES_MANY
33
+ end
34
+ else
35
+ @filesline.text = "#{files.join ' '}"
36
+ end
37
+
38
+ @flags = {
39
+ :recursive => @builder.get_object('RecursiveFlag'),
40
+ :verbose => @builder.get_object('VerboseFlag'),
41
+ }
42
+ end
43
+
44
+ def run
45
+ @dlg.run
46
+ end
47
+
48
+ def destroy
49
+ @dlg.destroy
50
+ end
51
+
52
+ def recursive?
53
+ @flags[:recursive].active?
54
+ end
55
+
56
+ def verbose?
57
+ @flags[:verbose].active?
58
+ end
59
+ end
60
+
61
+ # vim: sw=2 sts=2 ts=8:
62
+
@@ -1,2 +1,2 @@
1
- APP_NAME = 'UNIX Commander'
2
- APP_VERSION = '0.1'
1
+ APP_NAME = 'unixcmd'
2
+ APP_VERSION = '0.2.1'