Skip to content

Allow customizing/disabling individual keybindings (e.g. Cmd+Shift+A for WaveAI panel) #3323

@sharpHL

Description

@sharpHL

Problem

The Cmd+Shift+A shortcut for toggling the WaveAI panel is hardcoded in frontend/app/store/keymodel.ts:743 and cannot be remapped or disabled via settings.json.

This conflicts with my long-standing system-wide screenshot shortcut on macOS, which is also Cmd+Shift+A. Whenever WaveTerm is focused, my muscle memory triggers the AI panel instead of a screenshot. I don't want to retrain a habit I've used for years across every other app on my machine just because one terminal app claims this combo.

Current state

Looking through the docs and source:

  • docs.waveterm.dev/keybindings only lists the defaults — no override syntax is documented.
  • settings.json exposes app:disablectrlshiftarrows, app:hideaibutton, app:globalhotkey, etc., but no way to disable or remap Cmd+Shift+A. app:hideaibutton only hides the tab-bar button; the shortcut still fires.
  • Most major keybindings (Cmd+Shift+A, Cmd+T, Cmd+D, Cmd+K, …) are hardcoded in keymodel.ts.

Request

Please consider one of the following (in order of usefulness):

  1. User-configurable keybindings via something like keybindings.json or a keybindings: section in settings.json, where users can remap or set actions to null/empty to disable them.
  2. At minimum, per-binding disable flags (e.g. app:disableaipaneltoggle, similar to the existing app:disablectrlshiftarrows) for the most commonly conflicting shortcuts — Cmd+Shift+A being a clear case.

Why this matters

Power users come to a new terminal with deeply ingrained global shortcuts (screenshot, window manager, clipboard tools, etc.). A terminal that hijacks them without offering an opt-out forces users to either retrain habits across the whole OS or stop using the feature. Other terminals (iTerm2, WezTerm, Alacritty, Ghostty) all expose user-editable keybindings. WaveTerm should too.

Thanks for the great work on Wave!

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions