zipper package:reflex-vty
TextZipper is designed to be help manipulate the contents of a
text input field. It keeps track of the logical lines of text (i.e.,
lines separated by user-entered newlines) and the current cursor
position. Several functions are defined in this module to navigate and
edit the TextZipper from the cursor position.
TextZippers can be converted into
DisplayLines, which
describe how the contents of the zipper will be displayed when wrapped
to fit within a container of a certain width. It also provides some
convenience facilities for converting interactions with the rendered
DisplayLines back into manipulations of the underlying TextZipper.
A zipper of the logical text input contents (the "document"). The
lines before the line containing the cursor are stored in reverse
order. The cursor is logically between the "before" and "after" text.
A "logical" line of input is a line of input up until a user-entered
newline character (as compared to a "display" line, which is wrapped
to fit within a given viewport width).
Map a replacement function over the characters in a
TextZipper
Default vty event handler for text inputs