class PhusionPassenger::Utils::TerminalChoiceMenu
Constants
- JRUBY
Public Class Methods
new(choices)
click to toggle source
# File lib/phusion_passenger/utils/terminal_choice_menu.rb, line 52 def initialize(choices) @choices = choices.map { |choice| Choice.create(choice) } @pointer = 0 @index = index_choices end
Public Instance Methods
[](name)
click to toggle source
# File lib/phusion_passenger/utils/terminal_choice_menu.rb, line 84 def [](name) return @index[name] end
display_choices()
click to toggle source
# File lib/phusion_passenger/utils/terminal_choice_menu.rb, line 58 def display_choices display(render_to_string) end
query()
click to toggle source
# File lib/phusion_passenger/utils/terminal_choice_menu.rb, line 62 def query if STDIN.tty? done = false begin raw_no_echo_mode hide_cursor while !done display_choices done = process_input clear_screen if !done end ensure restore_mode show_cursor puts end else display_choices puts end end
selected_choices()
click to toggle source
# File lib/phusion_passenger/utils/terminal_choice_menu.rb, line 88 def selected_choices @choices.find_all{ |c| c.checked? }.map{ |c| c.name } end
Private Instance Methods
clear_screen()
click to toggle source
# File lib/phusion_passenger/utils/terminal_choice_menu.rb, line 164 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
# File lib/phusion_passenger/utils/terminal_choice_menu.rb, line 159 def display(str) STDOUT.write(str) STDOUT.flush end
getchar(io)
click to toggle source
# File lib/phusion_passenger/utils/terminal_choice_menu.rb, line 192 def getchar(io) char = io.getc char = char.chr if char.is_a?(Integer) return char end
hide_cursor()
click to toggle source
# File lib/phusion_passenger/utils/terminal_choice_menu.rb, line 180 def hide_cursor display("\x1b[?25l") end
index_choices()
click to toggle source
# File lib/phusion_passenger/utils/terminal_choice_menu.rb, line 95 def index_choices index = {} @choices.each do |choice| index[choice.name] = choice end return index end
maybe_utf8(utf8, plain)
click to toggle source
# File lib/phusion_passenger/utils/terminal_choice_menu.rb, line 172 def maybe_utf8(utf8, plain) if ENV['UTF8_MENUS'] == '0' return plain else return utf8 end end
move_up()
click to toggle source
# File lib/phusion_passenger/utils/terminal_choice_menu.rb, line 188 def move_up return "\x1b[0A" end
process_cursor_move()
click to toggle source
# File lib/phusion_passenger/utils/terminal_choice_menu.rb, line 121 def process_cursor_move if getchar(STDIN) == "[" case getchar(STDIN) when "A" # up @pointer = [@pointer - 1, 0].max when "B" # down @pointer = [@pointer + 1, @choices.size - 1].min end end end
process_disable_utf8()
click to toggle source
# File lib/phusion_passenger/utils/terminal_choice_menu.rb, line 136 def process_disable_utf8 ENV['UTF8_MENUS'] = '0' end
process_input()
click to toggle source
# File lib/phusion_passenger/utils/terminal_choice_menu.rb, line 103 def process_input case getchar(STDIN) when "\x1b" process_cursor_move return false when " " process_toggle return false when "!" process_disable_utf8 return false when "\r" return true else return false end end
process_toggle()
click to toggle source
# File lib/phusion_passenger/utils/terminal_choice_menu.rb, line 132 def process_toggle @choices[@pointer].toggle! end
raw_no_echo_mode()
click to toggle source
# File lib/phusion_passenger/utils/terminal_choice_menu.rb, line 203 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
# File lib/phusion_passenger/utils/terminal_choice_menu.rb, line 155 def render_checkbox(checked) return checked ? maybe_utf8("⬢", "(*)") : maybe_utf8("⬡", "( )") end
render_pointer(index)
click to toggle source
# File lib/phusion_passenger/utils/terminal_choice_menu.rb, line 151 def render_pointer(index) return @pointer == index ? maybe_utf8("‣", ">") : " " end
render_to_string()
click to toggle source
# File lib/phusion_passenger/utils/terminal_choice_menu.rb, line 140 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
# File lib/phusion_passenger/utils/terminal_choice_menu.rb, line 214 def restore_mode @console.setEchoCharacter(@terminal_state) @console.get_terminal.restore end
show_cursor()
click to toggle source
# File lib/phusion_passenger/utils/terminal_choice_menu.rb, line 184 def show_cursor display("\x1b[?25h") end