Repository navigation
macos: fix quick terminal restoring stale size after display reconnect - #13250
Merged
mitchellh merged 1 commit intoJul 8, 2026
Conversation
The quick terminal caches its last-closed window frame per display so it
can restore the user's size when reopened. The cache entry was considered
valid whenever the current screen was the same size *or larger* than when
the frame was saved ("persist when screens grow"). This has led to a pattern
that was simply maddening. To wit:
That rule breaks across display changes. When an external display is
disconnected and later reconnected at a different resolution (common
after traveling with a laptop) the same display can come back larger
than when the frame was cached. The stale frame is still treated as valid
and restored, so the quick terminal no longer fills the screen (it appears
at a partial width/height). Because the cache is persisted, restarting
Ghostty does not clear it, and the user is slowly driven mad.
Only treat a cached frame as valid when the screen geometry matches
exactly (both backing scale factor and frame size). On any mismatch we
drop the entry and fall back to the configured quick-terminal-size. Manual
resizes are still remembered across toggles within a stable display
configuration.
Fixes the regression reported in ghostty-org#12348.
Contributor
|
Thanks Corey. The description sounds right and the code looks good. ❤️ |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
"Why is my quick terminal not taking up the entire top of my docked Mac screen after I reconnect?" Boy howdy are you in the right PR.
It turns out that the quick terminal caches its last-closed window frame per display so it can restore the user's size when reopened. The cache entry was considered valid whenever the current screen was the same size or larger than when the frame was saved ("persist when screens grow"). This has led to a pattern that was simply maddening. To wit: that rule breaks across display changes.
When an external display is disconnected and later reconnected at a different resolution (common after traveling with a laptop, do not even get me started on projectors) the same display can come back larger than when the frame was cached. The stale frame is still treated as valid and restored, so the quick terminal no longer fills the screen (it appears at a partial width/height). Because the cache is persisted, restarting Ghostty does not clear it, and the user is slowly driven mad. Welcome to madness; we have snacks.
This PR addresses this by treating a cached frame as valid when the screen geometry matches exactly (both backing scale factor and frame size). On any mismatch we drop the entry and fall back to the configured quick-terminal-size. Manual resizes are still remembered across toggles within a stable display configuration.
Fixes the regression reported in #12348.
AI disclaimer: I used AI for this. Of course I used AI for this, my code is terrible on a good day. Specifically, Claude Code, as well as a custom harness that has the curious tendency to write commit messages containing conspiracy theories about the code because I am history's greatest monster.
Fight me!