cetus 0.1.7 → 0.1.8
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/README.md +10 -0
- data/bin/cetus +133 -9
- data/cetus.gemspec +1 -1
- metadata +4 -4
data/README.md
CHANGED
@@ -53,6 +53,8 @@ Other than using bookmarks, you can jump quickly to other directories or open fi
|
|
53
53
|
|
54
54
|
* Use slash "/" to run a regex on the dir listing.
|
55
55
|
|
56
|
+
* Use question "?" view directory tree in order to jump down several levels at once
|
57
|
+
|
56
58
|
* Use ESCAPE or C-c to clear any filter, regex, sort order, sub-listing etc
|
57
59
|
|
58
60
|
* TAB switches between various views such as order by modified time, order by access time, dirs only, oldest files etc.
|
@@ -63,8 +65,16 @@ Other than using bookmarks, you can jump quickly to other directories or open fi
|
|
63
65
|
|
64
66
|
* Use BACKTICK "a" for using `ack` in the current dir. Then you can select from listed files and edit or do whatever. Similarly, BACKTICK "l" for running `locate`, and BACKTICK "/" for running `find`.
|
65
67
|
|
68
|
+
* For small projects with more directories and few files, traversal can be a pain. Now, `dirtree` gives directory tree, and tree gives the entire tree of files and dirs to get to a file deep within instantly. Dirtree is mapped to BACKTICK-t and F3. Tree is mapped to BACKTICK-4 and F4.
|
69
|
+
Thus, F2 gives only child dirs in current dir, F3 gives recursive directories and F4 gives the entire tree.
|
70
|
+
|
66
71
|
* Note that I use readline for most entries, so you can press UP arrow to get previous entries.
|
67
72
|
|
73
|
+
* A new enhanced list mode (Which can be toggled off), which tries to add more files to the list if there are very few shown:
|
74
|
+
- it detects a rubygem dir and shows a few recent files from bin and lib
|
75
|
+
- if there's only one file in the dir and it is a dir, it expands it
|
76
|
+
- if there are less than 15 files in list, it gets the recently modified and recently accessed
|
77
|
+
dir/s and shows the most recent file from each.
|
68
78
|
|
69
79
|
## Requirements ##
|
70
80
|
|
data/bin/cetus
CHANGED
@@ -6,9 +6,13 @@
|
|
6
6
|
# Author: rkumar http://github.com/rkumar/cetus/
|
7
7
|
# Date: 2013-02-17 - 17:48
|
8
8
|
# License: GPL
|
9
|
-
# Last update: 2013-03-
|
9
|
+
# Last update: 2013-03-11 18:30
|
10
10
|
# ----------------------------------------------------------------------------- #
|
11
11
|
# cetus.rb Copyright (C) 2012-2013 rahul kumar
|
12
|
+
# == TODO
|
13
|
+
# To dirs add GEMHOME RUBYLIB PYTHONILB or PYTHONPATH,
|
14
|
+
# Make rubygem aware : gemspec or Gemfile the expand lib and bin
|
15
|
+
# fpath if existing
|
12
16
|
require 'readline'
|
13
17
|
require 'io/wait'
|
14
18
|
# http://www.ruby-doc.org/stdlib-1.9.3/libdoc/shellwords/rdoc/Shellwords.html
|
@@ -71,7 +75,9 @@ $bindings = {
|
|
71
75
|
|
72
76
|
"M-?" => "print_help",
|
73
77
|
"F1" => "print_help",
|
74
|
-
"F2" => "child_dirs"
|
78
|
+
"F2" => "child_dirs",
|
79
|
+
"F3" => "dirtree",
|
80
|
+
"F4" => "tree"
|
75
81
|
|
76
82
|
}
|
77
83
|
|
@@ -187,6 +193,7 @@ $gviscols = 3
|
|
187
193
|
$pagesize = $grows * $gviscols
|
188
194
|
$stact = 0
|
189
195
|
$editor_mode = true
|
196
|
+
$enhanced_mode = true
|
190
197
|
$visual_block_start = nil
|
191
198
|
$pager_command = {
|
192
199
|
:text => 'most',
|
@@ -221,7 +228,8 @@ $visited_files = []
|
|
221
228
|
$visited_dirs = []
|
222
229
|
## dirs where some work has been done, for saving and restoring
|
223
230
|
$used_dirs = []
|
224
|
-
$
|
231
|
+
$default_sort_order = "om"
|
232
|
+
$sorto = $default_sort_order
|
225
233
|
$viewctr = 0
|
226
234
|
$history = []
|
227
235
|
$sta = $cursor = 0
|
@@ -235,7 +243,8 @@ def run()
|
|
235
243
|
home=ENV['HOME']
|
236
244
|
ctr=0
|
237
245
|
config_read
|
238
|
-
$files = `zsh -c 'print -rl -- *(#{$hidden}M)'`.split("\n")
|
246
|
+
$files = `zsh -c 'print -rl -- *(#{$sorto}#{$hidden}M)'`.split("\n")
|
247
|
+
enhance_file_list
|
239
248
|
fl=$files.size
|
240
249
|
|
241
250
|
selectedix = nil
|
@@ -584,6 +593,7 @@ end
|
|
584
593
|
# such as visited dirs or files
|
585
594
|
def escape
|
586
595
|
$sorto = nil
|
596
|
+
$sorto = $default_sort_order
|
587
597
|
$viewctr = 0
|
588
598
|
$title = nil
|
589
599
|
$filterstr = "M"
|
@@ -753,7 +763,9 @@ def main_menu
|
|
753
763
|
:v => :viminfo,
|
754
764
|
:z => :z_interface,
|
755
765
|
:d => :child_dirs,
|
766
|
+
:r => :recent_files,
|
756
767
|
:t => :dirtree,
|
768
|
+
"4" => :tree,
|
757
769
|
:s => :sort_menu,
|
758
770
|
:F => :filter_menu,
|
759
771
|
:c => :command_menu ,
|
@@ -764,10 +776,6 @@ def main_menu
|
|
764
776
|
}
|
765
777
|
menu "Main Menu", h
|
766
778
|
end
|
767
|
-
def toggle_menu
|
768
|
-
h = { :h => :toggle_hidden, :c => :toggle_case, :l => :toggle_long_list , "1" => :toggle_columns}
|
769
|
-
menu "Toggle Menu", h
|
770
|
-
end
|
771
779
|
def menu title, h
|
772
780
|
return unless h
|
773
781
|
|
@@ -784,7 +792,8 @@ def menu title, h
|
|
784
792
|
return ch, binding
|
785
793
|
end
|
786
794
|
def toggle_menu
|
787
|
-
h = { :h => :toggle_hidden, :c => :toggle_case, :l => :toggle_long_list , "1" => :toggle_columns
|
795
|
+
h = { :h => :toggle_hidden, :c => :toggle_case, :l => :toggle_long_list , "1" => :toggle_columns,
|
796
|
+
:p => :toggle_pager_mode, :e => :toggle_enhanced_list}
|
788
797
|
ch, menu_text = menu "Toggle Menu", h
|
789
798
|
case menu_text
|
790
799
|
when :toggle_hidden
|
@@ -799,6 +808,16 @@ def toggle_menu
|
|
799
808
|
#$long_listing = false if $gviscols > 1
|
800
809
|
x = $grows * $gviscols
|
801
810
|
$pagesize = $pagesize==x ? $grows : x
|
811
|
+
when :toggle_pager_mode
|
812
|
+
$editor_mode = !$editor_mode
|
813
|
+
if $editor_mode
|
814
|
+
$default_command = nil
|
815
|
+
else
|
816
|
+
$default_command = ENV['MANPAGER'] || ENV['PAGER']
|
817
|
+
end
|
818
|
+
when :toggle_enhanced_list
|
819
|
+
$enhanced_mode = !$enhanced_mode
|
820
|
+
|
802
821
|
when :toggle_long_list
|
803
822
|
$long_listing = !$long_listing
|
804
823
|
if $long_listing
|
@@ -974,6 +993,8 @@ def post_cd
|
|
974
993
|
$visual_block_start = nil
|
975
994
|
$stact = 0
|
976
995
|
screen_settings
|
996
|
+
# i think this will screw with the dir_pos since it is not filename based.
|
997
|
+
enhance_file_list
|
977
998
|
revert_dir_pos
|
978
999
|
end
|
979
1000
|
#
|
@@ -1094,6 +1115,19 @@ def dirtree
|
|
1094
1115
|
$title = "Child directories"
|
1095
1116
|
$files = `zsh -c 'print -rl -- **/*(/#{$sorto}#{$hidden}M)'`.split("\n")
|
1096
1117
|
end
|
1118
|
+
#
|
1119
|
+
# Get a full recursive listing of what's in this dir - useful for small projects with more
|
1120
|
+
# structure than files.
|
1121
|
+
def tree
|
1122
|
+
# Caution: use only for small projects, don't use in root.
|
1123
|
+
$title = "Full Tree"
|
1124
|
+
$files = `zsh -c 'print -rl -- **/*(#{$sorto}#{$hidden}M)'`.split("\n")
|
1125
|
+
end
|
1126
|
+
def recent_files
|
1127
|
+
# print -rl -- **/*(Dom[1,10])
|
1128
|
+
$title = "Recent files"
|
1129
|
+
$files = `zsh -c 'print -rl -- **/*(Dom[1,15])'`.split("\n")
|
1130
|
+
end
|
1097
1131
|
def select_current
|
1098
1132
|
## vp is local there, so i can do $vp[0]
|
1099
1133
|
#open_file $view[$sta] if $view[$sta]
|
@@ -1561,6 +1595,7 @@ def newfile
|
|
1561
1595
|
end
|
1562
1596
|
|
1563
1597
|
##
|
1598
|
+
# Editing of the User Dir List.
|
1564
1599
|
# remove current entry from used dirs list, since we may not want some entries being there
|
1565
1600
|
#
|
1566
1601
|
def remove_from_list
|
@@ -1590,5 +1625,94 @@ def remove_from_list
|
|
1590
1625
|
refresh
|
1591
1626
|
$modified = true
|
1592
1627
|
end
|
1628
|
+
#
|
1629
|
+
# If there's a short file list, take recently mod and accessed folders and put latest
|
1630
|
+
# files from there and insert it here. I take both since recent mod can be binaries / object
|
1631
|
+
# files and gems created by a process, and not actually edited files. Recent accessed gives
|
1632
|
+
# latest source, but in some cases even this can be misleading since running a program accesses
|
1633
|
+
# include files.
|
1634
|
+
def enhance_file_list
|
1635
|
+
return unless $enhanced_mode
|
1636
|
+
# if only one entry and its a dir
|
1637
|
+
# get its children and maybe the recent mod files a few
|
1638
|
+
|
1639
|
+
if $files.size == 1
|
1640
|
+
# its a dir, let give the next level at least
|
1641
|
+
if $files.first[-1] == "/"
|
1642
|
+
d = $files.first
|
1643
|
+
f = `zsh -c 'print -rl -- #{d}*(omM)'`.split("\n")
|
1644
|
+
if f && f.size > 0
|
1645
|
+
$files.concat f
|
1646
|
+
return
|
1647
|
+
end
|
1648
|
+
else
|
1649
|
+
# just a file, not dirs here
|
1650
|
+
return
|
1651
|
+
end
|
1652
|
+
end
|
1653
|
+
#
|
1654
|
+
# check if a ruby project dir, although it could be a backup file too,
|
1655
|
+
# if so , expand lib and maby bin, put a couple recent files
|
1656
|
+
#
|
1657
|
+
if $files.index("Gemfile") || $files.grep(/\.gemspec/).size > 0
|
1658
|
+
# usually the lib dir has only one file and one dir
|
1659
|
+
flg = false
|
1660
|
+
if $files.index("lib/")
|
1661
|
+
f = `zsh -c 'print -rl -- lib/*(om[1,5]M)'`.split("\n")
|
1662
|
+
if f && f.size() > 0
|
1663
|
+
insert_into_list("lib/", f)
|
1664
|
+
flg = true
|
1665
|
+
end
|
1666
|
+
dd = File.basename(Dir.pwd)
|
1667
|
+
if f.index("lib/#{dd}/")
|
1668
|
+
f = `zsh -c 'print -rl -- lib/#{dd}/*(om[1,5]M)'`.split("\n")
|
1669
|
+
if f && f.size() > 0
|
1670
|
+
insert_into_list("lib/#{dd}/", f)
|
1671
|
+
flg = true
|
1672
|
+
end
|
1673
|
+
end
|
1674
|
+
end
|
1675
|
+
if $files.index("bin/")
|
1676
|
+
f = `zsh -c 'print -rl -- bin/*(om[1,5]M)'`.split("\n")
|
1677
|
+
insert_into_list("bin/", f) if f && f.size() > 0
|
1678
|
+
flg = true
|
1679
|
+
end
|
1680
|
+
return if flg
|
1681
|
+
|
1682
|
+
# lib has a dir in it with the gem name
|
1683
|
+
|
1684
|
+
end
|
1685
|
+
return if $files.size > 15
|
1686
|
+
|
1687
|
+
## first check accessed else modified will change accessed
|
1688
|
+
moda = `zsh -c 'print -rn -- *(/oa[1]M)'`
|
1689
|
+
if moda && moda != ""
|
1690
|
+
modf = `zsh -c 'print -rn -- #{moda}*(oa[1]M)'`
|
1691
|
+
if modf && modf != ""
|
1692
|
+
insert_into_list moda, modf
|
1693
|
+
end
|
1694
|
+
modm = `zsh -c 'print -rn -- #{moda}*(om[1]M)'`
|
1695
|
+
if modm && modm != "" && modm != modf
|
1696
|
+
insert_into_list moda, modm
|
1697
|
+
end
|
1698
|
+
end
|
1699
|
+
## get last modified dir
|
1700
|
+
modm = `zsh -c 'print -rn -- *(/om[1]M)'`
|
1701
|
+
if modm != moda
|
1702
|
+
modmf = `zsh -c 'print -rn -- #{modm}*(oa[1]M)'`
|
1703
|
+
insert_into_list modm, modmf
|
1704
|
+
modmf1 = `zsh -c 'print -rn -- #{modm}*(om[1]M)'`
|
1705
|
+
insert_into_list(modm, modmf1) if modmf1 != modmf
|
1706
|
+
else
|
1707
|
+
# if both are same then our options get reduced so we need to get something more
|
1708
|
+
# If you access the latest mod dir, then come back you get only one, since mod and accessed
|
1709
|
+
# are the same dir, so we need to find the second modified dir
|
1710
|
+
end
|
1711
|
+
end
|
1712
|
+
def insert_into_list dir, file
|
1713
|
+
ix = $files.index(dir)
|
1714
|
+
raise "something wrong can find #{dir}." unless ix
|
1715
|
+
$files.insert ix, *file
|
1716
|
+
end
|
1593
1717
|
|
1594
1718
|
run if __FILE__ == $PROGRAM_NAME
|
data/cetus.gemspec
CHANGED
@@ -5,7 +5,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |spec|
|
7
7
|
spec.name = "cetus"
|
8
|
-
spec.version = "0.1.
|
8
|
+
spec.version = "0.1.8"
|
9
9
|
spec.authors = ["Rahul Kumar"]
|
10
10
|
spec.email = ["sentinel1879@gmail.com"]
|
11
11
|
spec.description = %q{lightning fast file navigator}
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cetus
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.8
|
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-11 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|
@@ -73,7 +73,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
73
73
|
version: '0'
|
74
74
|
segments:
|
75
75
|
- 0
|
76
|
-
hash:
|
76
|
+
hash: 717877592165076099
|
77
77
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
78
78
|
none: false
|
79
79
|
requirements:
|
@@ -82,7 +82,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
82
82
|
version: '0'
|
83
83
|
segments:
|
84
84
|
- 0
|
85
|
-
hash:
|
85
|
+
hash: 717877592165076099
|
86
86
|
requirements: []
|
87
87
|
rubyforge_project:
|
88
88
|
rubygems_version: 1.8.25
|