feat: add Cmd+, keyboard shortcut to toggle settings (#319)
Add settings.toggle action with Cmd+, (Mac) / Ctrl+, (non-Mac) bindings. When on a settings route, pressing the shortcut navigates back; otherwise it pushes to the host settings route. Also adds comma to the shortcut key map so the combo string parses correctly.
This commit is contained in:
@@ -1,10 +1,11 @@
|
|||||||
import { useEffect, useMemo, useRef } from "react";
|
import { useEffect, useMemo, useRef } from "react";
|
||||||
import { usePathname } from "expo-router";
|
import { usePathname, useRouter } from "expo-router";
|
||||||
import { getIsElectronRuntime } from "@/constants/layout";
|
import { getIsElectronRuntime } from "@/constants/layout";
|
||||||
import { useHosts } from "@/runtime/host-runtime";
|
import { useHosts } from "@/runtime/host-runtime";
|
||||||
import { useKeyboardShortcutsStore } from "@/stores/keyboard-shortcuts-store";
|
import { useKeyboardShortcutsStore } from "@/stores/keyboard-shortcuts-store";
|
||||||
import { setCommandCenterFocusRestoreElement } from "@/utils/command-center-focus-restore";
|
import { setCommandCenterFocusRestoreElement } from "@/utils/command-center-focus-restore";
|
||||||
import {
|
import {
|
||||||
|
buildHostSettingsRoute,
|
||||||
parseHostAgentRouteFromPathname,
|
parseHostAgentRouteFromPathname,
|
||||||
parseServerIdFromPathname,
|
parseServerIdFromPathname,
|
||||||
parseHostWorkspaceRouteFromPathname,
|
parseHostWorkspaceRouteFromPathname,
|
||||||
@@ -47,6 +48,7 @@ export function useKeyboardShortcuts({
|
|||||||
cycleTheme?: () => void;
|
cycleTheme?: () => void;
|
||||||
}) {
|
}) {
|
||||||
const pathname = usePathname();
|
const pathname = usePathname();
|
||||||
|
const router = useRouter();
|
||||||
const hosts = useHosts();
|
const hosts = useHosts();
|
||||||
const resetModifiers = useKeyboardShortcutsStore((s) => s.resetModifiers);
|
const resetModifiers = useKeyboardShortcutsStore((s) => s.resetModifiers);
|
||||||
const { overrides } = useKeyboardShortcutOverrides();
|
const { overrides } = useKeyboardShortcutOverrides();
|
||||||
@@ -244,6 +246,16 @@ export function useKeyboardShortcuts({
|
|||||||
case "sidebar.toggle.left":
|
case "sidebar.toggle.left":
|
||||||
toggleAgentList();
|
toggleAgentList();
|
||||||
return true;
|
return true;
|
||||||
|
case "settings.toggle":
|
||||||
|
if (pathname.endsWith("/settings")) {
|
||||||
|
router.back();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (!activeServerId) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
router.push(buildHostSettingsRoute(activeServerId));
|
||||||
|
return true;
|
||||||
case "sidebar.toggle.both":
|
case "sidebar.toggle.both":
|
||||||
if (toggleBothSidebars) {
|
if (toggleBothSidebars) {
|
||||||
toggleBothSidebars();
|
toggleBothSidebars();
|
||||||
|
|||||||
@@ -37,6 +37,7 @@ export type KeyboardActionId =
|
|||||||
| "sidebar.toggle.left"
|
| "sidebar.toggle.left"
|
||||||
| "sidebar.toggle.right"
|
| "sidebar.toggle.right"
|
||||||
| "sidebar.toggle.both"
|
| "sidebar.toggle.both"
|
||||||
|
| "settings.toggle"
|
||||||
| "command-center.toggle"
|
| "command-center.toggle"
|
||||||
| "shortcuts.dialog.toggle"
|
| "shortcuts.dialog.toggle"
|
||||||
| "workspace.terminal.new"
|
| "workspace.terminal.new"
|
||||||
|
|||||||
@@ -712,6 +712,32 @@ const SHORTCUT_BINDINGS: readonly ShortcutBinding[] = [
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
|
// --- Settings toggle ---
|
||||||
|
{
|
||||||
|
id: "settings-toggle-cmd-comma-mac",
|
||||||
|
action: "settings.toggle",
|
||||||
|
combo: "Cmd+,",
|
||||||
|
when: { mac: true, commandCenter: false },
|
||||||
|
help: {
|
||||||
|
id: "toggle-settings",
|
||||||
|
section: "panels",
|
||||||
|
label: "Toggle settings",
|
||||||
|
keys: ["mod", ","],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "settings-toggle-ctrl-comma-non-mac",
|
||||||
|
action: "settings.toggle",
|
||||||
|
combo: "Ctrl+,",
|
||||||
|
when: { mac: false, commandCenter: false, terminal: false },
|
||||||
|
help: {
|
||||||
|
id: "toggle-settings",
|
||||||
|
section: "panels",
|
||||||
|
label: "Toggle settings",
|
||||||
|
keys: ["mod", ","],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
// --- Focus mode ---
|
// --- Focus mode ---
|
||||||
{
|
{
|
||||||
id: "view-toggle-focus-cmd-shift-f-mac",
|
id: "view-toggle-focus-cmd-shift-f-mac",
|
||||||
|
|||||||
@@ -31,6 +31,7 @@ KEY_MAP["Digit"] = { code: "Digit" };
|
|||||||
KEY_MAP["\\"] = { code: "Backslash" };
|
KEY_MAP["\\"] = { code: "Backslash" };
|
||||||
KEY_MAP["["] = { code: "BracketLeft", key: "[" };
|
KEY_MAP["["] = { code: "BracketLeft", key: "[" };
|
||||||
KEY_MAP["]"] = { code: "BracketRight", key: "]" };
|
KEY_MAP["]"] = { code: "BracketRight", key: "]" };
|
||||||
|
KEY_MAP[","] = { code: "Comma", key: "," };
|
||||||
KEY_MAP["."] = { code: "Period", key: "." };
|
KEY_MAP["."] = { code: "Period", key: "." };
|
||||||
KEY_MAP["`"] = { code: "Backquote", key: "`" };
|
KEY_MAP["`"] = { code: "Backquote", key: "`" };
|
||||||
KEY_MAP["/"] = { code: "Slash" };
|
KEY_MAP["/"] = { code: "Slash" };
|
||||||
|
|||||||
Reference in New Issue
Block a user