A text buffer for line-based data with undo support. Operations on the buffer address lines, the first line starts at index 1. The special index 0 can be used with the append command to insert text before the first line. For other commands, index 0 is equivalent to index 1. Targeting a line outside the current buffer bounds causes an error to be raised.
Procedures for creating new buffers and related accessors.
Create a new, initially empty, line buffer.
(make-buffer)Convert the line buffer to a list of lines.
(buffer->list buffer)Length of the buffer, i.e. amount of lines currently stored in it.
(buffer-length buffer)Predicate which returns true if the buffer is empty.
(buffer-empty? buffer)Procedures for managing the undo stack of the line buffer. The undo stack does not support multilevel undo. That is, the last undo can itself be undone using buffer-undo!.
Execute the given thunk and make all buffer operations performed
in thunk undoable.
(buffer-with-undo buffer thunk)Predicate to check if the undo stack is empty, returns false if it is.
(buffer-has-undo? buffer)Revert last operation tracked by buffer-with-undo. The undo is itself reversible via buffer-undo!.
(buffer-undo! buffer)Procedures which modify the buffer content. All operations can be undone using buffer-undo!.
Append the given text to the buffer after the given line number.
The special line number 0 can be used here to add lines to the
beginning of the buffer.
(buffer-append! buffer line text)Removes all lines within the buffer at the given inclusive range
range between start and end.
(buffer-remove! buffer start end)Replace lines in the inclusive range between start and end
with the data given by text which must be a list of lines
(i.e. strings).
(buffer-replace! buffer start end text)Join lines in the inclusive range between start and end
into a single line by removing all newline characters within
the specified range.
(buffer-join! buffer start end)Move lines in the inclusive range between start and end
to the destination line number dest. The destination must
always be outside the specified inclusive range.
(buffer-move! buffer start end dest)