cetus 0.1.23 → 0.1.24
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/bin/cetus +127 -30
 - data/cetus.gemspec +1 -1
 - metadata +2 -2
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA256:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: fe8c1244b0c3e4c41eb6f186f13a2145330c3243de099db9a91bac5a87f0b1c6
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: e732da1943a5b7ab651c736a6d56bd645ce9d58b9dbf1857efcb97713563c2e1
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: 16cab047cb3fa5b2a9de8b25a8c3fe450ef9527896b19af2b5cd9d6ff5b554381c8b012dd21b2f9477ff8f00e080b3cf25d359e5c85103c3a777faa0ae1c171c
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 106ccedd0121858ddd1a867a9d2c875c8ab9fd1b6cba34062fbeed6ec256c80032f23b9363ea78c018ab861d8eb189c91bde3b373d1963ea16b656a1c0e40597
         
     | 
    
        data/bin/cetus
    CHANGED
    
    | 
         @@ -6,7 +6,7 @@ 
     | 
|
| 
       6 
6 
     | 
    
         
             
            #       Author: rkumar http://github.com/rkumar/cetus/
         
     | 
| 
       7 
7 
     | 
    
         
             
            #         Date: 2013-02-17 - 17:48
         
     | 
| 
       8 
8 
     | 
    
         
             
            #      License: GPL
         
     | 
| 
       9 
     | 
    
         
            -
            #  Last update: 2019-03- 
     | 
| 
      
 9 
     | 
    
         
            +
            #  Last update: 2019-03-18 14:02
         
     | 
| 
       10 
10 
     | 
    
         
             
            # --------------------------------------------------------------------------- #
         
     | 
| 
       11 
11 
     | 
    
         
             
            #  cetus.rb  Copyright (C) 2012-2019 rahul kumar
         
     | 
| 
       12 
12 
     | 
    
         
             
            # == CHANGELOG
         
     | 
| 
         @@ -35,7 +35,7 @@ require 'fileutils' 
     | 
|
| 
       35 
35 
     | 
    
         | 
| 
       36 
36 
     | 
    
         
             
            # 2019-02-20 - added so alt-screen is used
         
     | 
| 
       37 
37 
     | 
    
         
             
            system 'tput smcup'
         
     | 
| 
       38 
     | 
    
         
            -
            VERSION = '0.1. 
     | 
| 
      
 38 
     | 
    
         
            +
            VERSION = '0.1.24.0'.freeze
         
     | 
| 
       39 
39 
     | 
    
         
             
            O_CONFIG = true
         
     | 
| 
       40 
40 
     | 
    
         
             
            # CONFIG_FILE = '~/.lyrainfo'.freeze
         
     | 
| 
       41 
41 
     | 
    
         
             
            CONFIG_FILE = '~/.config/cetus/conf.yml'.freeze
         
     | 
