Title: Add a search box to the Settings → Keyboard Shortcuts page · Issue #58 · modelstudioai/openwork · GitHub
Open Graph Title: Add a search box to the Settings → Keyboard Shortcuts page · Issue #58 · modelstudioai/openwork
X Title: Add a search box to the Settings → Keyboard Shortcuts page · Issue #58 · modelstudioai/openwork
Description: Problem or Motivation OpenWork's Settings → Keyboard Shortcuts page (ShortcutsPage.tsx) renders every keyboard shortcut — the registry-driven actions grouped by category (General, Navigation, View, Chat, …) plus three component-specific ...
Open Graph Description: Problem or Motivation OpenWork's Settings → Keyboard Shortcuts page (ShortcutsPage.tsx) renders every keyboard shortcut — the registry-driven actions grouped by category (General, Navigation, View,...
X Description: Problem or Motivation OpenWork's Settings → Keyboard Shortcuts page (ShortcutsPage.tsx) renders every keyboard shortcut — the registry-driven actions grouped by category (General, Navigation, V...
Opengraph URL: https://github.com/modelstudioai/openwork/issues/58
X: @github
Domain: github.com
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"Add a search box to the Settings → Keyboard Shortcuts page","articleBody":"## Problem or Motivation\n\nOpenWork's **Settings → Keyboard Shortcuts** page (`ShortcutsPage.tsx`) renders\nevery keyboard shortcut — the registry-driven actions grouped by category\n(General, Navigation, View, Chat, …) plus three component-specific sections\n(list navigation, session list, chat input). That's ~30 rows across many\nsections, and there is **no way to filter them**. To find \"the shortcut for\ntoggling the theme\" or \"what does ⇧ do here\", you scroll and scan the whole\nlist.\n\nComparable desktop apps make their shortcut reference **searchable**. The Codex\napp's Settings → Keyboard Shortcuts has **\"keypress search\"** (search by the key\nyou pressed) and a reset-all action; VS Code's Keyboard Shortcuts editor and\nClaude Code's customizable keybindings both ship a search box at the top. The\nsettings **navigator** in OpenWork already got a search box (#39/#40) — the\nshortcuts list, which is longer and denser, is the conspicuous remaining\nun-filterable settings surface.\n\n## Proposed Solution\n\nAdd a search box at the top of the Shortcuts page that filters the shortcut rows\nby **both** their action label **and** their key combination — so typing\n`theme` narrows to the theme shortcut, and typing `shift` (or `⇧`) narrows to\nevery shortcut that uses Shift (\"keypress search\"). It:\n\n- filters case-insensitively across the registry-driven sections **and** the\n component-specific sections, hiding any section that has no remaining rows;\n- shows a **\"No results found\"** empty state when nothing matches;\n- has a clear (✕) button and clears on `Esc`;\n- mirrors the existing settings-navigator search styling (search icon, clear\n button, focus ring) for visual consistency.\n\n## Alternatives Considered\n\n- **Label-only search:** simpler, but it wouldn't satisfy the \"find every\n shortcut that uses this key\" use case that a keyboard-shortcuts reference is\n precisely for. Filtering on the rendered key tokens too (the `\u003ckbd\u003e` chips) is\n what makes it a real \"keypress search.\"\n- **Making shortcuts rebindable + a reset-all action** (as Codex/VS Code also\n offer): larger and out of scope here — OpenWork's shortcuts are currently a\n fixed reference, so search is the high-value first step. Rebinding can be\n layered on later.\n- **Command palette (#42)** already lets you *run* an action by searching, but\n it is a separate global surface; users looking at the shortcuts reference\n expect to filter the list they are looking at, the way the settings navigator\n already does.\n\n## Additional Context\n\nFeasibility: **frontend-only / doable.** Verified against `apps/electron` — the\nShortcuts page is a pure renderer view over the centralized action registry\n(`actionsByCategory` + `useActionRegistry().getHotkeyDisplay`), so filtering is\npure client-side React state. No backend / qwen-code change. **No new i18n\nkeys** — the placeholder reuses `common.search`, the empty state reuses\n`common.noResultsFound`, and the clear button reuses `common.clear`.\n\n### Acceptance criteria (CDP e2e assertion)\n\nA new `e2e/assertions/shortcuts-search.assert.ts` drives the real built app over\nCDP entirely in the draft (no-session) state — no seeded conversation and no\nbackend (the Shortcuts page is a pure registry view):\n\n1. Open **Settings → Keyboard Shortcuts** from the sidebar; the search box\n renders and the list shows more than one shortcut row.\n2. Type an action's label → the list narrows to exactly the predicted matches,\n every visible row actually contains the query, and the list shrinks.\n3. Type a **key token** read from a rendered `\u003ckbd\u003e` chip (e.g. `⌘`/`Ctrl`) →\n the list narrows to exactly the rows that use that key, and every visible row\n contains it — proving key/\"keypress\" search works, not just label search.\n4. A no-match query (`zzqqxxnomatchzzqqxx`) shows the empty state and hides\n every row.\n5. Clearing the query restores the full list.\n\nPart of the autonomous desktop-feature loop (`loop-bot`).","author":{"url":"https://github.com/DragonnZhang","@type":"Person","name":"DragonnZhang"},"datePublished":"2026-07-05T13:35:41.000Z","interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":0},"url":"https://github.com/58/openwork/issues/58"}
| route-pattern | /_view_fragments/issues/show/:user_id/:repository/:id/issue_layout(.:format) |
| route-controller | voltron_issues_fragments |
| route-action | issue_layout |
| fetch-nonce | v2:d46b3633-e301-5ae2-464a-a0d2f5e4b544 |
| current-catalog-service-hash | 81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114 |
| request-id | AC5E:2646AD:3C022:51D1A:6A5276BD |
| html-safe-nonce | 0989db82d69a601772f548734e1afa257f34ce37e03c84eec95803d911b744e7 |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJBQzVFOjI2NDZBRDozQzAyMjo1MUQxQTo2QTUyNzZCRCIsInZpc2l0b3JfaWQiOiI3MDc1ODU4NjA1MDQwMzY3MjkzIiwicmVnaW9uX2VkZ2UiOiJpYWQiLCJyZWdpb25fcmVuZGVyIjoiaWFkIn0= |
| visitor-hmac | d32f3dd12890187aad356aacd9bf458ec6d32d92b4d00d3b16297f163131330a |
| hovercard-subject-tag | issue:4813035246 |
| github-keyboard-shortcuts | repository,issues,copilot |
| google-site-verification | Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I |
| octolytics-url | https://collector.github.com/github/collect |
| analytics-location | / |
| fb:app_id | 1401488693436528 |
| apple-itunes-app | app-id=1477376905, app-argument=https://github.com/_view_fragments/issues/show/modelstudioai/openwork/58/issue_layout |
| twitter:image | https://opengraph.githubassets.com/b5c467ece74eb20cde2c2add30959f8d5babb94eb35d2e7855089fa1a7e4c215/modelstudioai/openwork/issues/58 |
| twitter:card | summary_large_image |
| og:image | https://opengraph.githubassets.com/b5c467ece74eb20cde2c2add30959f8d5babb94eb35d2e7855089fa1a7e4c215/modelstudioai/openwork/issues/58 |
| og:image:alt | Problem or Motivation OpenWork's Settings → Keyboard Shortcuts page (ShortcutsPage.tsx) renders every keyboard shortcut — the registry-driven actions grouped by category (General, Navigation, View,... |
| og:image:width | 1200 |
| og:image:height | 600 |
| og:site_name | GitHub |
| og:type | object |
| og:author:username | DragonnZhang |
| hostname | github.com |
| expected-hostname | github.com |
| None | b9a586c06a05a7a86fc7e3f4dbd03e42f6869085879aa184aa6369456dbd50fb |
| turbo-cache-control | no-preview |
| go-import | github.com/modelstudioai/openwork git https://github.com/modelstudioai/openwork.git |
| octolytics-dimension-user_id | 283556804 |
| octolytics-dimension-user_login | modelstudioai |
| octolytics-dimension-repository_id | 1256697754 |
| octolytics-dimension-repository_nwo | modelstudioai/openwork |
| octolytics-dimension-repository_public | true |
| octolytics-dimension-repository_is_fork | false |
| octolytics-dimension-repository_network_root_id | 1256697754 |
| octolytics-dimension-repository_network_root_nwo | modelstudioai/openwork |
| turbo-body-classes | logged-out env-production page-responsive |
| disable-turbo | false |
| browser-stats-url | https://api.github.com/_private/browser/stats |
| browser-errors-url | https://api.github.com/_private/browser/errors |
| release | 07a982c1d40157c619b364352b704c3ce66bb332 |
| ui-target | full |
| theme-color | #1e2327 |
| color-scheme | light dark |
Links:
Viewport: width=device-width