aboutsummaryrefslogtreecommitdiffstats
path: root/README.md
diff options
context:
space:
mode:
authoruser <user@clank>2026-08-15 15:21:24 +0200
committeruser <user@clank>2026-08-15 15:21:24 +0200
commit8379c0e7e92eb31a351e5023a1364ec8e95b402c (patch)
tree4e2628719f15123b93fe036fdf830e77d71c70d6 /README.md
parentsl0ppty: dim the panes you are not in, and a knob to say how much (diff)
downloadslosh-8379c0e7e92eb31a351e5023a1364ec8e95b402c.tar.gz
slosh-8379c0e7e92eb31a351e5023a1364ec8e95b402c.tar.xz
slosh-8379c0e7e92eb31a351e5023a1364ec8e95b402c.zip
sl0ppty: only panes that were given a command keep their corpse
Keeping every dead pane was too much. Split off a shell, do something in it, type `exit` -- and you are left with a corpse to dismiss, which is fussiness rather than information. You know what happened. You did it. So the policy has a line now, and the line is the *command*, not who made the pane. A pane told to run `npm run dev` is part of the session's shape: when it dies you want the error it left and the button that runs it again. A pane that is a shell is finished when you say so. Not provenance, because a shell is a shell whether a layout file made it or C-a \ did -- and that also means a session restored from dump-layout behaves like the one it was dumped from, since the dump writes `command=` only for panes that had one. The distinguishing mark turned out to need no new state: pane_label() already holds the command a layout gave it and is empty for a plain shell, so this is a policy over something already recorded. `keep_dead` is now `commands` (default), `all` or `none`, and still reads `true`/`false` as `all`/`none` -- that was the shipped spelling and a config saying it should keep working rather than quietly changing behaviour. Most of the diff is tests. The dead-pane suite had been written against the session's own pane, which is a shell under the new rule, so it was testing the half of the policy that now says "reap it". They run commanded panes from layouts instead, and the pair of cases -- a shell you split off goes, a commanded pane stays -- sits together in one place so the rule is legible in the test file too. One of those layouts wanted an escape sequence, which has to be written `\\033` so KDL's unescaping hands `\033` to the shell. Written singly the shell prints `033[38;2;...` and the test reads as "the colour stopped working".
Diffstat (limited to 'README.md')
-rw-r--r--README.md8
1 files changed, 5 insertions, 3 deletions
diff --git a/README.md b/README.md
index dc6c11a..e722a46 100644
--- a/README.md
+++ b/README.md
@@ -97,10 +97,12 @@ yours; the cheatsheet lists them apart, under "without the leader", so the
- Click a tab to switch, `+` to open one, a pane to focus it.
- Hovering anything says what it does, in a word at the bottom of the screen.
-### Panes do not vanish when a command ends
+### Panes that were given a command do not vanish when it ends
-When the program in a pane exits, the pane stays — with everything it printed
-still on screen, a line saying how it ended, and two buttons:
+Split off a shell, do something, type `exit`: it closes, like a terminal
+should. But a pane that was *told to run something* — from a layout file or
+the control API — keeps what it printed when that something exits, with a line
+saying how it ended and two buttons:
```
╰ exited: status 3 ───────────────────────────────[re-run]─[close]─╯