summaryrefslogtreecommitdiff
path: root/docs
diff options
context:
space:
mode:
Diffstat (limited to 'docs')
-rw-r--r--docs/detached.md17
1 files changed, 13 insertions, 4 deletions
diff --git a/docs/detached.md b/docs/detached.md
index 58a2f9c6..0902f78a 100644
--- a/docs/detached.md
+++ b/docs/detached.md
@@ -255,6 +255,13 @@ Stated rather than papered over:
* **The screen is shared, at the smallest common grid.** Two frontends of
different sizes converge on the smaller; the larger window letterboxes. Same
semantics as tmux.
+* **A frontend asks for at most `max_cols` x `max_rows`** (512x128, above).
+ A window bigger than that — a 4K display at a small font is already past 128
+ rows — attaches at 512x128 and letterboxes the rest, exactly as it does
+ beside a smaller frontend. `client.zig` clamps the hello and every resize,
+ because the geometry itself does not fit the wire: an unclamped one was
+ refused by the session's decoder as `BadValue`, and that refusal reaches the
+ frontend as a bare hangup with no reason attached.
* **No LSP and no selection pipe** in a detached session. The daemon implements
**seventeen** of `Host.VTable`'s **twenty-one** methods — fewer than the tty
and SDL shells, which install nineteen each, everything but
@@ -299,8 +306,8 @@ Stated rather than papered over:
## Tests
-`zig build unit-test` runs eleven tests in `src/detached/client.zig`. Ten drive a
-real core over a real socket: a frontend is greeted
+`zig build unit-test` runs twelve tests in `src/detached/client.zig`. Eleven
+drive a real core over a real socket: a frontend is greeted
and sent a screen; input comes back as a diff; two frontends share one screen
at the smallest common grid; a frontend that dies takes nothing with it; a
wrong-version peer is refused, loudly; a peer that sends an undefined tag byte
@@ -309,9 +316,11 @@ the grid where the last one left it, and lets the next one take it over; the
three surviving effects route as documented above — `set_clipboard` to both
frontends, `read_clipboard` and `open_link` to the origin, and to the primary
once the origin is gone; the client table refuses rather than queues; and a
-frontend that stops reading is dropped.
+frontend that stops reading is dropped; and a window bigger than the protocol's
+grid attaches at `max_cols` x `max_rows` rather than being refused, which is
+also the one test that drives a full frame of the largest grid the wire carries.
-The eleventh builds no harness, opens no socket and touches no core, and that is
+The twelfth builds no harness, opens no socket and touches no core, and that is
the point: it pins the DESIGN rather than the behaviour, and `wire.zig` has its
mirror, one test per direction. "A frontend is never asked to fork, write, or
watch" walks