4.1 KiB
4.1 KiB
Ghostty Fork Changes (manaflow-ai/ghostty)
This repo uses a fork of Ghostty for local patches that aren't upstream yet. When we change the fork, update this document and the parent submodule SHA.
Fork update checklist
- Make changes in
ghostty/. - Commit and push to
manaflow-ai/ghostty. - Update this file with the new change summary + conflict notes.
- In the parent repo:
git add ghosttyand commit the submodule SHA.
Current fork changes
Fork rebased onto upstream v1.3.0 plus newer main commits as of March 12, 2026.
1) OSC 99 (kitty) notification parser
- Commit:
a2252e7a9(Add OSC 99 notification parser) - Files:
src/terminal/osc.zigsrc/terminal/osc/parsers.zigsrc/terminal/osc/parsers/kitty_notification.zig
- Summary:
- Adds a parser for kitty OSC 99 notifications and wires it into the OSC dispatcher.
2) macOS display link restart on display changes
- Commit:
c07e6c5a5(macos: restart display link after display ID change) - Files:
src/renderer/generic.zig
- Summary:
- Restarts the CVDisplayLink when
setMacOSDisplayIDupdates the current CGDisplay. - Prevents a rare state where vsync is "running" but no callbacks arrive, which can look like a frozen surface until focus/occlusion changes.
- Restarts the CVDisplayLink when
3) Keyboard copy mode selection C API
- Commit:
a50579bd5(Add C API for keyboard copy mode selection) - Files:
src/Surface.zigsrc/apprt/embedded.zig
- Summary:
- Restores
ghostty_surface_select_cursor_cellandghostty_surface_clear_selection. - Keeps cmux keyboard copy mode working against the refreshed Ghostty base.
- Restores
4) macOS resize stale-frame mitigation
Sections 3 and 4 are grouped by feature, not by commit order. The fork branch HEAD is the section 3 copy-mode commit, even though the section 4 resize commits were applied earlier.
- Commits:
769bbf7a9(macos: reduce transient blank/scaled frames during resize)9efcdfdf8(macos: keep top-left gravity for stale-frame replay)
- Files:
pkg/macos/animation.zigsrc/Surface.zigsrc/apprt/embedded.zigsrc/renderer/Metal.zigsrc/renderer/generic.zigsrc/renderer/metal/IOSurfaceLayer.zig
- Summary:
- Replays the last rendered frame during resize and keeps its geometry anchored correctly.
- Reduces transient blank or scaled frames while a macOS window is being resized.
5) zsh prompt redraw markers use OSC 133 P
- Commit:
8ade43ce5(zsh: use OSC 133 P for prompt redraws) - Files:
src/shell-integration/zsh/ghostty-integration
- Summary:
- Emits one
OSC 133;Afresh-prompt mark for real prompt transitions. - Uses
OSC 133;Pmarkers for prompt redraws so async zsh themes do not look like extra prompt lines.
- Emits one
6) zsh Pure-style multiline prompt redraws
- Commit:
0cf559581(zsh: fix Pure-style multiline prompt redraws) - Files:
src/shell-integration/zsh/ghostty-integration
- Summary:
- Handles multiline prompts that use
\n%{\r%}to return to column 0 before the visible prompt line. - Places the continuation marker after Pure's hidden carriage return so async redraws do not leave stale preprompt lines behind.
- Handles multiline prompts that use
The fork branch HEAD is now the section 6 zsh redraw commit.
Upstreamed fork changes
cursor-click-to-move respects OSC 133 click-to-move
- Was local in the fork as
10a585754. - Landed upstream as
bb646926f, so it is no longer carried as a fork-only patch.
Merge conflict notes
These files change frequently upstream; be careful when rebasing the fork:
-
src/terminal/osc/parsers.zig- Upstream uses
std.testing.refAllDecls(@This())intest {}. - Ensure
iterm2import stays, and keepkitty_notificationimport added by us.
- Upstream uses
-
src/terminal/osc.zig- OSC dispatch logic moves often. Re-check the integration points for the OSC 99 parser.
-
src/shell-integration/zsh/ghostty-integration- Prompt marker handling is easy to regress when upstream adjusts zsh redraw behavior. Keep the
OSC 133;AvsOSC 133;Psplit intact for redraw-heavy themes, and preserve the special handling for Pure-style\n%{\r%}prompt newlines.
- Prompt marker handling is easy to regress when upstream adjusts zsh redraw behavior. Keep the
If you resolve a conflict, update this doc with what changed.