Extends IO to enable “raw” input on TTYs.
Reverts the termios state to what it was before calling enable_raw_chars.
# File lib/ssl_test/ext_core/io_raw_input.rb, line 25 def disable_raw_chars raise IOError, "#{self} is not a TTY." unless self.tty? Termios.tcsetattr(self, Termios::TCSANOW, @_oldtermios) end
Enables raw character input for a TTY. It uses the ruby-termios gem to disable ICANON and ECHO functionality. This means that characters will become immediately available to IO#gets, IO#getchar, etc. after the user presses a button, and that the characters will not be implicitly echoed to the screen.
If you call this on $stdin, you probably should ensure that you call disable_raw_chars in order to restore the previous termios state after your program exits. Otherwise, you may screw up the user’s terminal, and they will have to call `reset`.
# File lib/ssl_test/ext_core/io_raw_input.rb, line 15 def enable_raw_chars raise IOError, "#{self} is not a TTY." unless self.tty? @_oldtermios = Termios.tcgetattr(self) newt = @_oldtermios.dup newt.c_lflag &= ~Termios::ICANON newt.c_lflag &= ~Termios::ECHO Termios.tcsetattr(self, Termios::TCSANOW, newt) end