rb-readline 0.5.3 → 0.5.5
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/{README.rdoc → README.md} +24 -14
- data/Rakefile +1 -0
- data/lib/rbreadline/version.rb +1 -1
- data/lib/rbreadline.rb +64 -19
- data/lib/readline.rb +14 -4
- data/rb-readline.gemspec +3 -3
- metadata +6 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c3159d70047f7143ac3691670bf88e0d49962c03
|
4
|
+
data.tar.gz: bc91ac5ba0ac0c0a09da8f6e60d42be1044df171
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f81bd2d07418af204da27451fa28ad7ea58ea91f3c5e222fa8dff96afa6957233d72aa8512b1754e5aeefc5c8ca6020968e7b315f85bbefdc080335d42cd6828
|
7
|
+
data.tar.gz: c1a2292dd3db790d667a60b5b5af9d4ffb39bc8b8b86d9f839c572097cee256d3112c55c74fe9629d01f0ed6d40ef276230b4e6af31aaf58c4c5defe09614b9f
|
data/{README.rdoc → README.md}
RENAMED
@@ -1,28 +1,38 @@
|
|
1
|
-
|
1
|
+
# Description
|
2
2
|
|
3
3
|
The readline library provides a pure Ruby implementation of the GNU
|
4
4
|
readline C library, as well as the Readline extension that ships as part
|
5
5
|
of the standard library.
|
6
6
|
|
7
|
-
|
7
|
+
## Installation
|
8
8
|
|
9
|
-
|
9
|
+
gem install rb-readline
|
10
|
+
|
11
|
+
Or in a `Gemfile`:
|
12
|
+
|
13
|
+
gem 'rb-readline'
|
10
14
|
|
11
|
-
|
12
|
-
line = Readline::readline('> ')
|
13
|
-
break if line.nil? || line == 'quit'
|
14
|
-
Readline::HISTORY.push(line)
|
15
|
-
puts "You typed: #{line}"
|
16
|
-
end
|
15
|
+
## Synopsis
|
17
16
|
|
18
|
-
|
17
|
+
```ruby
|
18
|
+
require 'readline'
|
19
|
+
|
20
|
+
loop do
|
21
|
+
line = Readline::readline('> ')
|
22
|
+
break if line.nil? || line == 'quit'
|
23
|
+
Readline::HISTORY.push(line)
|
24
|
+
puts "You typed: #{line}"
|
25
|
+
end
|
26
|
+
```
|
27
|
+
|
28
|
+
## Compatibility
|
19
29
|
|
20
30
|
rb-readline should work on all Unix-like systems and Windows. It is regularly
|
21
31
|
used with MRI 1.8/1.9 and Rubinius. JRuby is not supported and there are no
|
22
32
|
plans to support it in the future - it comes bundled with a Java implementation
|
23
33
|
of Readline.
|
24
34
|
|
25
|
-
|
35
|
+
## Motivation
|
26
36
|
|
27
37
|
First, building the GNU readline library on MS Windows with Visual C++ is
|
28
38
|
almost impossible. However, certain libraries depend on readline. By providing
|
@@ -47,7 +57,7 @@ weak, and only provides a very limited subset of the actual GNU readline
|
|
47
57
|
library. By providing a pure Ruby implementation we allow 3rd party library
|
48
58
|
authors to write their own interface as they see fit.
|
49
59
|
|
50
|
-
|
60
|
+
## Tutorial
|
51
61
|
|
52
62
|
For an excellent tutorial on how to use Readline in practice, please see
|
53
63
|
Joseph Pecoraro's examples at http://bogojoker.com/readline/.
|
@@ -55,14 +65,14 @@ Joseph Pecoraro's examples at http://bogojoker.com/readline/.
|
|
55
65
|
You can also take a look at Ruby 1.9 stdlib Readline documentation located
|
56
66
|
at http://rubydoc.info/stdlib/readline/1.9.2/frames
|
57
67
|
|
58
|
-
|
68
|
+
## Alternatives
|
59
69
|
|
60
70
|
See Rawline for a library that began life in pure Ruby and provides an
|
61
71
|
interface that's probably more comfortable to Ruby programmer. It has certain
|
62
72
|
features that Readline does not. In addition, it provides a Readline
|
63
73
|
compatibility mode.
|
64
74
|
|
65
|
-
|
75
|
+
## Authors
|
66
76
|
|
67
77
|
* Park Heesob (C translation, code donated as part of bounty)
|
68
78
|
* Daniel Berger (Documentation and testing)
|
data/Rakefile
CHANGED
data/lib/rbreadline/version.rb
CHANGED
data/lib/rbreadline.rb
CHANGED
@@ -10,7 +10,7 @@
|
|
10
10
|
|
11
11
|
require "rbreadline/version"
|
12
12
|
|
13
|
-
class
|
13
|
+
class Integer
|
14
14
|
def ord; self; end
|
15
15
|
end
|
16
16
|
|
@@ -1555,7 +1555,7 @@ module RbReadline
|
|
1555
1555
|
end
|
1556
1556
|
|
1557
1557
|
if @hConsoleHandle
|
1558
|
-
csbi =
|
1558
|
+
csbi = Fiddle::Pointer.malloc(24)
|
1559
1559
|
@GetConsoleScreenBufferInfo.Call(@hConsoleHandle,csbi)
|
1560
1560
|
x,y = csbi[4,4].unpack('SS')
|
1561
1561
|
x = dpos
|
@@ -1812,7 +1812,7 @@ module RbReadline
|
|
1812
1812
|
|
1813
1813
|
def get_term_capabilities(buffer)
|
1814
1814
|
hash = {}
|
1815
|
-
`infocmp -C`.split(':').select{|x| x =~ /(.*)=(.*)/ and hash[$1]=$2.gsub('\\E',"\e").gsub(/\^(.)/){($1[0].ord ^ ((?a..?z).include?($1[0]) ? 0x60 : 0x40)).chr}}
|
1815
|
+
`infocmp -C`.split(':').select{|x| x =~ /(.*)=(.*)/ and hash[$1]=$2.gsub("\\r", "\r").gsub('\\E',"\e").gsub(/\^(.)/){($1[0].ord ^ ((?a..?z).include?($1[0]) ? 0x60 : 0x40)).chr}}
|
1816
1816
|
@_rl_term_at7 = hash["@7"]
|
1817
1817
|
@_rl_term_DC = hash["DC"]
|
1818
1818
|
@_rl_term_IC = hash["IC"]
|
@@ -1859,7 +1859,7 @@ module RbReadline
|
|
1859
1859
|
def _rl_get_screen_size(tty, ignore_env)
|
1860
1860
|
|
1861
1861
|
if @hConsoleHandle
|
1862
|
-
csbi =
|
1862
|
+
csbi = Fiddle::Pointer.malloc(24)
|
1863
1863
|
@GetConsoleScreenBufferInfo.Call(@hConsoleHandle,csbi)
|
1864
1864
|
wc,wr = csbi[0,4].unpack('SS')
|
1865
1865
|
# wr,wc, = `mode con`.scan(/\d+\n/).map{|x| x.to_i}
|
@@ -2392,9 +2392,54 @@ module RbReadline
|
|
2392
2392
|
nil
|
2393
2393
|
end
|
2394
2394
|
|
2395
|
+
def rl_translate_keyseq(seq)
|
2396
|
+
require 'strscan'
|
2397
|
+
|
2398
|
+
ss = StringScanner.new(seq)
|
2399
|
+
new_seq = ''
|
2400
|
+
|
2401
|
+
until ss.eos?
|
2402
|
+
char = ss.getch
|
2403
|
+
next new_seq << char unless char == '\\'
|
2404
|
+
|
2405
|
+
char = ss.getch
|
2406
|
+
new_seq << case char
|
2407
|
+
when 'a'
|
2408
|
+
"\007"
|
2409
|
+
when 'b'
|
2410
|
+
"\b"
|
2411
|
+
when 'd'
|
2412
|
+
RUBOUT
|
2413
|
+
when 'e'
|
2414
|
+
ESC
|
2415
|
+
when 'f'
|
2416
|
+
"\f"
|
2417
|
+
when 'n'
|
2418
|
+
NEWLINE
|
2419
|
+
when 'r'
|
2420
|
+
RETURN
|
2421
|
+
when 't'
|
2422
|
+
TAB
|
2423
|
+
when 'v'
|
2424
|
+
0x0B
|
2425
|
+
when '\\'
|
2426
|
+
'\\'
|
2427
|
+
when 'x'
|
2428
|
+
ss.scan(/\d\d/).to_i(16).chr
|
2429
|
+
when '0'..'7'
|
2430
|
+
ss.pos -= 1
|
2431
|
+
ss.scan(/\d\d\d/).to_i(8).chr
|
2432
|
+
else
|
2433
|
+
char
|
2434
|
+
end
|
2435
|
+
end
|
2436
|
+
|
2437
|
+
new_seq
|
2438
|
+
end
|
2439
|
+
|
2395
2440
|
# Bind KEY to FUNCTION. Returns non-zero if KEY is out of range.
|
2396
2441
|
def rl_bind_key(key, function)
|
2397
|
-
@_rl_keymap[key] = function
|
2442
|
+
@_rl_keymap[rl_translate_keyseq(key)] = function
|
2398
2443
|
@rl_binding_keymap = @_rl_keymap
|
2399
2444
|
0
|
2400
2445
|
end
|
@@ -2648,7 +2693,7 @@ module RbReadline
|
|
2648
2693
|
end
|
2649
2694
|
|
2650
2695
|
def vis_pos(line)
|
2651
|
-
@vis_lbreaks[line]
|
2696
|
+
@vis_lbreaks[line] || 0
|
2652
2697
|
end
|
2653
2698
|
|
2654
2699
|
def vis_line(line)
|
@@ -4022,7 +4067,7 @@ module RbReadline
|
|
4022
4067
|
def _rl_isearch_dispatch(cxt, c)
|
4023
4068
|
f = nil
|
4024
4069
|
|
4025
|
-
if c.
|
4070
|
+
if c.is_a?(Integer) && c < 0
|
4026
4071
|
cxt.sflags |= SF_FAILED
|
4027
4072
|
cxt.history_pos = cxt.last_found_line
|
4028
4073
|
return -1
|
@@ -4391,7 +4436,7 @@ module RbReadline
|
|
4391
4436
|
|
4392
4437
|
def call(*args)
|
4393
4438
|
args.each_with_index do |x, i|
|
4394
|
-
args[i], = [x == 0 ? nil : x].pack("p").unpack("l!*") if @proto[i] == "S"
|
4439
|
+
args[i], = [x == 0 ? nil : x].pack("p").unpack("l!*") if @proto[i] == "S" && !x.is_a?(Fiddle::Pointer)
|
4395
4440
|
args[i], = [x].pack("I").unpack("i") if @proto[i] == "I"
|
4396
4441
|
end
|
4397
4442
|
@func.call(*args).to_i || 0
|
@@ -4613,10 +4658,10 @@ module RbReadline
|
|
4613
4658
|
# number of character spaces to clear,
|
4614
4659
|
def space_to_eol(count)
|
4615
4660
|
if @hConsoleHandle
|
4616
|
-
csbi =
|
4661
|
+
csbi = Fiddle::Pointer.malloc(24)
|
4617
4662
|
@GetConsoleScreenBufferInfo.Call(@hConsoleHandle,csbi)
|
4618
4663
|
cursor_pos = csbi[4,4].unpack('L').first
|
4619
|
-
written =
|
4664
|
+
written = Fiddle::Pointer.malloc(4)
|
4620
4665
|
@FillConsoleOutputCharacter.Call(@hConsoleHandle,0x20,count,cursor_pos,written)
|
4621
4666
|
else
|
4622
4667
|
@rl_outstream.write(' ' * count)
|
@@ -5615,7 +5660,7 @@ module RbReadline
|
|
5615
5660
|
c = rl_read_key()
|
5616
5661
|
rl_unsetstate(RL_STATE_MOREINPUT)
|
5617
5662
|
|
5618
|
-
if c.
|
5663
|
+
if c.is_a?(Integer) && c < 0
|
5619
5664
|
return -1
|
5620
5665
|
end
|
5621
5666
|
|
@@ -6087,7 +6132,7 @@ module RbReadline
|
|
6087
6132
|
|
6088
6133
|
def alloc_history_entry(string, ts)
|
6089
6134
|
temp = Struct.new(:line,:data,:timestamp).new
|
6090
|
-
temp.line = string ? string.delete(0.chr) : string
|
6135
|
+
temp.line = string ? string.encode('UTF-8', invalid: :replace, undef: :replace, replace: '').delete(0.chr) : string
|
6091
6136
|
temp.data = nil
|
6092
6137
|
temp.timestamp = ts
|
6093
6138
|
|
@@ -6494,7 +6539,7 @@ module RbReadline
|
|
6494
6539
|
end
|
6495
6540
|
|
6496
6541
|
def _rl_internal_pager(lines)
|
6497
|
-
@rl_outstream.
|
6542
|
+
@rl_outstream.write("--More--")
|
6498
6543
|
@rl_outstream.flush
|
6499
6544
|
i = get_y_or_n(1)
|
6500
6545
|
_rl_erase_entire_line()
|
@@ -6610,7 +6655,7 @@ module RbReadline
|
|
6610
6655
|
if (c == 'n' || c == 'N' || c == RUBOUT)
|
6611
6656
|
return (0)
|
6612
6657
|
end
|
6613
|
-
if (c == ABORT_CHAR || (c.
|
6658
|
+
if (c == ABORT_CHAR || (c.is_a?(Integer) && c < 0))
|
6614
6659
|
_rl_abort_internal()
|
6615
6660
|
end
|
6616
6661
|
if (for_pager && (c == NEWLINE || c == RETURN))
|
@@ -6971,7 +7016,7 @@ module RbReadline
|
|
6971
7016
|
|
6972
7017
|
setting << " -ixoff"
|
6973
7018
|
|
6974
|
-
rl_bind_key(@_rl_tty_chars.t_start, :rl_restart_output)
|
7019
|
+
rl_bind_key(@_rl_tty_chars.t_start, :rl_restart_output) unless @_rl_tty_chars.t_start.nil?
|
6975
7020
|
@_rl_eof_char = @_rl_tty_chars.t_eof
|
6976
7021
|
|
6977
7022
|
#setting << " -isig"
|
@@ -7592,7 +7637,7 @@ module RbReadline
|
|
7592
7637
|
mbchar = ''
|
7593
7638
|
mb_len = _rl_read_mbchar(mbchar, MB_LEN_MAX)
|
7594
7639
|
|
7595
|
-
if (mbchar.
|
7640
|
+
if (mbchar.is_a?(Integer) && c < 0) || mbchar == 0.chr
|
7596
7641
|
return -1
|
7597
7642
|
end
|
7598
7643
|
|
@@ -7777,7 +7822,7 @@ module RbReadline
|
|
7777
7822
|
rl_restore_prompt()
|
7778
7823
|
rl_clear_message()
|
7779
7824
|
rl_unsetstate(RL_STATE_NUMERICARG)
|
7780
|
-
if key.
|
7825
|
+
if key.is_a?(Integer) && key < 0
|
7781
7826
|
return -1
|
7782
7827
|
end
|
7783
7828
|
return (_rl_dispatch(key, @_rl_keymap))
|
@@ -8735,7 +8780,7 @@ module RbReadline
|
|
8735
8780
|
c = rl_read_key()
|
8736
8781
|
rl_unsetstate(RL_STATE_MOREINPUT)
|
8737
8782
|
|
8738
|
-
break if c.
|
8783
|
+
break if c.is_a?(Integer) && c < 0
|
8739
8784
|
|
8740
8785
|
mbchar << c
|
8741
8786
|
mb_len += 1
|
@@ -8765,7 +8810,7 @@ module RbReadline
|
|
8765
8810
|
# Read more for multibyte character
|
8766
8811
|
rl_setstate(RL_STATE_MOREINPUT)
|
8767
8812
|
c = rl_read_key()
|
8768
|
-
break if c.
|
8813
|
+
break if c.is_a?(Integer) && c < 0
|
8769
8814
|
rl_unsetstate(RL_STATE_MOREINPUT)
|
8770
8815
|
else
|
8771
8816
|
break
|
data/lib/readline.rb
CHANGED
@@ -316,6 +316,16 @@ module Readline
|
|
316
316
|
RbReadline.rl_point
|
317
317
|
end
|
318
318
|
|
319
|
+
# Temporarily disable warnings and call a block
|
320
|
+
#
|
321
|
+
def self.silence_warnings(&block)
|
322
|
+
warn_level = $VERBOSE
|
323
|
+
$VERBOSE = nil
|
324
|
+
result = block.call
|
325
|
+
$VERBOSE = warn_level
|
326
|
+
result
|
327
|
+
end
|
328
|
+
|
319
329
|
# The History class encapsulates a history of all commands entered by
|
320
330
|
# users at the prompt, providing an interface for inspection and retrieval
|
321
331
|
# of all commands.
|
@@ -455,7 +465,7 @@ module Readline
|
|
455
465
|
|
456
466
|
end
|
457
467
|
|
458
|
-
HISTORY = History
|
468
|
+
silence_warnings { HISTORY = History }
|
459
469
|
|
460
470
|
# The Fcomp class provided to encapsulate typical filename completion
|
461
471
|
# procedure. You will not typically use this directly, but will instead
|
@@ -483,7 +493,7 @@ module Readline
|
|
483
493
|
end
|
484
494
|
end
|
485
495
|
|
486
|
-
FILENAME_COMPLETION_PROC = Fcomp
|
496
|
+
silence_warnings { FILENAME_COMPLETION_PROC = Fcomp }
|
487
497
|
|
488
498
|
# The Ucomp class provided to encapsulate typical filename completion
|
489
499
|
# procedure. You will not typically use this directly, but will instead
|
@@ -514,13 +524,13 @@ module Readline
|
|
514
524
|
end
|
515
525
|
end
|
516
526
|
|
517
|
-
USERNAME_COMPLETION_PROC = Ucomp
|
527
|
+
silence_warnings { USERNAME_COMPLETION_PROC = Ucomp }
|
518
528
|
|
519
529
|
RbReadline.rl_readline_name = "Ruby"
|
520
530
|
|
521
531
|
RbReadline.using_history()
|
522
532
|
|
523
|
-
VERSION = RbReadline.rl_library_version
|
533
|
+
silence_warnings { VERSION = RbReadline.rl_library_version }
|
524
534
|
|
525
535
|
module_function :readline
|
526
536
|
|
data/rb-readline.gemspec
CHANGED
@@ -34,7 +34,7 @@ spec = Gem::Specification.new do |s|
|
|
34
34
|
# components, files and paths
|
35
35
|
s.files = Dir[
|
36
36
|
"{bench,examples,lib,test}/**/*.rb",
|
37
|
-
"README.
|
37
|
+
"README.md",
|
38
38
|
"LICENSE",
|
39
39
|
"CHANGES",
|
40
40
|
"Rakefile",
|
@@ -45,7 +45,7 @@ spec = Gem::Specification.new do |s|
|
|
45
45
|
s.require_path = 'lib'
|
46
46
|
|
47
47
|
# documentation
|
48
|
-
s.rdoc_options << '--main' << 'README.
|
48
|
+
s.rdoc_options << '--main' << 'README.md' << '--title' << 'Rb-Readline - Documentation'
|
49
49
|
|
50
|
-
s.extra_rdoc_files = %w(README.
|
50
|
+
s.extra_rdoc_files = %w(README.md LICENSE CHANGES)
|
51
51
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rb-readline
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Park Heesob
|
@@ -11,7 +11,7 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
|
-
date:
|
14
|
+
date: 2017-07-29 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: rake
|
@@ -52,13 +52,13 @@ email:
|
|
52
52
|
executables: []
|
53
53
|
extensions: []
|
54
54
|
extra_rdoc_files:
|
55
|
-
- README.
|
55
|
+
- README.md
|
56
56
|
- LICENSE
|
57
57
|
- CHANGES
|
58
58
|
files:
|
59
59
|
- CHANGES
|
60
60
|
- LICENSE
|
61
|
-
- README.
|
61
|
+
- README.md
|
62
62
|
- Rakefile
|
63
63
|
- bench/_rl_adjust_point.rb
|
64
64
|
- examples/example_readline.rb
|
@@ -83,7 +83,7 @@ metadata: {}
|
|
83
83
|
post_install_message:
|
84
84
|
rdoc_options:
|
85
85
|
- "--main"
|
86
|
-
- README.
|
86
|
+
- README.md
|
87
87
|
- "--title"
|
88
88
|
- Rb-Readline - Documentation
|
89
89
|
require_paths:
|
@@ -100,7 +100,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
100
100
|
version: 1.3.5
|
101
101
|
requirements: []
|
102
102
|
rubyforge_project:
|
103
|
-
rubygems_version: 2.
|
103
|
+
rubygems_version: 2.5.1
|
104
104
|
signing_key:
|
105
105
|
specification_version: 4
|
106
106
|
summary: Pure-Ruby Readline Implementation
|