Artifactory: the composer is a sheet; the board sits at the foot of the rail - #236
Merged
Conversation
…he rail Reported, after #235: "Leave a note" still does not take the keyboard, and the board sits at the top of the rail when it should be at the bottom. The focus fix in #235 was aimed at the wrong thing. It assumed `@FocusState` was being written too early; it was, but fixing the timing changed nothing, because the write can never land at all. While a loop is open Ghostty's `NSView` holds the window's first responder, and SwiftUI's focus system cannot take first responder off an AppKit view inside the same window — the caret never arrives, every keystroke goes to the terminal, the draft stays empty. The evidence was in the codebase the whole time: every text field that works in this app is in a sheet, `JumpPaletteView` focuses with a bare `onAppear` because a sheet's own window is key, and `AppView` says in as many words that ⌘K has to open over a terminal. The rail was documented read-only; I put the first inline field into it and found out why. - The composer is now a sheet — the same 420pt form the rename and workspace prompts use, with a Form, ⎋ to cancel, ⌘↵ to post, and the byte counter as the bound approaches. "Leave a note" in the rail opens it. - The section moves from above THIS LOOP to the foot of the rail, under the spacer, so slack collects above it rather than inside it. Low and against the footer is where a message board belongs — newest at the bottom, composer under it. Suite: 1482 tests / 153 suites pass; swiftlint 0 errors, format clean. Still needs a human to click once — no GUI automation here — but this time the mechanism is the one every other text entry in the app already relies on. Signed-off-by: scgopi <scgopireddy@gmail.com> Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019A6NULwEiBXEdRXwEKKcRH
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.
Follow-up to #235. Reported: Leave a note still does not take the keyboard, and the board sits at the top of the rail when it should be at the bottom.
The focus fix in #235 was aimed at the wrong thing
It assumed
@FocusStatewas being written too early. It was — but fixing the timing changed nothing, because the write can never land at all. While a loop is open, Ghostty'sNSViewholds the window's first responder, and SwiftUI's focus system cannot take first responder off an AppKit view inside the same window. The caret never arrives, every keystroke goes to the terminal, the draft stays empty.The evidence was in the codebase the whole time: every text field that works in this app is in a sheet.
JumpPaletteViewfocuses with a bareonAppearbecause a sheet's own window is key, andAppViewsays in as many words that ⌘K has to open over a terminal. The rail was documented read-only; I put the first inline field into it and found out why.Changes
Form, ⎋ to cancel, ⌘↵ to post, byte counter as the bound approaches. Leave a note in the rail opens it.Verification
Suite 1482 tests / 153 suites pass; swiftlint 0 errors,
swift-format --strictclean.🤖 Generated with Claude Code
https://claude.ai/code/session_019A6NULwEiBXEdRXwEKKcRH