summaryrefslogtreecommitdiff
path: root/include/term
AgeCommit message (Collapse)Author
10 daysKeep the snapshot unchanged when an update failsBerke Güzel
term_snapshot_update converted the viewport in place, so an allocation that failed midway left the snapshot empty and a renderer painted a blank frame. Split the update into two phases. Phase 1 makes every allocation the update needs and counts the arena words the converted rows add, then grows the arena once. Phase 2 writes the view, cells, keys, clusters, and selection, and cannot fail. A failed update now keeps the previous content, and a retry is an ordinary incremental update. invalidate() is removed. The term_snapshot_update comment and the correctness audit now say the snapshot keeps its previous content. The failure test fails each allocation in turn from the same starting state. After every failed call it compares the view, cells, row keys, selection spans, and cluster code points with the state before the call. A retry must succeed and match a fresh capture. The cases are a first update, a 32 by 16 screen of ZWJ families and regional-indicator flags (arena growth), a resize, a 300-row screen (scratch arrays), and a long scroll run. Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
10 daysReturn owned text and share cell attribute flags with snapshotsBerke Güzel
Make text queries return allocated strings released with term_text_free, keeping each capture atomic. Align public attributes with the write core, remove snapshot conversion tables, and migrate tests and the Kitty adapter.
11 daysOptimize term_feed scalar dispatch, branchless range search, and invalid ↵Berke Güzel
subparts
12 daysFix extra mouse button encoding collision with Alt bit and document API gapsBerke Güzel
- Encode buttons 8 through 11 (EXTRA_1..4) with offset 128 (128..131) per xterm mouse tracking, resolving collisions with the Alt modifier bit (8) - Drop EXTRA_5 from enum term_mouse_button since xterm mouse tracking defines four extra buttons (8 to 11) and codes beyond 131 collide with modifier bits - Replace literal 3 with TERM_MOUSE_BUTTON_NONE for hover motion check in mode 1002 - Document button field semantics in struct term_mouse_event for press, release, motion, and scroll events - Document OSC 52 target buffer selections ("c", "p", "q", "s", "0".."7") in term.h - Add unit tests for extra button encoding, SGR release, hover motion suppression in mode 1002, and non-collision with Alt modifiers
13 daysFix macOS builds on Apple Silicon and IntelBerke Güzel
13 daysterm: move the term core to subprojects/termBerke Güzel
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>