Skip to content
Kward Search API index

Class: Kward::PromptInterface::EditorSearch

Inherits:
Object
  • Object
show all
Defined in:
lib/kward/prompt_interface/editor/search.rb

Overview

Incremental search state and operations for editor buffers.

Instance Attribute Summary collapse

Instance Method Summary collapse

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

#directionObject (readonly)

Returns the value of attribute direction.



7
8
9
# File 'lib/kward/prompt_interface/editor/search.rb', line 7

def direction
  @direction
end

#queryObject (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

Returns:

  • (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

#cancelObject



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_characterObject



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