Raxol.Terminal.Buffer.Scroll (Raxol v2.0.1)

View Source

Terminal scroll buffer module.

This module handles the management of terminal scrollback buffers, including:

  • Virtual scrolling implementation
  • Memory-efficient buffer management
  • Scroll position tracking
  • Buffer compression

Summary

Functions

Adds content (multiple lines) to the scroll buffer.

Adds a line to the scroll buffer.

Cleans up the scroll buffer.

Clears the scroll buffer.

Clears the scroll region.

Gets the total height of the scroll buffer.

Gets the memory usage of the scroll buffer.

Gets the current scroll position.

Gets the size of the scroll buffer.

Gets a view of the scroll buffer at the current position.

Gets the visible region of the scroll buffer.

Creates a new scroll buffer with the given dimensions.

Resizes the scroll buffer to the new height.

Scrolls the buffer by the given amount.

Scrolls the buffer in the specified direction by the given amount.

Updates the maximum height of the scroll buffer. Trims the buffer if the new max height is smaller than the current content.

Sets the scroll region.

Types

t()

@type t() :: %Raxol.Terminal.Buffer.Scroll{
  buffer: [[Raxol.Terminal.Cell.t()]],
  compression_ratio: float(),
  height: non_neg_integer(),
  max_height: non_neg_integer(),
  memory_limit: non_neg_integer(),
  memory_usage: non_neg_integer(),
  position: non_neg_integer(),
  scroll_region: {non_neg_integer(), non_neg_integer()} | nil
}

Functions

add_content(scroll, content)

Adds content (multiple lines) to the scroll buffer.

add_line(scroll, line)

Adds a line to the scroll buffer.

Examples

iex> scroll = Scroll.new(1000)
iex> line = [Cell.new("A"), Cell.new("B")]
iex> scroll = Scroll.add_line(scroll, line)
iex> scroll.height
1

cleanup(scroll)

Cleans up the scroll buffer.

clear(scroll)

Clears the scroll buffer.

Examples

iex> scroll = Scroll.new(1000)
iex> line = [Cell.new("A"), Cell.new("B")]
iex> scroll = Scroll.add_line(scroll, line)
iex> scroll = Scroll.clear(scroll)
iex> scroll.height
0

clear_scroll_region(scroll)

Clears the scroll region.

Examples

iex> scroll = Scroll.new(1000)
iex> scroll = Scroll.set_scroll_region(scroll, 1, 5)
iex> scroll = Scroll.clear_scroll_region(scroll)
iex> scroll.scroll_region
nil

get_height(scroll)

Gets the total height of the scroll buffer.

Examples

iex> scroll = Scroll.new(1000)
iex> line = [Cell.new("A"), Cell.new("B")]
iex> scroll = Scroll.add_line(scroll, line)
iex> Scroll.get_height(scroll)
1

get_memory_usage(scroll)

Gets the memory usage of the scroll buffer.

get_position(scroll)

Gets the current scroll position.

Examples

iex> scroll = Scroll.new(1000)
iex> Scroll.get_position(scroll)
0

get_size(scroll)

Gets the size of the scroll buffer.

get_view(scroll, view_height)

Gets a view of the scroll buffer at the current position.

Examples

iex> scroll = Scroll.new(1000)
iex> line = [Cell.new("A"), Cell.new("B")]
iex> scroll = Scroll.add_line(scroll, line)
iex> view = Scroll.get_view(scroll, 10)
iex> length(view)
1

get_visible_region(scroll)

Gets the visible region of the scroll buffer.

new(max_height, memory_limit \\ 5_000_000)

Creates a new scroll buffer with the given dimensions.

Examples

iex> scroll = Scroll.new(1000)
iex> scroll.max_height
1000
iex> scroll.position
0

resize(scroll, new_height)

Resizes the scroll buffer to the new height.

scroll(scroll, amount)

Scrolls the buffer by the given amount.

Examples

iex> scroll = Scroll.new(1000)
iex> line = [Cell.new("A"), Cell.new("B")]
iex> scroll = Scroll.add_line(scroll, line)
iex> scroll = Scroll.scroll(scroll, 5)
iex> scroll.position
5

scroll(scroll, direction, amount)

Scrolls the buffer in the specified direction by the given amount.

set_max_height(scroll, new_max_height)

Updates the maximum height of the scroll buffer. Trims the buffer if the new max height is smaller than the current content.

set_scroll_region(scroll, top, bottom)

Sets the scroll region.

Parameters

  • scroll: The scroll buffer
  • top: Top boundary of the scroll region
  • bottom: Bottom boundary of the scroll region

Examples

iex> scroll = Scroll.new(1000)
iex> scroll = Scroll.set_scroll_region(scroll, 1, 5)
iex> scroll.scroll_region
{1, 5}