reline 0.3.7 → 0.3.8
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 +17 -18
- data/lib/reline/general_io.rb +1 -2
- data/lib/reline/line_editor.rb +2 -0
- data/lib/reline/version.rb +1 -1
- data/lib/reline/windows.rb +1 -1
- data/lib/reline.rb +14 -26
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 709b8943f16732f771d45da031e9676dc01c8b75f0410134a8b1fa8ab590d294
|
4
|
+
data.tar.gz: 04aa52c6ea6a8939402a1554b42bce891bd65a13be6b76cbfd3f4859df1455d4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ab8a124f732cfa4b8522f397a546fc89ea93f188ca9f44f7f560ea2afb00abbe3b95486c17a20b826d360a8bb064ca441bd357acffe1eb4ec371fbf6380cd37d
|
7
|
+
data.tar.gz: e756e58d4ae8929045998b8278fcee48ba1867741cc4d47bd72beb3e3a74902938d4c8a9dcd4c0452f20b25f5b4fe05eb96929bc39c28f326dc88c9bdf7be458
|
data/lib/reline/ansi.rb
CHANGED
@@ -1,6 +1,5 @@
|
|
1
1
|
require 'io/console'
|
2
2
|
require 'io/wait'
|
3
|
-
require 'timeout'
|
4
3
|
require_relative 'terminfo'
|
5
4
|
|
6
5
|
class Reline::ANSI
|
@@ -154,11 +153,13 @@ class Reline::ANSI
|
|
154
153
|
end
|
155
154
|
|
156
155
|
@@buf = []
|
157
|
-
def self.inner_getc
|
156
|
+
def self.inner_getc(timeout_second)
|
158
157
|
unless @@buf.empty?
|
159
158
|
return @@buf.shift
|
160
159
|
end
|
161
160
|
until c = @@input.raw(intr: true) { @@input.wait_readable(0.1) && @@input.getbyte }
|
161
|
+
timeout_second -= 0.1
|
162
|
+
return nil if timeout_second <= 0
|
162
163
|
Reline.core.line_editor.resize
|
163
164
|
end
|
164
165
|
(c == 0x16 && @@input.raw(min: 0, time: 0, &:getbyte)) || c
|
@@ -172,40 +173,38 @@ class Reline::ANSI
|
|
172
173
|
@@in_bracketed_paste_mode = false
|
173
174
|
START_BRACKETED_PASTE = String.new("\e[200~,", encoding: Encoding::ASCII_8BIT)
|
174
175
|
END_BRACKETED_PASTE = String.new("\e[200~.", encoding: Encoding::ASCII_8BIT)
|
175
|
-
def self.getc_with_bracketed_paste
|
176
|
+
def self.getc_with_bracketed_paste(timeout_second)
|
176
177
|
buffer = String.new(encoding: Encoding::ASCII_8BIT)
|
177
|
-
buffer << inner_getc
|
178
|
+
buffer << inner_getc(timeout_second)
|
178
179
|
while START_BRACKETED_PASTE.start_with?(buffer) or END_BRACKETED_PASTE.start_with?(buffer) do
|
179
180
|
if START_BRACKETED_PASTE == buffer
|
180
181
|
@@in_bracketed_paste_mode = true
|
181
|
-
return inner_getc
|
182
|
+
return inner_getc(timeout_second)
|
182
183
|
elsif END_BRACKETED_PASTE == buffer
|
183
184
|
@@in_bracketed_paste_mode = false
|
184
185
|
ungetc(-1)
|
185
|
-
return inner_getc
|
186
|
+
return inner_getc(timeout_second)
|
186
187
|
end
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
succ_c = inner_getc
|
191
|
-
}
|
192
|
-
rescue Timeout::Error
|
193
|
-
break
|
194
|
-
else
|
188
|
+
succ_c = inner_getc(Reline.core.config.keyseq_timeout)
|
189
|
+
|
190
|
+
if succ_c
|
195
191
|
buffer << succ_c
|
192
|
+
else
|
193
|
+
break
|
196
194
|
end
|
197
195
|
end
|
198
196
|
buffer.bytes.reverse_each do |ch|
|
199
197
|
ungetc ch
|
200
198
|
end
|
201
|
-
inner_getc
|
199
|
+
inner_getc(timeout_second)
|
202
200
|
end
|
203
201
|
|
204
|
-
|
202
|
+
# if the usage expects to wait indefinitely, use Float::INFINITY for timeout_second
|
203
|
+
def self.getc(timeout_second)
|
205
204
|
if Reline.core.config.enable_bracketed_paste
|
206
|
-
getc_with_bracketed_paste
|
205
|
+
getc_with_bracketed_paste(timeout_second)
|
207
206
|
else
|
208
|
-
inner_getc
|
207
|
+
inner_getc(timeout_second)
|
209
208
|
end
|
210
209
|
end
|
211
210
|
|
data/lib/reline/general_io.rb
CHANGED
data/lib/reline/line_editor.rb
CHANGED
@@ -2696,6 +2696,7 @@ class Reline::LineEditor
|
|
2696
2696
|
@cursor_max -= width
|
2697
2697
|
end
|
2698
2698
|
end
|
2699
|
+
alias_method :kill_word, :em_delete_next_word
|
2699
2700
|
|
2700
2701
|
private def ed_delete_prev_word(key)
|
2701
2702
|
if @byte_pointer > 0
|
@@ -2707,6 +2708,7 @@ class Reline::LineEditor
|
|
2707
2708
|
@cursor_max -= width
|
2708
2709
|
end
|
2709
2710
|
end
|
2711
|
+
alias_method :backward_kill_word, :ed_delete_prev_word
|
2710
2712
|
|
2711
2713
|
private def ed_transpose_chars(key)
|
2712
2714
|
if @byte_pointer > 0
|
data/lib/reline/version.rb
CHANGED
data/lib/reline/windows.rb
CHANGED
data/lib/reline.rb
CHANGED
@@ -1,5 +1,4 @@
|
|
1
1
|
require 'io/console'
|
2
|
-
require 'timeout'
|
3
2
|
require 'forwardable'
|
4
3
|
require 'reline/version'
|
5
4
|
require 'reline/config'
|
@@ -397,7 +396,7 @@ module Reline
|
|
397
396
|
private def read_io(keyseq_timeout, &block)
|
398
397
|
buffer = []
|
399
398
|
loop do
|
400
|
-
c = io_gate.getc
|
399
|
+
c = io_gate.getc(Float::INFINITY)
|
401
400
|
if c == -1
|
402
401
|
result = :unmatched
|
403
402
|
@bracketed_paste_finished = true
|
@@ -434,15 +433,8 @@ module Reline
|
|
434
433
|
end
|
435
434
|
|
436
435
|
private def read_2nd_character_of_key_sequence(keyseq_timeout, buffer, c, block)
|
437
|
-
|
438
|
-
|
439
|
-
Timeout.timeout(keyseq_timeout / 1000.0) {
|
440
|
-
succ_c = io_gate.getc
|
441
|
-
}
|
442
|
-
rescue Timeout::Error # cancel matching only when first byte
|
443
|
-
block.([Reline::Key.new(c, c, false)])
|
444
|
-
return :break
|
445
|
-
else
|
436
|
+
succ_c = io_gate.getc(keyseq_timeout.fdiv(1000))
|
437
|
+
if succ_c
|
446
438
|
case key_stroke.match_status(buffer.dup.push(succ_c))
|
447
439
|
when :unmatched
|
448
440
|
if c == "\e".ord
|
@@ -462,27 +454,23 @@ module Reline
|
|
462
454
|
block.(expanded)
|
463
455
|
return :break
|
464
456
|
end
|
457
|
+
else
|
458
|
+
block.([Reline::Key.new(c, c, false)])
|
459
|
+
return :break
|
465
460
|
end
|
466
461
|
end
|
467
462
|
|
468
463
|
private def read_escaped_key(keyseq_timeout, c, block)
|
469
|
-
|
470
|
-
|
471
|
-
|
472
|
-
escaped_c = io_gate.getc
|
473
|
-
}
|
474
|
-
rescue Timeout::Error # independent ESC
|
464
|
+
escaped_c = io_gate.getc(keyseq_timeout.fdiv(1000))
|
465
|
+
|
466
|
+
if escaped_c.nil?
|
475
467
|
block.([Reline::Key.new(c, c, false)])
|
468
|
+
elsif escaped_c >= 128 # maybe, first byte of multi byte
|
469
|
+
block.([Reline::Key.new(c, c, false), Reline::Key.new(escaped_c, escaped_c, false)])
|
470
|
+
elsif escaped_c == "\e".ord # escape twice
|
471
|
+
block.([Reline::Key.new(c, c, false), Reline::Key.new(c, c, false)])
|
476
472
|
else
|
477
|
-
|
478
|
-
block.([Reline::Key.new(c, c, false)])
|
479
|
-
elsif escaped_c >= 128 # maybe, first byte of multi byte
|
480
|
-
block.([Reline::Key.new(c, c, false), Reline::Key.new(escaped_c, escaped_c, false)])
|
481
|
-
elsif escaped_c == "\e".ord # escape twice
|
482
|
-
block.([Reline::Key.new(c, c, false), Reline::Key.new(c, c, false)])
|
483
|
-
else
|
484
|
-
block.([Reline::Key.new(escaped_c, escaped_c | 0b10000000, true)])
|
485
|
-
end
|
473
|
+
block.([Reline::Key.new(escaped_c, escaped_c | 0b10000000, true)])
|
486
474
|
end
|
487
475
|
end
|
488
476
|
|
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.3.
|
4
|
+
version: 0.3.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- aycabta
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-08-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: io-console
|
@@ -72,7 +72,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
72
72
|
- !ruby/object:Gem::Version
|
73
73
|
version: '0'
|
74
74
|
requirements: []
|
75
|
-
rubygems_version: 3.4.
|
75
|
+
rubygems_version: 3.4.10
|
76
76
|
signing_key:
|
77
77
|
specification_version: 4
|
78
78
|
summary: Alternative GNU Readline or Editline implementation by pure Ruby.
|