Module HighLine::SystemExtensions
In: lib/highline/system_extensions.rb
HighLine\n[lib/highline.rb\nlib/highline/menu.rb\nlib/highline/question.rb\nlib/highline/system_extensions.rb] HighLine::SystemExtensions TopLevel

Methods

Constants

CHARACTER_MODE = "Win32API"
CHARACTER_MODE = "termios"
CHARACTER_MODE = "stty"

Public Instance methods

Windows savvy getc().

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

[Source]

    # File lib/highline/system_extensions.rb, line 30
30:       def get_character( input = STDIN )
31:         Win32API.new("crtdll", "_getch", [ ], "L").Call
32:       end

Unix savvy getc(). (First choice.)

WARNING: This method requires the "termios" library!

[Source]

    # File lib/highline/system_extensions.rb, line 64
64:         def get_character( input = STDIN )
65:           old_settings = Termios.getattr(input)
66: 
67:           new_settings                     =  old_settings.dup
68:           new_settings.c_lflag             &= ~(Termios::ECHO | Termios::ICANON)
69:           new_settings.c_cc[Termios::VMIN] =  1
70: 
71:           begin
72:             Termios.setattr(input, Termios::TCSANOW, new_settings)
73:             input.getc
74:           ensure
75:             Termios.setattr(input, Termios::TCSANOW, old_settings)
76:           end
77:         end

Unix savvy getc(). (Second choice.)

WARNING: This method requires the external "stty" program!

[Source]

    # File lib/highline/system_extensions.rb, line 86
86:         def get_character( input = STDIN )
87:           raw_no_echo_mode
88: 
89:           begin
90:             input.getc
91:           ensure
92:             restore_mode
93:           end
94:         end

Switched the input mode to raw and disables echo.

WARNING: This method requires the external "stty" program!

[Source]

     # File lib/highline/system_extensions.rb, line 101
101:         def raw_no_echo_mode
102:           @state = `stty -g`
103:           system "stty raw -echo cbreak"
104:         end

Restores a previously saved input mode.

WARNING: This method requires the external "stty" program!

[Source]

     # File lib/highline/system_extensions.rb, line 111
111:         def restore_mode
112:           system "stty #{@state}"
113:         end

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

[Source]

    # File lib/highline/system_extensions.rb, line 35
35:       def terminal_size
36:         m_GetStdHandle               = Win32API.new( 'kernel32',
37:                                                      'GetStdHandle',
38:                                                      ['L'],
39:                                                      'L' )
40:         m_GetConsoleScreenBufferInfo = Win32API.new(
41:           'kernel32', 'GetConsoleScreenBufferInfo', ['L', 'P'], 'L'
42:         )
43: 
44:         format        = 'SSSSSssssSS'
45:         buf           = ([0] * format.size).pack(format)
46:         stdout_handle = m_GetStdHandle.call(0xFFFFFFF5)
47:         
48:         m_GetConsoleScreenBufferInfo.call(stdout_handle, buf)
49:         bufx, bufy, curx, cury, wattr,
50:         left, top, right, bottom, maxx, maxy = buf.unpack(format)
51:         return right - left + 1, bottom - top + 1
52:       end

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

[Source]

     # File lib/highline/system_extensions.rb, line 117
117:       def terminal_size
118:        `stty size`.split.map { |x| x.to_i }.reverse
119:       end

[Validate]