rtfm-filemanager 7.2.1 → 7.3.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/bin/rtfm +40 -61
 - metadata +17 -3
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA256:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: 70adf5224517b9f2cf7a0ec8150c350c3a9b3c6455a6db26781a2ef33dfa385d
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: f07222ba0ed09b855fab399be1209a539efde052a416d48050e82db4c4b42f43
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: ef7ce1ea7725333321bddb1b1cbf68300e3c1c697540c7c0b6a0d4f0f4021b7f1a6c408716e4aa2348938b8de555444304a292f886d770ec38df43cca8b145cc
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 5a4f701cd40e6375387198e2febe6bd56a59976e261b0dd226c0efa53cf21c107a3639cb602993791bc9e7ef0c8396b0d045957810b0dbc6496b1cbcadc63151
         
     | 
    
        data/bin/rtfm
    CHANGED
    
    | 
         @@ -18,7 +18,7 @@ 
     | 
|
| 
       18 
18 
     | 
    
         
             
            #             get a great understanding of the code itself by simply sending
         
     | 
| 
       19 
19 
     | 
    
         
             
            #             or pasting this whole file into you favorite AI for coding with
         
     | 
| 
       20 
20 
     | 
    
         
             
            #             a prompt like this: "Help me understand every part of this code".
         
     | 
| 
       21 
     | 
    
         
            -
            @version    = '7. 
     | 
| 
      
 21 
     | 
    
         
            +
            @version    = '7.3.0' # Modern image display using termpix gem
         
     | 
| 
       22 
22 
     | 
    
         | 
| 
       23 
23 
     | 
    
         
             
            # SAVE & STORE TERMINAL {{{1
         
     | 
| 
       24 
24 
     | 
    
         
             
            ORIG_STTY = `stty -g`.chomp
         
     | 
| 
         @@ -43,22 +43,24 @@ def check_image_redraw # {{{2 
     | 
|
| 
       43 
43 
     | 
    
         
             
              now = Time.now
         
     | 
| 
       44 
44 
     | 
    
         
             
              return if now - @last_focus_check < @focus_check_interval
         
     | 
| 
       45 
45 
     | 
    
         
             
              @last_focus_check = now
         
     | 
| 
       46 
     | 
    
         
            -
             
     | 
| 
      
 46 
     | 
    
         
            +
             
     | 
| 
       47 
47 
     | 
    
         
             
              # Only check if we have an image currently displayed
         
     | 
| 
       48 
48 
     | 
    
         
             
              return unless @image && @current_image_path
         
     | 
| 
       49 
     | 
    
         
            -
             
     | 
| 
      
 49 
     | 
    
         
            +
             
     | 
| 
       50 
50 
     | 
    
         
             
              begin
         
     | 
| 
       51 
     | 
    
         
            -
                #  
     | 
| 
       52 
     | 
    
         
            -
                 
     | 
| 
       53 
     | 
    
         
            -
             
     | 
| 
       54 
     | 
    
         
            -
             
     | 
| 
       55 
     | 
    
         
            -
             
     | 
| 
       56 
     | 
    
         
            -
             
     | 
| 
       57 
     | 
    
         
            -
             
     | 
| 
       58 
     | 
    
         
            -
             
     | 
| 
       59 
     | 
    
         
            -
                   
     | 
| 
       60 
     | 
    
         
            -
             
     | 
| 
      
 51 
     | 
    
         
            +
                # For w3m/ueberzug protocols, check if image overlay was cleared
         
     | 
| 
      
 52 
     | 
    
         
            +
                if [:w3m, :ueberzug].include?(@termpix.protocol)
         
     | 
| 
      
 53 
     | 
    
         
            +
                  active_window = `xdotool getactivewindow 2>/dev/null`.chomp
         
     | 
| 
      
 54 
     | 
    
         
            +
                  return if active_window.empty?
         
     | 
| 
      
 55 
     | 
    
         
            +
             
     | 
| 
      
 56 
     | 
    
         
            +
                  # Check if image display process still exists
         
     | 
| 
      
 57 
     | 
    
         
            +
                  process_name = @termpix.protocol == :w3m ? 'w3mimgdisplay' : 'ueberzug'
         
     | 
| 
      
 58 
     | 
    
         
            +
                  img_processes = `pgrep #{process_name} 2>/dev/null`.chomp
         
     | 
| 
      
 59 
     | 
    
         
            +
                  if img_processes.empty? && File.exist?(@current_image_path)
         
     | 
