From efda5ee098f1da3c777759e2a4ebf9550fa92c81 Mon Sep 17 00:00:00 2001 From: Curry Yang <163384738+CurryYangxx@users.noreply.github.com> Date: Fri, 21 Mar 2025 11:54:02 +0800 Subject: [PATCH] feat: add hotKey to close tab (#8494) --- packages/insomnia/src/common/hotkeys.ts | 5 +++++ packages/insomnia/src/common/settings.ts | 3 ++- packages/insomnia/src/ui/hooks/use-insomnia-tab.ts | 13 ++++++++++++- 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/packages/insomnia/src/common/hotkeys.ts b/packages/insomnia/src/common/hotkeys.ts index 7d5643641a..e7b4ab4f6f 100644 --- a/packages/insomnia/src/common/hotkeys.ts +++ b/packages/insomnia/src/common/hotkeys.ts @@ -35,6 +35,7 @@ export const keyboardShortcutDescriptions: Record = { 'environment_showVariableSourceAndValue': 'Show variable source and value', 'beautifyRequestBody': 'Beautify Active Code Editors', 'graphql_explorer_focus_filter': 'Focus GraphQL Explorer Filter', + 'close_tab': 'Close Tab', }; /** @@ -163,6 +164,10 @@ const defaultRegistry: HotKeyRegistry = { macKeys: [{ shift: true, meta: true, keyCode: keyboardKeys.i.keyCode }], winLinuxKeys: [{ ctrl: true, shift: true, keyCode: keyboardKeys.i.keyCode }], }, + close_tab: { + macKeys: [{ meta: true, keyCode: keyboardKeys.w.keyCode }], + winLinuxKeys: [{ ctrl: true, keyCode: keyboardKeys.w.keyCode }], + }, }; /** diff --git a/packages/insomnia/src/common/settings.ts b/packages/insomnia/src/common/settings.ts index 85c68394ef..69c01b7ac7 100644 --- a/packages/insomnia/src/common/settings.ts +++ b/packages/insomnia/src/common/settings.ts @@ -55,7 +55,8 @@ export type KeyboardShortcut = | 'request_togglePin' | 'environment_showVariableSourceAndValue' | 'beautifyRequestBody' - | 'graphql_explorer_focus_filter'; + | 'graphql_explorer_focus_filter' + | 'close_tab'; /** * The collection of defined hotkeys. diff --git a/packages/insomnia/src/ui/hooks/use-insomnia-tab.ts b/packages/insomnia/src/ui/hooks/use-insomnia-tab.ts index e8b1c01f18..ea2fb56ee7 100644 --- a/packages/insomnia/src/ui/hooks/use-insomnia-tab.ts +++ b/packages/insomnia/src/ui/hooks/use-insomnia-tab.ts @@ -9,6 +9,7 @@ import type { RequestGroup } from '../../models/request-group'; import type { UnitTestSuite } from '../../models/unit-test-suite'; import type { WebSocketRequest } from '../../models/websocket-request'; import type { Workspace } from '../../models/workspace'; +import { useDocBodyKeyboardShortcuts } from '../components/keydown-binder'; import { type BaseTab, type TabType } from '../components/tabs/tab'; import { TAB_ROUTER_PATH } from '../components/tabs/tab-list'; import { formatMethodName, getRequestMethodShortHand } from '../components/tags/method-tag'; @@ -38,7 +39,7 @@ export const useInsomniaTab = ({ unitTestSuite, }: InsomniaTabProps) => { - const { appTabsRef, addTab, changeActiveTab } = useInsomniaTabContext(); + const { appTabsRef, addTab, changeActiveTab, closeTabById } = useInsomniaTabContext(); const location = useLocation(); const [searchParams] = useSearchParams(); @@ -288,4 +289,14 @@ export const useInsomniaTab = ({ } } }, [addTab, appTabsRef, changeActiveTab, getCurrentTab, location.pathname, organizationId, packTabInfo]); + + useDocBodyKeyboardShortcuts({ + close_tab: event => { + event.preventDefault(); + const currentActiveTabId = appTabsRef?.current?.[organizationId]?.activeTabId; + if (currentActiveTabId) { + closeTabById(currentActiveTabId); + } + }, + }); };