Skip to content

v0.4.3 — finish the textarea

Choose a tag to compare

@thatsme thatsme released this 27 Jul 10:14

v0.4.3 — finish the textarea

Closes the gaps v0.4.2 shipped with. No new widgets, and the routed-message
contract is unchanged.

Added:

  • Goal-column memory for textarea vertical motion. Moving down through a
    short line and back returns to the column you started in; previously each
    motion re-derived the column, so one short row truncated it permanently.
    The column is runtime state, keyed by focus — it never enters the public
    message contract. Harlock.TextArea.apply_key/6 threads it.
  • Harlock.TextArea.expand_tabs/2. A tab is zero-width to Harlock.Width,
    so a \t in a value holds a cursor index while consuming no display cell.
    Tabs can only arrive from bracketed paste or an app assigning :value,
    both app-side, so this is a helper rather than enforcement at insert.
  • Alt-Backspace kills the word backward in text_input and textarea.
  • examples/notes.exs — the first runnable demo of the widget.

Changed:

  • Widget key routing carries runtime state back to the caller, so a key that
    changes interaction state without changing value or cursor records it and
    still falls through to update/2. Internal; no app-visible change beyond
    goal columns.

Fixed:

  • ROADMAP no longer lists a missing row.ex helper. Element.Column is a
    table-column spec, not a layout container.

Full notes in CHANGELOG.md.