Class: Kward::PromptInterface::EditorSearch
- Inherits:
-
Object
- Object
- Kward::PromptInterface::EditorSearch
- Defined in:
- lib/kward/prompt_interface/editor/search.rb
Overview
Incremental search state and operations for editor buffers.
Instance Attribute Summary collapse
-
#direction ⇒ Object
readonly
Returns the value of attribute direction.
-
#query ⇒ Object
readonly
Returns the value of attribute query.
Instance Method Summary collapse
- #active? ⇒ Boolean
- #append(text) ⇒ Object
- #begin(direction = :forward) ⇒ Object
- #cancel ⇒ Object
- #confirm(buffer:, cursor:) ⇒ Object
- #delete_character ⇒ Object
-
#initialize(direction: :forward) ⇒ EditorSearch
constructor
A new instance of EditorSearch.
- #repeat(buffer:, cursor:, direction: @direction, query: @query) ⇒ Object
Constructor Details
#initialize(direction: :forward) ⇒ EditorSearch
Returns a new instance of EditorSearch.
9 10 11 12 13 |
# File 'lib/kward/prompt_interface/editor/search.rb', line 9 def initialize(direction: :forward) @active = false @query = +"" @direction = direction end |
Instance Attribute Details
#direction ⇒ Object (readonly)
Returns the value of attribute direction.
7 8 9 |
# File 'lib/kward/prompt_interface/editor/search.rb', line 7 def direction @direction end |
#query ⇒ Object (readonly)
Returns the value of attribute query.
7 8 9 |
# File 'lib/kward/prompt_interface/editor/search.rb', line 7 def query @query end |
Instance Method Details
#active? ⇒ Boolean
15 16 17 |
# File 'lib/kward/prompt_interface/editor/search.rb', line 15 def active? @active == true end |
#append(text) ⇒ Object
31 32 33 34 |
# File 'lib/kward/prompt_interface/editor/search.rb', line 31 def append(text) @query << text.to_s "#{status_prefix} #{@query}" end |
#begin(direction = :forward) ⇒ Object
19 20 21 22 23 24 |
# File 'lib/kward/prompt_interface/editor/search.rb', line 19 def begin(direction = :forward) @active = true @direction = direction @query = +"" status_prefix end |
#cancel ⇒ Object
26 27 28 29 |
# File 'lib/kward/prompt_interface/editor/search.rb', line 26 def cancel @active = false "Search cancelled" end |
#confirm(buffer:, cursor:) ⇒ Object
41 42 43 44 45 46 47 |
# File 'lib/kward/prompt_interface/editor/search.rb', line 41 def confirm(buffer:, cursor:) confirmed_query = @query.to_s @active = false return { status: "Search cancelled", found: false } if confirmed_query.empty? repeat(buffer: buffer, cursor: cursor, direction: @direction, query: confirmed_query) end |
#delete_character ⇒ Object
36 37 38 39 |
# File 'lib/kward/prompt_interface/editor/search.rb', line 36 def delete_character @query = @query[0...-1].to_s "#{status_prefix} #{@query}" end |
#repeat(buffer:, cursor:, direction: @direction, query: @query) ⇒ Object
49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
# File 'lib/kward/prompt_interface/editor/search.rb', line 49 def repeat(buffer:, cursor:, direction: @direction, query: @query) query = query.to_s return { status: "No previous search", found: false } if query.empty? @query = query @direction = direction index = if direction == :backward search_from = cursor.positive? ? cursor - 1 : buffer.length buffer.rindex(query, search_from) || buffer.rindex(query) else buffer.index(query, cursor + 1) || buffer.index(query) end if index { cursor: index, status: "Found: #{query}", found: true } else { status: "No match: #{query}", found: false } end end |