Class: MiniReadline::Edit
- Inherits:
-
Object
- Object
- MiniReadline::Edit
- Defined in:
- lib/mini_readline/read_line/edit.rb,
lib/mini_readline/read_line/edit/enter.rb,
lib/mini_readline/read_line/edit/cancel.rb,
lib/mini_readline/read_line/edit/go_end.rb,
lib/mini_readline/read_line/edit/go_home.rb,
lib/mini_readline/read_line/edit/go_left.rb,
lib/mini_readline/read_line/edit/go_right.rb,
lib/mini_readline/read_line/edit/unmapped.rb,
lib/mini_readline/read_line/edit/word_left.rb,
lib/mini_readline/read_line/edit/word_right.rb,
lib/mini_readline/read_line/edit/delete_left.rb,
lib/mini_readline/read_line/edit/insert_text.rb,
lib/mini_readline/read_line/edit/delete_right.rb,
lib/mini_readline/read_line/edit/end_of_input.rb,
lib/mini_readline/read_line/edit/next_history.rb,
lib/mini_readline/read_line/edit/auto_complete.rb,
lib/mini_readline/read_line/edit/delete_all_left.rb,
lib/mini_readline/read_line/edit/delete_all_right.rb,
lib/mini_readline/read_line/edit/previous_history.rb
Overview
Process :previous_history
Instance Attribute Summary collapse
-
#edit_buffer ⇒ Object
readonly
The main edit buffer.
-
#edit_posn ⇒ Object
readonly
The current edit position.
Instance Method Summary collapse
-
#auto_complete(_keyboard_args) ⇒ Object
The auto-complete command.
-
#auto_manager ⇒ Object
Get the auto-complete manager.
-
#auto_trim ⇒ Object
Get the base part of the edit buffer.
-
#cancel(_keyboard_args) ⇒ Object
All right! Scrap all of this and start over!.
-
#delete_all_left(_keyboard_args) ⇒ Object
The delete to the left command.
-
#delete_all_right(_keyboard_args) ⇒ Object
The delete to the right.
-
#delete_left(_keyboard_args) ⇒ Object
The delete to the left command.
-
#delete_right(_keyboard_args) ⇒ Object
The delete to the right.
-
#edit_loop ⇒ Object
The line editor processing loop.
-
#edit_process ⇒ Object
Interact with the user.
-
#end_of_input(_keyboard_args) ⇒ Object
We are DONE!.
-
#enter(_keyboard_args) ⇒ Object
The insert_text command.
-
#go_end(_keyboard_args) ⇒ Object
A lot to the right please!.
-
#go_home(_keyboard_args) ⇒ Object
A lot to the left please!.
-
#go_left(_keyboard_args) ⇒ Object
A little to the left please!.
-
#go_right(_keyboard_args) ⇒ Object
A little to the right please!.
-
#initialize(history, options) ⇒ Edit
constructor
Set up the edit instance.
-
#insert_text(keyboard_args) ⇒ Object
The insert_text command.
-
#length ⇒ Object
How long is the current string?.
-
#next_history(_keyboard_args) ⇒ Object
The insert_text command.
-
#previous_history(_keyboard_args) ⇒ Object
The insert_text command.
-
#process_keystroke(key_cmd) ⇒ Object
Process a keystroke.
-
#unmapped(_keyboard_args) ⇒ Object
An unmapped key was pressed.
-
#word_left(_keyboard_args) ⇒ Object
A little more to the left please!.
-
#word_right(_keyboard_args) ⇒ Object
A little more to the right please!.
Constructor Details
#initialize(history, options) ⇒ Edit
Set up the edit instance.
39 40 41 42 43 44 45 46 47 |
# File 'lib/mini_readline/read_line/edit.rb', line 39 def initialize(history, ) = @history = history @edit_buffer = [:initial] @edit_posn = @edit_buffer.length @working = true @edit_window = EditWindow.new() end |
Instance Attribute Details
#edit_buffer ⇒ Object (readonly)
The main edit buffer
50 51 52 |
# File 'lib/mini_readline/read_line/edit.rb', line 50 def edit_buffer @edit_buffer end |
#edit_posn ⇒ Object (readonly)
The current edit position
53 54 55 |
# File 'lib/mini_readline/read_line/edit.rb', line 53 def edit_posn @edit_posn end |
Instance Method Details
#auto_complete(_keyboard_args) ⇒ Object
The auto-complete command.
19 20 21 22 23 24 25 26 |
# File 'lib/mini_readline/read_line/edit/auto_complete.rb', line 19 def auto_complete(_keyboard_args) if [:auto_complete] && (new_buffer = auto_manager.next(auto_trim)) @edit_buffer = new_buffer @edit_posn = length else MiniTerm.beep end end |
#auto_manager ⇒ Object
Get the auto-complete manager
34 35 36 |
# File 'lib/mini_readline/read_line/edit/auto_complete.rb', line 34 def auto_manager @_auto_manager ||= AutoManager.new{[:auto_source].new()} end |
#auto_trim ⇒ Object
Get the base part of the edit buffer.
29 30 31 |
# File 'lib/mini_readline/read_line/edit/auto_complete.rb', line 29 def auto_trim @edit_buffer[0...(@edit_posn)] end |
#cancel(_keyboard_args) ⇒ Object
All right! Scrap all of this and start over!
10 11 12 13 |
# File 'lib/mini_readline/read_line/edit/cancel.rb', line 10 def cancel(_keyboard_args) @edit_buffer = "" @edit_posn = 0 end |
#delete_all_left(_keyboard_args) ⇒ Object
The delete to the left command
10 11 12 13 14 15 16 17 |
# File 'lib/mini_readline/read_line/edit/delete_all_left.rb', line 10 def delete_all_left(_keyboard_args) if @edit_posn > 0 @edit_buffer = @edit_buffer[@edit_posn..-1] @edit_posn = 0 else MiniTerm.beep end end |
#delete_all_right(_keyboard_args) ⇒ Object
The delete to the right
10 11 12 13 14 15 16 |
# File 'lib/mini_readline/read_line/edit/delete_all_right.rb', line 10 def delete_all_right(_keyboard_args) if @edit_posn < self.length @edit_buffer = @edit_buffer[0...@edit_posn] else MiniTerm.beep end end |
#delete_left(_keyboard_args) ⇒ Object
The delete to the left command
10 11 12 13 14 15 16 17 18 19 |
# File 'lib/mini_readline/read_line/edit/delete_left.rb', line 10 def delete_left(_keyboard_args) if @edit_posn > 0 @edit_buffer = @edit_buffer[0...(@edit_posn-1)] + @edit_buffer[@edit_posn..-1] @edit_posn -= 1 else MiniTerm.beep end end |
#delete_right(_keyboard_args) ⇒ Object
The delete to the right
10 11 12 13 14 15 16 17 |
# File 'lib/mini_readline/read_line/edit/delete_right.rb', line 10 def delete_right(_keyboard_args) if @edit_posn < self.length @edit_buffer = @edit_buffer[0...(@edit_posn)] + @edit_buffer[@edit_posn+1..-1] else MiniTerm.beep end end |
#edit_loop ⇒ Object
The line editor processing loop.
68 69 70 71 72 73 74 75 76 |
# File 'lib/mini_readline/read_line/edit.rb', line 68 def edit_loop while @working @edit_window.sync_window(edit_buffer, edit_posn) @edit_window.sync_cursor(edit_posn) process_keystroke(MiniTerm.get_mapped_char) end edit_buffer end |
#edit_process ⇒ Object
Interact with the user
61 62 63 64 65 |
# File 'lib/mini_readline/read_line/edit.rb', line 61 def edit_process result = edit_loop @history.append_history(result) result + ([:chomp] ? "" : "\n") end |
#end_of_input(_keyboard_args) ⇒ Object
We are DONE!
10 11 12 13 14 15 16 |
# File 'lib/mini_readline/read_line/edit/end_of_input.rb', line 10 def end_of_input(_keyboard_args) if [:eoi_detect] raise MiniReadlineEOI, "End of input detected." else MiniTerm.beep end end |
#enter(_keyboard_args) ⇒ Object
The insert_text command.
10 11 12 |
# File 'lib/mini_readline/read_line/edit/enter.rb', line 10 def enter(_keyboard_args) @working = false end |
#go_end(_keyboard_args) ⇒ Object
A lot to the right please!
10 11 12 |
# File 'lib/mini_readline/read_line/edit/go_end.rb', line 10 def go_end(_keyboard_args) @edit_posn = length end |
#go_home(_keyboard_args) ⇒ Object
A lot to the left please!
10 11 12 |
# File 'lib/mini_readline/read_line/edit/go_home.rb', line 10 def go_home(_keyboard_args) @edit_posn = 0 end |
#go_left(_keyboard_args) ⇒ Object
A little to the left please!
10 11 12 13 14 15 16 |
# File 'lib/mini_readline/read_line/edit/go_left.rb', line 10 def go_left(_keyboard_args) if @edit_posn > 0 @edit_posn -= 1 else MiniTerm.beep end end |
#go_right(_keyboard_args) ⇒ Object
A little to the right please!
10 11 12 13 14 15 16 |
# File 'lib/mini_readline/read_line/edit/go_right.rb', line 10 def go_right(_keyboard_args) if @edit_posn < edit_buffer.length @edit_posn += 1 else MiniTerm.beep end end |
#insert_text(keyboard_args) ⇒ Object
The insert_text command
10 11 12 13 14 15 16 |
# File 'lib/mini_readline/read_line/edit/insert_text.rb', line 10 def insert_text(keyboard_args) @edit_buffer = @edit_buffer[0...@edit_posn] + keyboard_args[1] + @edit_buffer[@edit_posn..-1] @edit_posn += 1 end |
#length ⇒ Object
How long is the current string?
56 57 58 |
# File 'lib/mini_readline/read_line/edit.rb', line 56 def length edit_buffer.length end |
#next_history(_keyboard_args) ⇒ Object
The insert_text command. We are DONE!
10 11 12 13 14 15 16 17 |
# File 'lib/mini_readline/read_line/edit/next_history.rb', line 10 def next_history(_keyboard_args) if (temp = @history.get_next_history) @edit_buffer = temp @edit_posn = temp.length else MiniTerm.beep end end |
#previous_history(_keyboard_args) ⇒ Object
The insert_text command. We are DONE!
10 11 12 13 14 15 16 17 |
# File 'lib/mini_readline/read_line/edit/previous_history.rb', line 10 def previous_history(_keyboard_args) if (temp = @history.get_previous_history) @edit_buffer = temp @edit_posn = temp.length else MiniTerm.beep end end |
#process_keystroke(key_cmd) ⇒ Object
Process a keystroke.
79 80 81 |
# File 'lib/mini_readline/read_line/edit.rb', line 79 def process_keystroke(key_cmd) send(key_cmd[0], key_cmd) end |
#unmapped(_keyboard_args) ⇒ Object
An unmapped key was pressed. Beep! :reek:UtilityFunction – Does not depend on state.
11 12 13 |
# File 'lib/mini_readline/read_line/edit/unmapped.rb', line 11 def unmapped(_keyboard_args) MiniTerm.beep end |
#word_left(_keyboard_args) ⇒ Object
A little more to the left please!
10 11 12 13 14 15 16 17 |
# File 'lib/mini_readline/read_line/edit/word_left.rb', line 10 def word_left(_keyboard_args) if @edit_posn > 0 left = @edit_buffer[0...@edit_posn] @edit_posn = (posn = left.rindex(/\s\S/)) ? posn+1 : 0 else MiniTerm.beep end end |
#word_right(_keyboard_args) ⇒ Object
A little more to the right please!
10 11 12 13 14 15 16 17 |
# File 'lib/mini_readline/read_line/edit/word_right.rb', line 10 def word_right(_keyboard_args) if @edit_posn < length right = @edit_buffer[(@edit_posn+1)..-1] @edit_posn = (posn = right.index(/\s\S/)) ? @edit_posn+posn+2 : length else MiniTerm.beep end end |