Keep a multi-row text-sizing character whole or erase it #33
No reviewers
Labels
No labels
Area/ci
Area/cli
Area/client
Area/client-core
Area/daemon
Area/deps
Area/docs
Area/grid
Area/manual
Area/nix
Area/protocol
Area/pty
Area/render
Area/shaping
Area/skills
Area/transport
Area/vt
Compat/Breaking
Kind/Bug
Kind/Documentation
Kind/Enhancement
Kind/Feature
Kind/Performance
Kind/Security
Kind/Testing
perf-regression-accepted
Reviewed
Confirmed
Reviewed
Duplicate
Reviewed
Invalid
Reviewed
Won't Fix
Status
Blocked
Status
Need More Info
Status
Upstream
No milestone
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
felis-terminal/felis!33
Loading…
Reference in a new issue
No description provided.
Delete branch "fix/multirow-block-shift"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Closes #24.
A text-sizing (OSC 66) character taller than one row is drawn from its primary over its whole footprint. Any cell move that carried some of its rows and not the others tore it: ICH or insert mode on one of its rows, DECIC/SR/SU in a region whose margin crossed it, IL/DL through it. The primary then drew over other text, or rows were left with no primary.
Before each move, a block that a row seam of the move splits is now erased whole, as kitty's
nuke_multiline_char_intersecting_withdoes. A scroll into scrollback keeps the departing rows in history and clears only the rows left on screen.A new property test over random moves and OSC 66 writes found three more ways to leave part of a block behind, fixed here too:
Tests: a table test whose every cut case fails on main; scrollback and alternate-screen cases; the property test (passed 4×3000 cases). Docs: reference and explanation of
kitty-text-sizing.md, CHANGELOG.The Criterion gate flagged
daemon_side/shell_prompt(+15.6%) andmulti_cycle_end_to_end/plaintext_scroll_individual(+29.9%). A local A/B against main (separate target dirs, base and head alternated, three rounds) shows no regression:daemon_side/shell_promptmulti_cycle_end_to_end/plaintext_scroll_individualmulti_cycle_end_to_end/plaintext_scroll_batchedThe multi-cycle benches are bimodal on this host (1.1–2.5 ms on main alone); the seam scan returns before any work when no OSC 66 cell has been written.
b290141b4f0dbe23dab70dbe23dab7d0584f663fd0584f663fdfb85a51a9