| 
         @@ -45,11 +45,13 @@ $bindings = { 
     | 
|
| 
       45 
45 
     | 
    
         
             
              '`' => 'main_menu',
         
     | 
| 
       46 
46 
     | 
    
         
             
              '=' => 'toggle_menu',
         
     | 
| 
       47 
47 
     | 
    
         
             
              'M-y' => 'selection_menu',
         
     | 
| 
      
 48 
     | 
    
         
            +
              'M-s' => 'sort_menu',
         
     | 
| 
       48 
49 
     | 
    
         
             
              'ENTER' => 'select_current',
         
     | 
| 
       49 
50 
     | 
    
         
             
              'C-p' => 'page_current',
         
     | 
| 
       50 
51 
     | 
    
         
             
              'C-e' => 'edit_current',
         
     | 
| 
       51 
52 
     | 
    
         
             
              'C-o' => 'edit_current',
         
     | 
| 
       52 
53 
     | 
    
         
             
              'C-s' => 'toggle_select',
         
     | 
| 
      
 54 
     | 
    
         
            +
              'C-r' => 'reduce',
         
     | 
| 
       53 
55 
     | 
    
         
             
              '@' => 'selection_mode_toggle',
         
     | 
| 
       54 
56 
     | 
    
         
             
              'M-a' => 'select_all',
         
     | 
| 
       55 
57 
     | 
    
         
             
              'M-A' => 'unselect_all',
         
     | 
| 
         @@ -366,25 +368,34 @@ def run 
     | 
|
| 
       366 
368 
     | 
    
         
             
                fin = $sta + $viewport.size
         
     | 
| 
       367 
369 
     | 
    
         
             
                $title ||= Dir.pwd.sub(home, '~')
         
     | 
| 
       368 
370 
     | 
    
         
             
                clear_screen
         
     | 
| 
      
 371 
     | 
    
         
            +
             
     | 
| 
      
 372 
     | 
    
         
            +
             
     | 
| 
       369 
373 
     | 
    
         
             
                # title
         
     | 
| 
       370 
374 
     | 
    
         
             
                print "#{GREEN}#{$help}  #{BLUE}cetus #{VERSION}#{CLEAR}\n"
         
     | 
| 
       371 
375 
     | 
    
         
             
                t = "#{$title}  #{$sta + 1} to #{fin} of #{fl}  #{$sorto} F:#{$filterstr}"
         
     | 
| 
       372 
376 
     | 
    
         
             
                t = t[t.size - $gcols..-1] if t.size >= $gcols
         
     | 
| 
       373 
377 
     | 
    
         
             
                print "#{BOLD}#{t}#{CLEAR}\n"
         
     | 
| 
      
 378 
     | 
    
         
            +
             
     | 
| 
      
 379 
     | 
    
         
            +
             
     | 
| 
       374 
380 
     | 
    
         
             
                ## nilling the title means a superimposed one gets cleared.
         
     | 
| 
       375 
381 
     | 
    
         
             
                # $title = nil
         
     | 
| 
       376 
382 
     | 
    
         
             
                # split into 2 procedures so columnate can e clean and reused.
         
     | 
| 
       377 
383 
     | 
    
         
             
                buff = _format $viewport
         
     | 
| 
      
 384 
     | 
    
         
            +
             
     | 
| 
      
 385 
     | 
    
         
            +
                # break into as many columns as required
         
     | 
| 
       378 
386 
     | 
    
         
             
                buff = columnate buff, $grows
         
     | 
| 
      
 387 
     | 
    
         
            +
             
     | 
| 
       379 
388 
     | 
    
         
             
                # needed the next line to see how much extra we were going in padding
         
     | 
| 
       380 
389 
     | 
    
         
             
                # buff.each {|line| print "#{REVERSE}#{line}#{CLEAR}\n" }
         
     | 
| 
       381 
390 
     | 
    
         
             
                buff.each { |line| print line, "\n" }
         
     | 
| 
       382 
391 
     | 
    
         
             
                print
         
     | 
| 
      
 392 
     | 
    
         
            +
             
     | 
| 
      
 393 
     | 
    
         
            +
             
     | 
| 
       383 
394 
     | 
    
         
             
                # prompt
         
     | 
| 
       384 
395 
     | 
    
         
             
                # print "#{$files.size}, #{view.size} sta=#{sta} (#{patt}): "
         
     | 
| 
       385 
396 
     | 
    
         
             
                _mm = ''
         
     | 
| 
       386 
397 
     | 
    
         
             
                _mm = "[#{$mode}] " if $mode
         
     | 
| 
       387 
     | 
    
         
            -
                print "\r#{_mm}#{$patt} >"
         
     | 
| 
      
 398 
     | 
    
         
            +
                print "\r#{_mm}#{$patt} #{GREEN}#{$message}#{CLEAR} >"
         
     | 
| 
       388 
399 
     | 
    
         
             
                ch = get_char
         
     | 
| 
       389 
400 
     | 
    
         
             
                # puts
         
     | 
| 
       390 
401 
     | 
    
         
             
                # break if ch == "q"
         
     | 
| 
         @@ -487,18 +498,42 @@ def columnate(ary, sz) 
     | 
|
| 
       487 
498 
     | 
    
         
             
                while ctr < sz
         
     | 
| 
       488 
499 
     | 
    
         | 
| 
       489 
500 
     | 
    
         
             
                  f = ary[ix]
         
     | 
| 
      
 501 
     | 
    
         
            +
                  # f is not just filename but marker and hint
         
     | 
| 
      
 502 
     | 
    
         
            +
                  # Check last char to see if directory
         
     | 
| 
      
 503 
     | 
    
         
            +
                  linecolor = nil
         
     | 
| 
      
 504 
     | 
    
         
            +
                  linecolor = BLUE if f[-1] == '/'
         
     | 
| 
      
 505 
     | 
    
         
            +
             
     | 
| 
      
 506 
     | 
    
         
            +
                  # check to see if we need to truncate
         
     | 
| 
      
 507 
     | 
    
         
            +
                  # TODO 2019-03-18 - truncate from middle of string.
         
     | 
| 
       490 
508 
     | 
    
         
             
                  fsz = f.size
         
     | 
| 
       491 
509 
     | 
    
         
             
                  if fsz > wid
         
     | 
| 
       492 
     | 
    
         
            -
                     
     | 
| 
      
 510 
     | 
    
         
            +
                    fromstart = wid - 8
         
     | 
| 
      
 511 
     | 
    
         
            +
                    # f = f[0, wid - 2] + '$ '
         
     | 
| 
      
 512 
     | 
    
         
            +
                    # 2019-03-18 - trying to truncate from center
         
     | 
| 
      
 513 
     | 
    
         
            +
                    f = f[0, fromstart] + '$' + f[-6..-1] + ' '
         
     | 
| 
       493 
514 
     | 
    
         
             
                    ## we do the coloring after trunc so ANSI escpe seq does not get get
         
     | 
| 
       494 
     | 
    
         
            -
                     
     | 
| 
      
 515 
     | 
    
         
            +
                    if ix + $sta == $cursor
         
     | 
| 
      
 516 
     | 
    
         
            +
                      f = "#{CURSOR_COLOR}#{f}#{CLEAR}"
         
     | 
| 
      
 517 
     | 
    
         
            +
                    elsif linecolor
         
     | 
| 
      
 518 
     | 
    
         
            +
                      f = "#{linecolor}#{f}#{CLEAR}"
         
     | 
| 
      
 519 
     | 
    
         
            +
                    end
         
     | 
| 
      
 520 
     | 
    
         
            +
             
     | 
| 
       495 
521 
     | 
    
         
             
                  else
         
     | 
| 
       496 
     | 
    
         
            -
             
     | 
| 
       497 
     | 
    
         
            -
                     
     | 
| 
      
 522 
     | 
    
         
            +
             
     | 
| 
      
 523 
     | 
    
         
            +
                    ## we do the coloring before padding so the entire line does not get
         
     | 
| 
      
 524 
     | 
    
         
            +
                    # padded, only file name
         
     | 
| 
      
 525 
     | 
    
         
            +
                    # f = "#{CURSOR_COLOR}#{f}#{CLEAR}" if ix + $sta == $cursor
         
     | 
| 
      
 526 
     | 
    
         
            +
                    if ix + $sta == $cursor
         
     | 
| 
      
 527 
     | 
    
         
            +
                      f = "#{CURSOR_COLOR}#{f}#{CLEAR}"
         
     | 
| 
      
 528 
     | 
    
         
            +
                    else
         
     | 
| 
      
 529 
     | 
    
         
            +
                      f = "#{linecolor}#{f}#{CLEAR}"  if linecolor
         
     | 
| 
      
 530 
     | 
    
         
            +
                    end
         
     | 
| 
       498 
531 
     | 
    
         
             
                    # f = f.ljust(wid)
         
     | 
| 
       499 
532 
     | 
    
         
             
                    f << ' ' * (wid - fsz)
         
     | 
| 
      
 533 
     | 
    
         
            +
             
     | 
| 
       500 
534 
     | 
    
         
             
                  end
         
     | 
| 
       501 
535 
     | 
    
         | 
| 
      
 536 
     | 
    
         
            +
                  # if already a value in that line, append to it
         
     | 
| 
       502 
537 
     | 
    
         
             
                  if buff[ctr]
         
     | 
| 
       503 
538 
     | 
    
         
             
                    buff[ctr] += f
         
     | 
| 
       504 
539 
     | 
    
         
             
                  else
         
     | 
| 
         @@ -517,6 +552,8 @@ end 
     | 
|
| 
       517 
552 
     | 
    
         
             
            ## formats the data with number, mark and details
         
     | 
| 
       518 
553 
     | 
    
         
             
            # 2019-03-09 - at some time this got renamed to `format` which is a kernel
         
     | 
| 
       519 
554 
     | 
    
         
             
            #  method and this overshadowed that method.
         
     | 
| 
      
 555 
     | 
    
         
            +
            #  NOTE: this does not do any coloring since the codes may get chopped by
         
     | 
| 
      
 556 
     | 
    
         
            +
            #   columnate method
         
     | 
| 
       520 
557 
     | 
    
         
             
            def _format(ary)
         
     | 
| 
       521 
558 
     | 
    
         
             
              # buff = Array.new
         
     | 
| 
       522 
559 
     | 
    
         
             
              buff = Array.new(ary.size)
         
     | 
| 
         @@ -534,8 +571,6 @@ def _format(ary) 
     | 
|
| 
       534 
571 
     | 
    
         
             
                mark = SPACE
         
     | 
| 
       535 
572 
     | 
    
         
             
                cur = SPACE
         
     | 
| 
       536 
573 
     | 
    
         
             
                cur = CURMARK if ix + $sta == $cursor
         
     | 
| 
       537 
     | 
    
         
            -
                # TODO: add full path TESTME
         
     | 
| 
       538 
     | 
    
         
            -
                # mark = GMARK if $selected_files.index(ary[ix])
         
     | 
| 
       539 
574 
     | 
    
         
             
                mark = GMARK if selected?(ary[ix])
         
     | 
| 
       540 
575 
     | 
    
         | 
| 
       541 
576 
     | 
    
         
             
                if $long_listing
         
     | 
| 
         @@ -543,6 +578,7 @@ def _format(ary) 
     | 
|
| 
       543 
578 
     | 
    
         
             
                    if File.exist? f
         
     | 
| 
       544 
579 
     | 
    
         
             
                      stat = File.stat(f)
         
     | 
| 
       545 
580 
     | 
    
         
             
                    else
         
     | 
| 
      
 581 
     | 
    
         
            +
                      # remove last character and get stat
         
     | 
| 
       546 
582 
     | 
    
         
             
                      last = f[-1]
         
     | 
| 
       547 
583 
     | 
    
         
             
                      stat = File.stat(f.chop) if last == ' ' || last == '@' || last == '*'
         
     | 
| 
       548 
584 
     | 
    
         
             
                    end
         
     | 
| 
         @@ -554,7 +590,8 @@ def _format(ary) 
     | 
|
| 
       554 
590 
     | 
    
         
             
                end
         
     | 
| 
       555 
591 
     | 
    
         | 
| 
       556 
592 
     | 
    
         
             
                s = "#{ind}#{mark}#{cur}#{f}"
         
     | 
| 
       557 
     | 
    
         
            -
             
     | 
| 
      
 593 
     | 
    
         
            +
             
     | 
| 
      
 594 
     | 
    
         
            +
                # NOTE: I cannot color the current line since _format does the chopping
         
     | 
| 
       558 
595 
     | 
    
         
             
                # so not only does the next lines alignment get skewed,
         
     | 
| 
       559 
596 
     | 
    
         
             
                # but also if the line is truncated
         
     | 
| 
       560 
597 
     | 
    
         
             
                # then the color overflows.
         
     | 
| 
         @@ -678,6 +715,7 @@ def run_on_current(command) 
     | 
|
| 
       678 
715 
     | 
    
         
             
              reset_terminal
         
     | 
| 
       679 
716 
     | 
    
         
             
              comm = "#{command} #{f}"
         
     | 
| 
       680 
717 
     | 
    
         
             
              system(comm.to_s)
         
     | 
| 
      
 718 
     | 
    
         
            +
              push_used_dirs
         
     | 
| 
       681 
719 
     | 
    
         
             
              setup_terminal
         
     | 
| 
       682 
720 
     | 
    
         
             
            end
         
     | 
| 
       683 
721 
     | 
    
         | 
| 
         @@ -721,7 +759,7 @@ def run_command(f) 
     | 
|
| 
       721 
759 
     | 
    
         
             
              get_char
         
     | 
| 
       722 
760 
     | 
    
         
             
            end
         
     | 
| 
       723 
761 
     | 
    
         | 
| 
       724 
     | 
    
         
            -
            ## cd to a dir
         
     | 
| 
      
 762 
     | 
    
         
            +
            ## cd to a dir and go to position if specified
         
     | 
| 
       725 
763 
     | 
    
         
             
            def change_dir(f, pos = nil)
         
     | 
| 
       726 
764 
     | 
    
         
             
              unless File.directory? f
         
     | 
| 
       727 
765 
     | 
    
         
             
                perror "#{p} is not a directory, or does not exist."
         
     | 
| 
         @@ -755,6 +793,7 @@ def escape 
     | 
|
| 
       755 
793 
     | 
    
         
             
              $viewctr = 0
         
     | 
| 
       756 
794 
     | 
    
         
             
              $title = nil
         
     | 
| 
       757 
795 
     | 
    
         
             
              $filterstr = 'M'
         
     | 
| 
      
 796 
     | 
    
         
            +
              $message = nil
         
     | 
| 
       758 
797 
     | 
    
         
             
              visual_block_clear
         
     | 
| 
       759 
798 
     | 
    
         
             
              refresh
         
     | 
| 
       760 
799 
     | 
    
         
             
            end
         
     | 
| 
         @@ -769,6 +808,7 @@ def refresh 
     | 
|
| 
       769 
808 
     | 
    
         
             
              $title = nil
         
     | 
| 
       770 
809 
     | 
    
         
             
            end
         
     | 
| 
       771 
810 
     | 
    
         | 
| 
      
 811 
     | 
    
         
            +
            # put directories first, then files
         
     | 
| 
       772 
812 
     | 
    
         
             
            def sort_file_list(_files)
         
     | 
| 
       773 
813 
     | 
    
         
             
              _dirs = $files.select { |f| File.directory?(f) }
         
     | 
| 
       774 
814 
     | 
    
         
             
              _files = $files.select { |f| File.file?(f) }
         
     | 
| 
         @@ -783,7 +823,6 @@ end 
     | 
|
| 
       783 
823 
     | 
    
         | 
| 
       784 
824 
     | 
    
         
             
            ## select all files
         
     | 
| 
       785 
825 
     | 
    
         
             
            def select_all
         
     | 
| 
       786 
     | 
    
         
            -
              # TODO: add path TESTME
         
     | 
| 
       787 
826 
     | 
    
         
             
              dir = Dir.pwd
         
     | 
| 
       788 
827 
     | 
    
         
             
              $selected_files = $view.map { |file| File.join(dir, file) }
         
     | 
| 
       789 
828 
     | 
    
         
             
            end
         
     | 
| 
         @@ -834,6 +873,7 @@ end 
     | 
|
| 
       834 
873 
     | 
    
         
             
            # 2019-03-15 - TODO FIXME preferable when we go into command mode
         
     | 
| 
       835 
874 
     | 
    
         
             
            #  run a command on current or selected files. But then is it a mode, do we remain
         
     | 
| 
       836 
875 
     | 
    
         
             
            #  there, or come out immediately ?
         
     | 
| 
      
 876 
     | 
    
         
            +
            #  2019-03-17 - have removed this altogether. not required
         
     | 
| 
       837 
877 
     | 
    
         
             
            def command_mode
         
     | 
| 
       838 
878 
     | 
    
         
             
              if $mode == 'COM'
         
     | 
| 
       839 
879 
     | 
    
         
             
                $mode = nil
         
     | 
| 
         @@ -917,10 +957,12 @@ def print_help 
     | 
|
| 
       917 
957 
     | 
    
         
             
                file.puts '    HELP'
         
     | 
| 
       918 
958 
     | 
    
         | 
| 
       919 
959 
     | 
    
         
             
                file.puts
         
     | 
| 
       920 
     | 
    
         
            -
                file.puts 'To open a file or dir press 1-9 a-z A-Z '
         
     | 
| 
      
 960 
     | 
    
         
            +
                file.puts 'To open a file or dir press 1-9 a-z A-Z (on left of file)'
         
     | 
| 
      
 961 
     | 
    
         
            +
                file.puts 'Ctrl-s to select file under cursor'
         
     | 
| 
       921 
962 
     | 
    
         
             
                file.puts 'Selection Mode: Each selection adds to selection list (toggles)'
         
     | 
| 
       922 
963 
     | 
    
         
             
                file.puts '   Execute commands on selected files. e.g D C-x   '
         
     | 
| 
       923 
964 
     | 
    
         
             
                file.puts '   Upon exiting mode, selection is cleared'
         
     | 
| 
      
 965 
     | 
    
         
            +
                file.puts 'Use left and right arrows to move through directories'
         
     | 
| 
       924 
966 
     | 
    
         
             
                file.puts
         
     | 
| 
       925 
967 
     | 
    
         
             
                ary = []
         
     | 
| 
       926 
968 
     | 
    
         
             
                $bindings.each_pair { |k, v| ary.push "#{k.ljust(7)}  =>  #{v}" }
         
     | 
| 
         @@ -1042,19 +1084,21 @@ end 
     | 
|
| 
       1042 
1084 
     | 
    
         
             
            def toggle_menu
         
     | 
| 
       1043 
1085 
     | 
    
         
             
              h = { :h => :toggle_hidden, :c => :toggle_case, :l => :toggle_long_list, '1' => :toggle_columns,
         
     | 
| 
       1044 
1086 
     | 
    
         
             
                    :p => :toggle_pager_mode, :e => :toggle_enhanced_list }
         
     | 
| 
       1045 
     | 
    
         
            -
               
     | 
| 
      
 1087 
     | 
    
         
            +
              _, menu_text = menu 'Toggle Menu', h
         
     | 
| 
       1046 
1088 
     | 
    
         
             
              # NOTE fzfmenu returns string not symbol
         
     | 
| 
       1047 
1089 
     | 
    
         
             
              return unless menu_text
         
     | 
| 
       1048 
1090 
     | 
    
         | 
| 
       1049 
1091 
     | 
    
         
             
              case menu_text
         
     | 
| 
       1050 
1092 
     | 
    
         
             
              when :toggle_hidden
         
     | 
| 
       1051 
1093 
     | 
    
         
             
                $hidden = $hidden ? nil : 'D'
         
     | 
| 
       1052 
     | 
    
         
            -
                pause " 
     | 
| 
      
 1094 
     | 
    
         
            +
                pause "Show hidden files is now #{!$hidden.nil?}"
         
     | 
| 
      
 1095 
     | 
    
         
            +
                message "Show hidden is now #{!$hidden.nil?}"
         
     | 
| 
       1053 
1096 
     | 
    
         
             
                refresh
         
     | 
| 
       1054 
1097 
     | 
    
         
             
              when :toggle_case
         
     | 
| 
       1055 
1098 
     | 
    
         
             
                # $ignorecase = $ignorecase ? "" : "i"
         
     | 
| 
       1056 
1099 
     | 
    
         
             
                $ignorecase = !$ignorecase
         
     | 
| 
       1057 
     | 
    
         
            -
                pause "Ignore Case 
     | 
| 
      
 1100 
     | 
    
         
            +
                pause "Ignore Case is now #{$ignorecase}"
         
     | 
| 
      
 1101 
     | 
    
         
            +
                message "Ignore Case is now #{$ignorecase}"
         
     | 
| 
       1058 
1102 
     | 
    
         
             
                refresh
         
     | 
| 
       1059 
1103 
     | 
    
         
             
              when :toggle_columns
         
     | 
| 
       1060 
1104 
     | 
    
         
             
                $gviscols = 3 if $gviscols == 1
         
     | 
| 
         @@ -1070,8 +1114,10 @@ def toggle_menu 
     | 
|
| 
       1070 
1114 
     | 
    
         
             
                                   else
         
     | 
| 
       1071 
1115 
     | 
    
         
             
                                     ENV['MANPAGER'] || ENV['PAGER']
         
     | 
| 
       1072 
1116 
     | 
    
         
             
                                   end
         
     | 
| 
      
 1117 
     | 
    
         
            +
                message "Default command is #{$default_command}"
         
     | 
| 
       1073 
1118 
     | 
    
         
             
              when :toggle_enhanced_list
         
     | 
| 
       1074 
1119 
     | 
    
         
             
                $enhanced_mode = !$enhanced_mode
         
     | 
| 
      
 1120 
     | 
    
         
            +
                message "Enhanced mode is #{$long_listing}"
         
     | 
| 
       1075 
1121 
     | 
    
         | 
| 
       1076 
1122 
     | 
    
         
             
              when :toggle_long_list
         
     | 
| 
       1077 
1123 
     | 
    
         
             
                $long_listing = !$long_listing
         
     | 
| 
         @@ -1082,6 +1128,7 @@ def toggle_menu 
     | 
|
| 
       1082 
1128 
     | 
    
         
             
                  x = $grows * $gviscols
         
     | 
| 
       1083 
1129 
     | 
    
         
             
                  $pagesize = $pagesize == x ? $grows : x
         
     | 
| 
       1084 
1130 
     | 
    
         
             
                end
         
     | 
| 
      
 1131 
     | 
    
         
            +
                message "Long listing is #{$long_listing}"
         
     | 
| 
       1085 
1132 
     | 
    
         
             
                refresh
         
     | 
| 
       1086 
1133 
     | 
    
         
             
              end
         
     | 
| 
       1087 
1134 
     | 
    
         
             
            end
         
     | 
| 
         @@ -1187,7 +1234,8 @@ def extras 
     | 
|
| 
       1187 
1234 
     | 
    
         
             
            end
         
     | 
| 
       1188 
1235 
     | 
    
         | 
| 
       1189 
1236 
     | 
    
         
             
            def filter_menu
         
     | 
| 
       1190 
     | 
    
         
            -
              h = { :d => :dirs, :f => :files, :e => :emptydirs, '0' => :emptyfiles 
     | 
| 
      
 1237 
     | 
    
         
            +
              h = { :d => :dirs, :f => :files, :e => :emptydirs, '0' => :emptyfiles,
         
     | 
| 
      
 1238 
     | 
    
         
            +
              :r => :reduce_list, :x => :extension}
         
     | 
| 
       1191 
1239 
     | 
    
         
             
              ch, menu_text = menu 'Filter Menu', h
         
     | 
| 
       1192 
1240 
     | 
    
         
             
              files = nil
         
     | 
| 
       1193 
1241 
     | 
    
         
             
              case menu_text
         
     | 
| 
         @@ -1207,6 +1255,10 @@ def filter_menu 
     | 
|
| 
       1207 
1255 
     | 
    
         
             
                $filterstr = '.L0'
         
     | 
| 
       1208 
1256 
     | 
    
         
             
                files = `zsh -c 'print -rl -- *(#{$sorto}#{$hidden}.L0)'`.split("\n")
         
     | 
| 
       1209 
1257 
     | 
    
         
             
                $title = 'Filter: empty files'
         
     | 
| 
      
 1258 
     | 
    
         
            +
              when :reduce_list
         
     | 
| 
      
 1259 
     | 
    
         
            +
                files = reduce
         
     | 
| 
      
 1260 
     | 
    
         
            +
              when :extension
         
     | 
| 
      
 1261 
     | 
    
         
            +
                files = filter_for_current_extension
         
     | 
| 
       1210 
1262 
     | 
    
         
             
              end
         
     | 
| 
       1211 
1263 
     | 
    
         
             
              if files
         
     | 
| 
       1212 
1264 
     | 
    
         
             
                $files = files
         
     | 
| 
         @@ -1214,6 +1266,21 @@ def filter_menu 
     | 
|
| 
       1214 
1266 
     | 
    
         
             
              end
         
     | 
| 
       1215 
1267 
     | 
    
         
             
            end
         
     | 
| 
       1216 
1268 
     | 
    
         | 
| 
      
 1269 
     | 
    
         
            +
            def reduce pattern=nil
         
     | 
| 
      
 1270 
     | 
    
         
            +
              unless pattern
         
     | 
| 
      
 1271 
     | 
    
         
            +
                print 'Enter a pattern to reduce current list: '
         
     | 
| 
      
 1272 
     | 
    
         
            +
                pattern = gets.chomp
         
     | 
| 
      
 1273 
     | 
    
         
            +
              end
         
     | 
| 
      
 1274 
     | 
    
         
            +
              $title = "Filter: pattern #{pattern}"
         
     | 
| 
      
 1275 
     | 
    
         
            +
              $files = $files.select {|f| f.match(pattern)}
         
     | 
| 
      
 1276 
     | 
    
         
            +
            end
         
     | 
| 
      
 1277 
     | 
    
         
            +
             
     | 
| 
      
 1278 
     | 
    
         
            +
            def filter_for_current_extension
         
     | 
| 
      
 1279 
     | 
    
         
            +
              extn = File.extname(current_file)
         
     | 
| 
      
 1280 
     | 
    
         
            +
              return unless extn
         
     | 
| 
      
 1281 
     | 
    
         
            +
              reduce extn
         
     | 
| 
      
 1282 
     | 
    
         
            +
            end
         
     | 
| 
      
 1283 
     | 
    
         
            +
             
     | 
| 
       1217 
1284 
     | 
    
         
             
            def select_used_dirs
         
     | 
| 
       1218 
1285 
     | 
    
         
             
              $title = 'Used Directories'
         
     | 
| 
       1219 
1286 
     | 
    
         
             
              home = File.expand_path '~'
         
     | 
| 
         @@ -1253,6 +1320,7 @@ def post_cd 
     | 
|
| 
       1253 
1320 
     | 
    
         
             
              $patt = nil
         
     | 
| 
       1254 
1321 
     | 
    
         
             
              $sta = $cursor = 0
         
     | 
| 
       1255 
1322 
     | 
    
         
             
              $title = nil
         
     | 
| 
      
 1323 
     | 
    
         
            +
              $message = nil
         
     | 
| 
       1256 
1324 
     | 
    
         
             
              $visual_block_start = nil
         
     | 
| 
       1257 
1325 
     | 
    
         
             
              $stact = 0
         
     | 
| 
       1258 
1326 
     | 
    
         
             
              $current_dir = Dir.pwd # 2019-03-10 - so i don't keep doing in functions
         
     | 
| 
         @@ -1302,6 +1370,7 @@ def config_write 
     | 
|
| 
       1302 
1370 
     | 
    
         
             
              hash['BOOKMARKS'] = $bookmarks #.select {|file| File.exist? file}
         
     | 
| 
       1303 
1371 
     | 
    
         
             
              writeYML hash, f1
         
     | 
| 
       1304 
1372 
     | 
    
         
             
              $writing = $modified = false
         
     | 
| 
      
 1373 
     | 
    
         
            +
              message "Saved #{f1}"
         
     | 
| 
       1305 
1374 
     | 
    
         
             
            end
         
     | 
| 
       1306 
1375 
     | 
    
         | 
| 
       1307 
1376 
     | 
    
         
             
            # {{{ YML
         
     | 
| 
         @@ -1320,13 +1389,16 @@ def writeYML obj, filename 
     | 
|
| 
       1320 
1389 
     | 
    
         
             
              end
         
     | 
| 
       1321 
1390 
     | 
    
         
             
            end
         
     | 
| 
       1322 
1391 
     | 
    
         
             
            # }}}
         
     | 
| 
      
 1392 
     | 
    
         
            +
             
     | 
| 
       1323 
1393 
     | 
    
         
             
            ## accept a character to save this dir as a bookmark
         
     | 
| 
       1324 
1394 
     | 
    
         
             
            def create_bookmark
         
     | 
| 
       1325 
1395 
     | 
    
         
             
              print 'Enter A to Z or 0-9 to create a bookmark: '
         
     | 
| 
       1326 
1396 
     | 
    
         
             
              ch = get_char
         
     | 
| 
       1327 
1397 
     | 
    
         
             
              if ch =~ /^[0-9A-Z]$/
         
     | 
| 
       1328 
     | 
    
         
            -
                $bookmarks[ch] = "#{Dir.pwd}:#{$cursor}"
         
     | 
| 
      
 1398 
     | 
    
         
            +
                # $bookmarks[ch] = "#{Dir.pwd}:#{$cursor}"
         
     | 
| 
      
 1399 
     | 
    
         
            +
                $bookmarks[ch] = Dir.pwd
         
     | 
| 
       1329 
1400 
     | 
    
         
             
                $modified = true
         
     | 
| 
      
 1401 
     | 
    
         
            +
                message "Created bookmark #{ch}"
         
     | 
| 
       1330 
1402 
     | 
    
         
             
              else
         
     | 
| 
       1331 
1403 
     | 
    
         
             
                perror 'Bookmark must be upper-case character or number.'
         
     | 
| 
       1332 
1404 
     | 
    
         
             
              end
         
     | 
| 
         @@ -1437,7 +1509,10 @@ end 
     | 
|
| 
       1437 
1509 
     | 
    
         | 
| 
       1438 
1510 
     | 
    
         
             
            ## create a list of dirs in which some action has happened, for saving
         
     | 
| 
       1439 
1511 
     | 
    
         
             
            def push_used_dirs(d = Dir.pwd)
         
     | 
| 
       1440 
     | 
    
         
            -
              $used_dirs.index(d) || $used_dirs.push(d)
         
     | 
| 
      
 1512 
     | 
    
         
            +
              # $used_dirs.index(d) || $used_dirs.push(d)
         
     | 
| 
      
 1513 
     | 
    
         
            +
              return if $used_dirs[0] == d
         
     | 
| 
      
 1514 
     | 
    
         
            +
              $used_dirs.delete(d) if $used_dirs.index(d)
         
     | 
| 
      
 1515 
     | 
    
         
            +
              $used_dirs.insert(0, d)
         
     | 
| 
       1441 
1516 
     | 
    
         
             
            end
         
     | 
| 
       1442 
1517 
     | 
    
         | 
| 
       1443 
1518 
     | 
    
         
             
            def pbold(text)
         
     | 
| 
         @@ -1545,13 +1620,30 @@ end 
     | 
|
| 
       1545 
1620 
     | 
    
         | 
| 
       1546 
1621 
     | 
    
         
             
            ## moves column offset so we can reach unindexed columns or entries
         
     | 
| 
       1547 
1622 
     | 
    
         
             
            # 0 forward and any other back/prev
         
     | 
| 
       1548 
     | 
    
         
            -
             
     | 
| 
       1549 
     | 
    
         
            -
             
     | 
| 
      
 1623 
     | 
    
         
            +
            # direction is 0 (forward) or 1 (backward)
         
     | 
| 
      
 1624 
     | 
    
         
            +
            # TODO 2019-03-18 - $cursor should also move
         
     | 
| 
      
 1625 
     | 
    
         
            +
            def column_next(direction = 0)
         
     | 
| 
      
 1626 
     | 
    
         
            +
              # right movement or panning cycles back to first column
         
     | 
| 
      
 1627 
     | 
    
         
            +
              # leftward movement stops at first column.
         
     | 
| 
      
 1628 
     | 
    
         
            +
              if direction == 0
         
     | 
| 
       1550 
1629 
     | 
    
         
             
                $stact += $grows
         
     | 
| 
       1551 
1630 
     | 
    
         
             
                $stact = 0 if $stact >= $viewport.size
         
     | 
| 
      
 1631 
     | 
    
         
            +
                $cursor += $grows
         
     | 
| 
      
 1632 
     | 
    
         
            +
                # 2019-03-18 - zero loses offset. we need to maintain it
         
     | 
| 
      
 1633 
     | 
    
         
            +
                # $cursor = 0 if $cursor >= $viewport.size
         
     | 
| 
      
 1634 
     | 
    
         
            +
                if $cursor >= $viewport.size
         
     | 
| 
      
 1635 
     | 
    
         
            +
                  while $cursor > 0
         
     | 
| 
      
 1636 
     | 
    
         
            +
                    $cursor -= $grows
         
     | 
| 
      
 1637 
     | 
    
         
            +
                  end
         
     | 
| 
      
 1638 
     | 
    
         
            +
                  $cursor += $grows if $cursor < 0
         
     | 
| 
      
 1639 
     | 
    
         
            +
                end
         
     | 
| 
       1552 
1640 
     | 
    
         
             
              else
         
     | 
| 
       1553 
1641 
     | 
    
         
             
                $stact -= $grows
         
     | 
| 
      
 1642 
     | 
    
         
            +
                $cursor -= $grows
         
     | 
| 
       1554 
1643 
     | 
    
         
             
                $stact = 0 if $stact < 0
         
     | 
| 
      
 1644 
     | 
    
         
            +
                # setting cursor as zero loses the position or offset
         
     | 
| 
      
 1645 
     | 
    
         
            +
                # We are trying to maintain offset
         
     | 
| 
      
 1646 
     | 
    
         
            +
                $cursor += $grows if $cursor < 0
         
     | 
| 
       1555 
1647 
     | 
    
         
             
              end
         
     | 
| 
       1556 
1648 
     | 
    
         
             
            end
         
     | 
| 
       1557 
1649 
     | 
    
         | 
| 
         @@ -1636,6 +1728,7 @@ def file_actions(action = nil) 
     | 
|
| 
       1636 
1728 
     | 
    
         
             
                if File.directory? target
         
     | 
| 
       1637 
1729 
     | 
    
         
             
                  begin
         
     | 
| 
       1638 
1730 
     | 
    
         
             
                    FileUtils.mv file, target
         
     | 
| 
      
 1731 
     | 
    
         
            +
                    message "Moved #{text} to #{target}"
         
     | 
| 
       1639 
1732 
     | 
    
         
             
                  rescue StandardError => exc
         
     | 
| 
       1640 
1733 
     | 
    
         
             
                    perror exc.to_s
         
     | 
| 
       1641 
1734 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -1658,6 +1751,7 @@ def file_actions(action = nil) 
     | 
|
| 
       1658 
1751 
     | 
    
         
             
                if File.directory? target
         
     | 
| 
       1659 
1752 
     | 
    
         
             
                  begin
         
     | 
| 
       1660 
1753 
     | 
    
         
             
                    FileUtils.cp file, target
         
     | 
| 
      
 1754 
     | 
    
         
            +
                    message "Copied #{text} to #{target}"
         
     | 
| 
       1661 
1755 
     | 
    
         
             
                  rescue StandardError => exc
         
     | 
| 
       1662 
1756 
     | 
    
         
             
                    perror exc.to_s
         
     | 
| 
       1663 
1757 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -1830,8 +1924,9 @@ def locate 
     | 
|
| 
       1830 
1924 
     | 
    
         
             
              end
         
     | 
| 
       1831 
1925 
     | 
    
         
             
            end
         
     | 
| 
       1832 
1926 
     | 
    
         | 
| 
       1833 
     | 
    
         
            -
            ## Displays files from .viminfo file, if you use some other editor which 
     | 
| 
       1834 
     | 
    
         
            -
            # 
     | 
| 
      
 1927 
     | 
    
         
            +
            ## Displays files from .viminfo file, if you use some other editor which
         
     | 
| 
      
 1928 
     | 
    
         
            +
            # tracks files opened then you can modify this accordingly.
         
     | 
| 
      
 1929 
     | 
    
         
            +
            # Neovim does not use viminfo
         
     | 
| 
       1835 
1930 
     | 
    
         
             
            #
         
     | 
| 
       1836 
1931 
     | 
    
         
             
            def viminfo
         
     | 
| 
       1837 
1932 
     | 
    
         
             
              file = File.expand_path('~/.viminfo')
         
     | 
| 
         @@ -1852,6 +1947,7 @@ def z_interface 
     | 
|
| 
       1852 
1947 
     | 
    
         
             
                $title = 'Directories from ~/.z'
         
     | 
| 
       1853 
1948 
     | 
    
         
             
                $files = `sort -rn -k2 -t '|' ~/.z | cut -f1 -d '|'`.split("\n")
         
     | 
| 
       1854 
1949 
     | 
    
         
             
                home = ENV['HOME']
         
     | 
| 
      
 1950 
     | 
    
         
            +
                # shorten file names
         
     | 
| 
       1855 
1951 
     | 
    
         
             
                $files.collect! do |f|
         
     | 
| 
       1856 
1952 
     | 
    
         
             
                  f.sub(/#{home}/, '~')
         
     | 
| 
       1857 
1953 
     | 
    
         
             
                end
         
     | 
| 
         @@ -1889,6 +1985,7 @@ def pos 
     | 
|
| 
       1889 
1985 
     | 
    
         
             
              $cursor
         
     | 
| 
       1890 
1986 
     | 
    
         
             
            end
         
     | 
| 
       1891 
1987 
     | 
    
         | 
| 
      
 1988 
     | 
    
         
            +
            # move cursor to given position/line
         
     | 
| 
       1892 
1989 
     | 
    
         
             
            def moveto(pos)
         
     | 
| 
       1893 
1990 
     | 
    
         
             
              orig = $cursor
         
     | 
| 
       1894 
1991 
     | 
    
         
             
              $cursor = pos
         
     | 
| 
         @@ -1898,7 +1995,6 @@ def moveto(pos) 
     | 
|
| 
       1898 
1995 
     | 
    
         
             
              fin = [orig, $cursor].max
         
     | 
| 
       1899 
1996 
     | 
    
         
             
              if $visual_mode
         
     | 
| 
       1900 
1997 
     | 
    
         
             
                # PWD has to be there in selction
         
     | 
| 
       1901 
     | 
    
         
            -
                # TODO: add full path TESTME
         
     | 
| 
       1902 
1998 
     | 
    
         
             
                if selected? current_file
         
     | 
| 
       1903 
1999 
     | 
    
         
             
                  # this depends on the direction
         
     | 
| 
       1904 
2000 
     | 
    
         
             
                  # $selected_files = $selected_files - $view[star..fin]
         
     | 
| 
         @@ -1948,11 +2044,11 @@ def remove_from_selection(file) 
     | 
|
| 
       1948 
2044 
     | 
    
         
             
            end
         
     | 
| 
       1949 
2045 
     | 
    
         | 
| 
       1950 
2046 
     | 
    
         
             
            def visual_mode_toggle
         
     | 
| 
      
 2047 
     | 
    
         
            +
              $mode = nil
         
     | 
| 
       1951 
2048 
     | 
    
         
             
              $visual_mode = !$visual_mode
         
     | 
| 
       1952 
2049 
     | 
    
         
             
              if $visual_mode
         
     | 
| 
      
 2050 
     | 
    
         
            +
                $mode = 'VIS'
         
     | 
| 
       1953 
2051 
     | 
    
         
             
                $visual_block_start = $cursor
         
     | 
| 
       1954 
     | 
    
         
            -
                # TODO: add full path TESTME
         
     | 
| 
       1955 
     | 
    
         
            -
                # $selected_files.push $view[$cursor]
         
     | 
| 
       1956 
2052 
     | 
    
         
             
                add_to_selection current_file
         
     | 
| 
       1957 
2053 
     | 
    
         
             
              end
         
     | 
| 
       1958 
2054 
     | 
    
         
             
            end
         
     | 
| 
         @@ -1961,8 +2057,6 @@ def visual_block_clear 
     | 
|
| 
       1961 
2057 
     | 
    
         
             
              if $visual_block_start
         
     | 
| 
       1962 
2058 
     | 
    
         
             
                star = [$visual_block_start, $cursor].min
         
     | 
| 
       1963 
2059 
     | 
    
         
             
                fin = [$visual_block_start, $cursor].max
         
     | 
| 
       1964 
     | 
    
         
            -
                # TODO: add full path TESTME
         
     | 
| 
       1965 
     | 
    
         
            -
                # $selected_files = $selected_files - $view[star..fin]
         
     | 
| 
       1966 
2060 
     | 
    
         
             
                remove_from_selection $view[star..fin]
         
     | 
| 
       1967 
2061 
     | 
    
         
             
              end
         
     | 
| 
       1968 
2062 
     | 
    
         
             
              $visual_block_start = nil
         
     | 
| 
         @@ -2077,8 +2171,7 @@ def newfile 
     | 
|
| 
       2077 
2171 
     | 
    
         
             
              refresh
         
     | 
| 
       2078 
2172 
     | 
    
         
             
            end
         
     | 
| 
       2079 
2173 
     | 
    
         | 
| 
       2080 
     | 
    
         
            -
             
     | 
| 
       2081 
     | 
    
         
            -
             
     | 
| 
      
 2174 
     | 
    
         
            +
            # convenience method to return file under cursor
         
     | 
| 
       2082 
2175 
     | 
    
         
             
            def current_file
         
     | 
| 
       2083 
2176 
     | 
    
         
             
              $view[$cursor]
         
     | 
| 
       2084 
2177 
     | 
    
         
             
            end
         
     | 
| 
         @@ -2271,6 +2364,10 @@ def get_important_files(dir) 
     | 
|
| 
       2271 
2364 
     | 
    
         
             
              list
         
     | 
| 
       2272 
2365 
     | 
    
         
             
            end
         
     | 
| 
       2273 
2366 
     | 
    
         | 
| 
      
 2367 
     | 
    
         
            +
            def message mess
         
     | 
| 
      
 2368 
     | 
    
         
            +
              $message = mess
         
     | 
| 
      
 2369 
     | 
    
         
            +
            end
         
     | 
| 
      
 2370 
     | 
    
         
            +
             
     | 
| 
       2274 
2371 
     | 
    
         
             
            Signal.trap('EXIT') do
         
     | 
| 
       2275 
2372 
     | 
    
         
             
              reset_terminal
         
     | 
| 
       2276 
2373 
     | 
    
         
             
              # system 'tput rmcup'
         
     | 
    
        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.24'
         
     | 
| 
       9 
9 
     | 
    
         
             
              spec.authors       = ['Rahul Kumar']
         
     | 
| 
       10 
10 
     | 
    
         
             
              spec.email         = ['oneness.univ@gmail.com']
         
     | 
| 
       11 
11 
     | 
    
         
             
              spec.description   = %q{lightning fast file navigator}
         
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,14 +1,14 @@ 
     | 
|
| 
       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.24
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Rahul Kumar
         
     | 
| 
       8 
8 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       9 
9 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       10 
10 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
     | 
    
         
            -
            date: 2019-03- 
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2019-03-18 00:00:00.000000000 Z
         
     | 
| 
       12 
12 
     | 
    
         
             
            dependencies:
         
     | 
| 
       13 
13 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       14 
14 
     | 
    
         
             
              name: bundler
         
     |