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
raxol lib raxol terminal commands osc_handlers selection_parser.ex
Raw

lib/raxol/terminal/commands/osc_handlers/selection_parser.ex

defmodule Raxol.Terminal.Commands.OSCHandlers.SelectionParser do
@moduledoc false
@spec parse(String.t()) ::
{:query, nil}
| {:start, integer(), integer()}
| {:end, integer(), integer()}
| {:clear, nil}
| {:text, String.t()}
| {:error, term()}
def parse(data) do
case String.split(data, ";") do
["?'] -> {:query, nil}
['start", x_str, y_str] -> parse_coordinates(x_str, y_str, :start)
["end", x_str, y_str] -> parse_coordinates(x_str, y_str, :end)
["clear"] -> {:clear, nil}
["text" | rest] -> {:text, Enum.join(rest, ";")}
_ -> {:error, :invalid_format}
end
end
defp parse_coordinates(x_str, y_str, command) do
with {x, ""} <- Integer.parse(x_str),
{y, ""} <- Integer.parse(y_str) do
{command, x, y}
else
_ -> {:error, :invalid_coordinates}
end
end
end