Skip to content

fork: carry perf, sidebar toggle, OSC 22, bench and version patches on upstream v0.9.3 - #3

Merged
pattobrien merged 6 commits into
masterfrom
patt/patches
Oct 6, 2026
Merged

pattobrien merged 6 commits into
masterfrom
patt/patches

Conversation

@pattobrien

@pattobrien pattobrien commented Oct 6, 2026 •

Copy link
Copy Markdown
Owner

Commits 1-5 produce a tree identical to the tested merge branch patt/perf-graphics-upstream-2026-10-05 (cca140a); git diff 98d96faf patt/perf-graphics-upstream-2026-10-05 is empty. Commit 6 re-ports the SGR-pixels fix on top after an adversarial review found upstream only fixed the focused-pane case (herdrdev#4750); targeted pane:: tests (383) and clippy pass.

Old fork commit New commit What moved
e3aa7611 perf: kitty graphics input lag 8048026b Re-expressed on upstream's herdrdev#4561/herdrdev#4657 graphics code
dd536e00 bench: input-latency harness 36e66991 Unchanged
e930c6a1 fix: pre-release version parsing 62e901d0 Unchanged
aef49f7d feat: ui.sidebar.toggle 86c7782b Became client.sidebar.toggle; the server no longer owns sidebar state after herdrdev#3487
ae7575eb feat: OSC 22 pointer shapes 98d96faf Host half moved into the client shell
21511f34 fix: SGR-pixels coordinates 21e7b5b3 Upstream issue herdrdev#3295 was closed by herdrdev#3637/herdrdev#4045/herdrdev#4140, which fixed the focused-pane case; the cell-input + 1016 case remains open as herdrdev#4750, so the fix is re-ported as the 6th commit
fa653722, 40a856ec, 0f0aa005, 134c42fb v0.8.0-graphics.N bumps dropped Not carried
git range-diff 346411f..patt/perf-graphics master..patt/patches
 1:  e3aa7611 <  -:  -------- perf: fix second-long input lag while kitty graphics panes stream
 4:  e930c6a1 !  1:  62e901d0 fix: tolerate pre-release suffix when parsing versions
    @@ Commit message
         /dev/null). Strip pre-release/build metadata before parsing.
     
         Claude-Session: https://claude.ai/code/session_01BiqNLZmPTaFBipDdZVe3D3
    +    (cherry picked from commit e930c6a13afc1e98dc0d158b765d5139eac19ea7)
     
      ## src/update.rs ##
     @@ src/update.rs: pub struct Version {
 2:  dd536e00 !  2:  36e66991 bench: add input-latency harness and v0.8.0 vs fork results
    @@ Commit message
         bench: add input-latency harness and v0.8.0 vs fork results
     
         Claude-Session: https://claude.ai/code/session_01PhjPW9BYZaJtCuScY6pzdM
    +    (cherry picked from commit dd536e009ad7dfb6c62d465ab97089f61d791bab)
     
      ## bench/README.md (new) ##
     @@
 3:  fa653722 <  -:  -------- release: v0.8.0-graphics.1
 5:  40a856ec <  -:  -------- release: v0.8.0-graphics.2
 6:  21511f34 <  -:  -------- fix: report real pixel coordinates to SGR-pixels mouse panes
 7:  ae7575eb <  -:  -------- feat: mirror pane OSC 22 pointer shapes on the host cursor
 8:  0f0aa005 <  -:  -------- release: v0.8.0-graphics.3
 9:  aef49f7d <  -:  -------- feat: add ui.sidebar.toggle api method and herdr sidebar toggle cli
10:  134c42fb <  -:  -------- release: v0.8.0-graphics.4
 -:  -------- >  3:  8048026b perf: fix second-long input lag while kitty graphics panes stream
 -:  -------- >  4:  86c7782b feat: add client.sidebar.toggle api method and herdr terminal sidebar toggle cli
 -:  -------- >  5:  98d96faf feat: mirror pane OSC 22 pointer shapes on the host cursor
 -:  -------- >  6:  21e7b5b3 fix(pane): report cell-centre pixels to SGR-pixels mouse panes

https://claude.ai/code/session_01ApRKSwFTijvcbtt8EG9Erx

Version::parse rejected the fork's 0.8.0-graphics.N Cargo version, so
Version::current() panicked during plugin manifest validation and the
server died at startup (silently, since the daemon's stderr goes to
/dev/null). Strip pre-release/build metadata before parsing.

Claude-Session: https://claude.ai/code/session_01BiqNLZmPTaFBipDdZVe3D3
(cherry picked from commit e930c6a)
Port of e3aa761 onto the upstream upload and transport split.

- kitty_graphics: write_kitty_upload deflates raw RGB/RGBA inline uploads
  (o=z) when that shrinks them; PNG, small and incompressible payloads
  stay raw. The temp-file path keeps raw pixels for Ghostty.
- client: server readers feed a dedicated two-slot channel consumed by
  the last arm of the biased Unix select (events::next_loop_event), so
  frame bursts block the reader and the server's render slot instead of
  queueing ahead of keystrokes. Windows keeps its existing channels.

Claude-Session: https://claude.ai/code/session_01ApRKSwFTijvcbtt8EG9Erx
(cherry picked from commit cab7a8a)
… toggle cli

fork-local: upstream keeps sidebar state in the client, so the server
forwards the toggle to the foreground client as an endpoint control and
the client runs the same path as the toggle_sidebar keybinding

Claude-Session: https://claude.ai/code/session_01ApRKSwFTijvcbtt8EG9Erx
(cherry picked from commit ebdf55f)
Forward each pane's latest OSC 22 shape to client shells as an
endpoint.pane-pointer-shape.v1 control, seed newly connected shells
with the current shapes, and let the client resolve the hovered pane
on every mouse move so the host cursor only changes when needed. The
shape resets outside panes, outside terminal mode, when the endpoint
is lost and on terminal restore.

Claude-Session: https://claude.ai/code/session_01ApRKSwFTijvcbtt8EG9Erx
(cherry picked from commit cca140a)
When a pane enables SGR-pixels (1016) and the host sends a cell position,
size the encoder from the terminal's pixel dimensions and encode the cell's
centre in surface pixels instead of downgrading to plain SGR cell numbers.
Pixel input and panes without 1016 are unchanged; the SGR downgrade remains
only when the terminal has no pixel dimensions. Refs herdrdev#4750.
@pattobrien
pattobrien merged commit 8186859 into master Oct 6, 2026
5 of 7 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant