module HighLine::SystemExtensions

Constants

CHARACTER_MODE
JRUBY
JRUBY_OVER_17

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 121
def get_character( input = STDIN )
  WinAPI._getch
end
initialize_system_extensions() click to toggle source
# File lib/highline/system_extensions.rb, line 17
def initialize_system_extensions
  require 'java'
  require 'readline'
  if JRUBY_OVER_17
    java_import 'jline.console.ConsoleReader'

    input = @input && @input.to_inputstream
    output = @output && @output.to_outputstream

    @java_console = ConsoleReader.new(input, output)
    @java_console.set_history_enabled(false)
    @java_console.set_bell_enabled(true)
    @java_console.set_pagination_enabled(false)
    @java_terminal = @java_console.getTerminal
  elsif JRUBY_VERSION =~ /^1.6/
    java_import 'java.io.OutputStreamWriter'
    java_import 'java.nio.channels.Channels'
    java_import 'jline.ConsoleReader'
    java_import 'jline.Terminal'

    @java_input = Channels.newInputStream(@input.to_channel)
    @java_output = OutputStreamWriter.new(Channels.newOutputStream(@output.to_channel))
    @java_terminal = Terminal.getTerminal
    @java_console = ConsoleReader.new(@java_input, @java_output)
    @java_console.setUseHistory(false)
    @java_console.setBellEnabled(true)
    @java_console.setUsePagination(false)
  end
end
raw_no_echo_mode() click to toggle source

We do not define a #raw_no_echo_mode for Windows as _getch turns off echo

# File lib/highline/system_extensions.rb, line 126
def raw_no_echo_mode
end
restore_mode() click to toggle source
# File lib/highline/system_extensions.rb, line 129
def restore_mode
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 133
def terminal_size
  format        = 'SSSSSssssSS'
  buf           = ([0] * format.size).pack(format)
  stdout_handle = WinAPI.GetStdHandle(0xFFFFFFF5)

  WinAPI.GetConsoleScreenBufferInfo(stdout_handle, buf)
  _, _, _, _, _,
  left, top, right, bottom, _, _ = buf.unpack(format)
  return right - left + 1, bottom - top + 1
end