close tab with confirmation on double ctrl+W

This commit is contained in:
SPRINX0\prochazka
2025-04-28 16:45:21 +02:00
parent 5f03340454
commit 0305a5dcef
4 changed files with 28 additions and 8 deletions

View File

@@ -2,15 +2,10 @@
import { commandsCustomized, visibleCommandPalette } from '../stores';
import { get } from 'svelte/store';
import { runGroupCommand } from './runCommand';
import { isMac, resolveKeyText } from '../utility/common';
import { getKeyTextFromEvent, isMac, resolveKeyText } from '../utility/common';
export function handleCommandKeyDown(e) {
let keyText = '';
if (e.ctrlKey) keyText += 'Ctrl+';
if (e.metaKey) keyText += 'Command+';
if (e.shiftKey) keyText += 'Shift+';
if (e.altKey) keyText += 'Alt+';
keyText += e.key;
const keyText = getKeyTextFromEvent(e);
// console.log('keyText', keyText);

View File

@@ -1,15 +1,28 @@
<script lang="ts">
import { get } from 'svelte/store';
import FormStyledButton from '../buttons/FormStyledButton.svelte';
import FormProvider from '../forms/FormProvider.svelte';
import FormSubmit from '../forms/FormSubmit.svelte';
import FontIcon from '../icons/FontIcon.svelte';
import { getKeyTextFromEvent, resolveKeyText } from '../utility/common';
import ModalBase from './ModalBase.svelte';
import { closeCurrentModal } from './modalTools';
import { commandsCustomized } from '../stores';
export let tabs;
export let onConfirm;
export let onCancel;
function handleKeyDown(e) {
const commandsValue = get(commandsCustomized);
const command = commandsValue['tabs.closeTab'];
if (resolveKeyText(command.keyText).toLowerCase() == getKeyTextFromEvent(e).toLowerCase()) {
closeCurrentModal();
onConfirm();
}
}
</script>
<FormProvider>
@@ -45,3 +58,5 @@
</svelte:fragment>
</ModalBase>
</FormProvider>
<svelte:window on:keydown={handleKeyDown} />

View File

@@ -261,7 +261,7 @@
id: 'tabs.closeTab',
category: 'Tabs',
name: _t('command.tabs.closeTab', { defaultMessage: 'Close tab' }),
keyText: isElectronAvailable() ? 'CtrlOrCommand+W' : 'CtrlOrCommand+Shift+W',
keyText: isElectronAvailable() ? 'CtrlOrCommand+W' : 'Alt+W',
testEnabled: () => {
const hasAnyOtherTab = getOpenedTabs().filter(x => !x.closedTime).length >= 1;
const hasAnyModalOpen = getOpenedModals().length > 0;

View File

@@ -134,3 +134,13 @@ export async function switchCurrentDatabase(data) {
currentDatabase.set(data);
}
}
export function getKeyTextFromEvent(e) {
let keyText = '';
if (e.ctrlKey) keyText += 'Ctrl+';
if (e.metaKey) keyText += 'Command+';
if (e.shiftKey) keyText += 'Shift+';
if (e.altKey) keyText += 'Alt+';
keyText += e.key;
return keyText;
}