defmodule Raxol.Terminal.Operations.SelectionOperations do @moduledoc """ Implements selection-related operations for the terminal emulator. """ alias Raxol.Terminal.ScreenManager def write_string(emulator, x, y, string, style) do buffer = ScreenManager.get_screen_buffer(emulator) new_buffer = ScreenManager.write_string(buffer, x, y, string, style) ScreenManager.update_active_buffer(emulator, new_buffer) end def get_selection(emulator) do buffer = ScreenManager.get_screen_buffer(emulator) ScreenManager.get_selection(buffer) end def get_selection_start(emulator) do buffer = ScreenManager.get_screen_buffer(emulator) ScreenManager.get_selection_start(buffer) end def get_selection_end(emulator) do buffer = ScreenManager.get_screen_buffer(emulator) ScreenManager.get_selection_end(buffer) end def get_selection_boundaries(emulator) do buffer = ScreenManager.get_screen_buffer(emulator) case ScreenManager.get_selection_boundaries(buffer) do {start_x, start_y, end_x, end_y} -> {{start_x, start_y}, {end_x, end_y}} nil -> nil end end def start_selection(emulator, x, y) do buffer = ScreenManager.get_screen_buffer(emulator) new_buffer = ScreenManager.start_selection(buffer, x, y) ScreenManager.update_active_buffer(emulator, new_buffer) end def update_selection(emulator, x, y) do buffer = ScreenManager.get_screen_buffer(emulator) new_buffer = ScreenManager.update_selection(buffer, x, y) ScreenManager.update_active_buffer(emulator, new_buffer) end def clear_selection(emulator) do buffer = ScreenManager.get_screen_buffer(emulator) new_buffer = ScreenManager.clear_selection(buffer) ScreenManager.update_active_buffer(emulator, new_buffer) end def selection_active?(emulator) do buffer = ScreenManager.get_screen_buffer(emulator) ScreenManager.selection_active?(buffer) end def in_selection?(emulator, x, y) do buffer = ScreenManager.get_screen_buffer(emulator) ScreenManager.in_selection?(buffer, x, y) end def end_selection(emulator) do # End the current selection - for now just clear it clear_selection(emulator) end def has_selection?(emulator) do # Check if there's an active selection - for now just check if selection is active selection_active?(emulator) end end