module TTY::Screen

def size_from_win_api(verbose: false)

Other tags:
    Api: - private

Returns:
  • (Array(Integer, Integer), nil) -

Parameters:
  • verbose (Boolean) --
def size_from_win_api(verbose: false)
  require "fiddle" unless defined?(Fiddle)
  kernel32 = Fiddle::Handle.new("kernel32")
  get_std_handle = Fiddle::Function.new(
    kernel32["GetStdHandle"], [-Fiddle::TYPE_INT], Fiddle::TYPE_INT)
  get_console_buffer_info = Fiddle::Function.new(
    kernel32["GetConsoleScreenBufferInfo"],
    [Fiddle::TYPE_LONG, Fiddle::TYPE_VOIDP], Fiddle::TYPE_INT)
  format = "SSSSSssssSS"
  buffer = ([0] * format.size).pack(format)
  stdout_handle = get_std_handle.(STDOUT_HANDLE)
  get_console_buffer_info.(stdout_handle, buffer)
  _, _, _, _, _, left, top, right, bottom, = buffer.unpack(format)
  size = [bottom - top + 1, right - left + 1]
  size if nonzero_column?(size[1] - 1)
rescue LoadError
  warn "no native fiddle module found" if verbose
rescue Fiddle::DLError
  # non windows platform or no kernel32 lib
end