| 
      
 60 
     | 
    
         
            +
                    showimage(@current_image_path)
         
     | 
| 
      
 61 
     | 
    
         
            +
                  end
         
     | 
| 
       61 
62 
     | 
    
         
             
                end
         
     | 
| 
      
 63 
     | 
    
         
            +
                # Kitty and Sixel protocols don't need redraw checks - images persist
         
     | 
| 
       62 
64 
     | 
    
         
             
              rescue
         
     | 
| 
       63 
65 
     | 
    
         
             
                # Silently fail - we don't want focus checking to break anything
         
     | 
| 
       64 
66 
     | 
    
         
             
              end
         
     | 
| 
         @@ -77,6 +79,7 @@ rescue StandardError => e 
     | 
|
| 
       77 
79 
     | 
    
         
             
            end
         
     | 
| 
       78 
80 
     | 
    
         
             
            require 'tmpdir'
         
     | 
| 
       79 
81 
     | 
    
         
             
            require 'set'  # For symlink loop detection
         
     | 
| 
      
 82 
     | 
    
         
            +
            require 'termpix'  # Terminal image display
         
     | 
| 
       80 
83 
     | 
    
         
             
            # Lazy-load to speed up startup
         
     | 
| 
       81 
84 
     | 
    
         
             
            autoload :Shellwords, 'shellwords'
         
     | 
| 
       82 
85 
     | 
    
         
             
            autoload :Timeout,    'timeout'
         
     | 
| 
         @@ -481,13 +484,9 @@ def cmd?(cmd) # Helper function 
     | 
|
| 
       481 
484 
     | 
    
         
             
              system("which #{cmd} > /dev/null 2>&1")
         
     | 
| 
       482 
485 
     | 
    
         
             
            end
         
     | 
| 
       483 
486 
     | 
    
         | 
| 
       484 
     | 
    
         
            -
             
     | 
| 
       485 
     | 
    
         
            -
             
     | 
| 
       486 
     | 
    
         
            -
             
     | 
| 
       487 
     | 
    
         
            -
            else
         
     | 
| 
       488 
     | 
    
         
            -
              @showimage = false
         
     | 
| 
       489 
     | 
    
         
            -
            end
         
     | 
| 
       490 
     | 
    
         
            -
            @showimage = false unless cmd?('xwininfo') && cmd?('xdotool')
         
     | 
| 
      
 487 
     | 
    
         
            +
            # Initialize termpix for image display
         
     | 
| 
      
 488 
     | 
    
         
            +
            @termpix = Termpix::Display.new
         
     | 
| 
      
 489 
     | 
    
         
            +
            @showimage = @termpix.supported?
         
     | 
| 
       491 
490 
     | 
    
         | 
| 
       492 
491 
     | 
    
         
             
            # Image auto-redraw variables
         
     | 
| 
       493 
492 
     | 
    
         
             
            @current_image_path = nil  # Path of currently displayed image
         
     | 
| 
         @@ -1120,7 +1119,10 @@ def help_info # {{{3 
     | 
|
| 
       1120 
1119 
     | 
    
         
             
            end
         
     | 
| 
       1121 
1120 
     | 
    
         | 
| 
       1122 
1121 
     | 
    
         
             
            def show_version # {{{3
         
     | 
| 
       1123 
     | 
    
         
            -
               
     | 
| 
      
 1122 
     | 
    
         
            +
              protocol_info = @termpix ? " [Image protocol: #{@termpix.protocol || 'none'}]" : ""
         
     | 
| 
      
 1123 
     | 
    
         
            +
              version_text = " RTFM version = #{@version}#{protocol_info} (latest RubyGems version is #{Gem.latest_version_for('rtfm-filemanager').version} - https://github.com/isene/RTFM)"
         
     | 
| 
      
 1124 
     | 
    
         
            +
              @pB.say(version_text.b)
         
     | 
| 
      
 1125 
     | 
    
         
            +
              @pB.update = false  # Prevent terminal clearing on next render
         
     | 
| 
       1124 
1126 
     | 
    
         
             
            end
         
     | 
| 
       1125 
1127 
     | 
    
         | 
| 
       1126 
1128 
     | 
    
         
             
            def refresh_all # {{{3
         
     | 
| 
         @@ -5636,50 +5638,27 @@ def showimage(image) # SHOW THE SELECTED IMAGE IN THE RIGHT WINDOW {{{2 
     | 
|
| 
       5636 
