fullscreen_tui 0.1.0 → 0.1.1
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/lib/fullscreen_tui.rb +27 -25
- data/lib/fullscreen_tui/version.rb +1 -1
- metadata +1 -1
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 8be81c26ac0c2a6958636763d9fd4f793f05a8666c7daf6e5e9dad9911876082
         | 
| 4 | 
            +
              data.tar.gz: c2b14918e40d7b8beaec15ad10775c5fed853e5e144b4fe1556cc6532a4a1666
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 18db90408d7818ec98741f2d94fd7fd1117e97d32a8fe9c749f242b5f588fa10ec2bbff03e34d999bfb49f76307e125a0cb79cd9e9043dd65c4fa2d6ab072dca
         | 
| 7 | 
            +
              data.tar.gz: c684e9d156e1d12ed488a2c7cb59b9790ff2c6bd641ab7381eb3aaade49dcaf3a9c6e9a3696f85b62ac5e47955fb6c444504940dc3b0b46f5b5abb0d9729beef
         | 
    
        data/lib/fullscreen_tui.rb
    CHANGED
    
    | @@ -8,6 +8,8 @@ require_relative 'fullscreen_tui/footer' | |
| 8 8 | 
             
            require_relative 'fullscreen_tui/renderer'
         | 
| 9 9 |  | 
| 10 10 | 
             
            class FullscreenTui
         | 
| 11 | 
            +
              attr_accessor :selection, :lines
         | 
| 12 | 
            +
              attr_reader :header, :footer, :renderer
         | 
| 11 13 | 
             
              def initialize headers:, renderer: nil
         | 
| 12 14 | 
             
                @header = Header.new headers
         | 
| 13 15 | 
             
                @footer = Footer.new
         | 
| @@ -27,18 +29,18 @@ class FullscreenTui | |
| 27 29 | 
             
              def print_screen
         | 
| 28 30 | 
             
                clear
         | 
| 29 31 |  | 
| 30 | 
            -
                 | 
| 32 | 
            +
                rows, columns = TermInfo.screen_size
         | 
| 31 33 |  | 
| 32 | 
            -
                 | 
| 33 | 
            -
                 | 
| 34 | 
            -
                 | 
| 35 | 
            -
                 | 
| 34 | 
            +
                header_text = header.output
         | 
| 35 | 
            +
                rows -= required_lines header_text, columns
         | 
| 36 | 
            +
                footer_text = footer.output width: columns, lines: lines.size, current_line: selection
         | 
| 37 | 
            +
                rows -= required_lines footer_text, columns
         | 
| 36 38 |  | 
| 37 | 
            -
                 | 
| 39 | 
            +
                renderer.header header_text unless header_text.empty?
         | 
| 38 40 |  | 
| 39 | 
            -
                print_lines  | 
| 41 | 
            +
                print_lines rows, columns
         | 
| 40 42 |  | 
| 41 | 
            -
                 | 
| 43 | 
            +
                renderer.footer footer_text
         | 
| 42 44 | 
             
              end
         | 
| 43 45 |  | 
| 44 46 | 
             
              def key_press key
         | 
| @@ -46,12 +48,12 @@ class FullscreenTui | |
| 46 48 | 
             
                when :arrow_up then go_up
         | 
| 47 49 | 
             
                when :arrow_down then go_down
         | 
| 48 50 | 
             
                when 'q', "\u0004" then throw :quit # ctrl-d
         | 
| 49 | 
            -
                else  | 
| 51 | 
            +
                else footer.message = "Unknown key: #{key.inspect}"
         | 
| 50 52 | 
             
                end
         | 
| 51 53 | 
             
              end
         | 
| 52 54 |  | 
| 53 55 | 
             
              def selected_line
         | 
| 54 | 
            -
                 | 
| 56 | 
            +
                lines[selection]
         | 
| 55 57 | 
             
              end
         | 
| 56 58 |  | 
| 57 59 | 
             
              ARROWS = {
         | 
| @@ -76,17 +78,17 @@ class FullscreenTui | |
| 76 78 | 
             
              end
         | 
| 77 79 |  | 
| 78 80 | 
             
              def go_up
         | 
| 79 | 
            -
                 | 
| 80 | 
            -
                return if  | 
| 81 | 
            +
                footer.message = ''
         | 
| 82 | 
            +
                return if selection.zero?
         | 
| 81 83 |  | 
| 82 | 
            -
                 | 
| 84 | 
            +
                self.selection -= 1
         | 
| 83 85 | 
             
              end
         | 
| 84 86 |  | 
| 85 87 | 
             
              def go_down
         | 
| 86 | 
            -
                 | 
| 87 | 
            -
                return if  | 
| 88 | 
            +
                footer.message = ''
         | 
| 89 | 
            +
                return if selection >= lines.size - 1
         | 
| 88 90 |  | 
| 89 | 
            -
                 | 
| 91 | 
            +
                self.selection += 1
         | 
| 90 92 | 
             
              end
         | 
| 91 93 |  | 
| 92 94 | 
             
              def read_full_line message
         | 
| @@ -96,23 +98,23 @@ class FullscreenTui | |
| 96 98 |  | 
| 97 99 | 
             
              private
         | 
| 98 100 |  | 
| 99 | 
            -
              def print_lines  | 
| 101 | 
            +
              def print_lines rows, columns
         | 
| 100 102 | 
             
                used_lines = 0
         | 
| 101 | 
            -
                offset = [ | 
| 102 | 
            -
                 | 
| 103 | 
            -
                  selected = i + offset ==  | 
| 103 | 
            +
                offset = [selection - 5, 0].max
         | 
| 104 | 
            +
                lines[offset..-1].each.with_index do |l, i|
         | 
| 105 | 
            +
                  selected = i + offset == selection
         | 
| 104 106 | 
             
                  line = l.to_s
         | 
| 105 107 | 
             
                  used_lines += (line.size.to_f / columns).ceil
         | 
| 106 | 
            -
                  if used_lines >  | 
| 107 | 
            -
                     | 
| 108 | 
            +
                  if used_lines > rows
         | 
| 109 | 
            +
                    renderer.line '...', selected: selected
         | 
| 108 110 | 
             
                    break
         | 
| 109 111 | 
             
                  end
         | 
| 110 112 |  | 
| 111 | 
            -
                   | 
| 112 | 
            -
                  break if used_lines ==  | 
| 113 | 
            +
                  renderer.line line, selected: selected
         | 
| 114 | 
            +
                  break if used_lines == rows
         | 
| 113 115 | 
             
                end
         | 
| 114 116 |  | 
| 115 | 
            -
                ( | 
| 117 | 
            +
                (rows - used_lines).times { renderer.line '~', selected: false }
         | 
| 116 118 | 
             
              end
         | 
| 117 119 |  | 
| 118 120 | 
             
              def required_lines text, columns
         |