clear_screen()
click to toggle source
def clear_screen
number_of_lines = render_to_string.split("\n").size
display("\r")
(number_of_lines - 1).times do
display(move_up)
end
end
display(str)
click to toggle source
def display(str)
STDOUT.write(str)
STDOUT.flush
end
getchar(io)
click to toggle source
def getchar(io)
char = io.getc
char = char.chr if char.is_a?(Integer)
return char
end
hide_cursor()
click to toggle source
def hide_cursor
display("\x1b[?25l")
end
index_choices()
click to toggle source
def index_choices
index = {}
@choices.each do |choice|
index[choice.name] = choice
end
return index
end
maybe_utf8(utf8, plain)
click to toggle source
def maybe_utf8(utf8, plain)
if ENV['UTF8_MENUS'] == '0'
return plain
else
return utf8
end
end
move_up()
click to toggle source
def move_up
return "\x1b[0A"
end
process_cursor_move()
click to toggle source
def process_cursor_move
if getchar(STDIN) == "["
case getchar(STDIN)
when "A"
@pointer = [@pointer - 1, 0].max
when "B"
@pointer = [@pointer + 1, @choices.size - 1].min
end
end
end
process_disable_utf8()
click to toggle source
def process_disable_utf8
ENV['UTF8_MENUS'] = '0'
end
process_toggle()
click to toggle source
def process_toggle
@choices[@pointer].toggle!
end
raw_no_echo_mode()
click to toggle source
def raw_no_echo_mode
input = STDIN.to_inputstream
output = STDOUT.to_outputstream
@console = ConsoleReader.new(input, output)
@console.set_history_enabled(false)
@console.set_bell_enabled(true)
@console.set_pagination_enabled(false)
@terminal_state = @console.getEchoCharacter
@console.setEchoCharacter(0)
end
render_checkbox(checked)
click to toggle source
def render_checkbox(checked)
return checked ? maybe_utf8("⬢", "(*)") : maybe_utf8("⬡", "( )")
end
render_pointer(index)
click to toggle source
def render_pointer(index)
return @pointer == index ? maybe_utf8("‣", ">") : " "
end
render_to_string()
click to toggle source
def render_to_string
str = ""
@choices.each_with_index do |choice, i|
pointer = render_pointer(i)
checkbox = render_checkbox(choice.checked)
str << " #{pointer} #{checkbox} #{choice.name}\r\n"
end
str.chomp!
return str
end
restore_mode()
click to toggle source
def restore_mode
@console.setEchoCharacter(@terminal_state)
@console.get_terminal.restore
end
show_cursor()
click to toggle source
def show_cursor
display("\x1b[?25h")
end