5638 
     | 
    
         
             
              return unless @showimage
         
     | 
| 
       5637 
5639 
     | 
    
         | 
| 
       5638 
5640 
     | 
    
         
             
              begin
         
     | 
| 
       5639 
     | 
    
         
            -
                terminfo    = `xwininfo -id $(xdotool getactivewindow 2>/dev/null) 2>/dev/null`
         
     | 
| 
       5640 
     | 
    
         
            -
                term_w      = terminfo.match(/Width: (\d+)/)[1].to_i
         
     | 
| 
       5641 
     | 
    
         
            -
                term_h      = terminfo.match(/Height: (\d+)/)[1].to_i
         
     | 
| 
       5642 
     | 
    
         
            -
                char_w      = term_w / @w
         
     | 
| 
       5643 
     | 
    
         
            -
                char_h      = term_h / @h
         
     | 
| 
       5644 
     | 
    
         
            -
                img_x       = char_w * @pR.x
         
     | 
| 
       5645 
     | 
    
         
            -
                img_y       = char_h * 2
         
     | 
| 
       5646 
     | 
    
         
            -
                img_max_w   = char_w * (@pR.w - 2)
         
     | 
| 
       5647 
     | 
    
         
            -
                img_max_h   = char_h * (@pR.h - 1)
         
     | 
| 
       5648 
5641 
     | 
    
         
             
                if image == 'clear'
         
     | 
| 
       5649 
     | 
    
         
            -
                   
     | 
| 
       5650 
     | 
    
         
            -
             
     | 
| 
       5651 
     | 
    
         
            -
             
     | 
| 
       5652 
     | 
    
         
            -
             
     | 
| 
       5653 
     | 
    
         
            -
             
     | 
| 
       5654 
     | 
    
         
            -
             
     | 
| 
      
 5642 
     | 
    
         
            +
                  @termpix.clear(
         
     | 
| 
      
 5643 
     | 
    
         
            +
                    x: @pR.x,
         
     | 
| 
      
 5644 
     | 
    
         
            +
                    y: @pR.y,
         
     | 
| 
      
 5645 
     | 
    
         
            +
                    width: @pR.w,
         
     | 
| 
      
 5646 
     | 
    
         
            +
                    height: @pR.h,
         
     | 
| 
      
 5647 
     | 
    
         
            +
                    term_width: @w,
         
     | 
| 
      
 5648 
     | 
    
         
            +
                    term_height: @h)
         
     | 
| 
      
 5649 
     | 
    
         
            +
                  @current_image_path = nil
         
     | 
| 
       5655 
5650 
     | 
    
         
             
                else
         
     | 
| 
       5656 
     | 
    
         
            -
                  #  
     | 
| 
      
 5651 
     | 
    
         
            +
                  # Display image using termpix
         
     | 
| 
       5657 
5652 
     | 
    
         
             
                  img_path = File.absolute_path(image)
         
     | 
| 
       5658 
     | 
    
         
            -
                  
         
     | 
| 
       5659 
     | 
    
         
            -
             
     | 
| 
       5660 
     | 
    
         
            -
             
     | 
| 
       5661 
     | 
    
         
            -
             
     | 
| 
       5662 
     | 
    
         
            -
             
     | 
| 
       5663 
     | 
    
         
            -
                   
     | 
| 
       5664 
     | 
    
         
            -
             
     | 
| 
       5665 
     | 
    
         
            -
                  # Fix: Use simultaneous scaling to prevent overflow
         
     | 
| 
       5666 
     | 
    
         
            -
                  if img_w > img_max_w || img_h > img_max_h
         
     | 
| 
       5667 
     | 
    
         
            -
                    scale_w = img_max_w.to_f / img_w
         
     | 
| 
       5668 
     | 
    
         
            -
                    scale_h = img_max_h.to_f / img_h
         
     | 
| 
       5669 
     | 
    
         
            -
                    scale = [scale_w, scale_h].min
         
     | 
| 
       5670 
     | 
    
         
            -
             
     | 
| 
       5671 
     | 
    
         
            -
                    img_w = (img_w * scale).to_i
         
     | 
| 
       5672 
     | 
    
         
            -
                    img_h = (img_h * scale).to_i
         
     | 
| 
       5673 
     | 
    
         
            -
                  end
         
     | 
| 
       5674 
     | 
    
         
            -
             
     | 
| 
       5675 
     | 
    
         
            -
                  # Use the absolute path without extra quotes in the w3mimgdisplay protocol
         
     | 
