Skip to content

Make terminal Cmd+A use command input selection - #3897

Closed
austinywang wants to merge 22 commits into
mainfrom
issue-3802-warp-style-text-engine
Closed

austinywang wants to merge 22 commits into
mainfrom
issue-3802-warp-style-text-engine

Conversation

@austinywang

@austinywang austinywang commented May 12, 2026 •

Copy link
Copy Markdown
Contributor

Closes #3802

Repro

  1. Focus a cmux terminal with prior output visible and an unfinished command at the prompt.
  2. Press Cmd+A.
  3. Observed before the fix: the event falls through to Ghostty's select_all binding, which calls Screen.selectAll() and selects the terminal viewport/screen contents.
  4. Expected: Cmd+A is handled by the terminal text responder and selects the current command/input line only.

Changes

  • Adds a regression test that requires terminal Cmd+A to route to the responder selectAll(_:) path instead of the Ghostty binding fallback.
  • Routes terminal Cmd+A before stale menu/binding fallback.
  • Implements terminal selectAll(_:) by using Ghostty's cursor line-selection path, which preserves OSC 133 input boundaries, and falls back to the old select_all only when that path is unavailable.

Verification

  • git diff --check
  • Local tests/build not run per issue instructions; CI owns verification.

Note

Medium Risk
Touches macOS key-equivalent routing and terminal selection behavior, which can subtly affect shortcut handling and text selection across the app. Also changes GhosttyKit build/download tagging logic, which could break CI artifact resolution if misdetected.

Overview
Terminal Cmd+A now selects the current input line instead of the whole viewport. NSWindow key-equivalent routing detects Cmd+A when a Ghostty terminal is focused and calls the terminal responder’s selectAll(_:), avoiding the menu-miss/binding fallback.

Terminal selectAll(_:) is implemented with Ghostty’s semantic cursor-line selection. GhosttyTerminalView adds a selectAll override that prefers the new ghostty_surface_select_cursor_line C API (OSC-133 aware), falling back to the existing select_all binding when unavailable, and updates text-input coordinates.

GhosttyKit CI/scripts now auto-detect crash-report-subdir support and tag format. Workflows and helper scripts resolve whether to use flavored xcframework-<sha>-<flavor> tags and -Dcrash-report-subdir at build/download time, and tests switch to the shared download-prebuilt-ghosttykit.sh; docs/checksums are updated for the new pinned Ghostty fork SHA and archive hash, and a regression test asserts Cmd+A behavior.

Reviewed by Cursor Bugbot for commit b461417. Bugbot is set up for automated code reviews on this repo. Configure here.


Summary by cubic

Cmd+A in a focused terminal now selects the current command/input line via Ghostty’s cursor-line selection (OSC‑133 aware), not the entire viewport. Fixes #3802.

  • Bug Fixes

    • Route terminal Cmd+A in NSWindow.performKeyEquivalent to the terminal responder’s selectAll(_:) before menu/binding fallback; add a regression test.
    • Implement GhosttyNSView.selectAll(_:) to prefer ghostty_surface_select_cursor_line (semantic cursor line), falling back to select_all; update text-input coordinates.
  • Dependencies

    • Refresh and pin ghostty to a fork exposing ghostty_surface_select_cursor_line; update fork docs and the checksum in scripts/ghosttykit-checksums.txt.
    • Make GhosttyKit build/download scripts and CI auto-detect -Dcrash-report-subdir support and set release tags/flags accordingly; switch test workflows to scripts/download-prebuilt-ghosttykit.sh.

Written for commit b461417. Summary will update on new commits. Review in cubic

Summary by CodeRabbit

  • New Features

    • Added Select All responder to terminal view with cursor-line selection support
  • Bug Fixes

    • Fixed debug preprocessor block scope in keyboard shortcut routing
  • Chores

    • Updated Ghostty fork and build infrastructure; refactored build script crash-report configuration detection

Review Change Stack

Terminal-focused Cmd+A currently reaches the menu-miss Ghostty binding path, where Ghostty's select_all action selects the entire terminal screen. The regression locks the expected responder boundary: cmux should route Cmd+A to the terminal responder's selectAll action so the responder can apply command-line text semantics instead of viewport semantics.

Constraint: Do not run local tests for this issue; CI owns test execution.

