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 (
ScreenBufferorNone) – 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
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 (
ScreenBufferorNone) – Previous buffer state, or None for full rendernew_buffer (
ScreenBuffer) – New buffer state to render
- Returns:
ANSI escape sequences to update terminal from old to new state
- Return type:
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 ([row;colH) - Style codes for each changed cell - Optimizations to group adjacent cells with same style