aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoruser <user@clank>2026-08-16 20:09:33 +0200
committeruser <user@clank>2026-08-16 20:09:33 +0200
commit7c4038906a9ee584f24bc935f863500a8394aa12 (patch)
tree84583b087d20eee0e477599e3aeb70ae9cf3e559
parentsl0ppty: drag a pane onto a tab (diff)
downloadslosh-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.md17
-rw-r--r--docs/config.md13
-rw-r--r--docs/design.md8
-rw-r--r--docs/index.md6
-rw-r--r--docs/keys.md3
-rw-r--r--docs/layouts.md4
-rw-r--r--docs/panes.md3
-rw-r--r--docs/scripting.md6
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"}' \