curses-extension 2.0 → 2.2
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/README.md +18 -6
- data/lib/curses-extension.rb +14 -25
- data/lib/curses-template.rb +24 -41
- metadata +4 -3
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: '04280f3b09961bca34f139e055228c7206b28dcae370c22ae0417dca8fbb5fc2'
         | 
| 4 | 
            +
              data.tar.gz: 063e86ad7733dd4c5ee83664a59a3a3dbf59e45bdfda09a8efc1bc4e09cfd392
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 65c963c468c4b9101e59f9208815b58bb4d9f7bb07c34298aa1628a3f783de61cf9de186bed60f6b0246bd1f20be7eb9d4bfbb7cede62e7952e33fa17aa6f1bf
         | 
| 7 | 
            +
              data.tar.gz: c80f69f856b9a4faacdabf5a3bc8b8f69293b463f1b6f9b308319b98146d7ba6a0516387bb2e65cec4a121bfc96d2b06682851b1fb2b84ef293994e49e170198
         | 
    
        data/lib/README.md
    CHANGED
    
    | @@ -1,13 +1,27 @@ | |
| 1 1 | 
             
            # Ruby-Curses-Class-Extension
         | 
| 2 2 | 
             
            Extending the Ruby Curses module with some obvious needed functionality.
         | 
| 3 3 |  | 
| 4 | 
            +
            With this extension, you don't need to initiate any color pairs or add text to
         | 
| 5 | 
            +
            windows with odd syntax. Use any foreground and backround color you see fit
         | 
| 6 | 
            +
            and let this extension take care of the weird need to pair colors and initiate
         | 
| 7 | 
            +
            the color pairs. You also get a bunch of extra methods to manipulate curses
         | 
| 8 | 
            +
            windows.
         | 
| 9 | 
            +
             | 
| 10 | 
            +
            With this extension writing text to windows becomes a breeze. You can set
         | 
| 11 | 
            +
            default foreground, background and attribute for a window (e.g. `win.fg =
         | 
| 12 | 
            +
            124`, `win.bg = 234` and `win.attr = Curses::A_BOLD`) - and you can write text
         | 
| 13 | 
            +
            to a window with `win.p("Hello World")` where the defaults will be applied.
         | 
| 14 | 
            +
            You can override the defaults with e.g. `win.p(124, "Hello World")` to write
         | 
| 15 | 
            +
            the text in red or `win.p(76, 240, Curses::A_BOLD, "Hello World")` to write
         | 
| 16 | 
            +
            the text in bold green on a gray background.
         | 
| 17 | 
            +
             | 
| 18 | 
            +
             | 
| 4 19 | 
             
            ## Attributes
         | 
| 5 20 | 
             
            Attribute           | Description
         | 
| 6 21 | 
             
            --------------------|--------------------------------------------------------
         | 
| 7 22 | 
             
            fg                  | Foreground color for window (0-255)
         | 
| 8 23 | 
             
            bg                  | Background color for window (0-255)
         | 
| 9 24 | 
             
            attr                | Attributes for window (such as Curses::A_BOLD) - string with "\|" (such as Curses::A_BOLD \| Curses::A_UNDERLINE)
         | 
| 10 | 
            -
            text				| Holds the text to be written with the `write`method
         | 
| 11 25 | 
             
            update				| Whether to update the window on the next refresh
         | 
| 12 26 | 
             
            index				| Used to track an index for each window (used to display lists such as the content of a directory, etc.)
         | 
| 13 27 |  | 
| @@ -20,12 +34,10 @@ clr_from_cur_line					| Clears the rest of the window after the current line | |
| 20 34 | 
             
            fill								| Fill window with color as set by :color ( or :bg if not :color is set)
         | 
| 21 35 | 
             
            fill_to_cur_pos						| Fill the window up to the current line
         | 
| 22 36 | 
             
            fill_from_cur_pos					| Fill the rest of the window after the current line
         | 
