# RULE: a results buffer is a list of things you can RUN, and its traits say # what a ROW IS. Every list before this one held LOCATIONS — a row with a # `path:LINE:COL` word inside it — so n/N select that word and Enter Looks it. # `SPC t t` (ThemeSel) opens the first one whose rows are COMMANDS: `Theme # `, exactly the line you would type, with no path in it to pick out, so # n/N select the WHOLE ROW. One motion, two grains, and the same split either # way — the step only SELECTS, and Tab (Exec, or the middle button, which is # the same builtin) is what RUNS what it left. Walking the list therefore # wears nothing as you pass; the theme changes on the Tab, and picking one is # running it and stopping. There is still no preview state, nothing to confirm # and nothing to cancel: the row you ran is the theme you have. # # Both halves of the ring are in the buffer: the three pardes ships with come # first (helix, dark, acme), then everything tools/gen_themes.zig exported from # the vendored helix .toml and zed .json files, sorted. The colors below are # read with snapstyle, so this proves the generated themes are real data and # not just names in a list. lines t.txt 40 start 30 100 t.txt wait 8000 t.txt stable 700 20000 snap boot # SPC t t: the list lands below the pane that asked, focus stays HERE — but a # fresh output buffer is where the walk's ring starts, so the first n goes # into the list and every one after it carries on down it. key space t t wait 10000 Theme helix stable 700 15000 snap list # n selects row 1 whole and Tab runs it: `Theme helix`, which is already the # boot theme, so only the selection moves. That is the honest first step — an # idempotent command has to be safe to run. key n key tab stable 700 15000 snap step-helix snapstyle step-helix # ...and now the theme really does change under the cursor, one row at a time key n key tab stable 700 15000 snap step-dark snapstyle step-dark key n key tab stable 700 15000 snap step-acme snapstyle step-acme # past the curated three and into the generated half, which is 225 themes # sorted by name — so the fourth row is whatever sorts first, not whatever was # vendored first. That is the point of sorting: the ring is the same everywhere # whatever order the directory read handed the files over in. key n key tab stable 700 15000 snap step-generated snapstyle step-generated # N walks back the same way — it is the exact inverse of n — and the Tab after # it runs the row it lands on, so the theme rewinds too key N key tab stable 700 15000 snap step-back snapstyle step-back # PICKING is just stopping: the theme the last Tab ran is still on, and the # list is closed with an explicit Del. No window move is needed to get there — # the walk lands IN the pane it steps, so the cursor has been in the list # since the first n. Body-normal Esc is Last, so it deliberately leaves this # document-like output buffer open. # ...and the WHOLE ring is in there, all 228 rows: `ge` to the last line, which # only reaches `Theme zenburn` if nothing truncated the buffer on the way in. It # is an ordinary file pane, so it scrolls like one; a motion runs nothing and # neither does a step, so no theme changes here and the one the last Tab chose # is still on. key g e stable 700 15000 snap tail key space d settle 100 stable 700 15000 snap picked snapstyle picked