mini_readline 0.0.4 → 0.0.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.md +19 -4
- data/lib/mini_readline.rb +4 -6
- data/lib/mini_readline/options.rb +2 -1
- data/lib/mini_readline/read_line.rb +30 -11
- data/lib/mini_readline/read_line/edit.rb +3 -15
- data/lib/mini_readline/read_line/edit/word_left.rb +2 -2
- data/lib/mini_readline/read_line/edit/word_right.rb +2 -4
- data/lib/mini_readline/read_line/edit_window.rb +1 -1
- data/lib/mini_readline/read_line/history.rb +1 -1
- data/lib/mini_readline/read_line/no_history.rb +36 -0
- data/lib/mini_readline/version.rb +1 -1
- data/mini_readline.gemspec +2 -0
- data/tests/mini_readline_tests.rb +11 -2
- metadata +31 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5cb399d7a4ffc7fcf703330024c6422386ff2c67
|
4
|
+
data.tar.gz: 748e2eacc096c0eadd51b84f79586b411d1abfa6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 63c11cfeaf488a056405e9b8f6b0c07536b6ef3727d7d584b516f2252c1af8272fe35c2f35f9c5b41d7d2c5de13f8b5b7bc09a9329b3e12db23e03c7da2db939
|
7
|
+
data.tar.gz: acc1855c61e90bba831229f9a05bbfc125371075ba48a4bd8baf2a5fbd695c18495ca4244c1ca19d76ea5bda978a72dfcc56aa65df3622bfbab9ab50e05834d3
|
data/README.md
CHANGED
@@ -59,7 +59,7 @@ Erase All | Escape | Ctrl-L
|
|
59
59
|
### Notes
|
60
60
|
* The label "Other" is an umbrella that bundles together the Linux, Mac,
|
61
61
|
and Cygwin platforms.
|
62
|
-
* References to
|
62
|
+
* References to Pad keys under Windows assume that Num Lock is not engaged.
|
63
63
|
|
64
64
|
## Usage
|
65
65
|
|
@@ -135,11 +135,25 @@ hist << "launch --weapons:nuclear --all"
|
|
135
135
|
```
|
136
136
|
|
137
137
|
### Options
|
138
|
-
In mini_readline, options exist at
|
138
|
+
In mini_readline, options exist at three levels:
|
139
139
|
* The MiniReadline module hash BASE_OPTIONS. These options are shared by
|
140
|
-
all instances of the Readline class.
|
140
|
+
all instances of the Readline class. These options can be modified by
|
141
|
+
changing entries in the MiniReadline::BASE_OPTIONS hash.
|
142
|
+
* The instance options associated with each instance of the Readline class.
|
143
|
+
These options may be specified when a Readline instance is created (with new)
|
144
|
+
or by getting the instance options with the instance_options property and
|
145
|
+
adding/changing entries to/in it.
|
141
146
|
* The options hash argument of the Readline class's readline instance method.
|
142
147
|
|
148
|
+
<br>The options in effect during a read line operation are expressed as:
|
149
|
+
|
150
|
+
```ruby
|
151
|
+
MiniReadline::BASE_OPTIONS.merge(instance_options).merge(options)
|
152
|
+
```
|
153
|
+
<br>This means that instance_options entries override those in BASE_OPTION and
|
154
|
+
readline parameter option entries override both instance_options and BASE_OPTION
|
155
|
+
entries.
|
156
|
+
|
143
157
|
<br>The available options are described below:
|
144
158
|
```ruby
|
145
159
|
BASE_OPTIONS = {
|
@@ -148,6 +162,7 @@ BASE_OPTIONS = {
|
|
148
162
|
:alt_prompt => "<< ", #The prompt when scrolled.
|
149
163
|
#Set to nil for no alt prompt.
|
150
164
|
|
165
|
+
:history => false, #Is the history buffer enabled?
|
151
166
|
:no_blanks => true, #No empty lines in history.
|
152
167
|
:no_dups => true, #No duplicate lines in history.
|
153
168
|
|
@@ -210,7 +225,7 @@ and not go bannanas. To test the behavior of the standard readline library, use:
|
|
210
225
|
$ ruby sire.rb old
|
211
226
|
|
212
227
|
To test the local copy of mini_readline in the lib folder instead of the
|
213
|
-
system gem, use this
|
228
|
+
system gem, use this:
|
214
229
|
|
215
230
|
$ ruby sire.rb local
|
216
231
|
|
data/lib/mini_readline.rb
CHANGED
@@ -12,14 +12,12 @@ require_relative "mini_readline/raw_term"
|
|
12
12
|
#* mini_readline.rb - The root file that gathers up all the system's parts.
|
13
13
|
module MiniReadline
|
14
14
|
|
15
|
-
#The
|
16
|
-
@
|
15
|
+
#The shared instance of Readline.
|
16
|
+
@reader = Readline.new()
|
17
17
|
|
18
18
|
#The (limited) compatibility module function.
|
19
|
-
|
20
|
-
|
21
|
-
def self.readline(prompt, history = false)
|
22
|
-
@readers[history].readline(prompt)
|
19
|
+
def self.readline(prompt, history = nil)
|
20
|
+
@reader.readline(prompt, history: history)
|
23
21
|
end
|
24
22
|
end
|
25
23
|
|
@@ -7,8 +7,9 @@ module MiniReadline
|
|
7
7
|
BASE_OPTIONS = {:window_width => 79, #The width of the edit area.
|
8
8
|
:scroll_step => 12, #The amount scrolled.
|
9
9
|
:alt_prompt => "<< ", #The prompt when scrolled.
|
10
|
-
#Set to nil
|
10
|
+
#Set to nil to use main prompt.
|
11
11
|
|
12
|
+
:history => false, #Is the history buffer enabled?
|
12
13
|
:no_blanks => true, #No empty lines in history.
|
13
14
|
:no_dups => true, #No duplicate lines in history.
|
14
15
|
|
@@ -1,6 +1,9 @@
|
|
1
1
|
# coding: utf-8
|
2
2
|
|
3
3
|
require_relative 'read_line/edit'
|
4
|
+
require_relative 'read_line/history'
|
5
|
+
require_relative 'read_line/no_history'
|
6
|
+
|
4
7
|
|
5
8
|
#* read_line.rb - The ReadLine class that does the actual work.
|
6
9
|
module MiniReadline
|
@@ -10,24 +13,31 @@ module MiniReadline
|
|
10
13
|
#the optional command history.
|
11
14
|
class Readline
|
12
15
|
|
16
|
+
#The options specifically associated with this instance.
|
17
|
+
attr_reader :instance_options
|
18
|
+
|
13
19
|
#Setup the instance of the mini line editor.
|
14
20
|
#<br>Parameters:
|
15
21
|
#* buffer - An array of strings used to contain the history. Use an empty
|
16
|
-
# array to have a history buffer with no initial entries.
|
17
|
-
|
18
|
-
|
19
|
-
|
22
|
+
# array to have a history buffer with no initial entries.
|
23
|
+
#* instance_options - A hash of options owned by this \Readline instance.
|
24
|
+
#<br>Notes
|
25
|
+
#* In order to specify any instance options, buffer must also be specified.
|
26
|
+
def initialize(buffer=[], instance_options={})
|
27
|
+
@instance_options = instance_options
|
28
|
+
@history = History.new(buffer)
|
29
|
+
@no_history = NoHistory.new
|
20
30
|
end
|
21
31
|
|
22
32
|
#Get the history buffer of this read line instance.
|
23
33
|
def history
|
24
|
-
@
|
34
|
+
@history.history
|
25
35
|
end
|
26
36
|
|
27
37
|
#Read a line from the console with edit and history.
|
28
38
|
#<br>Parameters:
|
29
39
|
#* prompt - A string used to prompt the user. '>' is popular.
|
30
|
-
#* options - A hash of options; Typically :
|
40
|
+
#* options - A hash of options; Typically symbol: value
|
31
41
|
def readline(prompt, options = {})
|
32
42
|
initialize_parms(prompt, options)
|
33
43
|
@edit.edit_process
|
@@ -38,14 +48,23 @@ module MiniReadline
|
|
38
48
|
#Initialize the read line process. This basically process the arguments
|
39
49
|
#of the readline method.
|
40
50
|
def initialize_parms(prompt, options)
|
41
|
-
|
42
|
-
(@term = @options[:term]).initialize_parms
|
43
|
-
|
51
|
+
set_options(options)
|
44
52
|
set_prompt(prompt)
|
45
|
-
|
53
|
+
|
54
|
+
history = @options[:history] ? @history : @no_history
|
55
|
+
@edit = Edit.new(history, @options)
|
56
|
+
|
57
|
+
@history.initialize_parms(@options)
|
58
|
+
end
|
59
|
+
|
60
|
+
#Set up the options
|
61
|
+
def set_options(options)
|
62
|
+
@options = MiniReadline::BASE_OPTIONS.merge(instance_options)
|
63
|
+
@options.merge!(options)
|
64
|
+
(@term = @options[:term]).initialize_parms
|
46
65
|
end
|
47
66
|
|
48
|
-
#Set up the prompt
|
67
|
+
#Set up the prompt.
|
49
68
|
def set_prompt(prompt)
|
50
69
|
@options[:base_prompt] = prompt
|
51
70
|
@options[:scroll_prompt] = @options[:alt_prompt] || prompt
|
@@ -1,7 +1,6 @@
|
|
1
1
|
# coding: utf-8
|
2
2
|
|
3
3
|
require_relative 'edit_window'
|
4
|
-
require_relative 'history'
|
5
4
|
|
6
5
|
require_relative 'edit/insert_text'
|
7
6
|
require_relative 'edit/enter'
|
@@ -31,21 +30,15 @@ module MiniReadline
|
|
31
30
|
class Edit
|
32
31
|
|
33
32
|
#Set up the edit instance.
|
34
|
-
def initialize(
|
35
|
-
@history = History.new(buffer)
|
36
|
-
@edit_window = EditWindow.new
|
37
|
-
end
|
38
|
-
|
39
|
-
#Set up the initial edit settings.
|
40
|
-
def initialize_edit_parms(options)
|
33
|
+
def initialize(history, options)
|
41
34
|
@options = options
|
35
|
+
@history = history
|
42
36
|
@term = @options[:term]
|
43
37
|
@edit_posn = 0
|
44
38
|
@edit_buffer = ""
|
45
39
|
@working = true
|
46
40
|
|
47
|
-
@edit_window.
|
48
|
-
@history.initialize_parms(@options)
|
41
|
+
@edit_window = EditWindow.new(@options)
|
49
42
|
end
|
50
43
|
|
51
44
|
#The main edit buffer
|
@@ -59,11 +52,6 @@ module MiniReadline
|
|
59
52
|
edit_buffer.length
|
60
53
|
end
|
61
54
|
|
62
|
-
#Get the history array for this edit instance.
|
63
|
-
def history
|
64
|
-
@history.history
|
65
|
-
end
|
66
|
-
|
67
55
|
#Interact with the user
|
68
56
|
def edit_process
|
69
57
|
result = edit_loop
|
@@ -9,8 +9,8 @@ module MiniReadline
|
|
9
9
|
#A little more to the left please!
|
10
10
|
def word_left(_keyboard_args)
|
11
11
|
if @edit_posn > 0
|
12
|
-
|
13
|
-
@edit_posn = posn ? posn
|
12
|
+
left = @edit_buffer[0...@edit_posn]
|
13
|
+
@edit_posn = (posn = left.rindex(/\s\S/)) ? posn+1 : 0
|
14
14
|
else
|
15
15
|
@term.beep
|
16
16
|
end
|
@@ -8,11 +8,9 @@ module MiniReadline
|
|
8
8
|
|
9
9
|
#A little more to the right please!
|
10
10
|
def word_right(_keyboard_args)
|
11
|
-
|
12
|
-
|
13
|
-
if @edit_posn < len
|
11
|
+
if @edit_posn < length
|
14
12
|
right = @edit_buffer[(@edit_posn+1)..-1]
|
15
|
-
@edit_posn = (posn = /\s\S/
|
13
|
+
@edit_posn = (posn = right.index(/\s\S/)) ? @edit_posn+posn+2 : length
|
16
14
|
else
|
17
15
|
@term.beep
|
18
16
|
end
|
@@ -10,7 +10,7 @@ module MiniReadline
|
|
10
10
|
class EditWindow
|
11
11
|
|
12
12
|
#Determine the edit window limits.
|
13
|
-
def
|
13
|
+
def initialize(options)
|
14
14
|
@options = options
|
15
15
|
@base_width = window_width - @options[:base_prompt].length
|
16
16
|
@scroll_width = window_width - @options[:scroll_prompt].length
|
@@ -0,0 +1,36 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
#* read_line/no_history.rb - Support for the edit without history.
|
4
|
+
module MiniReadline
|
5
|
+
|
6
|
+
#* read_line/no_history.rb - Support for the edit without history.
|
7
|
+
class NoHistory
|
8
|
+
|
9
|
+
#Get the history object ready for the next read line operation. NOP
|
10
|
+
def initialize_parms(_options)
|
11
|
+
end
|
12
|
+
|
13
|
+
#Go to the end of the history array. NOP
|
14
|
+
def goto_end_of_history
|
15
|
+
end
|
16
|
+
|
17
|
+
#Get the previous history string. NOP
|
18
|
+
def get_previous_history
|
19
|
+
false
|
20
|
+
end
|
21
|
+
|
22
|
+
#Get the next history string. NOP
|
23
|
+
def get_next_history
|
24
|
+
false
|
25
|
+
end
|
26
|
+
|
27
|
+
#Append a string to the history buffer if enabled. NOP
|
28
|
+
def append_history(_str)
|
29
|
+
end
|
30
|
+
|
31
|
+
#Get the history buffer associated with this instance. Empty
|
32
|
+
def history
|
33
|
+
[]
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
data/mini_readline.gemspec
CHANGED
@@ -25,6 +25,8 @@ Gem::Specification.new do |spec|
|
|
25
25
|
|
26
26
|
spec.required_ruby_version = '>=1.9.3'
|
27
27
|
|
28
|
+
spec.add_development_dependency "minitest", ">= 5.7"
|
29
|
+
spec.add_development_dependency "minitest_visible", ">= 0.0.2"
|
28
30
|
spec.add_development_dependency "bundler", "~> 1.11"
|
29
31
|
spec.add_development_dependency "rake", "~> 10.0"
|
30
32
|
end
|
@@ -15,11 +15,20 @@ class MiniReadlineTester < Minitest::Test
|
|
15
15
|
assert_equal(Module, MiniReadline.class)
|
16
16
|
assert_equal(String, MiniReadline::VERSION.class)
|
17
17
|
assert_equal(Class, MiniReadline::Readline.class)
|
18
|
+
assert_equal(Class, MiniReadline::History.class)
|
19
|
+
assert_equal(Class, MiniReadline::NoHistory.class)
|
18
20
|
assert_equal(Class, MiniReadline::Edit.class)
|
19
21
|
assert_equal(Class, MiniReadline::EditWindow.class)
|
20
22
|
assert_equal(Class, MiniReadline::Mapper.class)
|
21
23
|
end
|
22
24
|
|
25
|
+
def test_for_storage_of_options
|
26
|
+
assert_equal(Hash, MiniReadline::BASE_OPTIONS.class)
|
27
|
+
edit = MiniReadline::Readline.new()
|
28
|
+
assert_equal(Hash, edit.instance_options.class)
|
29
|
+
refute_equal(MiniReadline::BASE_OPTIONS, edit.instance_options)
|
30
|
+
end
|
31
|
+
|
23
32
|
def test_platform_detection
|
24
33
|
if (RUBY_PLATFORM =~ /\bcygwin\b/i) || (RUBY_PLATFORM !~ /mswin|mingw/)
|
25
34
|
assert_equal(:other, MiniReadline::PLATFORM)
|
@@ -32,12 +41,12 @@ class MiniReadlineTester < Minitest::Test
|
|
32
41
|
puts
|
33
42
|
puts "To finish this test, enter the word: quit"
|
34
43
|
|
35
|
-
edit = MiniReadline::Readline.new
|
44
|
+
edit = MiniReadline::Readline.new
|
36
45
|
|
37
46
|
result = ''
|
38
47
|
|
39
48
|
loop do
|
40
|
-
result = edit.readline(">")
|
49
|
+
result = edit.readline(">", history: true)
|
41
50
|
puts result.inspect
|
42
51
|
break unless result != 'quit'
|
43
52
|
end
|
metadata
CHANGED
@@ -1,15 +1,43 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mini_readline
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Peter Camilleri
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-01-
|
11
|
+
date: 2016-01-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: minitest
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '5.7'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '5.7'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: minitest_visible
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 0.0.2
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 0.0.2
|
13
41
|
- !ruby/object:Gem::Dependency
|
14
42
|
name: bundler
|
15
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -83,6 +111,7 @@ files:
|
|
83
111
|
- lib/mini_readline/read_line/edit_window/sync_cursor.rb
|
84
112
|
- lib/mini_readline/read_line/edit_window/sync_window.rb
|
85
113
|
- lib/mini_readline/read_line/history.rb
|
114
|
+
- lib/mini_readline/read_line/no_history.rb
|
86
115
|
- lib/mini_readline/version.rb
|
87
116
|
- mini_readline.gemspec
|
88
117
|
- reek.txt
|