diff options
| author | sl0p <sl0p@sl0p.foo> | 2026-08-13 22:26:02 +0200 |
|---|---|---|
| committer | sl0p <sl0p@sl0p.foo> | 2026-08-13 22:26:02 +0200 |
| commit | 34fcd16e59e3087e9bf84ebce4e05d439eea9198 (patch) | |
| tree | e07b9dfc235e3a0b67047d59a9c521c6e98a28ae /src/json.h | |
| parent | sl0ptty: input decoder + per-pane re-encode (diff) | |
| download | slosh-34fcd16e59e3087e9bf84ebce4e05d439eea9198.tar.gz slosh-34fcd16e59e3087e9bf84ebce4e05d439eea9198.tar.xz slosh-34fcd16e59e3087e9bf84ebce4e05d439eea9198.zip | |
sl0ptty: M0.5 — the headless driver and the harness everything rests on
--script runs the whole compositor with no tty: commands in (send, raw,
settle, resize, snapshot, alive), composited screen out as JSON — rows of
text, style runs, cursor, and the hit list.
Styles are emitted as runs rather than per-cell objects, because a test wants
'columns 0..5 of row 0 are bold red', not 1920 objects.
The hit list is empty until M1 paints something clickable, but the type, the
JSON, and hit_test() exist now: one geometry, established before there is
anything to get wrong.
Also fixes two host-policy defaults found by the cursor never appearing.
lib-vt is a VT library, not a terminal, so it starts with DECTCEM (mode 25)
off and grapheme clustering (2027) off. Both are now set via MODE_DEFAULT, so
they survive RIS.
tests/harness.py + tests/test_screen.py: 19 checks over composition, styling,
wide chars/clusters, scrollback, resize and the full input round trip —
including the kitty/legacy re-encoding matrix, which no longer needs a pty.
make test is now 2.4s for 59 checks; make test-live keeps the four that
genuinely need a tty.
Diffstat (limited to 'src/json.h')
| -rw-r--r-- | src/json.h | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/src/json.h b/src/json.h new file mode 100644 index 0000000..b1acc43 --- /dev/null +++ b/src/json.h @@ -0,0 +1,28 @@ +/* A minimal JSON writer. No parser: we only ever emit. */ +#ifndef SL0PTTY_JSON_H +#define SL0PTTY_JSON_H + +#include <stdbool.h> +#include <stddef.h> +#include <stdint.h> + +typedef struct { + char *buf; + size_t len, cap; + bool need_comma; +} json_t; + +void json_init(json_t *j); +void json_free(json_t *j); + +void json_obj_open(json_t *j, const char *key); /* key may be NULL in arrays */ +void json_obj_close(json_t *j); +void json_arr_open(json_t *j, const char *key); +void json_arr_close(json_t *j); + +void json_str(json_t *j, const char *key, const char *val, size_t len); +void json_int(json_t *j, const char *key, long long val); +void json_bool(json_t *j, const char *key, bool val); +void json_null(json_t *j, const char *key); + +#endif /* SL0PTTY_JSON_H */ |
