reline 0.2.8.pre.7 → 0.2.8.pre.11
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/reline/ansi.rb +8 -3
 - data/lib/reline/config.rb +20 -3
 - data/lib/reline/key_actor/emacs.rb +1 -1
 - data/lib/reline/key_stroke.rb +63 -14
 - data/lib/reline/line_editor.rb +223 -74
 - data/lib/reline/terminfo.rb +1 -1
 - data/lib/reline/unicode.rb +3 -3
 - data/lib/reline/version.rb +1 -1
 - data/lib/reline/windows.rb +18 -16
 - data/lib/reline.rb +53 -27
 - metadata +3 -4
 - data/lib/reline/line_editor.rb.orig +0 -3156
 
    
        data/lib/reline.rb
    CHANGED
    
    | 
         @@ -17,14 +17,23 @@ module Reline 
     | 
|
| 
       17 
17 
     | 
    
         
             
              class ConfigEncodingConversionError < StandardError; end
         
     | 
| 
       18 
18 
     | 
    
         | 
| 
       19 
19 
     | 
    
         
             
              Key = Struct.new('Key', :char, :combined_char, :with_meta) do
         
     | 
| 
       20 
     | 
    
         
            -
                def match?( 
     | 
| 
       21 
     | 
    
         
            -
                   
     | 
| 
       22 
     | 
    
         
            -
                   
     | 
| 
       23 
     | 
    
         
            -
             
     | 
| 
      
 20 
     | 
    
         
            +
                def match?(other)
         
     | 
| 
      
 21 
     | 
    
         
            +
                  case other
         
     | 
| 
      
 22 
     | 
    
         
            +
                  when Reline::Key
         
     | 
| 
      
 23 
     | 
    
         
            +
                    (other.char.nil? or char.nil? or char == other.char) and
         
     | 
| 
      
 24 
     | 
    
         
            +
                    (other.combined_char.nil? or combined_char.nil? or combined_char == other.combined_char) and
         
     | 
| 
      
 25 
     | 
    
         
            +
                    (other.with_meta.nil? or with_meta.nil? or with_meta == other.with_meta)
         
     | 
| 
      
 26 
     | 
    
         
            +
                  when Integer, Symbol
         
     | 
| 
      
 27 
     | 
    
         
            +
                    (combined_char and combined_char == other) or
         
     | 
| 
      
 28 
     | 
    
         
            +
                    (combined_char.nil? and char and char == other)
         
     | 
| 
      
 29 
     | 
    
         
            +
                  else
         
     | 
| 
      
 30 
     | 
    
         
            +
                    false
         
     | 
| 
      
 31 
     | 
    
         
            +
                  end
         
     | 
| 
       24 
32 
     | 
    
         
             
                end
         
     | 
| 
      
 33 
     | 
    
         
            +
                alias_method :==, :match?
         
     | 
| 
       25 
34 
     | 
    
         
             
              end
         
     | 
| 
       26 
35 
     | 
    
         
             
              CursorPos = Struct.new(:x, :y)
         
     | 
| 
       27 
     | 
    
         
            -
              DialogRenderInfo = Struct.new(:pos, :contents, : 
     | 
| 
      
 36 
     | 
    
         
            +
              DialogRenderInfo = Struct.new(:pos, :contents, :bg_color, :width, :height, :scrollbar, keyword_init: true)
         
     | 
| 
       28 
37 
     | 
    
         | 
| 
       29 
38 
     | 
    
         
             
              class Core
         
     | 
| 
       30 
39 
     | 
    
         
             
                ATTR_READER_NAMES = %i(
         
     | 
| 
         @@ -201,7 +210,7 @@ module Reline 
     | 
|
| 
       201 
210 
     | 
    
         
             
                    return nil
         
     | 
| 
       202 
211 
     | 
    
         
             
                  end
         
     | 
| 
       203 
212 
     | 
    
         
             
                  pre, target, post = retrieve_completion_block(true)
         
     | 
| 
       204 
     | 
    
         
            -
                  if target.nil? or target.empty? or target.size <= 3
         
     | 
| 
      
 213 
     | 
    
         
            +
                  if target.nil? or target.empty? or (completion_journey_data&.pointer == -1 and target.size <= 3)
         
     | 
| 
       205 
214 
     | 
    
         
             
                    return nil
         
     | 
| 
       206 
215 
     | 
    
         
             
                  end
         
     | 
| 
       207 
216 
     | 
    
         
             
                  if completion_journey_data and completion_journey_data.list
         
     | 
| 
         @@ -228,7 +237,8 @@ module Reline 
     | 
|
| 
       228 
237 
     | 
    
         
             
                    context.clear
         
     | 
| 
       229 
238 
     | 
    
         
             
                    context.push(cursor_pos_to_render, result, pointer, dialog)
         
     | 
| 
       230 
239 
     | 
    
         
             
                  end
         
     | 
| 
       231 
     | 
    
         
            -
                   
     | 
| 
      
 240 
     | 
    
         
            +
                  dialog.pointer = pointer
         
     | 
| 
      
 241 
     | 
    
         
            +
                  DialogRenderInfo.new(pos: cursor_pos_to_render, contents: result, scrollbar: true, height: 15)
         
     | 
| 
       232 
242 
     | 
    
         
             
                }
         
     | 
| 
       233 
243 
     | 
    
         
             
                Reline::DEFAULT_DIALOG_CONTEXT = Array.new
         
     | 
| 
       234 
244 
     | 
    
         | 
| 
         @@ -368,25 +378,9 @@ module Reline 
     | 
|
| 
       368 
378 
     | 
    
         
             
                      break
         
     | 
| 
       369 
379 
     | 
    
         
             
                    when :matching
         
     | 
| 
       370 
380 
     | 
    
         
             
                      if buffer.size == 1
         
     | 
| 
       371 
     | 
    
         
            -
                         
     | 
| 
       372 
     | 
    
         
            -
             
     | 
| 
       373 
     | 
    
         
            -
             
     | 
| 
       374 
     | 
    
         
            -
                            succ_c = Reline::IOGate.getc
         
     | 
| 
       375 
     | 
    
         
            -
                          }
         
     | 
| 
       376 
     | 
    
         
            -
                        rescue Timeout::Error # cancel matching only when first byte
         
     | 
| 
       377 
     | 
    
         
            -
                          block.([Reline::Key.new(c, c, false)])
         
     | 
| 
       378 
     | 
    
         
            -
                          break
         
     | 
| 
       379 
     | 
    
         
            -
                        else
         
     | 
| 
       380 
     | 
    
         
            -
                          if key_stroke.match_status(buffer.dup.push(succ_c)) == :unmatched
         
     | 
| 
       381 
     | 
    
         
            -
                            if c == "\e".ord
         
     | 
| 
       382 
     | 
    
         
            -
                              block.([Reline::Key.new(succ_c, succ_c | 0b10000000, true)])
         
     | 
| 
       383 
     | 
    
         
            -
                            else
         
     | 
| 
       384 
     | 
    
         
            -
                              block.([Reline::Key.new(c, c, false), Reline::Key.new(succ_c, succ_c, false)])
         
     | 
| 
       385 
     | 
    
         
            -
                            end
         
     | 
| 
       386 
     | 
    
         
            -
                            break
         
     | 
| 
       387 
     | 
    
         
            -
                          else
         
     | 
| 
       388 
     | 
    
         
            -
                            Reline::IOGate.ungetc(succ_c)
         
     | 
| 
       389 
     | 
    
         
            -
                          end
         
     | 
| 
      
 381 
     | 
    
         
            +
                        case read_2nd_character_of_key_sequence(keyseq_timeout, buffer, c, block)
         
     | 
| 
      
 382 
     | 
    
         
            +
                        when :break then break
         
     | 
| 
      
 383 
     | 
    
         
            +
                        when :next  then next
         
     | 
| 
       390 
384 
     | 
    
         
             
                        end
         
     | 
| 
       391 
385 
     | 
    
         
             
                      end
         
     | 
| 
       392 
386 
     | 
    
         
             
                    when :unmatched
         
     | 
| 
         @@ -403,6 +397,38 @@ module Reline 
     | 
|
| 
       403 
397 
     | 
    
         
             
                  end
         
     | 
| 
       404 
398 
     | 
    
         
             
                end
         
     | 
| 
       405 
399 
     | 
    
         | 
| 
      
 400 
     | 
    
         
            +
                private def read_2nd_character_of_key_sequence(keyseq_timeout, buffer, c, block)
         
     | 
| 
      
 401 
     | 
    
         
            +
                  begin
         
     | 
| 
      
 402 
     | 
    
         
            +
                    succ_c = nil
         
     | 
| 
      
 403 
     | 
    
         
            +
                    Timeout.timeout(keyseq_timeout / 1000.0) {
         
     | 
| 
      
 404 
     | 
    
         
            +
                      succ_c = Reline::IOGate.getc
         
     | 
| 
      
 405 
     | 
    
         
            +
                    }
         
     | 
| 
      
 406 
     | 
    
         
            +
                  rescue Timeout::Error # cancel matching only when first byte
         
     | 
| 
      
 407 
     | 
    
         
            +
                    block.([Reline::Key.new(c, c, false)])
         
     | 
| 
      
 408 
     | 
    
         
            +
                    return :break
         
     | 
| 
      
 409 
     | 
    
         
            +
                  else
         
     | 
| 
      
 410 
     | 
    
         
            +
                    case key_stroke.match_status(buffer.dup.push(succ_c))
         
     | 
| 
      
 411 
     | 
    
         
            +
                    when :unmatched
         
     | 
| 
      
 412 
     | 
    
         
            +
                      if c == "\e".ord
         
     | 
| 
      
 413 
     | 
    
         
            +
                        block.([Reline::Key.new(succ_c, succ_c | 0b10000000, true)])
         
     | 
| 
      
 414 
     | 
    
         
            +
                      else
         
     | 
| 
      
 415 
     | 
    
         
            +
                        block.([Reline::Key.new(c, c, false), Reline::Key.new(succ_c, succ_c, false)])
         
     | 
| 
      
 416 
     | 
    
         
            +
                      end
         
     | 
| 
      
 417 
     | 
    
         
            +
                      return :break
         
     | 
| 
      
 418 
     | 
    
         
            +
                    when :matching
         
     | 
| 
      
 419 
     | 
    
         
            +
                      Reline::IOGate.ungetc(succ_c)
         
     | 
| 
      
 420 
     | 
    
         
            +
                      return :next
         
     | 
| 
      
 421 
     | 
    
         
            +
                    when :matched
         
     | 
| 
      
 422 
     | 
    
         
            +
                      buffer << succ_c
         
     | 
| 
      
 423 
     | 
    
         
            +
                      expanded = key_stroke.expand(buffer).map{ |expanded_c|
         
     | 
| 
      
 424 
     | 
    
         
            +
                        Reline::Key.new(expanded_c, expanded_c, false)
         
     | 
| 
      
 425 
     | 
    
         
            +
                      }
         
     | 
| 
      
 426 
     | 
    
         
            +
                      block.(expanded)
         
     | 
| 
      
 427 
     | 
    
         
            +
                      return :break
         
     | 
| 
      
 428 
     | 
    
         
            +
                    end
         
     | 
| 
      
 429 
     | 
    
         
            +
                  end
         
     | 
| 
      
 430 
     | 
    
         
            +
                end
         
     | 
| 
      
 431 
     | 
    
         
            +
             
     | 
| 
       406 
432 
     | 
    
         
             
                private def read_escaped_key(keyseq_timeout, c, block)
         
     | 
| 
       407 
433 
     | 
    
         
             
                  begin
         
     | 
| 
       408 
434 
     | 
    
         
             
                    escaped_c = nil
         
     | 
| 
         @@ -454,7 +480,7 @@ module Reline 
     | 
|
| 
       454 
480 
     | 
    
         
             
              #--------------------------------------------------------
         
     | 
| 
       455 
481 
     | 
    
         | 
| 
       456 
482 
     | 
    
         
             
              (Core::ATTR_READER_NAMES).each { |name|
         
     | 
| 
       457 
     | 
    
         
            -
                def_single_delegators :core, "#{name}", "#{name}="
         
     | 
| 
      
 483 
     | 
    
         
            +
                def_single_delegators :core, :"#{name}", :"#{name}="
         
     | 
| 
       458 
484 
     | 
    
         
             
              }
         
     | 
| 
       459 
485 
     | 
    
         
             
              def_single_delegators :core, :input=, :output=
         
     | 
| 
       460 
486 
     | 
    
         
             
              def_single_delegators :core, :vi_editing_mode, :emacs_editing_mode
         
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,14 +1,14 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: reline
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 0.2.8.pre. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.2.8.pre.11
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - aycabta
         
     | 
| 
       8 
8 
     | 
    
         
             
            autorequire:
         
     | 
| 
       9 
9 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       10 
10 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
     | 
    
         
            -
            date: 2021-09 
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2021-10-09 00:00:00.000000000 Z
         
     | 
| 
       12 
12 
     | 
    
         
             
            dependencies:
         
     | 
| 
       13 
13 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       14 
14 
     | 
    
         
             
              name: io-console
         
     | 
| 
         @@ -47,7 +47,6 @@ files: 
     | 
|
| 
       47 
47 
     | 
    
         
             
            - lib/reline/key_stroke.rb
         
     | 
| 
       48 
48 
     | 
    
         
             
            - lib/reline/kill_ring.rb
         
     | 
| 
       49 
49 
     | 
    
         
             
            - lib/reline/line_editor.rb
         
     | 
| 
       50 
     | 
    
         
            -
            - lib/reline/line_editor.rb.orig
         
     | 
| 
       51 
50 
     | 
    
         
             
            - lib/reline/sibori.rb
         
     | 
| 
       52 
51 
     | 
    
         
             
            - lib/reline/terminfo.rb
         
     | 
| 
       53 
52 
     | 
    
         
             
            - lib/reline/unicode.rb
         
     | 
| 
         @@ -74,7 +73,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement 
     | 
|
| 
       74 
73 
     | 
    
         
             
                - !ruby/object:Gem::Version
         
     | 
| 
       75 
74 
     | 
    
         
             
                  version: 1.3.1
         
     | 
| 
       76 
75 
     | 
    
         
             
            requirements: []
         
     | 
| 
       77 
     | 
    
         
            -
            rubygems_version: 3. 
     | 
| 
      
 76 
     | 
    
         
            +
            rubygems_version: 3.1.6
         
     | 
| 
       78 
77 
     | 
    
         
             
            signing_key:
         
     | 
| 
       79 
78 
     | 
    
         
             
            specification_version: 4
         
     | 
| 
       80 
79 
     | 
    
         
             
            summary: Alternative GNU Readline or Editline implementation by pure Ruby.
         
     |