From 95681ff7017b8a9e4c8f9fa6a7371d1233432f2f Mon Sep 17 00:00:00 2001 From: Gabriel Schneider Date: Mon, 14 Sep 2026 13:55:41 -0300 Subject: 9p: use cloud9 protocol sessions and transports --- docs/cloud9.md | 22 ++++++++++++++++++++++ docs/config.md | 36 ++++++++++++++++++++++++++++++++---- 2 files changed, 54 insertions(+), 4 deletions(-) create mode 100644 docs/cloud9.md (limited to 'docs') diff --git a/docs/cloud9.md b/docs/cloud9.md new file mode 100644 index 00000000..db547afc --- /dev/null +++ b/docs/cloud9.md @@ -0,0 +1,22 @@ +# cloud9 integration + +The sibling `../cloud9` package owns the base 9P2000 wire format, client and server +connections, and TCP/Unix/QUIC transports. `build.zig.zon` uses the local package +path so both checkouts can be developed together. + +`src/9p.zig` remains the adapter between cloud9 requests and Pardes filesystem +operations. Mounting, Unix namespace discovery and permissions, the editor event +loop, connection limits, and exported tree policy remain here. `src/9p_quic.zig` +selects the existing `pardes-9p` ALPN for cloud9's optional OpenSSL transport. +The snapshot client and standalone protocol/GPIO tests import the same module. +The separate `05-zig-p4` build also supplies cloud9 for the GPIO firmware entry. + +Run `zig build 9p-test` for the filesystem adapter and +`zig build 9p-io-test -Dquic=true` for native transport/client integration. Run cloud9's `zig build test`, +`transport-test`, `quic-test -Dquic=true`, `fuzz`, and `differential` steps for the +shared implementation. See cloud9's `docs/validation.md` for recorded runs and +known test-environment limits. + +Invalid framing now terminates a server connection. Cloud9 also checks reply +counts and reserves tags until flush completion. Client metadata is slightly +larger to track those reservations, and its bounds tests reflect that fixed cost. diff --git a/docs/config.md b/docs/config.md index 79a5e631..ff960aac 100644 --- a/docs/config.md +++ b/docs/config.md @@ -25,15 +25,16 @@ which `Config` reports as `no per-user config path`. `+Config` pane. It reports the startup path and every live config-like value: theme, colors, focus tint, syntax weight, wrapping, tag position, debug mode, the requested shell and the executable actually resolved at the last spawn, requested/effective GUI font -and size, tagline scale, panel transition, +and size, tagline scale, window opacity, panel transition, scene effects, hover delay, platform, native-image support, and (on SDL) whether the executable uses live-built shaders or the paired prebuilt shader snapshot. Platform-dependent rows say `unsupported` instead of looking like an off or -empty supported setting. The four fields of `config.Runtime.Capabilities` gate +empty supported setting. The five fields of `config.Runtime.Capabilities` gate them and are stated once as plain data in `builtins.capabilities`: `font_picker` is the SDL GUI and native macOS only, `scene_shaders` the same two, `panel_transitions` every -hosted shell, and `tagline_font_size` everything but the TTY and the board. So +hosted shell, `window_opacity` the SDL GUI only, and `tagline_font_size` +everything but the TTY and the board. So the TTY reports Font, TaglineSize and the scene shaders as unsupported; the browser reports Font, panel transitions and the scene shaders as unsupported, and its TaglineSize row reads `82% (build-time only)` — tagline font size is @@ -75,11 +76,12 @@ Wrap A line matches a builtin whose name takes NO argument only as that whole word: `Kill` runs, `Kill something` does not. A builtin that takes one (`takes_arg` in `src/builtins.zig`, or a `settings` row whose action is -`shell`, `theme`, `font` or `tagline_size` in `config.Runtime.settings`) takes +`shell`, `theme`, `font`, `tagline_size` or `window_opacity` in `config.Runtime.settings`) takes everything after the name as the argument. On a native build that is `Theme`, `ThemeFile`, `Font`, `TaglineSize`, `Shell`, `Save`, `Restore`, `Attach`, `Mount`, `Unmount`, `Find`, `Grep`, `Rename`, `WsSymbols`, `Look`, `Exec`, `Msg` and `EffectCode`. +The SDL GUI also has `WindowOpacity`, which takes one argument. (`Peek`, `Poke`, `Hexdump` and `Gpio` take one too, but they exist only where `builtins.Board.enabled` holds, and that build has no config file.) @@ -116,6 +118,32 @@ the current value. A `FocusTint` line in a fresh startup configuration disables the tint; a `SyntaxBold` line enables the stronger keyword weight. Those two appearance controls leave focus, selections and editing behavior unchanged. +`WindowOpacity ` controls the opacity of everything in the SDL window +except text and the cursor, which stay fully opaque. Use `WindowOpacity 85` +to see the desktop through the editor, or `WindowOpacity 100` to restore full +opacity (the default). The argument must be a whole number from +0 through 100; missing or invalid values +leave the setting unchanged. At zero only text and the cursor remain visible. +Add the command to `init` to persist it. + +The same opacity applies to editor and embedded terminal backgrounds, UI +chrome, borders, scrollbars, gutters, and images. Overlapping non-text drawing +does not make those areas more opaque. Regular text, syntax colors, tagline +text, terminal glyphs, and the cursor keep their normal opacity. This does +not blend foreground colors into their cell backgrounds. The TTY +and other non-SDL hosts do not emulate this effect; their `Config` report says +`WindowOpacity: unsupported`. + +On native Wayland, Pardes uses an alpha-capable transparent surface. It does +not use whole-window opacity protocols such as `wp_alpha_modifier_v1`, because +those would also fade the text. Presentation uses the existing GPU offscreen +renderer followed by a readback and SDL renderer upload per presented frame, +which adds rendering cost. Other SDL drivers can report background transparency +as unsupported unless their rendering configuration is alpha-capable. +If the rendering backend cannot apply the request, Pardes reports the error +and keeps the last successfully applied opacity. `Config` reports the +percentage and marks a request as pending until the SDL host handles it. + ## Crash records A panic appends to `crashes` in that same directory, beside `init`, and only -- cgit v1.3