Packages
Multi-surface application runtime for Elixir. One TEA module renders to terminal, browser (LiveView), SSH, and MCP (agents). 30+ widgets, flexbox + CSS grid, AI agent runtime, distributed swarm with CRDTs, time-travel debugging, session recording, sandboxed REPL, and agentic commerce.
Current section
Files
Jump to
Current section
Files
lib/raxol/terminal/screen_buffer/preferences.ex
defmodule Raxol.Terminal.ScreenBuffer.Preferences do
@moduledoc """
Manages screen buffer preferences and settings.
"""
use GenServer
defstruct [
:font_size,
:line_height,
:scrollback_size,
:tab_width,
:word_wrap,
:auto_wrap,
:cursor_style,
:cursor_blink
]
@type t :: %__MODULE__{
font_size: non_neg_integer(),
line_height: non_neg_integer(),
scrollback_size: non_neg_integer(),
tab_width: non_neg_integer(),
word_wrap: boolean(),
auto_wrap: boolean(),
cursor_style: atom(),
cursor_blink: boolean()
}
def start_link(_) do
GenServer.start_link(__MODULE__, default_preferences(), name: __MODULE__)
end
def init(preferences) do
%__MODULE__{
scrollback_size: Keyword.get(preferences, :scrollback_size, 1000),
tab_width: Keyword.get(preferences, :tab_width, 8),
auto_wrap: Keyword.get(preferences, :auto_wrap, true),
cursor_style: Keyword.get(preferences, :cursor_style, :block),
cursor_blink: Keyword.get(preferences, :cursor_blink, true)
}
end
def init do
%__MODULE__{
scrollback_size: 1000,
tab_width: 8,
auto_wrap: true,
cursor_style: :block,
cursor_blink: true
}
end
defp default_preferences do
%__MODULE__{
scrollback_size: 1000,
tab_width: 8,
auto_wrap: true,
cursor_style: :block,
cursor_blink: true
}
end
def get do
GenServer.call(__MODULE__, :get)
end
def set(preferences) do
GenServer.call(__MODULE__, {:set, preferences})
end
def handle_call(:get, _from, state) do
{:reply, state, state}
end
def handle_call({:set, preferences}, _from, _state) do
{:reply, preferences, preferences}
end
end