class Termisu::Terminal::Backend

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 (raw mode). 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

Defined in:

termisu/terminal/backend.cr

Constructors

Instance Method Summary

Constructor Detail

def self.new #

Creates a new terminal backend, opening /dev/tty for I/O.

Raises IO::Error if the TTY cannot be opened.


[View source]

Instance Method Detail

def close #

Closes the terminal backend, disabling raw mode and closing TTY.


[View source]
def disable_raw_mode #

Disables raw mode, restoring original terminal attributes.

This method is idempotent - calling it multiple times has no effect if raw mode is already disabled.


[View source]
def enable_raw_mode #

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.


[View source]
def flush #

Flushes the output buffer to the terminal.


[View source]
def infd : Int32 #

[View source]
def outfd : Int32 #

[View source]
def raw_mode? : Bool #

Returns whether raw mode is currently enabled.


[View source]
def read(buffer : Bytes) : Int32 #

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.


[View source]
def size : Tuple(Int32, Int32) #

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.


[View source]
def with_raw_mode(&) #

Executes a block with raw mode enabled, ensuring cleanup.

Example:

backend.with_raw_mode do
  # Raw mode operations here
end
# Raw mode automatically disabled

[View source]
def write(data : String) #

Writes data to the terminal output.


[View source]