| 23 | 
            -
             | 
| 24 | 
            -
             | 
| 37 | 
            +
            p(fg, bg, attr, text)				| Write text to window with fg/bg and attributes (will handle the exceptions if no colors are set).
         | 
| 38 | 
            +
            									  You can use `puts` instead of `p` (it's an alias)
         | 
| 25 39 | 
             
            pclr(text)							| As `p(text)` but also clears the rest of the window
         | 
| 26 | 
            -
             | 
| 27 | 
            -
            paclr(text, fg=255, bg=0, attr=0)	| As `pa(text)` but also clears the rest of the window
         | 
| 28 | 
            -
            format_text(text)					| Format text so that it linebreaks neatly inside window
         | 
| 40 | 
            +
            format(text)						| Format text so that it linebreaks neatly inside window
         | 
| 29 41 |  | 
| 30 42 | 
             
            ## Curses template
         | 
| 31 43 | 
             
            The `curses_template.rb` includes the class extension and serves as the basis for my curses applications. It is a runnable curses application that does nothing.
         | 
    
        data/lib/curses-extension.rb
    CHANGED
    
    | @@ -8,7 +8,7 @@ class Curses::Window # CLASS EXTENSION | |
| 8 8 | 
             
              # self.attr is set for text attributes like Curses::A_BOLD
         | 
| 9 9 | 
             
              # self.update can be used to indicate if a window should be updated (true/false)
         | 
| 10 10 | 
             
              # self.index can be used to keep track of the current list item in a window
         | 
| 11 | 
            -
              attr_accessor :fg, :bg, :attr, : | 
| 11 | 
            +
              attr_accessor :fg, :bg, :attr, :update, :index
         | 
| 12 12 | 
             
              def self.pair(fg, bg)
         | 
| 13 13 | 
             
                @p = [[]] if @p == nil
         | 
| 14 14 | 
             
                fg = fg.to_i; bg = bg.to_i
         | 
| @@ -67,38 +67,27 @@ class Curses::Window # CLASS EXTENSION | |
| 67 67 | 
             
                self.refresh
         | 
| 68 68 | 
             
                self.setpos(y, x)
         | 
| 69 69 | 
             
              end
         | 
| 70 | 
            -
              def  | 
| 71 | 
            -
                 | 
| 72 | 
            -
                 | 
| 73 | 
            -
                 | 
| 74 | 
            -
                cp = Curses::Window.pair(self.fg, self.bg)
         | 
| 75 | 
            -
                self.attron(color_pair(cp) | self.attr) { self << self.text }
         | 
| 76 | 
            -
                self.refresh
         | 
| 77 | 
            -
              end
         | 
| 78 | 
            -
              def p(text) # Puts text to window
         | 
| 79 | 
            -
                self.attr = 0 if self.attr == nil
         | 
| 80 | 
            -
                self.bg = 0 if self.bg   == nil
         | 
| 81 | 
            -
                self.fg = 255 if self.fg == nil
         | 
| 82 | 
            -
                cp = Curses::Window.pair(self.fg, self.bg)
         | 
| 83 | 
            -
                self.attron(color_pair(cp) | attr) { self << text }
         | 
| 84 | 
            -
                self.refresh
         | 
| 85 | 
            -
              end
         | 
| 86 | 
            -
              def pclr(text) # Puts text to window and clears the rest of the window
         | 
| 87 | 
            -
                self.p(text)
         | 
| 88 | 
            -
                self.clr_from_cur_line
         | 
| 89 | 
            -
              end
         | 
| 90 | 
            -
              def pa(fg = self.fg, bg = self.bg, attr = self.attr, text) # Puts text to window with full set of attributes
         | 
| 70 | 
            +
              def p(fg = self.fg, bg = self.bg, attr = self.attr, text) # Puts text to window with full set of attributes
         | 
| 71 | 
            +
                fg   = 255 if fg   == nil
         | 
| 72 | 
            +
                bg   = 0   if bg   == nil
         | 
| 73 | 
            +
                attr = 0   if attr == nil
         | 
| 91 74 | 
             
                cp = Curses::Window.pair(fg, bg)
         | 
| 92 75 | 
             
                self.attron(color_pair(cp) | attr) { self << text }
         | 
| 93 76 | 
             
                self.refresh
         | 
| 94 77 | 
             
              end
         | 
| 95 | 
            -
              def  | 
| 96 | 
            -
                 | 
| 78 | 
            +
              def nl(bg = self.bg)
         | 
| 79 | 
            +
                bg = 232 if bg == nil
         | 
| 80 | 
            +
                f  = " " * (self.maxx - self.curx)
         | 
| 81 | 
            +
                self.p(self.fg, bg, self.attr, f)
         | 
| 82 | 
            +
              end
         | 
| 83 | 
            +
              def pclr(fg = self.fg, bg = self.bg, attr = self.attr, text) # Puts text to window with full set of attributes and clears rest of window
         | 
| 84 | 
            +
                self.p(fg, bg, attr, text)
         | 
| 97 85 | 
             
                self.clr_from_cur_line
         | 
| 98 86 | 
             
              end
         | 
| 99 | 
            -
              def  | 
| 87 | 
            +
              def format(text) # Format text so that it linebreaks neatly inside window
         | 
| 100 88 | 
             
                return "\n" + text.gsub(/(.{1,#{self.maxx}})( +|$\n?)|(.{1,#{self.maxx}})/, "\\1\\3\n")
         | 
| 101 89 | 
             
              end
         | 
| 102 90 | 
             
              alias :puts :p
         | 
| 103 91 | 
             
            end
         | 
| 104 92 |  | 
| 93 | 
            +
            # vim: set sw=2 sts=2 et fdm=syntax fdn=2 fcs=fold\:\ :
         | 
    
        data/lib/curses-template.rb
    CHANGED
    
    | @@ -40,7 +40,7 @@ class Curses::Window # CLASS EXTENSION | |
| 40 40 | 
             
              # self.attr is set for text attributes like Curses::A_BOLD
         | 
| 41 41 | 
             
              # self.update can be used to indicate if a window should be updated (true/false)
         | 
| 42 42 | 
             
              # self.index can be used to keep track of the current list item in a window
         | 
| 43 | 
            -
              attr_accessor :fg, :bg, :attr, : | 
| 43 | 
            +
              attr_accessor :fg, :bg, :attr, :update, :index
         | 
| 44 44 | 
             
              def self.pair(fg, bg)
         | 
| 45 45 | 
             
                @p = [[]] if @p == nil
         | 
| 46 46 | 
             
                fg = fg.to_i; bg = bg.to_i
         | 
| @@ -99,36 +99,24 @@ class Curses::Window # CLASS EXTENSION | |
| 99 99 | 
             
                self.refresh
         | 
| 100 100 | 
             
                self.setpos(y, x)
         | 
| 101 101 | 
             
              end
         | 
| 102 | 
            -
              def  | 
| 103 | 
            -
                 | 
| 104 | 
            -
                 | 
| 105 | 
            -
                 | 
| 106 | 
            -
                cp | 
| 107 | 
            -
                self.attron(color_pair(cp) | self.attr) { self << self.text }
         | 
| 108 | 
            -
                self.refresh
         | 
| 109 | 
            -
              end
         | 
| 110 | 
            -
              def p(text) # Puts text to window
         | 
| 111 | 
            -
                self.attr = 0 if self.attr == nil
         | 
| 112 | 
            -
                self.bg = 0 if self.bg   == nil
         | 
| 113 | 
            -
                self.fg = 255 if self.fg == nil
         | 
| 114 | 
            -
                cp = Curses::Window.pair(self.fg, self.bg)
         | 
| 102 | 
            +
              def p(fg = self.fg, bg = self.bg, attr = self.attr, text) # Puts text to window with full set of attributes
         | 
| 103 | 
            +
                fg   = 255 if fg   == nil
         | 
| 104 | 
            +
                bg   = 0   if bg   == nil
         | 
| 105 | 
            +
                attr = 0   if attr == nil
         | 
| 106 | 
            +
                cp   = Curses::Window.pair(fg, bg)
         | 
| 115 107 | 
             
                self.attron(color_pair(cp) | attr) { self << text }
         | 
| 116 108 | 
             
                self.refresh
         | 
| 117 109 | 
             
              end
         | 
| 118 | 
            -
              def  | 
| 119 | 
            -
                 | 
| 120 | 
            -
                self. | 
| 121 | 
            -
             | 
| 122 | 
            -
              def pa(fg = self.fg, bg = self.bg, attr = self.attr, text) # Puts text to window with full set of attributes
         | 
| 123 | 
            -
                cp = Curses::Window.pair(fg, bg)
         | 
| 124 | 
            -
                self.attron(color_pair(cp) | attr) { self << text }
         | 
| 125 | 
            -
                self.refresh
         | 
| 110 | 
            +
              def nl(bg = self.bg)
         | 
| 111 | 
            +
                bg = 232 if bg == nil
         | 
| 112 | 
            +
                f  = " " * (self.maxx - self.curx)
         | 
| 113 | 
            +
                self.p(self.fg, bg, self.attr, f)
         | 
| 126 114 | 
             
              end
         | 
| 127 | 
            -
              def  | 
| 128 | 
            -
                self. | 
| 115 | 
            +
              def pclr(fg = self.fg, bg = self.bg, attr = self.attr, text) # Puts text to window with full set of attributes and clears rest of window
         | 
| 116 | 
            +
                self.p(fg, bg, attr, text)
         | 
| 129 117 | 
             
                self.clr_from_cur_line
         | 
| 130 118 | 
             
              end
         | 
| 131 | 
            -
              def  | 
| 119 | 
            +
              def format(text) # Format text so that it linebreaks neatly inside window
         | 
| 132 120 | 
             
                return "\n" + text.gsub(/(.{1,#{self.maxx}})( +|$\n?)|(.{1,#{self.maxx}})/, "\\1\\3\n")
         | 
| 133 121 | 
             
              end
         | 
| 134 122 | 
             
              alias :puts :p
         | 
| @@ -224,9 +212,8 @@ def main_getkey # GET KEY FROM USER | |
| 224 212 | 
             
                @w_r.update = false
         | 
| 225 213 | 
             
                cmd = w_b_getstr("◆ ", "")
         | 
| 226 214 | 
             
                begin
         | 
| 227 | 
            -
                  @w_r. | 
| 228 | 
            -
                   | 
| 229 | 
            -
                  @w_r.write
         | 
| 215 | 
            +
                  @w_r.fill
         | 
| 216 | 
            +
                  @w_r.p(eval(cmd))
         | 
| 230 217 | 
             
                rescue StandardError => e
         | 
| 231 218 | 
             
                  w_b("Error: #{e.inspect}")
         | 
| 232 219 | 
             
                end
         | 
| @@ -245,8 +232,7 @@ def w_b(info) # SHOW INFO IN @W_B | |
| 245 232 | 
             
              info      = "Choose window: i=IMDB list (+/- to add/remove from My list), g=Genres (+/- to add/remove), m=My list. " if info == nil
         | 
| 246 233 | 
             
              info      = info[1..(@w_b.maxx - 3)] + "…" if info.length + 3 > @w_b.maxx 
         | 
| 247 234 | 
             
              info     += " " * (@w_b.maxx - info.length) if info.length < @w_b.maxx
         | 
| 248 | 
            -
              @w_b. | 
| 249 | 
            -
              @w_b.write
         | 
| 235 | 
            +
              @w_b.p(info)
         | 
| 250 236 | 
             
              @w_b.update = false
         | 
| 251 237 | 
             
            end
         | 
| 252 238 | 
             
            def w_b_getstr(pretext, text) # A SIMPLE READLINE-LIKE ROUTINE
         | 
| @@ -257,9 +243,9 @@ def w_b_getstr(pretext, text) # A SIMPLE READLINE-LIKE ROUTINE | |
| 257 243 | 
             
              chr = ""
         | 
| 258 244 | 
             
              while chr != "ENTER"
         | 
| 259 245 | 
             
                @w_b.setpos(0,0)
         | 
| 260 | 
            -
                 | 
| 261 | 
            -
                 | 
| 262 | 
            -
                @w_b. | 
| 246 | 
            +
                text = pretext + text
         | 
| 247 | 
            +
                text += " " * (@w_b.maxx - text.length) if text.length < @w_b.maxx
         | 
| 248 | 
            +
                @w_b.p(text)
         | 
| 263 249 | 
             
                @w_b.setpos(0,pretext.length + pos)
         | 
| 264 250 | 
             
                @w_b.refresh
         | 
| 265 251 | 
             
                chr = getchr
         | 
| @@ -301,8 +287,7 @@ def w_r_info(info) # SHOW INFO IN THE RIGHT WINDOW | |
| 301 287 | 
             
              begin
         | 
| 302 288 | 
             
                @w_r.clr
         | 
| 303 289 | 
             
                @w_r.refresh
         | 
| 304 | 
            -
                @w_r. | 
| 305 | 
            -
                @w_r.write
         | 
| 290 | 
            +
                @w_r.p(info)
         | 
| 306 291 | 
             
                @w_r.update = false
         | 
| 307 292 | 
             
              rescue
         | 
| 308 293 | 
             
              end
         | 
| @@ -329,12 +314,10 @@ loop do # OUTER LOOP - (catching refreshes via 'r') | |
| 329 314 | 
             
                  @w_t.fill; @w_b.fill; @w_l.fill; @w_r.fill
         | 
| 330 315 |  | 
| 331 316 | 
             
                  # Example code to write to the panes in various ways
         | 
| 332 | 
            -
                  @w_t. | 
| 333 | 
            -
                  @ | 
| 334 | 
            -
                  @ | 
| 335 | 
            -
                  @ | 
| 336 | 
            -
                  @w_r.text = "Right window"
         | 
| 337 | 
            -
                  @w_r.write
         | 
| 317 | 
            +
                  @w_t.p("Top window")
         | 
| 318 | 
            +
                  @w_b.p("Bottom window")
         | 
| 319 | 
            +
                  @w_l.p(196,182,Curses::A_BOLD,"Left window")
         | 
| 320 | 
            +
                  @w_r.p("Right window")
         | 
| 338 321 |  | 
| 339 322 | 
             
                  # Top window (info line) 
         | 
| 340 323 |  | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: curses-extension
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: '2. | 
| 4 | 
            +
              version: '2.2'
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Geir Isene
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2023-07- | 
| 11 | 
            +
            date: 2023-07-09 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: curses
         | 
| @@ -35,7 +35,8 @@ description: 'The Ruby curses library is sorely lacking some important features. | |
| 35 35 | 
             
              terminal curses applications in Ruby. See the Github page for information on what
         | 
| 36 36 | 
             
              properties and functions are included: https://github.com/isene/Ruby-Curses-Class-Extension.
         | 
| 37 37 | 
             
              The curses_template.rb is also installed in the lib directory and serves as the
         | 
| 38 | 
            -
              basis for my own curses applications. New in 2. | 
| 38 | 
            +
              basis for my own curses applications. New in 2.2: "Added the method `nl`, an effective
         | 
| 39 | 
            +
              newline"'
         | 
| 39 40 | 
             
            email: g@isene.com
         | 
| 40 41 | 
             
            executables: []
         | 
| 41 42 | 
             
            extensions: []
         |