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 scroll predictor.ex
Raw

lib/raxol/terminal/scroll/predictor.ex

defmodule Raxol.Terminal.Scroll.Predictor do
@moduledoc """
Handles predictive scrolling operations for the terminal.
Tracks recent scrolls and provides pattern analysis for smarter prediction.
"""
@type scroll_event :: %{
direction: :up | :down,
lines: non_neg_integer(),
timestamp: integer()
}
@type t :: %__MODULE__{
window_size: non_neg_integer(),
history: [scroll_event()]
}
defstruct window_size: 10,
history: []
@doc """
Creates a new predictor instance.
"""
def new do
%__MODULE__{
window_size: 10,
history: []
}
end
@doc """
Adds a scroll event to the history and keeps only the window size worth of history.
"""
def predict(predictor, direction, lines) do
event = %{
direction: direction,
lines: lines,
timestamp: System.monotonic_time()
}
history = [event | Enum.take(predictor.history, predictor.window_size - 1)]
%{predictor | history: history}
end
@doc """
Analyzes recent scroll patterns: returns average scroll size and alternation ratio.
"""
def analyze_patterns(%__MODULE__{history: history}) do
Raxol.Terminal.Scroll.PatternAnalyzer.analyze_patterns(history)
end
end