cygnus 0.0.2 → 0.0.3
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/bin/cygnus +53 -22
- data/lib/cygnus.rb +54 -0
- data/lib/cygnus/version.rb +1 -1
- metadata +4 -4
data/bin/cygnus
CHANGED
@@ -8,17 +8,18 @@
|
|
8
8
|
# Author: rkumar http://github.com/rkumar/mancurses/
|
9
9
|
# Date: 2011-11-09 - 16:59
|
10
10
|
# License: Same as Ruby's License (http://www.ruby-lang.org/LICENSE.txt)
|
11
|
-
# Last update: 2013-03-19
|
11
|
+
# Last update: 2013-03-19 14:02
|
12
12
|
#
|
13
13
|
# == CHANGES
|
14
14
|
# == BUGS
|
15
|
-
#
|
16
|
-
#
|
17
|
-
#
|
15
|
+
# x we have overridden textpad bindings yet they show / n gg etc.
|
16
|
+
# _ show form bindings too
|
17
|
+
# x our bindings from the hash do not show up..
|
18
18
|
# _ white line at bottom and right
|
19
19
|
#
|
20
20
|
# == TODO
|
21
21
|
#
|
22
|
+
# _ use BS to cycle files visited as in mancurses
|
22
23
|
# _ show how many files 1-5 or 15 etc
|
23
24
|
# _ toggle edit mode and view mode
|
24
25
|
# _ long listing toggle + other toggles
|
@@ -383,24 +384,6 @@ def full_indexed_list dir=Dir.pwd, config={}, &block
|
|
383
384
|
#alert "char got (#{ch.chr})"
|
384
385
|
chr = ch.chr
|
385
386
|
select_hint $viewport, chr
|
386
|
-
#ix = get_index chr
|
387
|
-
#if ix
|
388
|
-
#file = $viewport[ix]
|
389
|
-
#if file
|
390
|
-
#file = File.expand_path file
|
391
|
-
#if File.directory? file
|
392
|
-
#change_dir file
|
393
|
-
#next
|
394
|
-
#elsif File.file? file
|
395
|
-
#pad_display_file file, DefaultFileRenderer.new
|
396
|
-
#next
|
397
|
-
#else
|
398
|
-
#alert "Some new error has crept in. Neither file not directory: (#{file})"
|
399
|
-
#$log.warn "XXXXX: FILE Neither file not directory: (#{file})"
|
400
|
-
#end
|
401
|
-
#end
|
402
|
-
#else
|
403
|
-
#end
|
404
387
|
next
|
405
388
|
end
|
406
389
|
|
@@ -487,6 +470,11 @@ def pad_display_file filename, renderer, config={}, &block
|
|
487
470
|
window = VER::Window.new(layout)
|
488
471
|
form = RubyCurses::Form.new window
|
489
472
|
|
473
|
+
# maintain a stack of filename so we can backspace through them
|
474
|
+
fn = filename
|
475
|
+
fn = "#{Dir.pwd}/#{filename}" unless filename[0] == "/"
|
476
|
+
@file_stack << fn unless @file_stack.include? fn
|
477
|
+
|
490
478
|
listconfig = config[:listconfig] || {}
|
491
479
|
#listconfig[:list] = list
|
492
480
|
listconfig[:width] = width
|
@@ -518,9 +506,48 @@ def pad_display_file filename, renderer, config={}, &block
|
|
518
506
|
begin
|
519
507
|
while((ch = window.getchar()) != 999 )
|
520
508
|
|
509
|
+
# we need to show bindings if user does ? or M-?
|
521
510
|
case ch
|
511
|
+
|
512
|
+
when ?\C-j.getbyte(0), ?\C-n.getbyte(0)
|
513
|
+
# jump to next file so user does not need to go out and in again
|
514
|
+
$cursor += 1
|
515
|
+
if $view[$cursor]
|
516
|
+
_f = $view[$cursor]
|
517
|
+
lb.text(get_file_contents(_f))
|
518
|
+
lb.title(_f)
|
519
|
+
form.repaint
|
520
|
+
next
|
521
|
+
end
|
522
|
+
|
523
|
+
when ?\C-k.getbyte(0), ?\C-p.getbyte(0)
|
524
|
+
# jump to previous file so user does not need to go out and in again
|
525
|
+
$cursor -= 1
|
526
|
+
if $view[$cursor]
|
527
|
+
_f = $view[$cursor]
|
528
|
+
lb.text(get_file_contents(_f))
|
529
|
+
lb.title(_f)
|
530
|
+
form.repaint
|
531
|
+
next
|
532
|
+
end
|
522
533
|
when ?q.getbyte(0), ?\C-q.getbyte(0), 13, 10, 27, 2727
|
534
|
+
# close window on q or enter or double escape
|
523
535
|
break
|
536
|
+
when 127
|
537
|
+
# hitting backspace cycles through list of files viewed
|
538
|
+
# FIXME first time we have to hit BS 2 times since we get same file we are viewing
|
539
|
+
_f = @file_stack.pop
|
540
|
+
if _f
|
541
|
+
# push it to first
|
542
|
+
@file_stack.insert 0, _f
|
543
|
+
#lb.filename(_f)
|
544
|
+
lb.text(get_file_contents(_f))
|
545
|
+
form.repaint
|
546
|
+
next
|
547
|
+
else
|
548
|
+
#alert "No file to pop"
|
549
|
+
end
|
550
|
+
|
524
551
|
else
|
525
552
|
lb.handle_key ch
|
526
553
|
form.repaint
|
@@ -649,6 +676,7 @@ end
|
|
649
676
|
return ix
|
650
677
|
end
|
651
678
|
@dir_stack = []
|
679
|
+
@file_stack = []
|
652
680
|
def change_dir dir, filename=nil
|
653
681
|
@dir_stack << Dir.pwd unless @dir_stack.include? Dir.pwd
|
654
682
|
$sta = $cursor = 0
|
@@ -723,6 +751,7 @@ end
|
|
723
751
|
elsif text =~ /(archive|zip)/
|
724
752
|
return :zip
|
725
753
|
else
|
754
|
+
return :directory if File.directory? f
|
726
755
|
return :unknown
|
727
756
|
end
|
728
757
|
end
|
@@ -747,6 +776,8 @@ end
|
|
747
776
|
return t
|
748
777
|
when :zip
|
749
778
|
return `tar ztvf #{f}`.split("\n")
|
779
|
+
when :directory
|
780
|
+
return Dir.glob("*")
|
750
781
|
else
|
751
782
|
return ["unknown type", `file #{f}`]
|
752
783
|
end
|
data/lib/cygnus.rb
CHANGED
@@ -186,8 +186,42 @@ def columnate_with_indexing ary, sz
|
|
186
186
|
end
|
187
187
|
return buff
|
188
188
|
end
|
189
|
+
# print in columns
|
190
|
+
# ary - array of data
|
191
|
+
# sz - lines in one column
|
192
|
+
# This is the original which did not format or color, but since we cannot truncate unless
|
193
|
+
# we have unformatted data i need to mix the functionality into columnate_with_indexing
|
194
|
+
def columnate ary, sz
|
195
|
+
buff=Array.new
|
196
|
+
return buff if ary.nil? || ary.size == 0
|
197
|
+
|
198
|
+
# ix refers to the index in the complete file list, wherease we only show 60 at a time
|
199
|
+
ix=0
|
200
|
+
while true
|
201
|
+
## ctr refers to the index in the column
|
202
|
+
ctr=0
|
203
|
+
while ctr < sz
|
204
|
+
|
205
|
+
f = ary[ix]
|
206
|
+
# deleted truncate and pad part since we expect cols to be sized same
|
207
|
+
|
208
|
+
if buff[ctr]
|
209
|
+
buff[ctr] += f
|
210
|
+
else
|
211
|
+
buff[ctr] = f
|
212
|
+
end
|
213
|
+
|
214
|
+
ctr+=1
|
215
|
+
ix+=1
|
216
|
+
break if ix >= ary.size
|
217
|
+
end
|
218
|
+
break if ix >= ary.size
|
219
|
+
end
|
220
|
+
return buff
|
221
|
+
end
|
189
222
|
## formats the data with number, mark and details
|
190
223
|
def format ary
|
224
|
+
alert "deprecated, can be removed if not called"
|
191
225
|
#buff = Array.new
|
192
226
|
buff = Array.new(ary.size)
|
193
227
|
return buff if ary.nil? || ary.size == 0
|
@@ -443,6 +477,26 @@ def show_marks
|
|
443
477
|
#ch = get_char
|
444
478
|
goto_bookmark(ch) if ch =~ /^[0-9A-Z]$/
|
445
479
|
end
|
480
|
+
def print_help
|
481
|
+
h = @bindings
|
482
|
+
row = 1
|
483
|
+
list = []
|
484
|
+
longestval = h.values.max_by(&:length)
|
485
|
+
llen = longestval.length
|
486
|
+
# they must all be of same size so i can easily columnate
|
487
|
+
h.each_pair { |k, v| list << " #[fg=yellow, bold]#{k.ljust(6)}#[/end] #[fg=green]#{v.ljust(llen)}#[/end]" }
|
488
|
+
lines = FFI::NCurses.LINES - row
|
489
|
+
list = columnate list, lines - 2
|
490
|
+
config = {}
|
491
|
+
config[:row] = row
|
492
|
+
config[:col] = 1
|
493
|
+
config[:title] = "Key Bindings"
|
494
|
+
#config[:width] = [longestval.length + 5, FFI::NCurses.COLS - 5].min
|
495
|
+
config[:width] = FFI::NCurses.COLS - config[:col]
|
496
|
+
config[:height] = lines
|
497
|
+
ch = padpopup list, config
|
498
|
+
return unless ch
|
499
|
+
end
|
446
500
|
# MENU MAIN -- keep consistent with zfm
|
447
501
|
def main_menu
|
448
502
|
h = {
|
data/lib/cygnus/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cygnus
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-03-
|
12
|
+
date: 2013-03-19 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|
@@ -76,7 +76,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
76
76
|
version: '0'
|
77
77
|
segments:
|
78
78
|
- 0
|
79
|
-
hash: -
|
79
|
+
hash: -4394376758347789343
|
80
80
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
81
81
|
none: false
|
82
82
|
requirements:
|
@@ -85,7 +85,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
85
85
|
version: '0'
|
86
86
|
segments:
|
87
87
|
- 0
|
88
|
-
hash: -
|
88
|
+
hash: -4394376758347789343
|
89
89
|
requirements: []
|
90
90
|
rubyforge_project:
|
91
91
|
rubygems_version: 1.8.25
|