Rejected: Testing the Ghostty select_all implementation directly | that would only prove the existing viewport behavior, not the cmux routing contract that lets the terminal text engine own Cmd+A.

Confidence: high

Scope-risk: narrow

Tested: Not run locally per issue instructions.

Not-tested: CI execution of the new regression test.
Terminal Cmd+A now bypasses stale menu and Ghostty binding fallback so the focused terminal responder owns the text-selection intent. GhosttyNSView implements selectAll by using Ghostty's existing cursor/OSC-133-aware line selection path at the insertion point, falling back to the old select_all binding only when semantic cursor selection is unavailable.

Constraint: User required origin-only cmux changes; avoided Ghostty submodule and xcframework changes.

Rejected: Adding a new Ghostty C API in this PR | would require a Ghostty submodule commit and artifact path outside the user's push constraint.

Rejected: Parsing prompt text in Swift | would duplicate Ghostty's existing OSC-133 semantic source of truth and break across shells.

Confidence: medium

Scope-risk: moderate

Directive: Replace the synthetic triple-click bridge with a Ghostty C API once submodule/artifact changes are permitted; keep OSC-133 semantics as the source of truth.

Tested: git diff --check

Not-tested: Local tests/build not run per issue instructions; CI must run the regression.
@vercel

vercel Bot commented May 12, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
cmux Ready Ready Preview, Comment May 19, 2026 5:08am
cmux-staging Building Building Preview, Comment May 19, 2026 5:08am

@coderabbitai

coderabbitai Bot commented May 12, 2026 •

Copy link
Copy Markdown
📝 Walkthrough

Walkthrough

This PR implements terminal Cmd+A select-all routing to respect command-line boundaries via new Ghostty cursor-line selection API, updates fork pinning and build infrastructure to conditionally handle crash-report-subdir based on Ghostty submodule capabilities, adds test coverage for routing behavior, and fixes AppDelegate preprocessor scope.

Changes

Terminal Select-All and Build Configuration

Layer / File(s) Summary
Ghostty fork refresh, API export, and documentation
ghostty (submodule), docs/ghostty-fork.md, scripts/ghosttykit-checksums.txt
Ghostty submodule updated to new commit with cursor-line selection C API. Fork documentation refreshed with new semantic Screen.selectLine behavior, merge-conflict notes extended to preserve ghostty_surface_select_cursor_line re-export alongside existing selection functions. Checksum file updated with new xcframework release pin matching the new Ghostty commit SHA.
Terminal selectAll action with cursor-line selection
Sources/GhosttyTerminalView.swift
Add C-interop shim for ghostty_surface_select_cursor_line. Override @IBAction func selectAll(_:) to attempt cursor-line selection via the shim, fall back to "select_all" binding if unavailable, and invalidate text-input coordinate caches only on successful selection. Simplify copy-mode mouse modifier construction with direct GHOSTTY_MODS_NONE.
AppDelegate debug-block scope fix
Sources/AppDelegate.swift
Close #if DEBUG block immediately after terminal font-zoom shortcut debug log to prevent guard from extending into the subsequent shortcut return path.
Test coverage for terminal select-all routing
cmuxTests/AppDelegateShortcutRoutingTests.swift, cmuxTests/TerminalAndGhosttyTests.swift
Add selectAllCallCount to probe view and override selectAll(_:) to track invocations. Introduce testWindowPerformKeyEquivalentRoutesTerminalCmdAToResponderSelectAll to verify Cmd+A routes through the responder's selectAll(_:) rather than triggering viewport-wide select-all or raw key forwarding. Minor test fixture whitespace update.
Crash-report-subdir detection and conditional build configuration
scripts/download-prebuilt-ghosttykit.sh, scripts/ensure-ghosttykit.sh, scripts/build-ghostty-cli-helper.sh, scripts/build-sign-upload.sh
Introduce conditional logic to detect crash-report-subdir support via git grep against Ghostty submodule build files. Initialize build configuration variables (crash-report subdir, build flavor, crash args) only when the option is detected. Scripts default to no-flavor/crash-args mode unless Ghostty explicitly supports the feature.
Workflow and script integration for conditional crash-report-subdir
.github/workflows/build-ghosttykit.yml, .github/workflows/test-e2e.yml, .github/workflows/test-depot.yml
Add "Resolve GhosttyKit release tag" step to build-ghosttykit workflow to dynamically compute release tag and conditional crash_args. Update build-ghosttykit and build-sign-upload to conditionally pass crash build arguments. Delegate pre-built xcframework downloads in E2E and depot test workflows to ./scripts/download-prebuilt-ghosttykit.sh. Update release creation to use dynamically resolved tag and notes.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

