diff options
| author | Gabriel Schneider <[email protected]> | 2026-09-27 18:20:06 -0300 |
|---|---|---|
| committer | Gabriel Schneider <[email protected]> | 2026-10-01 00:12:14 -0300 |
| commit | 594970f18dee92308fd1554663cc408cda4d102c (patch) | |
| tree | 91fc75e94713a3de8327f680b01ccc8f53b755d9 /test | |
| parent | 6f7beca8d27e2e00f7b90bb75015637a9aa4c950 (diff) | |
| download | pardes-594970f18dee92308fd1554663cc408cda4d102c.tar.gz pardes-594970f18dee92308fd1554663cc408cda4d102c.zip | |
Make pty/run and /log streams, and take refused lines back cleanly
Review fixes to pty/run and /log:
- Both are streams with a per-open cursor. A shell's exec 3<>file shares
one offset between write and read, so cat <&3 after echo make >&3 asked
for offset 5 and got "0" instead of "exit 0"; log after follow lost its
first bytes the same way.
- A run is accepted only in pardes's own tagged input phase, so a nested
shell's prompt (ssh, a shell with its own integration) is never taken for
this shell's.
- A line the shell refused is taken back so the next finds the prompt
clear: bash's continuation prompt (now tagged k=c) gets Ctrl-C and the
answer waits for the fresh prompt; a bash syntax error (no C, but a D) is
answered at once; fish's kept line gets Ctrl-U (a Ctrl-C sent while fish
redraws is lost). fish's right prompt no longer reads as typed input.
- bash marks a command's start from PS0 on bash 4.4+, not a DEBUG trap, so
a user's own DEBUG trap (bash-preexec, atuin) survives. bash's own job
notices now show as in plain bash (ttyfollow golden).
- 32 run slots; a new line on an open starts a fresh answer.
Checked live in bash, fish, and fish with a right prompt.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Diffstat (limited to 'test')
| -rw-r--r-- | test/fs.py | 3 | ||||
| -rw-r--r-- | test/snapshots/ttyfollow.golden | 26 |
2 files changed, 16 insertions, 13 deletions
@@ -311,6 +311,9 @@ def run_file(binary): time.sleep(.05) assert run(client, term, b'false\n') == b'exit 1\n' assert run(client, term, b'sh -c "exit 7"\n') == b'exit 7\n' + assert run(client, term, b'fi\n') == b'error not run\n' # a syntax error runs nothing + assert run(client, term, b"echo 'open\n") == b'error not run\n' # nor does an open quote + assert run(client, term, b'true\n') == b'exit 0\n' # ...and the shell is clear after with Client(address) as other: slow = [] waiter = threading.Thread(target=lambda: slow.append(run(other, term, b'sleep 1\n')), daemon=True) diff --git a/test/snapshots/ttyfollow.golden b/test/snapshots/ttyfollow.golden index e77b3caa..77f27d8e 100644 --- a/test/snapshots/ttyfollow.golden +++ b/test/snapshots/ttyfollow.golden @@ -28,17 +28,17 @@ |8: 190 $ == snap tty-follows grid=100x31 cursor=4,16 |2: $ /tmp/pardes-snap/ttyfollow/cwd Tty Save Mode Fi$ /tmp/pardes-snap/ttyfollow/cwd Tty Save Mode Fi -|3: 288 $ ls -|4: 289 s.txt -|5: 290 $ touch go; until test -f done1; do sleep 0.05; -|6: 291 done; echo SYN''CED -|7: 292 SYNCED -|8: 293 $ -|9: 294 -|10: 295 -|11: 296 -|12: 297 -|13: 298 -|14: 299 -|15: 300 +|3: 292 $ ls +|4: 293 s.txt +|5: 294 $ touch go; until test -f done1; do sleep 0.05; +|6: 295 done; echo SYN''CED +|7: 296 SYNCED +|8: 297 $ +|9: 298 +|10: 299 +|11: 300 +|12: [1]+ Done ( until test -f +|13: go; do +|14: sleep 0.05; +|15: done; seq 201 260; touch done1 ) |16: $ |
