Handles terminal modes and state transitions for the terminal emulator.
This module provides functions for managing terminal modes, processing escape sequences, and handling terminal state transitions.
Summary
Functions
Checks if a terminal mode is active.
Returns a list of all active terminal modes.
Creates a new terminal mode state.
Processes an escape sequence for terminal mode changes.
Resets a specific terminal mode to its default value.
Restores a previously saved terminal mode state.
Saves the current terminal mode state.
Sets a terminal mode.
Returns a string representation of the terminal mode state.
Types
Functions
Checks if a terminal mode is active.
Examples
iex> modes = Modes.new()
iex> Modes.active?(modes, :normal)
true
iex> Modes.active?(modes, :insert)
false
Returns a list of all active terminal modes.
Examples
iex> modes = Modes.new()
iex> Modes.active_modes(modes)
[:normal, :replace]
Creates a new terminal mode state.
Examples
iex> modes = Modes.new()
iex> modes.insert
false
Processes an escape sequence for terminal mode changes.
Examples
iex> modes = Modes.new()
iex> {modes, _} = Modes.process_escape(modes, "?1049h")
iex> Modes.active?(modes, :alternate_screen)
true
@spec reset_mode(mode_state(), atom()) :: mode_state()
Resets a specific terminal mode to its default value.
Examples
iex> modes = Modes.new() |> Modes.set_mode(:insert)
iex> modes.insert
true
iex> modes = Modes.reset_mode(modes, :insert)
iex> modes.insert
false
iex> modes = Modes.reset_mode(modes, :replace) # replace defaults to true
iex> modes.replace
true
Restores a previously saved terminal mode state.
Examples
iex> modes = Modes.new()
iex> {modes, saved_modes} = Modes.save_state(modes)
iex> modes = Modes.set_mode(modes, :insert)
iex> modes = Modes.restore_state(modes, saved_modes)
iex> Modes.active?(modes, :normal)
true
Saves the current terminal mode state.
Examples
iex> modes = Modes.new()
iex> {modes, saved_modes} = Modes.save_state(modes)
iex> modes = Modes.set_mode(modes, :insert)
iex> modes = Modes.restore_state(modes, saved_modes)
iex> Modes.active?(modes, :normal)
true
Sets a terminal mode.
Examples
iex> modes = Modes.new()
iex> modes = Modes.set_mode(modes, :insert)
iex> modes.insert
true
iex> modes.replace
false
Returns a string representation of the terminal mode state.
Examples
iex> modes = Modes.new()
iex> Modes.to_string(modes)
"Terminal Modes: normal, replace"