fix(FIX-011, FIX-014): drop --temp mode and command palette; rebind Ctrl+Shift+{N,P}#35
Merged
Merged
Conversation
…trl+Shift+{N,P}
After P-018 (AD-016) the unpinned-default lifecycle (active/ → trash/
on clean close, recoverable for 30s via Undo or --restore-session)
already covers what --temp was for. The remaining gap (--temp wrote
nothing on disk, unpinned writes a trashable file) was too small to
justify a separate code path, CLI flag, menu item, action handler,
accelerator, and ~200 LoC of legacy local-only fallback code. FIX-014
bundled mid-QA per dogfood directive: the Ctrl+Shift+P command palette
duplicated F1's adw::ShortcutsWindow with rendering issues, so the
540-LoC custom popover plus its registry were deleted and Ctrl+Shift+P
rebound onto the existing win.show-shortcuts action. Ctrl+Shift+N
rebound to win.new-window so muscle memory is preserved and the
unbound-accelerator → kitty-keyboard escape leak (a fix-cycle 1
regression Vick caught at T2) is fixed.
ADs: AD-011 (daemon mode is the only mode) preserved on every code
path now that --temp is gone. AD-016 (pinned-aware close + daemon does
not survive) preserved. AD-001 (one daemon per window) preserved. No
AD changes.
Perf: pty_to_subscriber_idle 17.4 µs (28× under SPEC's 500 µs ceiling),
daemon_cold_start 18.26 ms (11× under 200 ms ceiling). Criterion
change% flagged regressions vs P-018's 2.87 ms cold-start measurement
which was a host-quiet outlier; absolute numbers are at-noise vs the
FIX-005A baseline (15.86 ms) and well within SPEC. Hot path untouched.
Net: 4 files, +88 / −747 / −659 LoC. CHORE-FIX-011-cleanup follow-up
deletes the now-unreachable duplicate_workspace_temp_fallback family
and refactors daemon_client: Option<Arc<>> → Arc<>. FEAT-001 filed for
a real fuzzy command palette to revisit when the action surface
outgrows F1.
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.
Summary
--tempmode entirely. Post-P-018 (AD-016) the unpinned-default lifecycle already covers what--tempwas for, with a recoverable Undo affordance on top. The remaining "no on-disk trace" gap was too small to justify a separate CLI flag, menu item, action handler, accelerator, and ~200 LoC of legacy local-only fallback code.Ctrl+Shift+Pcommand palette. It duplicated F1'sadw::ShortcutsWindowwith rendering glitches and no fuzzy-search affordances — net-negative UX.Ctrl+Shift+Pnow opens the existing F1 keyboard-shortcuts dialog.Ctrl+Shift+Nrebound from the deleted--tempaction to the existingwin.new-windowaction so muscle memory is preserved and the unbound-accelerator → kitty-keyboard escape leak is fixed.Net diff: 4 files / +88 / −747 / −659 LoC.
What changed
src/cli.rspub temp: boolfield.src/main.rsargs.tempreferences inis_bare_launchandLaunchOptionsinitializer.crates/forgetty-gtk/src/app.rsLaunchOptions.tempfield, the "New Temporary Window" menu item, thewin.new-temp-windowaction handler + accelerator + command-paletteCommandEntry, and ~10if launch.tempbranches (inlining the survivingelsebody in each). Delete the entire 540-LoC command-palette section (struct CommandEntry,command_registry,build_command_palette,build_palette_row,move_palette_selection,close_command_palette,open_command_palette,toggle_command_palette) plus its overlay creation, click-outside gesture, and action handler. AddCtrl+Shift+Naccel forwin.new-windowand migrateCtrl+Shift+Pontowin.show-shortcuts's existing accel list (alongside F1, Ctrl+?, Ctrl+Shift+/).crates/forgetty-gtk/src/settings_view.rsNew Temporary WindowandCommand PaletteActionDefs. UpdateNew WindowandKeyboard Shortcuts (reference)default_accelsto includeCtrl+Shift+NandCtrl+Shift+Prespectively.Root cause
P-018 (shipped 2026-05-05, AD-016) flipped the persistence default from "always persist" to "trash on close unless explicitly pinned". After that change
--tempbecame a near-duplicate of the unpinned default — the only daylight between them was that unpinned writes a recoverabletrash/{uuid}.jsonwhile--tempwrote nothing. Vick's read at QA time: "--tempis not needed anymore as default start is temp already, right?" Right.The command palette was a separate pre-existing UX issue surfaced during FIX-011 testing — its rendering had Overlay-positioning bugs and its content largely overlapped F1's keyboard-shortcuts dialog. Deleting it removed the broken half of a duplication; F1 (the GNOME-native
adw::ShortcutsWindow) survives as the single source of truth.How the fix works
--tempdeletion: everyif launch.temp { A } else { B }block reduces toB. Becausedaemon_client: Option<Arc<DaemonClient>>was onlyNonefor--temp, it is now provably alwaysSome(...)— the now-deaddaemon_client.is_none()legacy fallback paths (e.g.duplicate_workspace_temp_fallback) compile clean and are deferred to CHORE-FIX-011-cleanup to keep this PR a tight, reviewable deletion.Ctrl+Shift+Nrebind: 4 surgical edits — add an accel registration forwin.new-window, add anaccelattribute to the menu item, update the (deleted-anyway)CommandEntryshortcut label, and updatesettings_view.rsdefault_accels. Without this, the keystroke would fall through GtkShortcutController to the focused DrawingArea and emit a kitty-protocol escape (0;6u) into the shell — caught by Vick's T2 in fix-cycle 1.Command palette deletion:
sed -i '6666,7205d'for the section, plus 5 caller-site Edit operations.Ctrl+Shift+Pis added towin.show-shortcuts's existing accel list — same idiom as the other multi-binding action.Tests
Automated (all PASS):
cargo check --workspacecargo build --releasecargo clippy --workspace -- -D warningscargo fmt --allcargo test --workspace --exclude forgetty-gtk— 203 unit tests pass, no rewrites neededcargo bench --bench daemon_hotpath: idle 17.4 µs (28× under SPEC's 500 µs ceiling), cold-start 18.26 ms (11× under 200 ms ceiling). Hot path untouched, all changes are control-plane.Human (Vick, in dev session) — all PASS:
forgetty --temprejected by clap.sessions/trash/{uuid}.jsonon close, Undo toast fires.sessions/{uuid}.json, auto-restore on relaunch.ADs affected
None changed status. AD-011 (daemon mode is the only mode) is now true on every code path now that
--tempis gone. AD-016 (pinned-aware close + daemon does not survive) preserved. AD-001 (one daemon per window) preserved.Deferrals
CHORE-FIX-011-cleanup: delete the now-unreachableduplicate_workspace_temp_fallbackfamily (~150 LoC), refactordaemon_client: Option<Arc<DaemonClient>>→Arc<DaemonClient>(provably alwaysSomepost-FIX-011), collapse the now-single-childmain_overlay. Estimated 200–300 LoC future shrinkage.FEAT-001: real command palette (fuzzy search, instant invoke, recently-used, surfaces menu-only and dynamic actions). Schedule when Forgetty's action surface outgrows what F1'sadw::ShortcutsWindowergonomically displays — likely after Android device-pairing or initial plugin services land.