From c3e2cd3b854964ca7db3798cb8750ee6d0833057 Mon Sep 17 00:00:00 2001 From: Gabriel Schneider Date: Sun, 27 Sep 2026 20:35:01 -0300 Subject: pty/run says cut when its output's start is gone, and reads only a bounded tail A clear or reset while the command ran, a start or end mark that came on the alternate screen, or a garbage end pin read as a complete answer; now any of them, like a start that scrolled out, answers exit N cut. The output is read from at most output_rows rows above its end instead of the whole history on the editor's thread (cut if that clips it), a D with no status answers exit ? rather than exit 0, and running out of memory answers error out of memory rather than cut. Co-Authored-By: Claude Opus 5.5 --- docs/fs.md | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) (limited to 'docs/fs.md') diff --git a/docs/fs.md b/docs/fs.md index b19a0a71..c5c5b2e0 100644 --- a/docs/fs.md +++ b/docs/fs.md @@ -218,11 +218,20 @@ the same open (factotum's `rpc` shape): write the line, then read `exit N` once the command has ended and the shell is back at a prompt, followed by what it printed. The output is what the screen showed between the command's start and end marks: stderr interleaved, `\r` progress collapsed to its last -state, no colour; a full-screen program (vim, less) leaves none, and rows a -program redrew above its start are missed. Only its last 64 KiB are kept, -from a line start, and the header then reads `exit N cut M` (M bytes left -out), or `exit N cut` when its start scrolled out of the history. The header -is always the whole first line. It reads +state, no colour, tabs as the spaces they drew, trailing spaces trimmed and +trailing blank lines dropped (`printf 'a\n\n\n'` answers `a`), leading +whitespace kept; a program on the alternate screen (vim, less, htop) leaves +none, and rows a program redrew above its start are missed. A bash job notice +printed before its PROMPT_COMMAND lands in the next run's output. Only its +last 64 KiB are kept, from a line start, and the header then reads `exit N +cut M` (M bytes left out). `exit N cut`, with no count, says the output's +start is not there to read: it scrolled out of the history, the command +erased it (`clear`, a reset), a start or end mark came on the alternate +screen, or the command printed more than 8192 rows, of which only the last +are read so that the answer costs the editor a bounded amount. `exit ?` is a +command whose end mark carried no status, which is not a success; `error out +of memory` is an answer that could not be made. The header is always the +whole first line. It reads `busy` at once when a command is running, text is typed at the prompt or the shell has not drawn its first prompt; `error not run` when the shell refused the line without running it (a fish syntax error; the line is taken back off -- cgit v1.3