diff options
| author | user <user@clank> | 2026-08-16 20:09:33 +0200 |
|---|---|---|
| committer | user <user@clank> | 2026-08-16 20:09:33 +0200 |
| commit | 7c4038906a9ee584f24bc935f863500a8394aa12 (patch) | |
| tree | 84583b087d20eee0e477599e3aeb70ae9cf3e559 | |
| parent | sl0ppty: drag a pane onto a tab (diff) | |
| download | slosh-7c4038906a9ee584f24bc935f863500a8394aa12.tar.gz slosh-7c4038906a9ee584f24bc935f863500a8394aa12.tar.xz slosh-7c4038906a9ee584f24bc935f863500a8394aa12.zip | |
sl0ppty: docs that match the program
Audited every page against the source and the binary rather than against my
memory of it. Eight pages changed; the lists were all fine and the *numbers* were
all wrong.
Checked mechanically, and each of these came out complete: all 37 action names,
all 28 control verbs, all 9 shader names, the expression language's 10 variables,
2 constants and 7 functions, the 8 pane states, every knob the dump prints, every
OSC verb, every internal link and anchor, and every page's place in `docs/nav`.
Every fenced `kdl` block was run through `--check`; every `{"cmd":...}` in an
example is a verb that exists.
What was stale:
- **`make` does not build.** The default goal is `help`, so the install block --
`make vendor`, `make`, `make test` -- never produced a binary. It says `make
all` now, timed at 5.5s from clean rather than "about a second".
- **700-odd checks in about eight seconds** is now 1,500-odd in about thirteen,
plus 260 from the C unit tests, which the sentence did not count at all.
- **About 10k lines of C** is 15k. (10,799 of those are neither blank nor a
comment, which is presumably where the old figure came from.)
- **Seven chrome presets** are thirteen, and the six new ones use `sin` and `TAU`
-- so the perimeter section gained the angle idiom it now depends on, and its
"two things fall out of it" became three.
- **`--check`'s example transcript showed two errors nobody can produce any
more**: `bad prefix: C-a` and `bad key: ←`. Both inputs became *valid* -- `C-a`
when the chord parser learned the notation the cheatsheet prints, and `←` when
it learned the arrow glyphs, precisely so a chord copied off the screen parses.
Replaced with a transcript I generated, and a note that the problems go to
stderr, which matters for the pre-commit hook the page suggests.
- **`bell_indicator`** was a real knob documented nowhere.
- **"There is no key for this yet"** about moving a pane between tabs, two commits
after the keys and the drag landed.
- The cheatsheet's `+N more` line, the finder's `C-u`, and `tab_id` in a pane
report were all real and unmentioned.
Verified: the whole suite green, `make docs` builds nine pages, and the changed
pages read correctly in a browser -- including the new transcript and the `>` `<`
row of the key table.
| -rw-r--r-- | docs/chrome.md | 17 | ||||
| -rw-r--r-- | docs/config.md | 13 | ||||
| -rw-r--r-- | docs/design.md | 8 | ||||
| -rw-r--r-- | docs/index.md | 6 | ||||
| -rw-r--r-- | docs/keys.md | 3 | ||||
| -rw-r--r-- | docs/layouts.md | 4 | ||||
| -rw-r--r-- | docs/panes.md | 3 | ||||
| -rw-r--r-- | docs/scripting.md | 6 |
8 files changed, 38 insertions, 22 deletions
diff --git a/docs/chrome.md b/docs/chrome.md index dcc6130..a348fcc 100644 --- a/docs/chrome.md +++ b/docs/chrome.md @@ -42,21 +42,28 @@ the ring, which the language can work out — clockwise from the top-left: : y == rows-1 ? 2 * cols + rows - 3 - x : 2 * cols + 2 * rows - 4 - y) ``` -with the perimeter itself `2 * cols + 2 * rows - 4`. Two things fall out of it: +with the perimeter itself `2 * cols + 2 * rows - 4`. Three things fall out of it: - `min(d, P - d)` is distance the short way round, so an effect crosses the corner it started from instead of stopping at a seam. - `(p - head + P) % P` is "how far ahead of the head", which makes an arc rotate rather than a blob slide. +- `sin(TAU * p / P)` is that position **as an angle**, one cycle to the lap — and + a sine wraps at the corner for free, where a ramp needs the trick above. Any + whole number of lobes (`* 3 / P`) fits the ring exactly, which is what makes a + standing wave stand. There is no way to name a subexpression, so the formula is written out in full — which is why a small effect is a long line. -Seven of them are ready to paste in +Thirteen of them are ready to paste in `contrib/chrome`: -a shine running round the border, drifting sparkles, ripples leaving a corner in -both directions, a rotating arc, a static gradient, corner glints, and a sheen -across the title rule. +a shine running round the border, a sine comet with softer shoulders, marching +ants, a standing wave, drifting sparkles, ripples leaving a corner in both +directions, a rotating arc, a bit-drift pattern, a heartbeat, a static gradient, +corner glints, a sheen across the title rule and an XOR barcode along it. Its +README has the two techniques they share: the angle idiom above, and overdrive +then clip (`* 14 - 3000` after a sine) to turn a glow into an arc. ## A border that says something diff --git a/docs/config.md b/docs/config.md index 57b816c..0878eed 100644 --- a/docs/config.md +++ b/docs/config.md @@ -40,13 +40,16 @@ $ sl0ppty --check themes/mine.kdl # or one you have not installed yet Every problem it found, one per line, with the file and line it happened at: ``` - config.kdl:101: bad prefix: C-a - config.kdl:116: bad key: ← + cannot open /home/you/.config/sl0ppty/themes/nope.kdl + config.kdl:12: bad prefix: ctrl+nope + config.kdl:14: bad key: wobble + config.kdl:15: unknown action: fly themes/mine.kdl:7: unknown shader: bloom -~/.config/sl0ppty/config.kdl: 3 problems +~/.config/sl0ppty/config.kdl: 5 problems ``` -It exits 1 when it has anything to say, so it drops into an editor's compile +The problems go to stderr and the summary with them. It exits 1 when it has +anything to say, so it drops into an editor's compile step or a pre-commit hook with no glue. A clean run prints what it read — the files, the prefix it ended up with, how many bindings — because otherwise a config that was never opened and a config with nothing wrong look identical. @@ -103,7 +106,7 @@ theme { frame_focus "#00ff88" } // ...but that one colour is mine | group | what is in it | |---|---| | geometry | `gap` `gap_aspect` `padding` `rounded` `title_align` `title_inset` `min_pane` `min_split` | -| chrome | `status_bar` `status_line` `status_pad` `hints` `version_banner` `pane_buttons` and the marks (`zoom_mark` `zoom_on_mark` `close_mark` `min_mark` `newtab_mark` `bell_mark`) | +| chrome | `status_bar` `status_line` `status_pad` `hints` `version_banner` `pane_buttons` `bell_indicator` and the marks (`zoom_mark` `zoom_on_mark` `close_mark` `min_mark` `newtab_mark` `bell_mark`) | | behaviour | `focus_follows_mouse` `scroll_lines` `toast_ms` `hover_delay_ms` `double_click_ms` `anim_ms` `modal_scrim` `dim_unfocused` `keep_dead` `in_band_shaders` `shell` `editor` `shader_dir` | | colour | `theme { }` | | effects | `shaders { }`, `states { }` — see [shaders](shaders.md) and [chrome](chrome.md) | diff --git a/docs/design.md b/docs/design.md index 5d08d86..3775fef 100644 --- a/docs/design.md +++ b/docs/design.md @@ -29,9 +29,9 @@ the same object through the same commands, so there is exactly one implementatio of what a key does. That is what makes the tests real: they type keys and assert on the screen a -client would have seen, rather than on the internals. 700-odd checks in about -eight seconds, plus unit tests for the parts that are pure functions (the KDL -parser, the shader pass, the expression compiler). +client would have seen, rather than on the internals. 1,500-odd checks in about +thirteen seconds, plus 260 more from unit tests on the parts that are pure +functions (the KDL parser, the shader pass, the expression compiler). ## The shape of it @@ -46,5 +46,5 @@ src/shader.c the colour passes; src/expr.c compiles their strengths src/kdl.c a hand-rolled KDL subset, for configs and layouts ``` -About 10k lines of C. The vendored terminal core does VT parsing, scrollback, +About 15k lines of C. The vendored terminal core does VT parsing, scrollback, selection, images and key encoding; everything above is ours. diff --git a/docs/index.md b/docs/index.md index 5567195..ebe873d 100644 --- a/docs/index.md +++ b/docs/index.md @@ -26,8 +26,8 @@ autotools, no libraries. The result is one static binary. ```bash make vendor # build the vendored terminal core (once, a couple of minutes) -make # about a second -make test # optional: the full suite, about eight seconds +make all # a few seconds +make test # optional: the whole suite, about thirteen seconds ``` ## Run @@ -71,4 +71,4 @@ parsing, scrollback, selection, images and key encoding. What sits on top is small, recomputes rather than remembers, and is scriptable to the same depth it is usable. -About 10k lines of C, no dependencies beyond libc and the vendored core. +About 15k lines of C, no dependencies beyond libc and the vendored core. diff --git a/docs/keys.md b/docs/keys.md index 74d6ceb..648568a 100644 --- a/docs/keys.md +++ b/docs/keys.md @@ -7,6 +7,9 @@ leader twice sends it to the program in the pane. it cannot disagree with your keyboard. `C-a p` opens the same list as a palette you can type into. +On a terminal too short for the whole sheet it shows what fits and says how much +it did not — `+7 more, in docs/keys.md`, which is the table below. + ## Defaults | key | does | diff --git a/docs/layouts.md b/docs/layouts.md index 7166751..0d4e50c 100644 --- a/docs/layouts.md +++ b/docs/layouts.md @@ -82,7 +82,9 @@ than the pane's: a zoom that named it, and its minimised flag. Carried across, t first would zoom a pane that has left and the second would file the arrival in a strip nobody asked for. Which tab you are *looking* at does not change. -There is no key for this yet — the mechanism first, the presentation after. +`C-a >` and `C-a <` push the focused pane one tab along, `C-a b` gives it a tab of +its own, and a pane can be dragged onto a tab in the strip — see +[keys](keys.md#defaults) and [the mouse](panes.md#the-mouse). ## Purposes diff --git a/docs/panes.md b/docs/panes.md index 40ea565..95bcdc5 100644 --- a/docs/panes.md +++ b/docs/panes.md @@ -49,7 +49,8 @@ nothing you click can disagree with what is on screen. Tabs stop being navigation somewhere around six projects. `C-a f` opens a picker over the whole session — every tab, including panes a small window has collapsed out of sight. Type to narrow it by pane title, tab name or -[purpose](layouts.md#purposes); arrows, `C-n`/`C-p` or tab to move; enter to go. +[purpose](layouts.md#purposes); arrows, `C-n`/`C-p` or tab to move, `C-u` to clear +what you typed, enter to go. A dot marks where you already are. ## Panes that were given a command diff --git a/docs/scripting.md b/docs/scripting.md index b311a3e..575c1a2 100644 --- a/docs/scripting.md +++ b/docs/scripting.md @@ -20,7 +20,7 @@ Panes and tabs are addressed by **id**, so a background tab is scriptable. | verb | | |---|---| -| `panes` `tabs` | what exists, with ids, rects, titles, purposes, state | +| `panes` `tabs` | what exists, with ids, rects, titles, purposes, state. A pane's `tab_id` is what `move-pane` and `select-tab` want; its `tab` is where that tab sits in the strip | | `snapshot` | the composited screen, as JSON or `format:"text"` | | `deadline` | when the session wants its next frame, in ms, or -1 | | `send` | bytes as if typed, decoded like input (`"data":"\\x01\\\\"`) | @@ -83,8 +83,8 @@ otherwise be answered into a loop, which is exactly what `hello` used to do: `sl0ppty --script` is the whole program without a terminal: commands on stdin, answers on stdout. It is how the test suite works — drive these events, assert -this screen — which is also why the suite is 700-odd real end-to-end checks that -finish in eight seconds. +this screen — which is also why the suite is 1,500-odd real end-to-end checks that +finish in about thirteen seconds. ```bash $ printf '%s\n' '{"cmd":"split","dir":"cols"}' '{"cmd":"snapshot","format":"text"}' \ |
