Rio
adr/0043-shared-rich-list-and-git-flags.mdRaw Markdown · GitHub ↗

ADR-0043: A shared rich-list component; git flags in the files pane

  • Status: Accepted
  • Date: 2026-08-06
  • Deciders: jka
  • Decision: D43

Context

After ADR-0042 the git pane still used a listbox and looked different from the files pane. Users also wanted to see git status (modified, untracked) next to files in the tree.

Decision

  • The rich list becomes a reusable rl_* component keyed by body widget. Each row carries a selectable flag and an opaque payload the owning pane interprets. Panes pass callbacks for selection and activation (and later context menus). One row is selected at a time, and the text widget's own text selection is suppressed inside the list.
  • The git pane becomes an instance of it: each change row shows the two porcelain status characters, coloured by kind, then the path.
  • The files pane shows a two-character git status column: a file's status letter, or a · on a directory that contains changes. Colours reuse the diff and accent roles.
  • Without a file watcher, the panes refresh when rio knows the tree changed: when a folder is opened and when a file is saved.

Consequences

  • Both panes share one implementation of look and navigation, while their meaning stays in small pane-specific procedures.
  • The component was reused for search results (ADR-0051) and the manual's contents (ADR-0099).
  • Changes made outside rio still needed a manual refresh until ADR-0047.
  • Git status in the tree is read-only information; acting on it came with ADR-0044.