HighLine::SystemExtensions

Constants

JRUBY
CHARACTER_MODE
CHARACTER_MODE
CHARACTER_MODE

work correctly in JRuby manually installing the ffi-ncurses gem is the only way to get highline to operate correctly in JRuby. The ncurses library is only present on unix platforms so this is not a solution for using highline in JRuby on windows.

CHARACTER_MODE

Public Instance Methods

get_character( input = STDIN ) click to toggle source

Windows savvy getc().

WARNING: This method ignores input and reads one character from STDIN!

    # File lib/highline/system_extensions.rb, line 37
37:       def get_character( input = STDIN )
38:         Win32API.new("crtdll", "_getch", [ ], "L").Call
39:       end
get_character( input = STDIN ) click to toggle source

ncurses savvy getc(). (JRuby choice.)

     # File lib/highline/system_extensions.rb, line 100
100:           def get_character( input = STDIN )
101:             FFI::NCurses.initscr
102:             FFI::NCurses.cbreak
103:             begin
104:               FFI::NCurses.curs_set 0
105:               input.getbyte
106:             ensure
107:               FFI::NCurses.endwin
108:             end
109:           end
get_character( input = STDIN ) click to toggle source

Unix savvy getc(). (First choice.)

WARNING: This method requires the “termios” library!

    # File lib/highline/system_extensions.rb, line 72
72:         def get_character( input = STDIN )
73:           old_settings = Termios.getattr(input)
74: 
75:           new_settings                     =  old_settings.dup
76:           new_settings.c_lflag             &= ~(Termios::ECHO | Termios::ICANON)
77:           new_settings.c_cc[Termios::VMIN] =  1
78: 
79:           begin
80:             Termios.setattr(input, Termios::TCSANOW, new_settings)
81:             input.getbyte
82:           ensure
83:             Termios.setattr(input, Termios::TCSANOW, old_settings)
84:           end
85:         end
get_character( input = STDIN ) click to toggle source

Unix savvy getc(). (Second choice.)

WARNING: This method requires the external “stty” program!

     # File lib/highline/system_extensions.rb, line 126
126:           def get_character( input = STDIN )
127:             raw_no_echo_mode
128: 
129:             begin
130:               input.getbyte
131:             ensure
132:               restore_mode
133:             end
134:           end
raw_no_echo_mode() click to toggle source

Switched the input mode to raw and disables echo.

WARNING: This method requires the external “stty” program!

     # File lib/highline/system_extensions.rb, line 141
141:           def raw_no_echo_mode
142:             @state = `stty -g`
143:             system "stty raw -echo -icanon isig"
144:           end
restore_mode() click to toggle source

Restores a previously saved input mode.

WARNING: This method requires the external “stty” program!

     # File lib/highline/system_extensions.rb, line 151
151:           def restore_mode
152:             system "stty #{@state}"
153:           end
terminal_size() click to toggle source

A Windows savvy method to fetch the console columns, and rows.

    # File lib/highline/system_extensions.rb, line 42
42:       def terminal_size
43:         m_GetStdHandle               = Win32API.new( 'kernel32',
44:                                                      'GetStdHandle',
45:                                                      ['L'],
46:                                                      'L' )
47:         m_GetConsoleScreenBufferInfo = Win32API.new(
48:           'kernel32', 'GetConsoleScreenBufferInfo', ['L', 'P'], 'L'
49:         )
50: 
51:         format        = 'SSSSSssssSS'
52:         buf           = ([0] * format.size).pack(format)
53:         stdout_handle = m_GetStdHandle.call(0xFFFFFFF5)
54:         
55:         m_GetConsoleScreenBufferInfo.call(stdout_handle, buf)
56:         bufx, bufy, curx, cury, wattr,
57:         left, top, right, bottom, maxx, maxy = buf.unpack(format)
58:         return right - left + 1, bottom - top + 1
59:       end
terminal_size() click to toggle source

A ncurses savvy method to fetch the console columns, and rows.

     # File lib/highline/system_extensions.rb, line 160
160:         def terminal_size
161:           size = [80, 40]
162:           FFI::NCurses.initscr
163:           begin
164:             size = FFI::NCurses.getmaxyx(stdscr).reverse
165:           ensure
166:             FFI::NCurses.endwin
167:           end
168:           size
169:         end
terminal_size() click to toggle source

A Unix savvy method using stty that to fetch the console columns, and rows. … stty does not work in JRuby

     # File lib/highline/system_extensions.rb, line 173
173:         def terminal_size
174:           if /solaris/ =~ RUBY_PLATFORM and
175:             `stty` =~ /\brows = (\d+).*\bcolumns = (\d+)/
176:             [$2, $1].map { |c| x.to_i }
177:           else
178:             `stty size`.split.map { |x| x.to_i }.reverse
179:           end
180:         end

Disabled; run with --debug to generate this.

[Validate]

Generated with the Darkfish Rdoc Generator 1.1.6.