Termisu::Terminal::Backend
Inherits Reference / Object
Low-level terminal I/O combining TTY and Termios state management.
Provides basic terminal operations, managing both the underlying TTY file descriptors and terminal attributes (mode control). Used internally by Terminal for I/O operations.
Example:
backend = Termisu::Terminal::Backend.new
backend.enable_raw_mode
backend.write("Hello, terminal!")
backend.flush
backend.close
# Or use mode switching:
backend.set_mode(Terminal::Mode.cooked)
backend.with_mode(Terminal::Mode.password) { gets }
Constructors
Creates a new terminal backend, opening /dev/tty for I/O.
Raises IO::Error if the TTY cannot be opened.
Instance methods
Returns the current terminal mode, or nil if not yet set.
Delegates to underlying Termios instance.
Disables raw mode, restoring original terminal attributes.
This method is idempotent - calling it multiple times has no effect if raw mode is already disabled.
Enables raw mode for the terminal.
Raw mode disables input processing, canonical mode, echo, and signals, allowing direct character-by-character input without line buffering.
This method is idempotent - calling it multiple times has no effect if raw mode is already enabled.
Reads data from the terminal into the provided buffer.
Returns the number of bytes read, or 0 on EOF.
Raises IO::Error on read failure.
Sets terminal to specific mode using Terminal::Mode flags.
Updates raw_mode_enabled tracking based on whether mode is raw.
Parameters:
- mode: Terminal::Mode flags specifying desired behavior
Example:
backend.set_mode(Terminal::Mode.cooked) # Shell-out mode
backend.set_mode(Terminal::Mode.raw) # Full TUI control
ameba:disable Naming/AccessorMethodName
Returns the terminal size as {width, height}.
Uses the TIOCGWINSZ ioctl to query the terminal dimensions.
Raises IO::Error if the size cannot be determined.
Executes a block with specific terminal mode, restoring previous mode after.
This is the RAII pattern for safe mode switching. The previous mode is always restored, even if the block raises an exception.
Parameters:
- mode: Terminal::Mode to use within the block
Example:
backend.with_mode(Terminal::Mode.cooked) do
system("vim file.txt")
end
# Previous mode automatically restored
Executes a block with raw mode enabled, ensuring cleanup.
Example:
backend.with_raw_mode do
# Raw mode operations here
end
# Raw mode automatically disabled