From 6206829e73d5a5092ddb27c53bc3be78a5cd94ff Mon Sep 17 00:00:00 2001 From: Kiet Ho Date: Tue, 14 Apr 2026 19:23:46 -0700 Subject: [PATCH] feat(desktop): close settings with Escape key Press Escape on any settings page to navigate back to where settings was opened from. Skips when focus is in a form field, contenteditable, or any open Radix layer (dialog, popover, dropdown). --- .../routes/_authenticated/settings/layout.tsx | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/apps/desktop/src/renderer/routes/_authenticated/settings/layout.tsx b/apps/desktop/src/renderer/routes/_authenticated/settings/layout.tsx index 02a30dcdf74..5fc120754e5 100644 --- a/apps/desktop/src/renderer/routes/_authenticated/settings/layout.tsx +++ b/apps/desktop/src/renderer/routes/_authenticated/settings/layout.tsx @@ -5,10 +5,12 @@ import { useNavigate, } from "@tanstack/react-router"; import { useEffect } from "react"; +import { useHotkeys } from "react-hotkeys-hook"; import { electronTrpc } from "renderer/lib/electron-trpc"; import { type SettingsSection, useSetSettingsSearchQuery, + useSettingsOriginRoute, useSettingsSearchQuery, } from "renderer/stores/settings-state"; import { SearchResultsBanner } from "./components/SearchResultsBanner"; @@ -88,6 +90,7 @@ function SettingsLayout() { const isMac = platform === undefined || platform === "darwin"; const searchQuery = useSettingsSearchQuery(); const setSearchQuery = useSetSettingsSearchQuery(); + const originRoute = useSettingsOriginRoute(); const location = useLocation(); const navigate = useNavigate(); const normalizedSearchQuery = searchQuery.trim(); @@ -117,6 +120,17 @@ function SettingsLayout() { } }, [isSearchActive, location.pathname, navigate, normalizedSearchQuery]); + useHotkeys( + "escape", + (event) => { + if (document.querySelector('[data-state="open"]')) return; + event.preventDefault(); + navigate({ to: originRoute }); + }, + { enableOnFormTags: false, enableOnContentEditable: false }, + [navigate, originRoute], + ); + return (