class Reline::Dumb

def buffered_output

def buffered_output
  yield
end

def clear_screen

def clear_screen
end

def cursor_pos

def cursor_pos
  Reline::CursorPos.new(0, 0)
end

def deprep(otio)

def deprep(otio)
end

def dumb?

def dumb?
  true
end

def encoding

def encoding
  if @encoding
    @encoding
  elsif RUBY_PLATFORM =~ /mswin|mingw/
    Encoding::UTF_8
  else
    @input.external_encoding || Encoding.default_external
  end
rescue IOError
  # STDIN.external_encoding raises IOError in Ruby <= 3.0 when STDIN is closed
  Encoding.default_external
end

def erase_after_cursor

def erase_after_cursor
end

def get_screen_size

def get_screen_size
  @screen_size
end

def getc(_timeout_second)

def getc(_timeout_second)
  unless @buf.empty?
    return @buf.shift
  end
  c = nil
  loop do
    Reline.core.line_editor.handle_signal
    result = @input.wait_readable(0.1)
    next if result.nil?
    c = @input.read(1)
    break
  end
  c&.ord
end

def hide_cursor

def hide_cursor
end

def in_pasting?

def in_pasting?
  @pasting
end

def initialize(encoding: nil)

def initialize(encoding: nil)
  @input = STDIN
  @output = STDOUT
  @buf = []
  @pasting = false
  @encoding = encoding
  @screen_size = [24, 80]
end

def input=(val)

def input=(val)
  @input = val
end

def move_cursor_column(val)

def move_cursor_column(val)
end

def move_cursor_down(val)

def move_cursor_down(val)
end

def move_cursor_up(val)

def move_cursor_up(val)
end

def prep

def prep
end

def scroll_down(val)

def scroll_down(val)
end

def set_default_key_bindings(_)

def set_default_key_bindings(_)
end

def set_screen_size(rows, columns)

def set_screen_size(rows, columns)
  @screen_size = [rows, columns]
end

def set_winch_handler(&handler)

def set_winch_handler(&handler)
end

def show_cursor

def show_cursor
end

def ungetc(c)

def ungetc(c)
  @buf.unshift(c)
end

def with_raw_input

def with_raw_input
  yield
end

def write(string)

def write(string)
  @output.write(string)
end