[前][次][番号順一覧][スレッド一覧]

ruby-changes:67623

From: aycabta <ko1@a...>
Date: Mon, 6 Sep 2021 05:24:27 +0900 (JST)
Subject: [ruby-changes:67623] 348bb62331 (master): [ruby/reline] Cut out read_2nd_character_of_key_sequence

https://git.ruby-lang.org/ruby.git/commit/?id=348bb62331

From 348bb623314c7ed87cfd7ed22f321f89e1093a8d Mon Sep 17 00:00:00 2001
From: aycabta <aycabta@g...>
Date: Mon, 6 Sep 2021 04:48:10 +0900
Subject: [ruby/reline] Cut out read_2nd_character_of_key_sequence

https://github.com/ruby/reline/commit/92518d1dee
---
 lib/reline.rb | 62 +++++++++++++++++++++++++++++++++--------------------------
 1 file changed, 35 insertions(+), 27 deletions(-)

diff --git a/lib/reline.rb b/lib/reline.rb
index 82337c1..57a21b6 100644
--- a/lib/reline.rb
+++ b/lib/reline.rb
@@ -381,33 +381,9 @@ module Reline https://github.com/ruby/ruby/blob/trunk/lib/reline.rb#L381
           break
         when :matching
           if buffer.size == 1
-            begin
-              succ_c = nil
-              Timeout.timeout(keyseq_timeout / 1000.0) {
-                succ_c = Reline::IOGate.getc
-              }
-            rescue Timeout::Error # cancel matching only when first byte
-              block.([Reline::Key.new(c, c, false)])
-              break
-            else
-              case key_stroke.match_status(buffer.dup.push(succ_c))
-              when :unmatched
-                if c == "\e".ord
-                  block.([Reline::Key.new(succ_c, succ_c | 0b10000000, true)])
-                else
-                  block.([Reline::Key.new(c, c, false), Reline::Key.new(succ_c, succ_c, false)])
-                end
-                break
-              when :matching
-                Reline::IOGate.ungetc(succ_c)
-              when :matched
-                buffer << succ_c
-                expanded = key_stroke.expand(buffer).map{ |expanded_c|
-                  Reline::Key.new(expanded_c, expanded_c, false)
-                }
-                block.(expanded)
-                break
-              end
+            case read_2nd_character_of_key_sequence(keyseq_timeout, buffer, c, block)
+            when :break then break
+            when :next  then next
             end
           end
         when :unmatched
@@ -424,6 +400,38 @@ module Reline https://github.com/ruby/ruby/blob/trunk/lib/reline.rb#L400
       end
     end
 
+    private def read_2nd_character_of_key_sequence(keyseq_timeout, buffer, c, block)
+      begin
+        succ_c = nil
+        Timeout.timeout(keyseq_timeout / 1000.0) {
+          succ_c = Reline::IOGate.getc
+        }
+      rescue Timeout::Error # cancel matching only when first byte
+        block.([Reline::Key.new(c, c, false)])
+        return :break
+      else
+        case key_stroke.match_status(buffer.dup.push(succ_c))
+        when :unmatched
+          if c == "\e".ord
+            block.([Reline::Key.new(succ_c, succ_c | 0b10000000, true)])
+          else
+            block.([Reline::Key.new(c, c, false), Reline::Key.new(succ_c, succ_c, false)])
+          end
+          return :break
+        when :matching
+          Reline::IOGate.ungetc(succ_c)
+          return :next
+        when :matched
+          buffer << succ_c
+          expanded = key_stroke.expand(buffer).map{ |expanded_c|
+            Reline::Key.new(expanded_c, expanded_c, false)
+          }
+          block.(expanded)
+          return :break
+        end
+      end
+    end
+
     private def read_escaped_key(keyseq_timeout, c, block)
       begin
         escaped_c = nil
-- 
cgit v1.1


--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]