diff options
| author | Berke Güzel <wenekar1@gmail.com> | 2026-10-12 17:49:34 +0300 |
|---|---|---|
| committer | Berke Güzel <wenekar1@gmail.com> | 2026-10-12 17:49:34 +0300 |
| commit | 4384435941b8c7658856b381d071aee2e0035e89 (patch) | |
| tree | 5ece99c3dd1decb8ec3fd404c0ece2b5865a552a /src/osc/misc.c | |
term: move the term core to subprojects/term
The core now builds, tests, and benchmarks alone, as a Meson subproject
with no dependency on the main tree.
- include/term/ holds term.h and the header-only unicode/. src/ holds
the core and its private headers. The main tree gets only
include/term through term_dep, so it cannot reach a private header.
- The term tests, the term benchmarks, the Kitty parser suite, and
tools/amalgamate.py and tools/generate_unicode.py move with it. The
tests run as term:<name>.
- The main build passes its -march (arch_flag) and b_ndebug to the
subproject. A directory configured before this commit needs
meson configure -Dterm:arch_flag=-march=... once.
- The term tests compile with -UNDEBUG. They do work inside assert.
- The subproject exports term_test_dep with term_api.h, for the main
tree's render, thumbnail, color, and selection tests.
- The Kitty bridge used struct vector2i and has not compiled since the
public API redesign. It builds again. 2 of its 14 tests fail: REP
after a tab, and a cursor report after a resize.
- dirgraph.py drops the term and unicode layers. Its self-test uses pty.
- The symbols test ignores the __odr_asan symbols that ASan adds.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Diffstat (limited to 'src/osc/misc.c')
| -rw-r--r-- | src/osc/misc.c | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/src/osc/misc.c b/src/osc/misc.c new file mode 100644 index 0000000..5d6b506 --- /dev/null +++ b/src/osc/misc.c @@ -0,0 +1,69 @@ +#include "osc.h" +#include "../internal.h" +#include <stdlib.h> +#include <string.h> + +static void osc7_cwd(struct term *t, const char *uri) +{ + if (!term_has_prefix_ci(uri, "file://")) + return; + const char *p = uri + 7; + const char *slash = strchr(p, '/'); + const char *path = slash ? slash : p; + char *cwd = malloc(strlen(path) + 1); + if (!cwd) + return; + char *d = cwd; + while (*path) { + int hi, lo; + if (*path == '%' && (hi = term_hex_nib(path[1])) >= 0 && + (lo = term_hex_nib(path[2])) >= 0) { + *d++ = (char)(hi * 16 + lo); + path += 3; + } else { + *d++ = *path++; + } + } + *d = '\0'; + free(t->cwd); + t->cwd = cwd; +} + +static void osc777_notify(struct term *t, const char *params) +{ + if (strncmp(params, "notify;", 7)) + return; + const char *title = params + 7; + const char *sep = strchr(title, ';'); + if (!sep) + return; + char *wsep = (char *)sep; + *wsep = '\0'; + t->cb.notify(t->cb.ud, title, sep + 1); + *wsep = ';'; +} + +void term_osc_misc_dispatch(struct term *t, long code, const char *params) +{ + if (!params) + return; + switch (code) { + case 7: + osc7_cwd(t, params); + break; + case 9: + if (t->cb.notify && strncmp(params, "4;", 2)) + t->cb.notify(t->cb.ud, "wsap_term", params); + break; + case 22: + free(t->pointer_shape); + t->pointer_shape = *params ? term_strdup(params) : NULL; + break; + case 777: + if (t->cb.notify) + osc777_notify(t, params); + break; + default: + break; + } +} |
