wijjit.terminal.screen_buffer.DiffRenderer

class wijjit.terminal.screen_buffer.DiffRenderer[source]

Efficiently renders changes between two buffers.

This class compares two ScreenBuffer instances and generates minimal ANSI escape sequences to update only the changed cells, dramatically reducing terminal output for incremental updates.

Variables:

last_buffer (ScreenBuffer or None) – Previously rendered buffer for comparison

Examples

Render differences between buffers:

>>> renderer = DiffRenderer()
>>> old_buffer = ScreenBuffer(80, 24)
>>> new_buffer = ScreenBuffer(80, 24)
>>> new_buffer.set_cell(0, 0, Cell('A'))
>>> ansi_output = renderer.render_diff(old_buffer, new_buffer)
>>> '\x1b[' in ansi_output  # Contains cursor positioning
True

First render generates full output:

>>> renderer = DiffRenderer()
>>> buffer = ScreenBuffer(10, 5)
>>> output = renderer.render_diff(None, buffer)  # Full render
__init__()[source]
Return type:

None

Methods

__init__()

render_diff(old_buffer, new_buffer)

Generate minimal ANSI commands to update terminal.

render_diff(old_buffer, new_buffer)[source]

Generate minimal ANSI commands to update terminal.

Parameters:
  • old_buffer (ScreenBuffer or None) – Previous buffer state, or None for full render

  • new_buffer (ScreenBuffer) – New buffer state to render

Returns:

ANSI escape sequences to update terminal from old to new state

Return type:

str

Notes

When old_buffer is None or dimensions don’t match, performs a full render. Otherwise, only outputs ANSI sequences for changed cells.

The generated output includes: - Cursor positioning (ow;colH) - Style codes for each changed cell - Optimizations to group adjacent cells with same style