rfd 0.4.0 → 0.5.0
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 +1 -1
- data/lib/rfd.rb +40 -41
- data/lib/rfd/commands.rb +5 -3
- data/lib/rfd/item.rb +5 -1
- data/lib/rfd/windows.rb +83 -61
- data/rfd.gemspec +1 -2
- data/spec/controller_spec.rb +1 -1
- metadata +2 -17
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 34e313d8625f35c512be57647e3038e018d854b0
|
4
|
+
data.tar.gz: 0aeb62e0b57a4d965647e4f31e6a930e248d3385
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1b6e5d86f1c94a5164d10f2b660807abf654fc8e2f65a01c05ace52365319e3c0d62ecaa42ab101070bbb59ddbf3ef2f0851894682b6b315c7a8acf35fdc8765
|
7
|
+
data.tar.gz: ff9ee591f2a29eb16bf23c2e1196a9472dd2da45d3789c38c713bcea524421a318b8f4b84ee49101974772288113d67d10c95c0ff76a25c387e3d91306ff2bb2
|
data/README.md
CHANGED
@@ -10,7 +10,6 @@ rfd is a terminal-based filesystem explorer, inpsired by the legendary freesoft
|
|
10
10
|
|
11
11
|
* Ruby 2.0, Ruby 2.1
|
12
12
|
* NCurses
|
13
|
-
* (FFI)
|
14
13
|
|
15
14
|
## Tested environments
|
16
15
|
|
@@ -42,6 +41,7 @@ All available commands in rfd are defined as Ruby methods here. https://github.c
|
|
42
41
|
* `<Enter>`: cd into the directory where the cursor is on.
|
43
42
|
* `<Delete>` (or \<Backspace\> on your keyboard, probably?): Go up to the upper directory (cd ..).
|
44
43
|
* `-`: Get back to where you once belonged (popd).
|
44
|
+
* `@`: cd to a directory given via the command-line window.
|
45
45
|
|
46
46
|
### Moving the cursor
|
47
47
|
|
data/lib/rfd.rb
CHANGED
@@ -1,5 +1,4 @@
|
|
1
|
-
require '
|
2
|
-
Curses = FFI::NCurses
|
1
|
+
require 'curses'
|
3
2
|
require 'fileutils'
|
4
3
|
require 'tmpdir'
|
5
4
|
require 'rubygems/package'
|
@@ -14,19 +13,18 @@ module Rfd
|
|
14
13
|
|
15
14
|
# :nodoc:
|
16
15
|
def self.init_curses
|
17
|
-
Curses.
|
16
|
+
Curses.init_screen
|
18
17
|
Curses.raw
|
19
18
|
Curses.noecho
|
20
19
|
Curses.curs_set 0
|
21
|
-
Curses.keypad
|
20
|
+
Curses.stdscr.keypad = true
|
22
21
|
Curses.start_color
|
23
22
|
|
24
23
|
[Curses::COLOR_WHITE, Curses::COLOR_CYAN, Curses::COLOR_MAGENTA, Curses::COLOR_GREEN, Curses::COLOR_RED].each do |c|
|
25
24
|
Curses.init_pair c, c, Curses::COLOR_BLACK
|
26
25
|
end
|
27
26
|
|
28
|
-
Curses.mousemask Curses::
|
29
|
-
Curses.extend FFI::NCurses::Mouse
|
27
|
+
Curses.mousemask Curses::BUTTON1_CLICKED | Curses::BUTTON1_DOUBLE_CLICKED
|
30
28
|
end
|
31
29
|
|
32
30
|
# Start the app here!
|
@@ -35,9 +33,9 @@ module Rfd
|
|
35
33
|
# * +dir+ - The initial directory.
|
36
34
|
def self.start(dir = '.')
|
37
35
|
init_curses
|
36
|
+
Rfd::Window.draw_borders
|
38
37
|
rfd = Rfd::Controller.new
|
39
38
|
rfd.cd dir
|
40
|
-
rfd.ls
|
41
39
|
rfd
|
42
40
|
end
|
43
41
|
|
@@ -57,14 +55,13 @@ module Rfd
|
|
57
55
|
|
58
56
|
# The main loop.
|
59
57
|
def run
|
60
|
-
mouse_event = Curses::MEVENT.new
|
61
58
|
loop do
|
62
59
|
begin
|
63
60
|
number_pressed = false
|
64
|
-
case (c = Curses.getch)
|
65
|
-
when
|
61
|
+
case (c = Curses.getch).ord
|
62
|
+
when 10, 13 # enter, return
|
66
63
|
enter
|
67
|
-
when
|
64
|
+
when 27
|
68
65
|
q
|
69
66
|
when 32 # space
|
70
67
|
space
|
@@ -91,14 +88,16 @@ module Rfd
|
|
91
88
|
debug "key: #{c}" if ENV['DEBUG']
|
92
89
|
end
|
93
90
|
when Curses::KEY_MOUSE
|
94
|
-
if
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
91
|
+
if (mouse_event = Curses.getmouse)
|
92
|
+
case mouse_event.bstate
|
93
|
+
when Curses::BUTTON1_CLICKED
|
94
|
+
click y: mouse_event.y, x: mouse_event.x
|
95
|
+
when Curses::BUTTON1_DOUBLE_CLICKED
|
96
|
+
double_click y: mouse_event.y, x: mouse_event.x
|
99
97
|
end
|
100
98
|
end
|
101
99
|
else
|
100
|
+
raise c
|
102
101
|
debug "key: #{c}" if ENV['DEBUG']
|
103
102
|
end
|
104
103
|
@times = nil unless number_pressed
|
@@ -110,7 +109,7 @@ module Rfd
|
|
110
109
|
end
|
111
110
|
end
|
112
111
|
ensure
|
113
|
-
Curses.
|
112
|
+
Curses.close_screen
|
114
113
|
end
|
115
114
|
|
116
115
|
# Change the number of columns in the main window.
|
@@ -166,10 +165,11 @@ module Rfd
|
|
166
165
|
|
167
166
|
header_l.draw_current_file_info item
|
168
167
|
header_l.wrefresh
|
168
|
+
@current_row
|
169
169
|
end
|
170
170
|
|
171
171
|
# Change the current directory.
|
172
|
-
def cd(dir, pushd: true)
|
172
|
+
def cd(dir = '~', pushd: true)
|
173
173
|
dir = load_item expand_path(dir) unless dir.is_a? Item
|
174
174
|
unless dir.zip?
|
175
175
|
Dir.chdir dir
|
@@ -180,14 +180,12 @@ module Rfd
|
|
180
180
|
@dir_history << current_dir if current_dir && pushd
|
181
181
|
@current_dir, @current_page, @current_row = dir, 0, nil
|
182
182
|
main.activate_pane 0
|
183
|
+
ls
|
183
184
|
end
|
184
185
|
|
185
186
|
# cd to the previous directory.
|
186
187
|
def popd
|
187
|
-
if @dir_history.any?
|
188
|
-
cd @dir_history.pop, pushd: false
|
189
|
-
ls
|
190
|
-
end
|
188
|
+
cd @dir_history.pop, pushd: false if @dir_history.any?
|
191
189
|
end
|
192
190
|
|
193
191
|
# Fetch files from current directory.
|
@@ -259,7 +257,7 @@ module Rfd
|
|
259
257
|
@items = Dir.foreach(current_dir).map {|fn|
|
260
258
|
stat = File.lstat current_dir.join(fn)
|
261
259
|
Item.new dir: current_dir, name: fn, stat: stat, window_width: maxx
|
262
|
-
}.to_a
|
260
|
+
}.to_a.partition {|i| %w(. ..).include? i.name}.flatten
|
263
261
|
else
|
264
262
|
@items = [Item.new(dir: current_dir, name: '.', stat: File.stat(current_dir), window_width: maxx),
|
265
263
|
Item.new(dir: current_dir, name: '..', stat: File.stat(File.dirname(current_dir)), window_width: maxx)]
|
@@ -307,33 +305,31 @@ module Rfd
|
|
307
305
|
|
308
306
|
# Sort the loaded files and directories in already given sort order.
|
309
307
|
def sort_items_according_to_current_direction
|
310
|
-
@
|
311
|
-
@items.sort!
|
312
|
-
@items += case @direction
|
308
|
+
case @direction
|
313
309
|
when nil
|
314
|
-
|
310
|
+
@items = items.shift(2) + items.partition(&:directory?).flat_map(&:sort)
|
315
311
|
when 'r'
|
316
|
-
|
312
|
+
@items = items.shift(2) + items.partition(&:directory?).flat_map {|arr| arr.sort.reverse}
|
317
313
|
when 'S', 's'
|
318
|
-
|
314
|
+
@items = items.shift(2) + items.partition(&:directory?).flat_map {|arr| arr.sort_by {|i| -i.size}}
|
319
315
|
when 'Sr', 'sr'
|
320
|
-
|
316
|
+
@items = items.shift(2) + items.partition(&:directory?).flat_map {|arr| arr.sort_by(&:size)}
|
321
317
|
when 't'
|
322
|
-
|
318
|
+
@items = items.shift(2) + items.partition(&:directory?).flat_map {|arr| arr.sort {|x, y| y.mtime <=> x.mtime}}
|
323
319
|
when 'tr'
|
324
|
-
|
320
|
+
@items = items.shift(2) + items.partition(&:directory?).flat_map {|arr| arr.sort_by(&:mtime)}
|
325
321
|
when 'c'
|
326
|
-
|
322
|
+
@items = items.shift(2) + items.partition(&:directory?).flat_map {|arr| arr.sort {|x, y| y.ctime <=> x.ctime}}
|
327
323
|
when 'cr'
|
328
|
-
|
324
|
+
@items = items.shift(2) + items.partition(&:directory?).flat_map {|arr| arr.sort_by(&:ctime)}
|
329
325
|
when 'u'
|
330
|
-
|
326
|
+
@items = items.shift(2) + items.partition(&:directory?).flat_map {|arr| arr.sort {|x, y| y.atime <=> x.atime}}
|
331
327
|
when 'ur'
|
332
|
-
|
328
|
+
@items = items.shift(2) + items.partition(&:directory?).flat_map {|arr| arr.sort_by(&:atime)}
|
333
329
|
when 'e'
|
334
|
-
|
330
|
+
@items = items.shift(2) + items.partition(&:directory?).flat_map {|arr| arr.sort {|x, y| y.extname <=> x.extname}}
|
335
331
|
when 'er'
|
336
|
-
|
332
|
+
@items = items.shift(2) + items.partition(&:directory?).flat_map {|arr| arr.sort_by(&:extname)}
|
337
333
|
end
|
338
334
|
items.each.with_index {|item, index| item.index = index}
|
339
335
|
end
|
@@ -667,10 +663,10 @@ module Rfd
|
|
667
663
|
command_line.set_prompt prompt
|
668
664
|
command_line.wrefresh
|
669
665
|
while (c = Curses.getch)
|
670
|
-
next unless [
|
666
|
+
next unless [?N, ?Y, ?n, ?y, 3, 27] .include? c # N, Y, n, y, ^c, esc
|
671
667
|
command_line.wclear
|
672
668
|
command_line.wrefresh
|
673
|
-
break [
|
669
|
+
break %[Y y].include? c # Y, y
|
674
670
|
end
|
675
671
|
end
|
676
672
|
|
@@ -732,11 +728,14 @@ module Rfd
|
|
732
728
|
private
|
733
729
|
def execute_external_command(pause: false)
|
734
730
|
Curses.def_prog_mode
|
735
|
-
Curses.
|
731
|
+
Curses.close_screen
|
736
732
|
yield
|
737
733
|
ensure
|
738
734
|
Curses.reset_prog_mode
|
739
735
|
Curses.getch if pause
|
736
|
+
#NOTE needs to draw borders and ls again here since the stdlib Curses.refresh fails to retrieve the previous screen
|
737
|
+
Rfd::Window.draw_borders
|
738
|
+
ls
|
740
739
|
Curses.refresh
|
741
740
|
end
|
742
741
|
|
data/lib/rfd/commands.rb
CHANGED
@@ -245,6 +245,11 @@ module Rfd
|
|
245
245
|
process_command_line preset_command: 'grep'
|
246
246
|
end
|
247
247
|
|
248
|
+
# Change current directory (cd).
|
249
|
+
define_method('@') do
|
250
|
+
process_command_line preset_command: 'cd'
|
251
|
+
end
|
252
|
+
|
248
253
|
# Execute a shell command in an external shell.
|
249
254
|
define_method('!') do
|
250
255
|
process_shell_command
|
@@ -260,12 +265,10 @@ module Rfd
|
|
260
265
|
if current_item.name == '.' # do nothing
|
261
266
|
elsif current_item.name == '..'
|
262
267
|
cd '..'
|
263
|
-
ls
|
264
268
|
elsif in_zip?
|
265
269
|
v
|
266
270
|
elsif current_item.directory? || current_item.zip?
|
267
271
|
cd current_item
|
268
|
-
ls
|
269
272
|
else
|
270
273
|
v
|
271
274
|
end
|
@@ -283,7 +286,6 @@ module Rfd
|
|
283
286
|
def del
|
284
287
|
if current_dir.path != '/'
|
285
288
|
cd File.expand_path(current_dir.join(['..'] * times))
|
286
|
-
ls
|
287
289
|
end
|
288
290
|
end
|
289
291
|
|
data/lib/rfd/item.rb
CHANGED
data/lib/rfd/windows.rb
CHANGED
@@ -1,63 +1,88 @@
|
|
1
1
|
module Rfd
|
2
2
|
class Window
|
3
|
+
ACS_URCORNER = 4194411
|
4
|
+
ACS_LRCORNER = 4194410
|
5
|
+
ACS_ULCORNER = 4194412
|
6
|
+
ACS_LLCORNER = 4194413
|
7
|
+
ACS_HLINE = 4194417
|
8
|
+
ACS_LTEE = 4194420
|
9
|
+
ACS_RTEE = 4194421
|
10
|
+
ACS_BTEE = 4194422
|
11
|
+
ACS_TTEE = 4194423
|
12
|
+
ACS_VLINE = 4194424
|
13
|
+
|
3
14
|
attr_reader :window
|
4
15
|
|
5
|
-
def
|
6
|
-
Curses.
|
16
|
+
def self.draw_borders
|
17
|
+
Curses.attron Curses.color_pair(Curses::COLOR_CYAN) do
|
18
|
+
Curses.addch ACS_ULCORNER
|
19
|
+
(Curses.cols - 32).times { Curses.addch ACS_HLINE }
|
20
|
+
Curses.addch ACS_TTEE
|
21
|
+
29.times { Curses.addch ACS_HLINE }
|
22
|
+
Curses.addch ACS_URCORNER
|
23
|
+
|
24
|
+
[*1..3, *5..(Curses.lines - 3)].each do |i|
|
25
|
+
Curses.setpos i, 0
|
26
|
+
Curses.addch ACS_VLINE
|
27
|
+
Curses.setpos i, Curses.cols - 1
|
28
|
+
Curses.addch ACS_VLINE
|
29
|
+
end
|
30
|
+
[1, 2, 3].each do |i|
|
31
|
+
Curses.setpos i, Curses.cols - 31
|
32
|
+
Curses.addch ACS_VLINE
|
33
|
+
end
|
34
|
+
|
35
|
+
Curses.setpos 4, 0
|
36
|
+
Curses.addch ACS_LTEE
|
37
|
+
(Curses.cols - 32).times { Curses.addch ACS_HLINE }
|
38
|
+
Curses.addch ACS_BTEE
|
39
|
+
29.times { Curses.addch ACS_HLINE }
|
40
|
+
Curses.addch ACS_RTEE
|
41
|
+
|
42
|
+
Curses.setpos Curses.lines - 2, 0
|
43
|
+
Curses.addch ACS_LLCORNER
|
44
|
+
(Curses.cols - 2).times { Curses.addch ACS_HLINE }
|
45
|
+
Curses.addch ACS_LRCORNER
|
46
|
+
end
|
7
47
|
end
|
8
48
|
|
9
|
-
def
|
10
|
-
|
11
|
-
Curses.waddstr window, str
|
49
|
+
def wmove(y, x = 0)
|
50
|
+
window.setpos y, x
|
12
51
|
end
|
13
52
|
|
14
|
-
def
|
15
|
-
|
53
|
+
def waddstr(str, clear_to_eol_before_add: false)
|
54
|
+
window.clrtoeol if clear_to_eol_before_add
|
55
|
+
window.addstr str
|
16
56
|
end
|
17
57
|
|
18
58
|
def wclear
|
19
|
-
|
59
|
+
window.clear
|
20
60
|
end
|
21
61
|
|
22
62
|
def wrefresh
|
23
|
-
|
63
|
+
window.refresh
|
24
64
|
end
|
25
65
|
|
26
66
|
def maxx
|
27
|
-
|
67
|
+
window.maxx
|
28
68
|
end
|
29
69
|
|
30
70
|
def maxy
|
31
|
-
|
71
|
+
window.maxy
|
32
72
|
end
|
33
73
|
|
34
74
|
def begx
|
35
|
-
|
75
|
+
window.begx
|
36
76
|
end
|
37
77
|
|
38
78
|
def begy
|
39
|
-
|
40
|
-
end
|
41
|
-
|
42
|
-
def subwin(height, width, top, left)
|
43
|
-
Curses.derwin Curses.stdscr, height, width, top, left
|
44
|
-
end
|
45
|
-
|
46
|
-
def wclrtoeol
|
47
|
-
Curses.wclrtoeol window
|
48
|
-
end
|
49
|
-
|
50
|
-
def draw_border(*border_param)
|
51
|
-
border_window = subwin maxy + 2, maxx + 2, begy - 1, begx - 1
|
52
|
-
Curses.wbkgd border_window, Curses.COLOR_PAIR(Curses::COLOR_CYAN)
|
53
|
-
Curses.wborder border_window, *border_param
|
79
|
+
window.begy
|
54
80
|
end
|
55
81
|
end
|
56
82
|
|
57
83
|
class HeaderLeftWindow < Window
|
58
84
|
def initialize
|
59
|
-
@window = subwin 3, Curses.
|
60
|
-
draw_border 0, 0, 0, 0, 0, 0, Curses::ACS_LTEE, 0
|
85
|
+
@window = Curses.stdscr.subwin 3, Curses.cols - 32, 1, 1
|
61
86
|
end
|
62
87
|
|
63
88
|
def draw_path_and_page_number(path: nil, current: 1, total: nil)
|
@@ -87,8 +112,7 @@ module Rfd
|
|
87
112
|
|
88
113
|
class HeaderRightWindow < Window
|
89
114
|
def initialize
|
90
|
-
@window = subwin 3, 29, 1, Curses.
|
91
|
-
draw_border 0, 0, 0, 0, Curses::ACS_TTEE, 0, Curses::ACS_BTEE, Curses::ACS_RTEE
|
115
|
+
@window = Curses.stdscr.subwin 3, 29, 1, Curses.cols - 30
|
92
116
|
end
|
93
117
|
|
94
118
|
def draw_marked_items(count: 0, size: 0)
|
@@ -104,7 +128,7 @@ module Rfd
|
|
104
128
|
|
105
129
|
def debug(s)
|
106
130
|
wmove 0, 0
|
107
|
-
|
131
|
+
window.clrtoeol
|
108
132
|
waddstr s.to_s
|
109
133
|
wrefresh
|
110
134
|
end
|
@@ -139,28 +163,24 @@ module Rfd
|
|
139
163
|
|
140
164
|
def close_all
|
141
165
|
@panes.each do |p|
|
142
|
-
|
143
|
-
|
166
|
+
p.clear
|
167
|
+
p.close
|
144
168
|
end
|
145
169
|
end
|
146
170
|
|
147
171
|
def include_point?(pane: pane, y: nil, x: nil)
|
148
|
-
(y >=
|
172
|
+
(y >= pane.begy) && (pane.begy + pane.maxy > y) && (x >= pane.begx) && (pane.begx + pane.maxx > x)
|
149
173
|
end
|
150
174
|
end
|
151
175
|
|
152
176
|
def initialize(dir = '.')
|
153
|
-
border_window = subwin Curses.LINES - 5, Curses.COLS, 4, 0
|
154
|
-
Curses.wbkgd border_window, Curses::COLOR_PAIR(Curses::COLOR_CYAN)
|
155
|
-
Curses.box border_window, 0, 0
|
156
|
-
|
157
177
|
spawn_panes 2
|
158
178
|
end
|
159
179
|
|
160
180
|
def spawn_panes(num)
|
161
181
|
@panes.close_all if defined? @panes
|
162
|
-
width = (Curses.
|
163
|
-
windows = 0.upto(num - 1).inject([]) {|arr, i| arr << subwin(Curses.
|
182
|
+
width = (Curses.cols - 2) / num
|
183
|
+
windows = 0.upto(num - 1).inject([]) {|arr, i| arr << Curses.stdscr.subwin(Curses.lines - 7, width - 1, 5, width * i + 1)}
|
164
184
|
@panes = Panes.new windows
|
165
185
|
activate_pane 0
|
166
186
|
end
|
@@ -182,9 +202,10 @@ module Rfd
|
|
182
202
|
end
|
183
203
|
|
184
204
|
def draw_item(item, current: false)
|
185
|
-
|
186
|
-
|
187
|
-
|
205
|
+
window.setpos item.index % maxy, 0
|
206
|
+
window.attron(Curses.color_pair(item.color) | (current ? Curses::A_UNDERLINE : Curses::A_NORMAL)) do
|
207
|
+
window.addstr "#{item.to_s}\n"
|
208
|
+
end
|
188
209
|
wrefresh
|
189
210
|
end
|
190
211
|
|
@@ -196,50 +217,51 @@ module Rfd
|
|
196
217
|
wclear
|
197
218
|
wmove 0
|
198
219
|
items[maxy * index, maxy * (index + 1)].each do |item|
|
199
|
-
Curses.
|
200
|
-
waddstr "#{item.to_s}\n"
|
220
|
+
window.attron(Curses.color_pair(item.color) | Curses::A_NORMAL) { waddstr "#{item.to_s}\n" }
|
201
221
|
end if items[maxy * index, maxy * (index + 1)]
|
202
|
-
Curses.wstandend window
|
203
222
|
wrefresh
|
204
223
|
end
|
205
224
|
activate_pane original_active_pane_index
|
206
225
|
end
|
207
226
|
|
208
227
|
def toggle_mark(item)
|
209
|
-
|
228
|
+
if item.toggle_mark
|
229
|
+
window.setpos item.index % maxy, 0
|
230
|
+
window.addstr item.current_mark
|
231
|
+
end
|
210
232
|
end
|
211
233
|
end
|
212
234
|
|
213
235
|
class CommandLineWindow < Window
|
214
236
|
def initialize
|
215
|
-
@window = subwin 1, Curses.
|
237
|
+
@window = Curses.stdscr.subwin 1, Curses.cols, Curses.lines - 1, 0
|
216
238
|
end
|
217
239
|
|
218
240
|
def set_prompt(str)
|
219
|
-
Curses.
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
241
|
+
window.attron(Curses.color_pair(Curses::COLOR_WHITE) | Curses::A_BOLD) do
|
242
|
+
wmove 0
|
243
|
+
window.clrtoeol
|
244
|
+
waddstr str
|
245
|
+
end
|
224
246
|
end
|
225
247
|
|
226
248
|
def get_command(prompt: nil)
|
227
249
|
Curses.echo
|
228
250
|
startx = prompt ? prompt.size : 1
|
229
|
-
|
230
|
-
|
251
|
+
window.setpos 0, startx
|
252
|
+
s = window.getstr
|
231
253
|
"#{prompt[1..-1] if prompt}#{s.strip}"
|
232
254
|
ensure
|
233
255
|
Curses.noecho
|
234
256
|
end
|
235
257
|
|
236
258
|
def show_error(str)
|
237
|
-
Curses.
|
238
|
-
|
239
|
-
|
240
|
-
|
259
|
+
window.attron(Curses.color_pair(Curses::COLOR_RED) | Curses::A_BOLD) do
|
260
|
+
wmove 0
|
261
|
+
window.clrtoeol
|
262
|
+
waddstr str
|
263
|
+
end
|
241
264
|
wrefresh
|
242
|
-
Curses.wstandend window
|
243
265
|
end
|
244
266
|
end
|
245
267
|
end
|
data/rfd.gemspec
CHANGED
@@ -4,7 +4,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
4
|
|
5
5
|
Gem::Specification.new do |spec|
|
6
6
|
spec.name = "rfd"
|
7
|
-
spec.version = '0.
|
7
|
+
spec.version = '0.5.0'
|
8
8
|
spec.authors = ["Akira Matsuda"]
|
9
9
|
spec.email = ["ronnie@dio.jp"]
|
10
10
|
spec.description = 'Ruby on Files & Directories'
|
@@ -17,7 +17,6 @@ Gem::Specification.new do |spec|
|
|
17
17
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
18
18
|
spec.require_paths = ["lib"]
|
19
19
|
|
20
|
-
spec.add_dependency 'ffi-ncurses'
|
21
20
|
spec.add_dependency 'rubyzip', '>= 1.0.0'
|
22
21
|
spec.add_development_dependency "bundler", "~> 1.3"
|
23
22
|
spec.add_development_dependency "rake"
|
data/spec/controller_spec.rb
CHANGED
metadata
CHANGED
@@ -1,29 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rfd
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Akira Matsuda
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-10-
|
11
|
+
date: 2013-10-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
-
- !ruby/object:Gem::Dependency
|
14
|
-
name: ffi-ncurses
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - '>='
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: '0'
|
20
|
-
type: :runtime
|
21
|
-
prerelease: false
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
-
requirements:
|
24
|
-
- - '>='
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: '0'
|
27
13
|
- !ruby/object:Gem::Dependency
|
28
14
|
name: rubyzip
|
29
15
|
requirement: !ruby/object:Gem::Requirement
|
@@ -152,4 +138,3 @@ test_files:
|
|
152
138
|
- spec/testdir/link1
|
153
139
|
- spec/testdir/link2
|
154
140
|
- spec/testdir/zip1.zip
|
155
|
-
has_rdoc:
|