lib/cli/ui/prompt/interactive_options.rb in cli-ui-1.1.1 vs lib/cli/ui/prompt/interactive_options.rb in cli-ui-1.1.2
- old
+ new
@@ -111,35 +111,41 @@
def wait_for_user_input
char = read_char
case @state
when :root
case char
+ when :timeout ; raise Interrupt # Timeout, use interrupt to simulate
when ESC ; @state = :esc
when 'k' ; up
when 'j' ; down
when ('1'..@options.size.to_s) ; select_n(char.to_i)
when 'y', 'n' ; select_bool(char)
when " ", "\r", "\n" ; @answer = @active # <enter>
when "\u0003" ; raise Interrupt # Ctrl-c
end
when :esc
case char
- when '[' ; @state = :esc_bracket
- else ; raise Interrupt # unhandled escape sequence.
+ when :timeout ; raise Interrupt # Timeout, use interrupt to simulate
+ when '[' ; @state = :esc_bracket
+ else ; raise Interrupt # unhandled escape sequence.
end
when :esc_bracket
@state = :root
case char
- when 'A' ; up
- when 'B' ; down
- else ; raise Interrupt # unhandled escape sequence.
+ when :timeout ; raise Interrupt # Timeout, use interrupt to simulate
+ when 'A' ; up
+ when 'B' ; down
+ else ; raise Interrupt # unhandled escape sequence.
end
end
end
# rubocop:enable Style/WhenThen,Layout/SpaceBeforeSemicolon
def read_char
- raw_tty! { $stdin.getc.chr }
+ raw_tty! do
+ getc = $stdin.getc
+ getc ? getc.chr : :timeout
+ end
rescue IOError
"\e"
end
def raw_tty!