class Pepin::InteractiveSearch
Attributes
query[R]
view[R]
Public Class Methods
new(list, view: nil, filter: nil)
click to toggle source
# File lib/pepin/interactive_search.rb, line 5 def initialize(list, view: nil, filter: nil) @query = Query.new(list, filter: filter || GrepFilter) @view_klass = view || CursesView end
Public Instance Methods
search()
click to toggle source
# File lib/pepin/interactive_search.rb, line 10 def search @view = @view_klass.new(query) search_interactive ensure @view.shutdown if @view end
Private Instance Methods
handle_backspace(*)
click to toggle source
# File lib/pepin/interactive_search.rb, line 85 def handle_backspace(*) query.delete_behind_char_from view.cursor view.move_cursor -1 end
handle_ctrl_a(*)
click to toggle source
# File lib/pepin/interactive_search.rb, line 61 def handle_ctrl_a(*) view.move_cursor_to_first end
handle_ctrl_c(*)
click to toggle source
# File lib/pepin/interactive_search.rb, line 91 def handle_ctrl_c(*) exit end
handle_ctrl_d(*)
click to toggle source
# File lib/pepin/interactive_search.rb, line 95 def handle_ctrl_d(*) exit if query.empty? end
handle_ctrl_e(*)
click to toggle source
# File lib/pepin/interactive_search.rb, line 71 def handle_ctrl_e(*) view.move_cursor_to_last end
handle_ctrl_k(*)
click to toggle source
# File lib/pepin/interactive_search.rb, line 75 def handle_ctrl_k(*) query.delete_ahead_from view.cursor end
handle_ctrl_u(*)
click to toggle source
# File lib/pepin/interactive_search.rb, line 79 def handle_ctrl_u(*) query.delete_behind_from view.cursor view.move_cursor_to_first end
handle_ctrl_w(*)
click to toggle source
# File lib/pepin/interactive_search.rb, line 65 def handle_ctrl_w(*) len = query.delete_behind_word_from(view.cursor) view.move_cursor -len end
handle_cursor_left(*)
click to toggle source
# File lib/pepin/interactive_search.rb, line 103 def handle_cursor_left(*) view.move_cursor -1 end
handle_cursor_right(*)
click to toggle source
# File lib/pepin/interactive_search.rb, line 99 def handle_cursor_right(*) view.move_cursor 1 end
handle_enter(*)
click to toggle source
# File lib/pepin/interactive_search.rb, line 57 def handle_enter(*) raise StopIteration end
handle_resize(*)
click to toggle source
# File lib/pepin/interactive_search.rb, line 107 def handle_resize(*) view.refresh_winsize end
handle_string(ch)
click to toggle source
# File lib/pepin/interactive_search.rb, line 52 def handle_string(ch) query.add_char ch view.move_cursor 1 end
handle_unknown(*)
click to toggle source
# File lib/pepin/interactive_search.rb, line 111 def handle_unknown(*) # Intentionally NOP end
result()
click to toggle source
# File lib/pepin/interactive_search.rb, line 48 def result query.search.first end
search_interactive()
click to toggle source
# File lib/pepin/interactive_search.rb, line 20 def search_interactive while ch = view.input_char handler = case ch when String then :handle_string when Curses::KEY_ENTER, 10 then :handle_enter when Curses::KEY_CTRL_A then :handle_ctrl_a when Curses::KEY_CTRL_W then :handle_ctrl_w when Curses::KEY_CTRL_E then :handle_ctrl_e when Curses::KEY_CTRL_K then :handle_ctrl_k when Curses::KEY_CTRL_U then :handle_ctrl_u when Curses::KEY_BACKSPACE, Curses::KEY_CTRL_H, 127 then :handle_backspace when Curses::KEY_CTRL_C then :handle_ctrl_c when Curses::KEY_CTRL_D then :handle_ctrl_d when Curses::KEY_CTRL_F, Curses::KEY_RIGHT then :handle_cursor_right when Curses::KEY_CTRL_B, Curses::KEY_LEFT then :handle_cursor_left when Curses::KEY_RESIZE then :handle_resize else :handle_unknown end send handler, ch end result rescue StopIteration result end