class Sawaal::Cursor
Handle cursor movements and text highlighting
@api private
Attributes
current_line_index[RW]
Public Class Methods
new()
click to toggle source
# File lib/sawaal/cursor.rb, line 12 def initialize @text = [] @current_line_index = -1 @help_hidden = false end
Public Instance Methods
hide()
click to toggle source
# File lib/sawaal/cursor.rb, line 27 def hide TTY.print TTY::HIDE_CURSOR end
hide_help()
click to toggle source
# File lib/sawaal/cursor.rb, line 49 def hide_help return if @help_hidden restore_position clear_line move_down move_to_beginning @help_hidden = true end
highlight(index)
click to toggle source
# File lib/sawaal/cursor.rb, line 80 def highlight(index) index %= @text.length unhighlight move_to(index) @current_line_index = index move_to_beginning clear_line TTY.print cyan(@text[@current_line_index]) end
move_down()
click to toggle source
# File lib/sawaal/cursor.rb, line 39 def move_down TTY.print TTY::MOVE_DOWN end
move_up()
click to toggle source
# File lib/sawaal/cursor.rb, line 35 def move_up TTY.print TTY::MOVE_UP end
save_excursion(&block)
click to toggle source
# File lib/sawaal/cursor.rb, line 18 def save_excursion(&block) hide begin return block.call ensure show end end
show()
click to toggle source
# File lib/sawaal/cursor.rb, line 31 def show TTY.print TTY::SHOW_CURSOR end
write_item(item)
click to toggle source
# File lib/sawaal/cursor.rb, line 58 def write_item(item) line = "#{bold TTY::ARROW} #{item}" move_down move_to_beginning TTY.print line @text.push(line) @current_line_index += 1 end
write_question(question)
click to toggle source
# File lib/sawaal/cursor.rb, line 43 def write_question(question) TTY.print "#{green('?')} #{bold(question)} " save_position TTY.print '(use arrow keys, press <enter> when finished)' end
write_selection(item)
click to toggle source
# File lib/sawaal/cursor.rb, line 67 def write_selection(item) move_to(@text.length) move_to_beginning @text.length.times do move_up clear_line end restore_position clear_line TTY.println cyan(item) end
Private Instance Methods
clear_line()
click to toggle source
# File lib/sawaal/cursor.rb, line 111 def clear_line TTY.print TTY::CLEAR_LINE end
move_to(index)
click to toggle source
# File lib/sawaal/cursor.rb, line 103 def move_to(index) if index < @current_line_index (@current_line_index - index).times { move_up } else (index - @current_line_index).times { move_down } end end
move_to_beginning()
click to toggle source
# File lib/sawaal/cursor.rb, line 99 def move_to_beginning TTY.print TTY::BEGINNING_OF_LINE end
restore_position()
click to toggle source
# File lib/sawaal/cursor.rb, line 119 def restore_position TTY.print TTY::RESTORE_POSITION end
save_position()
click to toggle source
# File lib/sawaal/cursor.rb, line 115 def save_position TTY.print TTY::SAVE_POSITION end
unhighlight()
click to toggle source
# File lib/sawaal/cursor.rb, line 93 def unhighlight move_to_beginning clear_line TTY.print @text[@current_line_index] end