diff options
| author | user <user@clank> | 2026-09-22 15:12:02 +0200 |
|---|---|---|
| committer | user <user@clank> | 2026-09-22 15:12:02 +0200 |
| commit | 720aa48e249c0c962e8f73372ceded6092414a6e (patch) | |
| tree | db713dc86f1333dab0f509e633077384005562c3 /docs/scripting.md | |
| parent | sidebar: air inside it, the way panes have padding (tab_bar_padding) (diff) | |
| download | slosh-720aa48e249c0c962e8f73372ceded6092414a6e.tar.gz slosh-720aa48e249c0c962e8f73372ceded6092414a6e.tar.xz slosh-720aa48e249c0c962e8f73372ceded6092414a6e.zip | |
osc 5577: `busy`, and a sidebar that shows it (busy_mark)
A status is a line of text, and a line of text cannot say whether it is still
true. "building 3/7" reads exactly the same while it builds and ten minutes
after it stopped, which is the one thing somebody reading it from another tab
wants to know -- and the only workaround available to a program was to write
the answer into the words and keep rewriting them.
So `busy`:
printf '\033]5577;1;status;make test\033\\'
printf '\033]5577;1;busy;1\033\\'
...
printf '\033]5577;1;busy;0\033\\'
A flag of its own rather than a field of `status`, because a status is the
*whole* payload after the verb -- `status;a;b;c` has always been the text
"a;b;c" -- so anything added to that line would change what every existing
sender means, including the five pi extensions D1 promises byte compatibility
to. Orthogonal, so a program can leave one line up and toggle the other;
anything but 0/false/no/off is on; `clear` takes both; and a pane whose program
has gone is never busy, whatever it last claimed, because a spinner turning
under a dead tab is a lie you keep looking at.
In a sidebar the row turns `tab_status_busy` -- the theme's accent, derived
like the other status colours, so no theme needs a line -- and takes a spinner
in the column `tab_bar_padding` was already holding blank, so nothing reflows
when a program starts or stops working. `busy_mark` is the frames, separated by
spaces: one frame is a static mark and costs nothing, several make it turn, and
only then does the session keep a frame clock -- via the same `animating` flag
an animated shader uses, so the cost lands only while such a row is actually
composed, and `""` drops the mark entirely and leaves the colour to say it.
The frame is a pure function of the clock, like every other pulse here, so two
clients attached to one session show the same one.
`panes` now reports `status` and `busy`, which is the scriptable half of the
same fact: what a pane says about itself, without reading its screen.
Diffstat (limited to 'docs/scripting.md')
| -rw-r--r-- | docs/scripting.md | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/docs/scripting.md b/docs/scripting.md index 048a7fa..9971bc5 100644 --- a/docs/scripting.md +++ b/docs/scripting.md @@ -93,6 +93,8 @@ By printing an escape sequence. No plugin, no config: ```bash printf '\033]5577;1;status;building 3/7\033\\' +printf '\033]5577;1;busy;1\033\\' # ...and it is still going +printf '\033]5577;1;busy;0\033\\' # ...and now it is not printf '\033]5577;1;buttons;approve:Approve;cancel:Cancel\033\\' # clicking [Approve] arrives on the program's stdin as: # \033]5577;1;click;approve\033\\ @@ -108,6 +110,17 @@ the pane that said it. A status is not decoration on your own frame; it is how a pane reports progress to somebody working elsewhere, which is a reason to keep it current and `clear` it when the work is done. +`busy` is the one thing a line of text cannot say about itself: `make test` and +`make test` are the same words whether it is running or finished. It is a flag +of its own rather than a field of `status`, because a status is the *whole* +payload after the verb — `status;a;b;c` is the text `a;b;c` — so anything added +to that line would change what every sender already means. In a sidebar a busy +status gets the spinner (`busy_mark`) and `tab_status_busy`, which is how +"working" and "done" tell themselves apart from another tab without reading the +words. Anything but `0`, `false`, `no` or `off` turns it on; `clear` turns it +off along with the text, and so does the program exiting — a status left behind +by something that is gone describes the past, whatever it last claimed. + `purpose` is the other verb: `printf '\033]5577;1;purpose;logs\033\\'`. A purpose declared by a layout or the control API wins and cannot be overwritten this way. |
