Conversation
This reverts commit f0b1ca3.
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.
Parked, not ready to merge — opening it so the work and its findings are reviewable rather than stranded on a branch. Tracked as
dot-phr.Landed on
mainbriefly (370eafb), reverted (f0b1ca3), reinstated here (bd3d860).What it does
Aerospace stacks every unfocused accordion window at the same frame, then shifts the focused one over by
accordion-padding(100). That gutter shows one strip whether two windows hide behind the focused one or seven — no sense of stack depth, and no way into it except cycling focus.This splits the gutter into one sliver per hidden window (app icon + title rotated to read bottom-to-top). Clicking a sliver focuses that window.
Why drawn, not real windows
The original goal was actual windows, actually offset. Three mechanisms were tried and measured first:
setFrame, unprompted. A cascade collapses on a timer.resize— kitty compresses to a real 24px sliver, but Chrome has a hard 500px minimum and aerospace answers by overflowing the container, shoving windows tox=-460and the focused one tox=-1028 w=3071, off-screen. Any Chromium/Electron window in the stack breaks the layout.hs.window:snapshot()returns nil on macOS 26 (per-window CGWindow capture is gone; full-screen capture still works).Drawn slivers pick no fight with the layout.
Refreshes off
hs.window.filter, not an aerospaceon-focus-changedcallback, so holdingalt-jdoes not spawn anhs -cprocess per keypress.Verified
x=1944, leftx=12)Two silent bugs were caught this way and are fixed here: deriving the container from only the unfocused frames (a window aerospace stopped focusing keeps its old padded position), and
hs.canvas.matrixchained with.instead of:, which returns a valid but wrong matrix and put every title off-canvas.Why it is parked
It works mechanically but does not feel good enough in practice.
v_accordionis explicitly skipped — its gutter is horizontal and these slivers are not laid out for itThe ceiling is upstream. A genuine visual accordion likely needs aerospace support rather than a Hammerspoon overlay.
Session
Built and measured in a Claude Code session, archived rather than deleted so the full reasoning (the spike that ruled out three other mechanisms, the two silent bugs and how they surfaced) can be restored instead of reconstructed.
local_f85b8c55-1adf-4e13-ba0e-0e8a7d45afbc— unarchive from the sidebar's Archived viewd8edf5ee-2fd3-4166-bdb6-aa7a5a6683a6Resume from a terminal in this repo:
Both ids point at the same conversation; the desktop app and the
claudeCLI just address it differently. These are local to this machine — there is no shareable URL, so the session will not open for anyone else from this PR.🤖 Generated with Claude Code