From 60367d8fe23f6af98ec28e3cf6c2094dfe332df0 Mon Sep 17 00:00:00 2001 From: Gabriel Schneider Date: Sun, 6 Sep 2026 18:11:36 -0300 Subject: Refactor panes and filesystem; replace FUSE with 9P Consolidate pane, layout, memory and host code. Serve 9P by default over Unix sockets, with runtime mounts and optional TCP/QUIC transports. Remove FUSE and obsolete proof-of-concept examples. Fix highlighting and terminal-history performance, expand differential and stress-test infrastructure, sort navigation results while preserving the next occurrence, add syntax-colored Braille minimaps, remove SPC-k, and document 9P interaction as a repository skill. --- test/ninep.py | 148 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 148 insertions(+) create mode 100644 test/ninep.py (limited to 'test/ninep.py') diff --git a/test/ninep.py b/test/ninep.py new file mode 100644 index 00000000..b128cc8a --- /dev/null +++ b/test/ninep.py @@ -0,0 +1,148 @@ +#!/usr/bin/env python3 +import json +import os +import socket +import struct + + +def string(value): + data = value.encode() if isinstance(value, str) else value + return struct.pack(' self.msize: + raise ValueError('request exceeds negotiated message size') + self.socket.sendall(packet) + size, answer, received_tag = struct.unpack(' count: + raise OSError('invalid 9P read length') + return reply[4:] + + def read(self, path): + fid = self.open(path) + try: + data = bytearray() + while chunk := self.read_fid(fid, len(data)): + data.extend(chunk) + return bytes(data) + finally: + self.close(fid) + + def screen(self): + return json.loads(self.read('/self/screen')) + + def write(self, path, data, truncate=False): + fid = self.open(path, 1 | (16 if truncate else 0)) + try: + offset = 0 + while offset < len(data): + chunk = data[offset:offset + self.msize - 23] + reply = self.rpc(118, struct.pack(' len(data): + raise OSError('invalid 9P directory entry') + length = struct.unpack_from(' size + 2: + raise OSError('invalid directory name length') + names.append(data[offset + 43:offset + 43 + length].decode()) + offset += size + 2 + return names -- cgit v1.3