| 
       5676 
     | 
    
         
            -
                  `echo '0;1;#{img_x};#{img_y};#{img_w};#{img_h};;;;;#{img_path}
         
     | 
| 
       5677 
     | 
    
         
            -
            4;
         
     | 
| 
       5678 
     | 
    
         
            -
            3;' | #{@imgdisplay} 2>/dev/null`
         
     | 
| 
       5679 
     | 
    
         
            -
                  @current_image_path = img_path  # Track currently displayed image
         
     | 
| 
      
 5653 
     | 
    
         
            +
                  @termpix.show(img_path,
         
     | 
| 
      
 5654 
     | 
    
         
            +
                    x: @pR.x,
         
     | 
| 
      
 5655 
     | 
    
         
            +
                    y: @pR.y,
         
     | 
| 
      
 5656 
     | 
    
         
            +
                    max_width: @pR.w - 2,
         
     | 
| 
      
 5657 
     | 
    
         
            +
                    max_height: @pR.h - 1)
         
     | 
| 
      
 5658 
     | 
    
         
            +
                  @current_image_path = img_path
         
     | 
| 
       5680 
5659 
     | 
    
         
             
                end
         
     | 
| 
       5681 
     | 
    
         
            -
              rescue
         
     | 
| 
       5682 
     | 
    
         
            -
                @pR.text =  
     | 
| 
      
 5660 
     | 
    
         
            +
              rescue => e
         
     | 
| 
      
 5661 
     | 
    
         
            +
                @pR.text = "Error showing image: #{e.message}"
         
     | 
| 
       5683 
5662 
     | 
    
         
             
              end
         
     | 
| 
       5684 
5663 
     | 
    
         
             
            end
         
     | 
| 
       5685 
5664 
     | 
    
         | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,14 +1,14 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: rtfm-filemanager
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 7. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 7.3.0
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Geir Isene
         
     | 
| 
       8 
8 
     | 
    
         
             
            autorequire:
         
     | 
| 
       9 
9 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       10 
10 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
     | 
    
         
            -
            date: 2025-10- 
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2025-10-26 00:00:00.000000000 Z
         
     | 
| 
       12 
12 
     | 
    
         
             
            dependencies:
         
     | 
| 
       13 
13 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       14 
14 
     | 
    
         
             
              name: rcurses
         
     | 
| 
         @@ -24,6 +24,20 @@ dependencies: 
     | 
|
| 
       24 
24 
     | 
    
         
             
                - - "~>"
         
     | 
| 
       25 
25 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       26 
26 
     | 
    
         
             
                    version: '6.0'
         
     | 
| 
      
 27 
     | 
    
         
            +
            - !ruby/object:Gem::Dependency
         
     | 
| 
      
 28 
     | 
    
         
            +
              name: termpix
         
     | 
| 
      
 29 
     | 
    
         
            +
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
      
 30 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 31 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
      
 32 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 33 
     | 
    
         
            +
                    version: '0.1'
         
     | 
| 
      
 34 
     | 
    
         
            +
              type: :runtime
         
     | 
| 
      
 35 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
      
 36 
     | 
    
         
            +
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
      
 37 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 38 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
      
 39 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 40 
     | 
    
         
            +
                    version: '0.1'
         
     | 
| 
       27 
41 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       28 
42 
     | 
    
         
             
              name: bootsnap
         
     | 
| 
       29 
43 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
         @@ -53,7 +67,7 @@ dependencies: 
     | 
|
| 
       53 
67 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       54 
68 
     | 
    
         
             
                    version: '7.4'
         
     | 
| 
       55 
69 
     | 
    
         
             
            description: |-
         
     | 
| 
       56 
     | 
    
         
            -
              RTFM v7. 
     | 
| 
      
 70 
     | 
    
         
            +
              RTFM v7.3.0: Modern image display with termpix gem - supports Sixel (mlterm) and w3m protocols.
         
     | 
| 
       57 
71 
     | 
    
         
             
               A full featured terminal browser with syntax highlighted files, images shown in the terminal, videos thumbnailed, etc. Features include remote SSH/SFTP browsing, interactive SSH shell, comprehensive undo system, bookmarks, and much more. You can bookmark and jump around easily, delete, rename, copy, symlink and move files. RTFM is one of the most feature-packed terminal file managers.
         
     | 
| 
       58 
72 
     | 
    
         
             
            email: g@isene.com
         
     | 
| 
       59 
73 
     | 
    
         
             
            executables:
         
     |