Possibly related PRs

  • manaflow-ai/cmux#717: Both PRs add/extend Command-shortcut routing logic for the focused Ghostty terminal via new helper predicates and performKeyEquivalent-driven dispatch (main PR for Cmd+A/select-all; retrieved PR for other Cmd+… shortcuts like Cmd+C).

Suggested labels

codex

Poem

🐰 Hoppy thoughts on the select-all sprint:

Cmd+A now picks just the line, not the whole screen so wide,
Ghostty's cursor-line API makes the terminal text glide,
Build scripts dance conditionally, detecting crash-report with grace,
Tests confirm the routing works—select-all found its place! 🎯

🚥 Pre-merge checks | ✅ 14 | ❌ 2

❌ Failed checks (1 warning, 1 inconclusive)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 5.26% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
Out of Scope Changes check ❓ Inconclusive Most changes are directly scoped to the #3802 objective (Cmd+A routing and selectAll implementation). However, extensive changes to CI/build scripts and GhosttyKit checksum logic for conditional crash-report support appear tangential to the core text-selection issue. Clarify whether the conditional crash-report and release-tag changes are prerequisites for the Ghostty fork update or should be separated into a distinct dependency-management PR.
✅ Passed checks (14 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly and concisely summarizes the main change: making terminal Cmd+A use command input line selection instead of viewport-wide selection.
Linked Issues check ✅ Passed The PR fully addresses the core objective from #3802: making Cmd+A select only the current command input line using semantic boundaries (OSC-133), rather than the entire viewport.
Cmux Swift Actor Isolation ✅ Passed Production changes comply with Swift 6 actor isolation. New helper function is pure. @IBAction override in GhosttyNSView follows patterns and operates on MainActor. No violations found.
Cmux Swift Blocking Runtime ✅ Passed New Swift functions for terminal Cmd+A routing contain no blocking primitives: no semaphores, locks, sleep, or main-queue sync. Test code uses deterministic scaffolding only.
Cmux No Hacky Sleeps ✅ Passed No new hacky sleeps, polling loops, or timing-based race patches introduced in non-Swift production code. PR actually improves by removing manual retry loop with sleep from workflows.
Cmux Swift Concurrency ✅ Passed PR introduces no legacy async patterns. New code is purely synchronous: routing helper, selectAll override, and test additions. No DispatchQueue, Task, Combine, or async/await patterns.
Cmux Swift @Concurrent ✅ Passed All new Swift functions are synchronous. No async/await or @concurrent annotations introduced. No violations of swift-concurrent-annotation.md rules found.
Cmux Swift File And Package Boundaries ✅ Passed PR adds small changes to existing files (+10/+8/+33 lines). All modifications are under 250-line threshold for oversized files and are focused, complying with Swift file/package boundary rules.
Cmux Swift Logging ✅ Passed PR's new code contains no logging violations. New functions have no print/NSLog calls. Pre-existing logging is from main branch, not added by PR. Rule only checks newly-added logging.
Cmux User-Facing Error Privacy ✅ Passed No new user-facing errors, alerts, or messages violating privacy rules. All changes are implementation, tests, or developer documentation only.
Cmux Swiftui State Layout ✅ Passed PR contains no new SwiftUI state patterns. All changes are AppKit-based: NSResponder overrides, key routing functions. No @Published/@Observable/@State or GeometryReader/LazyVStack violations.
Cmux Architecture Rethink ✅ Passed Small fix with clear ownership. No timing repairs, duplicate state, split entry points, or lifecycle splits detected. Single routing path to selectAll override with proper fallback.
Cmux Swift Auxiliary Window Close Shortcuts ✅ Passed PR adds no new user-visible standalone windows. Changes include routing helpers, responder overrides on existing views, and test fixtures (allowed per review rules).
Description check ✅ Passed The PR description includes all major required sections: Summary (what changed and why), Testing (verification approach), and Checklist items are present with most items addressed.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch issue-3802-warp-style-text-engine

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@greptile-apps

greptile-apps Bot commented May 12, 2026 •

Copy link
Copy Markdown
Contributor

Greptile Summary

Routes terminal Cmd+A through the NSResponder selectAll(_:) path so it calls Ghostty's new ghostty_surface_select_cursor_line API (selecting the OSC 133-bounded input line) instead of falling through to the viewport-wide select_all binding. Build and CI scripts are updated to auto-detect whether the pinned Ghostty fork exposes -Dcrash-report-subdir so the correct release tag format is chosen without hard-coding the flag.

  • Shortcut routing: NSWindow.performKeyEquivalent now intercepts Cmd+A when a GhosttyNSView is the first responder and dispatches to selectAll(nil), which tries ghostty_surface_select_cursor_line_compat first and falls back to performBindingAction(\"select_all\").
  • GhosttyKit plumbing: download-prebuilt-ghosttykit.sh, ensure-ghosttykit.sh, build-sign-upload.sh, build-ghostty-cli-helper.sh, and build-ghosttykit.yml all gain a git grep-based probe that determines whether the crash-report-subdir Zig flag is supported, keeping CI working across old and new Ghostty fork heads.
  • Test coverage: A new AppDelegateShortcutRoutingTests case verifies Cmd+A routes to the responder selectAll and does not fall through to afterMenuMiss or keyDown.

Confidence Score: 5/5

Safe to merge — the Cmd+A routing change is narrowly scoped to the Ghostty first-responder path, the new direct API replaces the previously fragile synthetic-click side channel, and a regression test covers the key invariant.

The core Swift change is a clean two-layer implementation: try the direct cursor-line API, fall back to the existing select_all binding. Routing is correctly gated behind firstResponderGhosttyView and the new predicate strips modifier noise the same way the font-zoom helper does. The build-script changes are additive and backward-compatible. The only notable fragility is the unquoted ${CRASH_ARGS:+$CRASH_ARGS} expansion in the CI YAML, which is harmless for the current single-token value.

No files require special attention; build-ghosttykit.yml has a minor quoting nit in the zig build step.

Important Files Changed

Filename Overview
Sources/GhosttyTerminalView.swift Adds ghostty_surface_select_cursor_line_compat shim and overrides selectAll(_:) to use the direct cursor-line selection API with a select_all fallback; also simplifies GHOSTTY_MODS_NONE initialization by removing a redundant round-trip through ghostty_input_mods_e(rawValue:)??.
Sources/AppDelegate.swift Inserts Cmd+A interception inside the existing firstResponderGhosttyView block; routes to ghosttyView.selectAll(nil) before the stale-menu/binding fallback path.
Sources/App/ShortcutRoutingSupport.swift New shouldRouteTerminalSelectAllToNaturalTextEngine predicate cleanly mirrors the existing font-zoom routing helper; correctly strips numericPad, function, and capsLock before comparing against [.command].
cmuxTests/AppDelegateShortcutRoutingTests.swift Adds regression test that verifies Cmd+A triggers selectAllCallCount == 1 on the probe view and that neither afterMenuMissCallCount nor keyDownCallCount increments.
scripts/download-prebuilt-ghosttykit.sh Tag resolution now auto-detects crash-report-subdir support via git grep, emitting either xcframework-<sha>-<flavor> or bare xcframework-<sha>; existing checksum validation and curl retry logic are unchanged.
.github/workflows/build-ghosttykit.yml New Resolve GhosttyKit release tag step outputs tag, crash_args, and notes; downstream steps consume crash_args via an unquoted ${CRASH_ARGS:+$CRASH_ARGS} expansion that is safe for the current single-token value but fragile for future multi-token flags.

Sequence Diagram

sequenceDiagram
    participant User
    participant NSWindow
    participant AppDelegate as AppDelegate.performKeyEquivalent
    participant SRS as ShortcutRoutingSupport
    participant GNV as GhosttyNSView.selectAll
    participant Ghostty as ghostty_surface_select_cursor_line

    User->>NSWindow: Cmd+A keyDown
    NSWindow->>AppDelegate: performKeyEquivalent(event)
    AppDelegate->>AppDelegate: firstResponderGhosttyView?
    AppDelegate->>SRS: shouldRouteTerminalSelectAllToNaturalTextEngine(event)
    SRS-->>AppDelegate: true (Cmd+A, no other modifiers)
    AppDelegate->>GNV: selectAll(nil)
    GNV->>GNV: ensureSurfaceReadyForInput()
    GNV->>Ghostty: ghostty_surface_select_cursor_line_compat(surface)
    alt cursor line selected (OSC 133 boundary available)
        Ghostty-->>GNV: true
        GNV->>GNV: invalidateTextInputCoordinates(selectionChanged: true)
    else no semantic boundary
        Ghostty-->>GNV: false
        GNV->>GNV: performBindingAction("select_all")
    end
    AppDelegate-->>NSWindow: true (event consumed)
Loading

Reviews (17): Last reviewed commit: "Merge remote-tracking branch 'origin/mai..." | Re-trigger Greptile

Comment thread Sources/GhosttyTerminalView.swift Outdated
Comment thread Sources/GhosttyTerminalView.swift Outdated
Comment thread Sources/GhosttyTerminalView.swift Outdated
Comment on lines +7000 to +7060
@IBAction override func selectAll(_ sender: Any?) {
_ = selectCommandLineAtCursorOrAll()
}

@discardableResult
private func selectCommandLineAtCursorOrAll() -> Bool {
guard let surface = ensureSurfaceReadyForInput() else {
requestInputRecoveryAfterSurfaceMiss(reason: "selectAll.missingSurface")
return false
}

if selectCommandLineAtCursor(surface: surface) {
invalidateTextInputCoordinates(selectionChanged: true)
return true
}

let selected = performBindingAction("select_all")
if selected {
invalidateTextInputCoordinates(selectionChanged: true)
}
return selected
}

private func selectCommandLineAtCursor(surface: ghostty_surface_t) -> Bool {
guard !ghostty_surface_mouse_captured(surface) else { return false }
guard bounds.width > 0, bounds.height > 0 else { return false }

var x: Double = 0
var y: Double = 0
var width: Double = cellSize.width
var height: Double = cellSize.height
ghostty_surface_ime_point(surface, &x, &y, &width, &height)

let clickX = clampSurfaceClickCoordinate(
x + max(width, cellSize.width, 1) * 0.5,
upperBound: bounds.width
)
let clickY = clampSurfaceClickCoordinate(
y + max(height, cellSize.height, 1) * 0.5,
upperBound: bounds.height
)
let resetX = clickX > max(cellSize.width * 2, 2) ? 0 : max(bounds.width - 1, 0)
let resetY = clickY > max(cellSize.height * 2, 2) ? 0 : max(bounds.height - 1, 0)

let mods = ghostty_input_mods_e(rawValue: GHOSTTY_MODS_NONE.rawValue) ?? GHOSTTY_MODS_NONE
_ = ghostty_surface_clear_selection_compat(surface)

// Force Ghostty's multi-click state to restart before issuing the triple
// click that reaches Screen.selectLine and its OSC 133 input boundaries.
guard sendSurfaceLeftClick(surface: surface, x: resetX, y: resetY, mods: mods) else {
return false
}

for _ in 0 ..< 3 {
guard sendSurfaceLeftClick(surface: surface, x: clickX, y: clickY, mods: mods) else {
return false
}
}

return ghostty_surface_has_selection(surface)
}

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Implementing selectAll via 4 synthetic mouse clicks is a fragile side-channel that patches the symptom rather than naming the invariant

The implementation fires one reset click to a corner (to move Ghostty's internal click-position state away) and then three rapid clicks to the cursor cell (to trigger triple-click line selection). This path works because Ghostty's multi-click counter resets when the click position changes significantly, and three consecutive same-position clicks counts as a triple-click. Any change to Ghostty's click-state management — e.g., adding click-position hysteresis, changing how synchronous synthetic events are timestamped, or gating triple-click on a timer — silently breaks the feature without a test failure.

A direct surface API for "select the input line at the cursor" (or "emit a triple-click at the cursor cell") would be the correct contract. If that API doesn't exist yet in ghostty_surface_*, it would be worth requesting or stubbing so the click-simulation path can be removed once it lands.

Rule Used: Flag Swift fixes that patch symptoms while leaving... (source)

Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Addressed by replacing the synthetic-click selection path with the direct Ghostty cursor-line selection API, so the fragile mouse side channel is no longer used.

— Claude Code

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Addressed by removing the synthetic click path. Terminal select-all now calls Ghostty's direct cursor-line selection API, with the existing select_all binding only as the fallback path when that API cannot select.

— Claude Code

Comment thread Sources/GhosttyTerminalView.swift Outdated

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit d71fbb0. Configure here.

Comment thread Sources/GhosttyTerminalView.swift Outdated
coderabbitai[bot]
coderabbitai Bot previously requested changes May 12, 2026

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@docs/ghostty-fork.md`:
- Around line 15-22: Update the pinned-head metadata so the downstream
release/tag and checksum entries match the new fork head 7e4cf8a2f: locate the
section that still references the older xcframework-fe972c095 artifact chain and
either replace that release-tag/checksum with the values corresponding to commit
7e4cf8a2f (release tag, artifact name, and checksum) or add an explicit sentence
stating why the downstream artifact intentionally remains on the prior
xcframework-fe972c095 chain; ensure references to PRs (manaflow-ai/ghostty#53
and `#56`) and the cmux theme picker/Metal renderer notes remain intact.

In `@ghostty`:
- Line 1: The pinned ghostty submodule was bumped to commit
7e4cf8a2fd2539d68240aa046e2cc892d21d2e89 but the checksum file
ghosttykit-checksums.txt is missing an entry for that exact revision; add a
checksum line for commit 7e4cf8a2fd2539d68240aa046e2cc892d21d2e89 to
ghosttykit-checksums.txt (matching the file's existing format) so CI can verify
the artifact, or revert the ghostty bump if you cannot produce the checksum yet.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

Run ID: db248747-8da8-4146-a5a6-5e03ff270036

📥 Commits

Reviewing files that changed from the base of the PR and between 5829da2 and c3d7bb7.

📒 Files selected for processing (7)
  • Sources/App/ShortcutRoutingSupport.swift
  • Sources/AppDelegate.swift
  • Sources/GhosttyTerminalView.swift
  • cmuxTests/AppDelegateShortcutRoutingTests.swift
  • cmuxTests/TerminalAndGhosttyTests.swift
  • docs/ghostty-fork.md
  • ghostty

Comment thread docs/ghostty-fork.md Outdated
Comment thread ghostty Outdated
@lawrencecchen
lawrencecchen dismissed coderabbitai[bot]’s stale review May 13, 2026 06:07

Stale CodeRabbit review on an older commit. The two actionable threads it referenced are resolved, CodeRabbit has re-reviewed the current commit as commented/pass, and the GhosttyKit checksum/download path now validates.

coderabbitai[bot]
coderabbitai Bot previously requested changes May 13, 2026

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@Sources/GhosttyTerminalView.swift`:
- Around line 7015-7017: The IBAction method selectAll(_:) has unnecessarily
broad visibility and should be private to satisfy the private_action lint rule;
update the method declaration for selectAll(_:) to be private while keeping it
as an IBAction so it remains connected to Interface Builder, e.g. change the
declaration for selectAll(_:) and leave the call to
selectCommandLineAtCursorOrAll() unchanged.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

Run ID: 134b724b-8079-4647-a9df-03475c4fd038

📥 Commits

Reviewing files that changed from the base of the PR and between c3d7bb7 and 23e47cb.

📒 Files selected for processing (6)
  • Sources/App/ShortcutRoutingSupport.swift
  • Sources/AppDelegate.swift
  • Sources/GhosttyTerminalView.swift
  • cmuxTests/WorkspaceUnitTests.swift
  • docs/ghostty-fork.md
  • scripts/ghosttykit-checksums.txt

Comment thread Sources/GhosttyTerminalView.swift
@lawrencecchen
lawrencecchen dismissed coderabbitai[bot]’s stale review May 13, 2026 06:29

Stale CodeRabbit review: the private_action finding was addressed in commit 280840a with a compile-safe lint suppression because Swift requires NSResponder overrides to remain internal. The review thread is resolved and the current CodeRabbit check is passing.

…-text-engine

# Conflicts:
#	.github/workflows/build-ghosttykit.yml
#	docs/ghostty-fork.md
#	ghostty
@lawrencecchen lawrencecchen added the stale-revisit Closed after 30+ days without activity; preserved for possible revisit or reopening. label Sep 23, 2026
@github-project-automation github-project-automation Bot moved this from Todo to Done in cmux backlog Sep 23, 2026

This branch was successfully deployed

1 active deployment
Preview – cmux — b461417a Deployed May 19, 2026 by vercel[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

stale-revisit Closed after 30+ days without activity; preserved for possible revisit or reopening.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Proper text engine implementation

3 participants