Packages

Terminal emulation and driver infrastructure for Raxol. ANSI parsing, screen buffers, command processing, cursor management, input handling, session management, and termbox2 NIF integration.

Current section

Files

Jump to
raxol_terminal lib raxol terminal screen_buffer_adapter.ex
Raw

lib/raxol/terminal/screen_buffer_adapter.ex

defmodule Raxol.Terminal.ScreenBufferAdapter do
@moduledoc """
Backward-compatible adapter that maps the old ScreenBuffer API to the new consolidated modules.
This allows existing code to work without changes while we migrate to the consolidated architecture.
"""
alias Raxol.Terminal.ScreenBuffer.{
Attributes,
Core,
Operations,
ScrollOps,
Selection
}
# Re-export the Core struct as ScreenBuffer.t()
@type t :: map()
# Creation and basic operations (from Core)
defdelegate new(width, height), to: Core
defdelegate new(width, height, scrollback_limit), to: Core
defdelegate resize(buffer, new_width, new_height), to: Core
defdelegate get_dimensions(buffer), to: Core
defdelegate get_width(buffer), to: Core
defdelegate get_height(buffer), to: Core
defdelegate within_bounds?(buffer, x, y), to: Core
defdelegate get_cell(buffer, x, y), to: Core
defdelegate get_char(buffer, x, y), to: Core
defdelegate get_line(buffer, y), to: Core
defdelegate clear(buffer), to: Core
# Write and mutation operations (from Operations)
defdelegate write_char(buffer, x, y, char), to: Operations
defdelegate write_char(buffer, x, y, char, style), to: Operations
defdelegate write_text(buffer, x, y, text), to: Operations
defdelegate write_text(buffer, x, y, text, style), to: Operations
defdelegate write_string(buffer, x, y, string),
to: Operations,
as: :write_text
defdelegate write_string(buffer, x, y, string, style),
to: Operations,
as: :write_text
defdelegate insert_char(buffer, char), to: Operations
defdelegate insert_char(buffer, char, style), to: Operations
defdelegate delete_char(buffer), to: Operations
defdelegate clear_line(buffer, y), to: Operations
defdelegate clear_to_end_of_line(buffer), to: Operations
defdelegate clear_to_beginning_of_line(buffer), to: Operations
defdelegate clear_to_end_of_screen(buffer), to: Operations
defdelegate clear_to_beginning_of_screen(buffer), to: Operations
defdelegate clear_region(buffer, x, y, width, height), to: Operations
defdelegate insert_line(buffer, y), to: Operations
defdelegate delete_line(buffer, y), to: Operations
defdelegate fill_region(buffer, x, y, width, height, char), to: Operations
defdelegate fill_region(buffer, x, y, width, height, char, style),
to: Operations
defdelegate copy_region(buffer, src_x, src_y, width, height, dest_x, dest_y),
to: Operations
# Scrolling operations (from ScrollOps)
defdelegate set_scroll_region(buffer, top, bottom), to: ScrollOps
defdelegate get_scroll_region(buffer), to: ScrollOps
defdelegate get_scroll_position(buffer), to: ScrollOps
def scroll_up(buffer), do: ScrollOps.scroll_up(buffer, 1)
defdelegate scroll_up(buffer, n), to: ScrollOps
def scroll_down(buffer), do: ScrollOps.scroll_down(buffer, 1)
defdelegate scroll_down(buffer, n), to: ScrollOps
def scroll_region_up(buffer, top, bottom, n),
do: ScrollOps.scroll_up(buffer, top, bottom, n)
def scroll_region_down(buffer, top, bottom, n),
do: ScrollOps.scroll_down(buffer, top, bottom, n)
# Scrollback stubs (scrollback storage removed with Scroll module)
def save_to_scrollback(buffer, _lines), do: buffer
def clear_scrollback(buffer), do: buffer
def get_scrollback(_buffer), do: []
def get_scrollback(_buffer, _limit), do: []
def set_scroll_position(buffer, _position), do: buffer
def scroll_to_bottom(buffer), do: buffer
def scroll_to_top(buffer), do: buffer
def get_visible_lines(buffer), do: get_lines(buffer)
def reverse_index(buffer), do: elem(ScrollOps.scroll_up(buffer, 1), 0)
def index(buffer), do: ScrollOps.scroll_down(buffer, 1)
# Selection operations (from Selection)
defdelegate start_selection(buffer, x, y), to: Selection
defdelegate extend_selection(buffer, x, y), to: Selection
defdelegate clear_selection(buffer), to: Selection
defdelegate get_selection(buffer), to: Selection
defdelegate position_in_selection?(buffer, x, y), to: Selection
defdelegate get_selected_text(buffer), to: Selection
defdelegate get_selected_lines(buffer), to: Selection
defdelegate select_line(buffer, y), to: Selection
defdelegate select_lines(buffer, start_y, end_y), to: Selection
defdelegate select_all(buffer), to: Selection
defdelegate select_word(buffer, x, y), to: Selection
defdelegate expand_selection_to_word(buffer), to: Selection
# Attribute and cursor operations (from Attributes)
defdelegate set_cursor_position(buffer, x, y), to: Attributes
defdelegate get_cursor_position(buffer), to: Attributes
defdelegate move_cursor(buffer, dx, dy), to: Attributes
defdelegate set_cursor_visible(buffer, visible), to: Attributes
defdelegate set_cursor_style(buffer, style), to: Attributes
defdelegate set_cursor_blink(buffer, blink), to: Attributes
defdelegate save_cursor(buffer), to: Attributes
defdelegate restore_cursor(buffer), to: Attributes
defdelegate set_default_style(buffer, style), to: Attributes
defdelegate get_default_style(buffer), to: Attributes
defdelegate create_style(params), to: Attributes
defdelegate merge_styles(base, override), to: Attributes
defdelegate set_charset(buffer, slot, charset), to: Attributes
defdelegate get_charset(buffer, slot), to: Attributes
defdelegate select_charset(buffer, slot), to: Attributes
defdelegate get_active_charset(buffer), to: Attributes
defdelegate translate_char(buffer, char), to: Attributes
defdelegate set_alternate_screen(buffer, use_alternate), to: Attributes
defdelegate using_alternate_screen?(buffer), to: Attributes
defdelegate set_tab_stop(buffer), to: Attributes
defdelegate clear_tab_stop(buffer), to: Attributes
defdelegate clear_all_tab_stops(buffer), to: Attributes
defdelegate reset_tab_stops(buffer), to: Attributes
defdelegate next_tab_stop(buffer), to: Attributes
# Backward compatibility aliases for old function names
# Old Buffer.* modules compatibility
def write(buffer, x, y, text, style \\ nil),
do: write_text(buffer, x, y, text, style)
def scroll(buffer, n), do: scroll_up(buffer, n)
def erase(buffer), do: clear(buffer)
def erase_line(buffer, y), do: clear_line(buffer, y)
def erase_line(buffer, y, _x, _width, _style), do: clear_line(buffer, y)
def erase_screen(buffer), do: clear(buffer)
def erase_region(buffer, x, y, w, h), do: clear_region(buffer, x, y, w, h)
# Selection compatibility
def start(buffer, x, y), do: start_selection(buffer, x, y)
def update(buffer, x, y), do: extend_selection(buffer, x, y)
def get_text(buffer), do: get_selected_text(buffer)
def contains?(buffer, x, y), do: position_in_selection?(buffer, x, y)
# Cursor compatibility
def cursor_position(buffer), do: get_cursor_position(buffer)
def cursor_position(buffer, x, y), do: set_cursor_position(buffer, x, y)
def cursor_visible(buffer, visible), do: set_cursor_visible(buffer, visible)
def cursor_style(buffer, style), do: set_cursor_style(buffer, style)
# Damage region compatibility (these now live in Manager, but we can provide simple versions)
def mark_damaged(buffer, x, y, width, height) do
new_region = {x, y, x + width - 1, y + height - 1}
existing = Map.get(buffer, :damage_regions, [])
%{buffer | damage_regions: [new_region | existing] |> Enum.take(10)}
end
def get_damage_regions(buffer) do
Map.get(buffer, :damage_regions, [])
end
def clear_damage_regions(buffer) do
%{buffer | damage_regions: []}
end
# Put/get line compatibility
def put_line(buffer, y, line) when is_list(line) do
line
|> Enum.with_index()
|> Enum.reduce(buffer, fn {cell, x}, acc ->
case cell do
%{char: char, style: style} -> write_char(acc, x, y, char, style)
%{char: char} -> write_char(acc, x, y, char)
_ -> acc
end
end)
end
# Get lines from buffer
def get_lines(buffer) do
height = get_height(buffer)
Enum.map(0..(height - 1), fn y -> get_line(buffer, y) end)
end
end