Raxol.Terminal.Modes (Raxol v0.4.0)

View Source

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

mode()

@type mode() :: :insert | :replace | :visual | :command | :normal

mode_state()

@type mode_state() :: %{required(mode()) => boolean()}

Functions

active?(modes, mode)

Checks if a terminal mode is active.

Examples

iex> modes = Modes.new()
iex> Modes.active?(modes, :normal)
true
iex> Modes.active?(modes, :insert)
false

active_modes(modes)

Returns a list of all active terminal modes.

Examples

iex> modes = Modes.new()
iex> Modes.active_modes(modes)
[:normal, :replace]

new()

Creates a new terminal mode state.

Examples

iex> modes = Modes.new()
iex> modes.insert
false

process_escape(modes, sequence)

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

reset_mode(modes, mode)

@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

restore_state(modes, saved_modes)

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

save_state(modes)

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

set_mode(modes, mode)

Sets a terminal mode.

Examples

iex> modes = Modes.new()
iex> modes = Modes.set_mode(modes, :insert)
iex> modes.insert
true
iex> modes.replace
false

to_string(modes)

Returns a string representation of the terminal mode state.

Examples

iex> modes = Modes.new()
iex> Modes.to_string(modes)
"Terminal Modes: normal, replace"