Rio
adr/0042-files-pane-rich-list.mdRaw Markdown · GitHub ↗

ADR-0042: The files pane is a rich list drawn on a text widget

  • Status: Accepted; amended by ADR-0043, ADR-0087
  • Date: 2026-08-06
  • Deciders: jka
  • Decision: D42

Context

The files pane was a Tk listbox: text only, one colour, one selection bar, essentially the output of ls. A Windows 2000-style navigator needs per-row icons, a hover band and a full-width selection band, none of which a listbox can draw.

Decision

The pane body is a read-only text widget used as a list canvas: one line per entry, a monochrome glyph icon followed by the name, and full-width hover and selection bands implemented as tags that extend through the newline. Colours come from existing theme roles, with the hover shade derived by blending towards the selection colour.

This text widget is GUI-local chrome, not a view of a core buffer. It is disabled, never proxied and never editable. A text widget is used only because it is the best stock Tk surface for icons, bands, scrolling and keyboard navigation; a canvas would need all of that computed by hand.

Consequences

  • The pane gains the look and feel the UI principle asks for, with no new theme roles.
  • rio does not move towards "everything is a buffer". Core-backed read-only view buffers remain a separate, untaken option.
  • The component was generalised for the git pane in ADR-0043, and the flat navigator became a tree in ADR-0087.