Skip to content

feat: Improve visibility of key bindings#1064

Open
1jmdev wants to merge 1 commit intopingdotgg:mainfrom
1jmdev:feat/keybind-menu
Open

feat: Improve visibility of key bindings#1064
1jmdev wants to merge 1 commit intopingdotgg:mainfrom
1jmdev:feat/keybind-menu

Conversation

@1jmdev
Copy link

@1jmdev 1jmdev commented Mar 14, 2026

Summary

Adds a "Keys" button to the top navigation bar that opens a keybindings dialog, making shortcuts more discoverable without digging through settings.

What Changed

Added a "Keys" button to the top navigation bar that opens a keybindings dialog. The dialog displays all available key bindings grouped by category (Workspace, Chat, etc.) and allows users to:

  • View current and default shortcuts
  • Edit shortcuts inline
  • Reset individual shortcuts to defaults via "Restore default"
  • Save custom shortcut overrides

With also disable the button in the settings and open the keyboard shortcuts dialog from the settings in the existing keyboard shortcuts section.

Why

Key bindings are currently only accessible through settings, making them easy to overlook. Many users rely on keyboard shortcuts for faster navigation, and having a dedicated, visible entry point in the top nav makes discoverability much better.

Resolves #1044

UI Changes

Before:
No dedicated shortcut access in the top navigation.

After:
A "Keys" button is added to the top navigation bar. Clicking it opens a dialog listing all keybindings with inline editing and reset capabilities.

image

Checklist

  • This PR is small and focused
  • I explained what changed and why
  • I included before/after screenshots for any UI changes
  • I included a video for animation/interaction changes

Note

Add in-app keybindings manager dialog with chat header button

  • Adds a new KeybindingsControl component (KeybindingsControl.tsx) that renders a dialog for viewing, editing, and restoring default keybindings, persisting changes via server.upsertKeybinding.
  • Adds a 'Keys' button to ChatHeader that opens the keybindings dialog, controlled by a new showHeaderKeybindingsButton app setting (defaults to true).
  • Adds a toggle for showHeaderKeybindingsButton and a 'Manage keybindings' button in the settings route (_chat.settings.tsx).
  • Moves DEFAULT_KEYBINDINGS to a new shared package export (packages/shared/src/keybindings.ts) so both server and web can import it.
  • Adds keybinding helper utilities to apps/web/src/keybindings.ts including keybindingValueFromEvent, keybindingValueForCommand, and shortcutLabelsForCommand.

Macroscope summarized d08233a.

@coderabbitai
Copy link

coderabbitai bot commented Mar 14, 2026

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: b3963d9d-c340-4283-800f-18c467c11142

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
📝 Coding Plan
  • Generate coding plan for human review comments

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.

Tip

You can customize the tone of the review comments and chat replies.

Configure the tone_instructions setting to customize the tone of the review comments and chat replies. For example, you can set the tone to Act like a strict teacher, Act like a pirate and more.

@github-actions github-actions bot added size:XL 500-999 changed lines (additions + deletions). vouch:unvouched PR author is not yet trusted in the VOUCHED list. labels Mar 14, 2026
Copy link

@chatgpt-codex-connector chatgpt-codex-connector bot left a comment

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: d08233a328

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +203 to +204
const canSave =
normalizedDraftValue.length > 0 && normalizedDraftValue !== currentValue;

Choose a reason for hiding this comment

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

P2 Badge Disable saving while current keybindings are unresolved

canSave is derived only from normalizedDraftValue !== currentValue, so when this dialog is opened before server config finishes loading (the callers pass an empty keybindings array during that window), currentValue is null and every non-empty default draft looks “dirty.” Hitting Save in that state writes an override via upsertKeybinding, which replaces that command’s defaults; for multi-default commands like chat.new, this can silently drop one of the shipped shortcuts. Please gate saves until the current keybindings snapshot is loaded.

Useful? React with 👍 / 👎.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XL 500-999 changed lines (additions + deletions). vouch:unvouched PR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Feature]: Improve visibility of key bindings

1 participant