Default `Cmd+;` launch hotkey conflicts with macOS app conventions; no easy in-app way to disable
Nobody has claimed this yet.
- Dominant language
- Rust
- Stars
- 19.9k
- Forks
- 2.3k
- Avg merge
- 2d 7h
- Merged PRs (30d)
- 30
Description
Summary
jcode installs Cmd+; as a default global launch hotkey (mapped to $HOME) on macOS, but this chord is conventionally used for settings/preferences in many macOS apps. There is no in-app way to release Cmd+; without manually editing config or unloading the LaunchAgent.
Where this is wired
- Default entry:
crates/jcode-setup-hints/src/launch_hotkeys.rs:138—cmd+;→$HOME. - Config schema:
crates/jcode-config-types/src/lib.rs:1630—LaunchHotkeysConfig { enabled: Option<bool>, entries: Vec<LaunchHotkeyEntry>, imported: bool }. - macOS launch agent:
~/Library/LaunchAgents/com.jcode.hotkey.plist(crates/jcode-setup-hints/src/lib.rs:386).
Problems
-
Default chord collision.
Cmd+;is widely used as a settings shortcut. Registering it system-wide viaRegisterEventHotKeymakes it unavailable to other apps the user may launch, and conflicts with muscle memory. -
No in-app opt-out. Disabling the hotkey today requires either:
- editing
~/.jcode/config.tomlto drop the entry from[launch_hotkeys].entries, or - manually running
launchctl unload ~/Library/LaunchAgents/com.jcode.hotkey.plistand deleting the plist.
Neither is discoverable, and neither survives a future jcode run that re-runs the install path.
- editing
-
[launch_hotkeys].enabled = falseis honored only on Linux and Windows. The macOS install path incrates/jcode-setup-hints/src/lib.rs(aroundinstall_macos_hotkey_listener) does not gate on theenabledflag. Linux checks it atlib.rs:2570, and Windows bails when false atwindows_setup.rs:259. So settingenabled = falseon macOS leaves the hotkey active until the user manually unloads launchd.
Suggested fixes (pick any, not all)
- Honor
enabledon macOS too. Gate the macOS install path onload_launch_hotkeys_config().enabled, mirroring the Linux path. When false, unload~/Library/LaunchAgents/com.jcode.hotkey.plistand skip rewriting it. - Surface in TUI. Add a
/hotkeys(or similar) command that lists the active chords, lets the user disable one, and persists the change. Today the only mention ofcmd+;in the UI is a startup notice (seecrates/jcode-tui/src/tui/app/tests/remote_events_reload_01/part_01.rs:1872). - Pick less collision-prone defaults.
Cmd+;is the conventional settings chord on macOS; consider a different default (e.g.Cmd+Alt+J,Cmd+J, or leave it unmapped and let auto-import set it once the user has session history). This also affects Linux/Windows since the default flows throughresolve_launch_hotkeys.
Reproduction
- Install jcode on macOS.
- Observe
~/Library/LaunchAgents/com.jcode.hotkey.plistis written on first launch. - Press
Cmd+;— a new jcode window opens in$HOME, stealing the chord from any other app expecting it for settings. - Set
[launch_hotkeys] enabled = falsein~/.jcode/config.toml, restart jcode —Cmd+;still fires. Manuallaunchctl unloadis required.
Environment
- jcode v0.64.0 (24d3460f9)
- macOS aarch64
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with crates/jcode-setup-hints/src/launch_hotkeys.rs:138, the LaunchHotkeysConfig schema in crates/jcode-config-types/src/lib.rs:1630, and the macOS install path around install_macos_hotkey_listener in crates/jcode-setup-hints/src/lib.rs. Review the startup notice test at crates/jcode-tui/src/tui/app/tests/remote_events_reload_01/part_01.rs:1872 and verify the selected fix covers macOS enabled-state handling, opt-out behavior, or default-key changes without leaving the LaunchAgent active.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- macos, rust
- Domain
- cli, desktop-dev, operating-systems
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 48/100