diff options
| author | user <user@clank> | 2026-08-15 15:21:24 +0200 |
|---|---|---|
| committer | user <user@clank> | 2026-08-15 15:21:24 +0200 |
| commit | 8379c0e7e92eb31a351e5023a1364ec8e95b402c (patch) | |
| tree | 4e2628719f15123b93fe036fdf830e77d71c70d6 /README.md | |
| parent | sl0ppty: dim the panes you are not in, and a knob to say how much (diff) | |
| download | slosh-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.md | 8 |
1 files changed, 5 insertions, 3 deletions
@@ -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]─╯ |
