summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
12 daysReplace scalar loops with SIMD spans, packed stores, and direct wrap-pad checksBerke Güzel
12 daysOptimize hot loops with direct access, LUTs, and closed-form formulasBerke Güzel
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
12 daysEliminate pen style and history stream parameter smugglingBerke Güzel
- Introduce struct text_pen bundling (fg, bg, sl) across screen and core - Reduce text_append from 9 to 7 parameters - Reduce text_commit from 8 to 6 parameters - Reduce hist_runs_add_pen from 5 to 3 parameters - Reduce sc_text_ascii and sc_ascii_fast from 6 to 4 parameters - Remove unused fg, bg parameters from mark_row_blank - Introduce struct hist_stream_state in src/hist.c, reducing stream_lines from 9 to 5 params and lf_rows from 10 to 6 params - Introduce struct hist_view_pos in src/hist_view.h, reducing term_hist_view_row_pos from 9 to 7 params
12 daysEncapsulate stream queue context and consolidate forwarding wrappersBerke Güzel
- Create struct stream_emit_ctx packing stream queue arguments into 1 cache line - Reduce emit_stream_bulk_wrapped from 13 parameters to 3 - Reduce flush_stream_queue from 10 parameters to 1 - Extract stream_queue_finish to eliminate duplicated cleanup in kernel instantiations - Replace EMIT_STREAM_ROW macros with typed inline functions - Move pending_wrap clearing directly into term_screen_erase, insert, delete, and scroll - Remove sc_erase_display, sc_erase_line, sc_insert_chars, and sc_delete_chars wrappers - Consolidate term_row and remove duplicated row_fill_gap helper
12 daysOptimize screen scrolling, SIMD wrap padding, and reflow loopsBerke Güzel
- Batch full-screen scroll rotations, eliminating row-by-row scroll loops - Use block memmove for sub-region scrolling, eliminating heap/stack row swaps - Vectorize CELL_WRAP_PAD flag setting with AVX2/SSE2/NEON in screen.h - Replace scalar tab-stop loops with 64-bit word stamping - Optimize active row backwards scan in resize and erase mode 2
12 daysOptimize loops and data structures in hist.c and hist_view.cBerke Güzel
- Unroll fast paths in put_varint and get_varint - Replace while capacity loop with branchless term_grow_cap in runs_reserve - Vectorize continuation ring rehash with slice memcpy in cont_push - Fast-check simple line runs using combined bitwise XOR-OR mask in evict_simple_run - Resume batch simple-run eviction on interrupted sweeps in evict_for - Eliminate unused page_rows and page_simple allocations (>320 KB heap saved) - Add zero-delta bypass in Fenwick tree set_count - Replace iterative capacity loop with branchless term_next_pow2_32 in hist_view_sync - Eliminate prefix-walk in term_hist_view_find_row by reusing Fenwick remainder - Simplify upward and downward viewport movement in term_hist_view_scroll
12 daysOptimize and simplify loops, table lookups, and branchless parsersBerke Güzel
- Replace sequential colon-counting loop with branchless CTZ bitmask in src/pen.h - Replace linear strchr with 256-bit ASCII punctuation bitmask in src/selection.c - Flatten 3D color cube loop and precompute constants in src/palette.c - Use static 256-byte LUT for hex decoding and bsearch for termcap in src/escape.c - Replace capacity doubling while loops with branchless CLZ pow2 helpers across core - Use direct memset/memcpy in src/snapshot.c - Optimize input digit/byte formatting, alt-prefix path, and make keyboard state optional in src/input.c
12 daysMake term standalone library and export Meson dependenciesBerke Güzel
13 daysFix macOS builds on Apple Silicon and IntelBerke Güzel
13 daysterm: fix the two Kitty suite failures and run the suite by defaultBerke Güzel
Both failures were stale expectations in our copy of the suite. 8c2464c moved the terminal to xterm behavior and added spec tests for it. The Kitty bridge did not compile then, so nobody updated the suite. - A cursor report with a pending wrap gives the last column (1;5). Kitty gives the start of the next line. - HT only moves the cursor. Kitty writes a tab cell, which erases the text under the tab. REP after the tab then repeats nothing. The suite went weeks without running, because it needed -Dkitty_tests=true. Now every unsanitized Linux build runs it in the unit suite, and the main option only makes it mandatory. The README lists the deliberate differences from Kitty. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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>