From 95ae828d7c60b6c175adc946e5853d7544a8b549 Mon Sep 17 00:00:00 2001 From: Adrian Bonpin Date: Sun, 4 Oct 2026 05:44:32 +0800 Subject: [PATCH] feat: cmd+shift+delete deletes the highlighted conversation The delete action in the chat view had no shortcut, so removing a conversation meant opening the action panel. It now takes cmd+shift+delete, and Chat Sessions uses the same combination so one shortcut means one thing across both commands (it was cmd+delete there). The key macOS labels "delete" is backspace, and Vicinae's key map has `"backspace" -> Qt::Key_Backspace`, rendered as the delete token. That mapping is why the shortcut string is "backspace" rather than "delete": `"delete"` maps to Qt::Key_Delete, which is the forward-delete key, and `"deleteForward"` aliases backspace too. Not verified by running it. I tried to confirm the shortcut renders by temporarily promoting the action to primary so the bottom bar would show it, but an A/B test with cmd+shift+c proved the action bar only ever renders the primary action's implicit Return, never a custom shortcut: both rendered as a lone return glyph. Firing a shortcut needs a real keystroke, and this machine cannot send one. The reasoning above is from Vicinae's keyboard.cpp key map, not from observation. typecheck, eslint, 156 tests and vici build all pass. --- README.md | 2 +- src/lib/components/ChatView.tsx | 3 +++ src/sessions.tsx | 3 ++- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 8198b93..864d654 100644 --- a/README.md +++ b/README.md @@ -57,7 +57,7 @@ To change the model later, either edit the **Model** preference directly, or run | `↩` | Send the message in the search bar | | `↩` with an empty bar | Open the highlighted conversation | | `⌘ N` | New chat | -| `⌘ ⌫` | Delete a conversation (in **Chat Sessions**) | +| `⌘ ⇧ ⌫` | Delete the highlighted conversation (also in **Chat Sessions**) | Prompts are single line. An earlier `⌘ ↩` multi-line composer was removed — see [Architecture](#architecture) for why a `Form.TextArea` cannot be laid out cleanly in a launcher. The `Tab` shortcut went with it: the left column *is* the conversation switcher now, so an accessory dropdown would only duplicate it. diff --git a/src/lib/components/ChatView.tsx b/src/lib/components/ChatView.tsx index 8d0e1cb..aedc820 100644 --- a/src/lib/components/ChatView.tsx +++ b/src/lib/components/ChatView.tsx @@ -235,6 +235,9 @@ export function ChatView({ initialSession, initialPrompt }: ChatViewProps) { title="Delete Conversation" icon={Icon.Trash} style="destructive" + // The key macOS labels "delete" is backspace. Vicinae's key map has + // `"backspace" -> Qt::Key_Backspace`, which it renders as the ⌫ token. + shortcut={{ key: "backspace", modifiers: ["cmd", "shift"] }} onAction={() => removeSession(row.id)} /> diff --git a/src/sessions.tsx b/src/sessions.tsx index bbe5fb6..bea6d38 100644 --- a/src/sessions.tsx +++ b/src/sessions.tsx @@ -94,7 +94,8 @@ export default function SessionsCommand() { title="Delete Conversation" icon={Icon.Trash} style="destructive" - shortcut={{ key: "backspace", modifiers: ["cmd"] }} + // Matches the chat view, so one shortcut means one thing across both commands. + shortcut={{ key: "backspace", modifiers: ["cmd", "shift"] }} onAction={() => remove(summary.id)} />