unixcmd 0.1.0 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
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'