class
Termisu::Terminal::Backend
- Termisu::Terminal::Backend
- Reference
- Object
Overview
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 }
Defined in:
termisu/terminal/backend.crConstructors
-
.new
Creates a new terminal backend, opening
/dev/ttyfor I/O.
Instance Method Summary
-
#close
Closes the terminal backend, disabling raw mode and closing TTY.
-
#current_mode : Terminal::Mode | Nil
Returns the current terminal mode, or nil if not yet set.
-
#disable_raw_mode
Disables raw mode, restoring original terminal attributes.
-
#enable_raw_mode
Enables raw mode for the terminal.
-
#flush
Flushes the output buffer to the terminal.
- #infd : Int32
- #outfd : Int32
-
#raw_mode? : Bool
Returns whether raw mode is currently enabled.
-
#read(buffer : Bytes) : Int32
Reads data from the terminal into the provided buffer.
-
#set_mode(mode : Terminal::Mode)
Sets terminal to specific mode using Terminal::Mode flags.
-
#size : Tuple(Int32, Int32)
Returns the terminal size as {width, height}.
-
#with_mode(mode : Terminal::Mode, &)
Executes a block with specific terminal mode, restoring previous mode after.
-
#with_raw_mode(&)
Executes a block with raw mode enabled, ensuring cleanup.
-
#write(data : String)
Writes data to the terminal output.
Constructor Detail
Creates a new terminal backend, opening /dev/tty for I/O.
Raises IO::Error if the TTY cannot be opened.
Instance Method Detail
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 (none? means no flags set = raw mode).
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