mac specific keyboard shortcuts #199

This commit is contained in:
Jan Prochazka
2022-04-09 20:00:26 +02:00
parent 5379e86d6e
commit 90f8d349fc
22 changed files with 84 additions and 56 deletions

View File

@@ -1,13 +1,16 @@
<script context="module"> <script context="module">
function getCommandTitle(command) { function getCommandTitle(command) {
let res = command.text; let res = command.text;
if (command.keyText || command.keyTextFromGroup) res += ` (${command.keyText || command.keyTextFromGroup})`; if (command.keyText || command.keyTextFromGroup) {
res += ` (${formatKeyText(command.keyText || command.keyTextFromGroup)})`;
}
return res; return res;
} }
</script> </script>
<script lang="ts"> <script lang="ts">
import { commandsCustomized } from '../stores'; import { commandsCustomized } from '../stores';
import { formatKeyText } from '../utility/common';
import ToolStripButton from './ToolStripButton.svelte'; import ToolStripButton from './ToolStripButton.svelte';
export let command; export let command;

View File

@@ -2,6 +2,7 @@
import { commandsCustomized, visibleCommandPalette } from '../stores'; import { commandsCustomized, visibleCommandPalette } from '../stores';
import { get } from 'svelte/store'; import { get } from 'svelte/store';
import { runGroupCommand } from './runCommand'; import { runGroupCommand } from './runCommand';
import { resolveKeyText } from '../utility/common';
export function handleCommandKeyDown(e) { export function handleCommandKeyDown(e) {
let keyText = ''; let keyText = '';
@@ -15,13 +16,13 @@
const commandsFiltered: any = Object.values(commandsValue).filter( const commandsFiltered: any = Object.values(commandsValue).filter(
(x: any) => (x: any) =>
x.keyText && x.keyText &&
x.keyText resolveKeyText(x.keyText)
.toLowerCase() .toLowerCase()
.split('|') .split('|')
.map(x => x.trim()) .map(x => x.trim())
.includes(keyText.toLowerCase()) && .includes(keyText.toLowerCase()) &&
(x.disableHandleKeyText == null || (x.disableHandleKeyText == null ||
!x.disableHandleKeyText !resolveKeyText(x.disableHandleKeyText)
.toLowerCase() .toLowerCase()
.split('|') .split('|')
.map(x => x.trim()) .map(x => x.trim())

View File

@@ -18,7 +18,7 @@
category: 'Database', category: 'Database',
toolbarName: 'Database search', toolbarName: 'Database search',
name: 'Search', name: 'Search',
keyText: isElectronAvailable() ? 'Ctrl+P' : 'F3', keyText: isElectronAvailable() ? 'CtrlOrCommand+P' : 'F3',
onClick: () => visibleCommandPalette.set('database'), onClick: () => visibleCommandPalette.set('database'),
testEnabled: () => getVisibleCommandPalette() != 'database', testEnabled: () => getVisibleCommandPalette() != 'database',
}); });

View File

@@ -25,6 +25,6 @@ registerCommand({
id: 'database.switch', id: 'database.switch',
category: 'Database', category: 'Database',
name: 'Change to recent', name: 'Change to recent',
keyText: 'Ctrl+D', keyText: 'CtrlOrCommand+D',
getSubCommands: () => getRecentDatabases().map(switchDatabaseCommand), getSubCommands: () => getRecentDatabases().map(switchDatabaseCommand),
}); });

View File

@@ -97,7 +97,7 @@ registerCommand({
toolbarOrder: 2, toolbarOrder: 2,
name: 'Query', name: 'Query',
toolbarName: 'New query', toolbarName: 'New query',
keyText: 'Ctrl+Q', keyText: 'CtrlOrCommand+Q',
onClick: () => newQuery(), onClick: () => newQuery(),
}); });
@@ -321,7 +321,7 @@ registerCommand({
category: null, category: null,
isGroupCommand: true, isGroupCommand: true,
name: 'Save', name: 'Save',
keyText: 'Ctrl+S', keyText: 'CtrlOrCommand+S',
group: 'save', group: 'save',
}); });
@@ -330,7 +330,7 @@ registerCommand({
category: null, category: null,
isGroupCommand: true, isGroupCommand: true,
name: 'Save As', name: 'Save As',
keyText: 'Ctrl+Shift+S', keyText: 'CtrlOrCommand+Shift+S',
group: 'saveAs', group: 'saveAs',
}); });
@@ -339,7 +339,7 @@ registerCommand({
category: null, category: null,
isGroupCommand: true, isGroupCommand: true,
name: 'Undo', name: 'Undo',
keyText: 'Ctrl+Z', keyText: 'CtrlOrCommand+Z',
group: 'undo', group: 'undo',
}); });
@@ -348,7 +348,7 @@ registerCommand({
category: null, category: null,
isGroupCommand: true, isGroupCommand: true,
name: 'Redo', name: 'Redo',
keyText: 'Ctrl+Y', keyText: 'CtrlOrCommand+Y',
group: 'redo', group: 'redo',
}); });
@@ -356,7 +356,7 @@ registerCommand({
id: 'file.open', id: 'file.open',
category: 'File', category: 'File',
name: 'Open', name: 'Open',
keyText: 'Ctrl+O', keyText: 'CtrlOrCommand+O',
testEnabled: () => getElectron() != null, testEnabled: () => getElectron() != null,
onClick: openElectronFile, onClick: openElectronFile,
}); });
@@ -492,7 +492,7 @@ export function registerFileCommands({
group: 'save', group: 'save',
category, category,
name: 'Save', name: 'Save',
// keyText: 'Ctrl+S', // keyText: 'CtrlOrCommand+S',
icon: 'icon save', icon: 'icon save',
toolbar: true, toolbar: true,
isRelatedToTab: true, isRelatedToTab: true,
@@ -524,7 +524,7 @@ export function registerFileCommands({
icon: 'icon run', icon: 'icon run',
toolbar: true, toolbar: true,
isRelatedToTab: true, isRelatedToTab: true,
keyText: 'F5 | Ctrl+Enter', keyText: 'F5 | CtrlOrCommand+Enter',
testEnabled: () => testEnabled: () =>
getCurrentEditor() != null && getCurrentEditor() != null &&
!getCurrentEditor()?.isBusy() && !getCurrentEditor()?.isBusy() &&
@@ -548,8 +548,8 @@ export function registerFileCommands({
id: idPrefix + '.toggleComment', id: idPrefix + '.toggleComment',
category, category,
name: 'Toggle comment', name: 'Toggle comment',
keyText: 'Ctrl+/', keyText: 'CtrlOrCommand+/',
disableHandleKeyText: 'Ctrl+/', disableHandleKeyText: 'CtrlOrCommand+/',
testEnabled: () => getCurrentEditor() != null, testEnabled: () => getCurrentEditor() != null,
onClick: () => getCurrentEditor().toggleComment(), onClick: () => getCurrentEditor().toggleComment(),
}); });
@@ -560,14 +560,14 @@ export function registerFileCommands({
id: idPrefix + '.find', id: idPrefix + '.find',
category, category,
name: 'Find', name: 'Find',
keyText: 'Ctrl+F', keyText: 'CtrlOrCommand+F',
testEnabled: () => getCurrentEditor() != null, testEnabled: () => getCurrentEditor() != null,
onClick: () => getCurrentEditor().find(), onClick: () => getCurrentEditor().find(),
}); });
registerCommand({ registerCommand({
id: idPrefix + '.replace', id: idPrefix + '.replace',
category, category,
keyText: 'Ctrl+H', keyText: 'CtrlOrCommand+H',
name: 'Replace', name: 'Replace',
testEnabled: () => getCurrentEditor() != null, testEnabled: () => getCurrentEditor() != null,
onClick: () => getCurrentEditor().replace(), onClick: () => getCurrentEditor().replace(),
@@ -666,7 +666,7 @@ registerCommand({
id: 'app.zoomIn', id: 'app.zoomIn',
category: 'Application', category: 'Application',
name: 'Zoom in', name: 'Zoom in',
keyText: 'Ctrl+=', keyText: 'CtrlOrCommand+=',
testEnabled: () => getElectron() != null, testEnabled: () => getElectron() != null,
onClick: () => getElectron().send('window-action', 'zoomin'), onClick: () => getElectron().send('window-action', 'zoomin'),
}); });
@@ -675,7 +675,7 @@ registerCommand({
id: 'app.zoomOut', id: 'app.zoomOut',
category: 'Application', category: 'Application',
name: 'Zoom out', name: 'Zoom out',
keyText: 'Ctrl+-', keyText: 'CtrlOrCommand+-',
testEnabled: () => getElectron() != null, testEnabled: () => getElectron() != null,
onClick: () => getElectron().send('window-action', 'zoomout'), onClick: () => getElectron().send('window-action', 'zoomout'),
}); });

View File

@@ -13,7 +13,7 @@
id: 'collectionDataGrid.export', id: 'collectionDataGrid.export',
category: 'Data grid', category: 'Data grid',
name: 'Export', name: 'Export',
keyText: 'Ctrl+E', keyText: 'CtrlOrCommand+E',
icon: 'icon export', icon: 'icon export',
testEnabled: () => getCurrentEditor() != null, testEnabled: () => getCurrentEditor() != null,
onClick: () => getCurrentEditor().exportGrid(), onClick: () => getCurrentEditor().exportGrid(),

View File

@@ -35,7 +35,7 @@
id: 'dataGrid.toggleLeftPanel', id: 'dataGrid.toggleLeftPanel',
category: 'Data grid', category: 'Data grid',
name: 'Toggle left panel', name: 'Toggle left panel',
keyText: 'Ctrl+L', keyText: 'CtrlOrCommand+L',
testEnabled: () => getCurrentEditor() != null, testEnabled: () => getCurrentEditor() != null,
onClick: () => getCurrentEditor().toggleLeftPanel(), onClick: () => getCurrentEditor().toggleLeftPanel(),
}); });

View File

@@ -17,7 +17,7 @@
id: 'dataGrid.revertRowChanges', id: 'dataGrid.revertRowChanges',
category: 'Data grid', category: 'Data grid',
name: 'Revert row changes', name: 'Revert row changes',
keyText: 'Ctrl+R', keyText: 'CtrlOrCommand+R',
testEnabled: () => getCurrentDataGrid()?.getGrider()?.containsChanges, testEnabled: () => getCurrentDataGrid()?.getGrider()?.containsChanges,
onClick: () => getCurrentDataGrid().revertRowChanges(), onClick: () => getCurrentDataGrid().revertRowChanges(),
}); });
@@ -35,7 +35,7 @@
category: 'Data grid', category: 'Data grid',
name: 'Delete selected rows', name: 'Delete selected rows',
toolbarName: 'Delete row(s)', toolbarName: 'Delete row(s)',
keyText: 'Ctrl+Delete', keyText: 'CtrlOrCommand+Delete',
icon: 'icon minus', icon: 'icon minus',
testEnabled: () => getCurrentDataGrid()?.getGrider()?.editable, testEnabled: () => getCurrentDataGrid()?.getGrider()?.editable,
onClick: () => getCurrentDataGrid().deleteSelectedRows(), onClick: () => getCurrentDataGrid().deleteSelectedRows(),
@@ -56,7 +56,7 @@
id: 'dataGrid.setNull', id: 'dataGrid.setNull',
category: 'Data grid', category: 'Data grid',
name: 'Set NULL', name: 'Set NULL',
keyText: 'Ctrl+0', keyText: 'CtrlOrCommand+0',
testEnabled: () => getCurrentDataGrid()?.getGrider()?.editable, testEnabled: () => getCurrentDataGrid()?.getGrider()?.editable,
onClick: () => getCurrentDataGrid().setFixedValue(null), onClick: () => getCurrentDataGrid().setFixedValue(null),
}); });
@@ -97,8 +97,8 @@
id: 'dataGrid.copyToClipboard', id: 'dataGrid.copyToClipboard',
category: 'Data grid', category: 'Data grid',
name: 'Copy to clipboard', name: 'Copy to clipboard',
keyText: 'Ctrl+C', keyText: 'CtrlOrCommand+C',
disableHandleKeyText: 'Ctrl+C', disableHandleKeyText: 'CtrlOrCommand+C',
testEnabled: () => getCurrentDataGrid() != null, testEnabled: () => getCurrentDataGrid() != null,
onClick: () => getCurrentDataGrid().copyToClipboard(), onClick: () => getCurrentDataGrid().copyToClipboard(),
}); });
@@ -106,7 +106,7 @@
registerCommand({ registerCommand({
id: 'dataGrid.editJsonDocument', id: 'dataGrid.editJsonDocument',
category: 'Data grid', category: 'Data grid',
keyText: 'Ctrl+J', keyText: 'CtrlOrCommand+J',
name: 'Edit row as JSON document', name: 'Edit row as JSON document',
testEnabled: () => getCurrentDataGrid()?.editJsonEnabled(), testEnabled: () => getCurrentDataGrid()?.editJsonEnabled(),
onClick: () => getCurrentDataGrid().editJsonDocument(), onClick: () => getCurrentDataGrid().editJsonDocument(),
@@ -164,7 +164,7 @@
id: 'dataGrid.filterSelected', id: 'dataGrid.filterSelected',
category: 'Data grid', category: 'Data grid',
name: 'Filter selected value', name: 'Filter selected value',
keyText: 'Ctrl+Shift+F', keyText: 'CtrlOrCommand+Shift+F',
testEnabled: () => getCurrentDataGrid()?.getDisplay().filterable, testEnabled: () => getCurrentDataGrid()?.getDisplay().filterable,
onClick: () => getCurrentDataGrid().filterSelectedValue(), onClick: () => getCurrentDataGrid().filterSelectedValue(),
}); });
@@ -173,7 +173,7 @@
id: 'dataGrid.findColumn', id: 'dataGrid.findColumn',
category: 'Data grid', category: 'Data grid',
name: 'Find column', name: 'Find column',
keyText: 'Ctrl+F', keyText: 'CtrlOrCommand+F',
testEnabled: () => getCurrentDataGrid() != null, testEnabled: () => getCurrentDataGrid() != null,
getSubCommands: () => getCurrentDataGrid().buildFindMenu(), getSubCommands: () => getCurrentDataGrid().buildFindMenu(),
}); });
@@ -182,7 +182,7 @@
id: 'dataGrid.hideColumn', id: 'dataGrid.hideColumn',
category: 'Data grid', category: 'Data grid',
name: 'Hide column', name: 'Hide column',
keyText: 'Ctrl+H', keyText: 'CtrlOrCommand+H',
testEnabled: () => getCurrentDataGrid() != null, testEnabled: () => getCurrentDataGrid() != null,
onClick: () => getCurrentDataGrid().hideColumn(), onClick: () => getCurrentDataGrid().hideColumn(),
}); });
@@ -191,7 +191,7 @@
id: 'dataGrid.clearFilter', id: 'dataGrid.clearFilter',
category: 'Data grid', category: 'Data grid',
name: 'Clear filter', name: 'Clear filter',
keyText: 'Ctrl+I', keyText: 'CtrlOrCommand+I',
testEnabled: () => getCurrentDataGrid()?.clearFilterEnabled(), testEnabled: () => getCurrentDataGrid()?.clearFilterEnabled(),
onClick: () => getCurrentDataGrid().clearFilter(), onClick: () => getCurrentDataGrid().clearFilter(),
}); });
@@ -200,7 +200,7 @@
id: 'dataGrid.generateSqlFromData', id: 'dataGrid.generateSqlFromData',
category: 'Data grid', category: 'Data grid',
name: 'Generate SQL', name: 'Generate SQL',
keyText: 'Ctrl+G', keyText: 'CtrlOrCommand+G',
testEnabled: () => getCurrentDataGrid()?.generateSqlFromDataEnabled(), testEnabled: () => getCurrentDataGrid()?.generateSqlFromDataEnabled(),
onClick: () => getCurrentDataGrid().generateSqlFromData(), onClick: () => getCurrentDataGrid().generateSqlFromData(),
}); });
@@ -1433,7 +1433,7 @@
{ {
text: copyRowsFormatDefs[$copyRowsFormat].label, text: copyRowsFormatDefs[$copyRowsFormat].label,
onClick: () => copyToClipboardCore($copyRowsFormat), onClick: () => copyToClipboardCore($copyRowsFormat),
keyText: 'Ctrl+C', keyText: 'CtrlOrCommand+C',
tag: 'copy', tag: 'copy',
}, },
]; ];

View File

@@ -6,7 +6,7 @@
category: 'Data grid', category: 'Data grid',
name: 'Export', name: 'Export',
icon: 'icon export', icon: 'icon export',
keyText: 'Ctrl+E', keyText: 'CtrlOrCommand+E',
testEnabled: () => getCurrentEditor() != null, testEnabled: () => getCurrentEditor() != null,
onClick: () => getCurrentEditor().exportGrid(), onClick: () => getCurrentEditor().exportGrid(),
}); });

View File

@@ -22,7 +22,7 @@
category: 'Data grid', category: 'Data grid',
name: 'Export', name: 'Export',
icon: 'icon export', icon: 'icon export',
keyText: 'Ctrl+E', keyText: 'CtrlOrCommand+E',
testEnabled: () => getCurrentEditor() != null, testEnabled: () => getCurrentEditor() != null,
onClick: () => getCurrentEditor().exportGrid(), onClick: () => getCurrentEditor().exportGrid(),
}); });

View File

@@ -28,8 +28,8 @@
id: 'dataForm.copyToClipboard', id: 'dataForm.copyToClipboard',
category: 'Data form', category: 'Data form',
name: 'Copy to clipboard', name: 'Copy to clipboard',
keyText: 'Ctrl+C', keyText: 'CtrlOrCommand+C',
disableHandleKeyText: 'Ctrl+C', disableHandleKeyText: 'CtrlOrCommand+C',
testEnabled: () => getCurrentDataForm() != null, testEnabled: () => getCurrentDataForm() != null,
onClick: () => getCurrentDataForm().copyToClipboard(), onClick: () => getCurrentDataForm().copyToClipboard(),
}); });
@@ -38,7 +38,7 @@
id: 'dataForm.revertRowChanges', id: 'dataForm.revertRowChanges',
category: 'Data form', category: 'Data form',
name: 'Revert row changes', name: 'Revert row changes',
keyText: 'Ctrl+R', keyText: 'CtrlOrCommand+R',
testEnabled: () => getCurrentDataForm()?.getFormer()?.containsChanges, testEnabled: () => getCurrentDataForm()?.getFormer()?.containsChanges,
onClick: () => getCurrentDataForm().getFormer().revertRowChanges(), onClick: () => getCurrentDataForm().getFormer().revertRowChanges(),
}); });
@@ -47,7 +47,7 @@
id: 'dataForm.setNull', id: 'dataForm.setNull',
category: 'Data form', category: 'Data form',
name: 'Set NULL', name: 'Set NULL',
keyText: 'Ctrl+0', keyText: 'CtrlOrCommand+0',
testEnabled: () => getCurrentDataForm() != null, testEnabled: () => getCurrentDataForm() != null,
onClick: () => getCurrentDataForm().setFixedValue(null), onClick: () => getCurrentDataForm().setFixedValue(null),
}); });
@@ -88,7 +88,7 @@
id: 'dataForm.filterSelected', id: 'dataForm.filterSelected',
category: 'Data form', category: 'Data form',
name: 'Filter this value', name: 'Filter this value',
keyText: 'Ctrl+Shift+F', keyText: 'CtrlOrCommand+Shift+F',
testEnabled: () => getCurrentDataForm() != null, testEnabled: () => getCurrentDataForm() != null,
onClick: () => getCurrentDataForm().filterSelectedValue(), onClick: () => getCurrentDataForm().filterSelectedValue(),
}); });
@@ -105,7 +105,7 @@
id: 'dataForm.goToFirst', id: 'dataForm.goToFirst',
category: 'Data form', category: 'Data form',
name: 'First', name: 'First',
keyText: 'Ctrl+Home', keyText: 'CtrlOrCommand+Home',
toolbar: true, toolbar: true,
isRelatedToTab: true, isRelatedToTab: true,
icon: 'icon arrow-begin', icon: 'icon arrow-begin',
@@ -117,7 +117,7 @@
id: 'dataForm.goToPrevious', id: 'dataForm.goToPrevious',
category: 'Data form', category: 'Data form',
name: 'Previous', name: 'Previous',
keyText: 'Ctrl+ArrowUp', keyText: 'CtrlOrCommand+ArrowUp',
toolbar: true, toolbar: true,
isRelatedToTab: true, isRelatedToTab: true,
icon: 'icon arrow-left', icon: 'icon arrow-left',
@@ -129,7 +129,7 @@
id: 'dataForm.goToNext', id: 'dataForm.goToNext',
category: 'Data form', category: 'Data form',
name: 'Next', name: 'Next',
keyText: 'Ctrl+ArrowDown', keyText: 'CtrlOrCommand+ArrowDown',
toolbar: true, toolbar: true,
isRelatedToTab: true, isRelatedToTab: true,
icon: 'icon arrow-right', icon: 'icon arrow-right',
@@ -141,7 +141,7 @@
id: 'dataForm.goToLast', id: 'dataForm.goToLast',
category: 'Data form', category: 'Data form',
name: 'Last', name: 'Last',
keyText: 'Ctrl+End', keyText: 'CtrlOrCommand+End',
toolbar: true, toolbar: true,
isRelatedToTab: true, isRelatedToTab: true,
icon: 'icon arrow-end', icon: 'icon arrow-end',

View File

@@ -6,7 +6,7 @@
category: 'Data grid', category: 'Data grid',
icon: 'icon export', icon: 'icon export',
name: 'Export', name: 'Export',
keyText: 'Ctrl+E', keyText: 'CtrlOrCommand+E',
testEnabled: () => getCurrentEditor() != null, testEnabled: () => getCurrentEditor() != null,
onClick: () => getCurrentEditor().exportGrid(), onClick: () => getCurrentEditor().exportGrid(),
}); });

View File

@@ -42,6 +42,7 @@
import { commandsCustomized, visibleCommandPalette } from '../stores'; import { commandsCustomized, visibleCommandPalette } from '../stores';
import { prepareMenuItems } from '../utility/contextMenu'; import { prepareMenuItems } from '../utility/contextMenu';
import FontIcon from '../icons/FontIcon.svelte'; import FontIcon from '../icons/FontIcon.svelte';
import { formatKeyText } from '../utility/common';
export let items; export let items;
export let top; export let top;
@@ -115,7 +116,7 @@
<a on:click={e => handleClick(e, item)} class:disabled={item.disabled}> <a on:click={e => handleClick(e, item)} class:disabled={item.disabled}>
{item.text || item.label} {item.text || item.label}
{#if item.keyText} {#if item.keyText}
<span class="keyText">{item.keyText}</span> <span class="keyText">{formatKeyText(item.keyText)}</span>
{/if} {/if}
{#if item.submenu} {#if item.submenu}
<div class="menu-right"> <div class="menu-right">

View File

@@ -9,7 +9,7 @@
group: 'save', group: 'save',
category: 'Collection data', category: 'Collection data',
name: 'Save', name: 'Save',
// keyText: 'Ctrl+S', // keyText: 'CtrlOrCommand+S',
toolbar: true, toolbar: true,
isRelatedToTab: true, isRelatedToTab: true,
icon: 'icon save', icon: 'icon save',

View File

@@ -24,7 +24,7 @@
id: 'favoriteJsonEditor.preview', id: 'favoriteJsonEditor.preview',
name: 'Preview', name: 'Preview',
category: 'Favorite JSON editor', category: 'Favorite JSON editor',
keyText: 'F5 | Ctrl+Enter', keyText: 'F5 | CtrlOrCommand+Enter',
testEnabled: () => getCurrentEditor() != null, testEnabled: () => getCurrentEditor() != null,
onClick: () => getCurrentEditor().preview(), onClick: () => getCurrentEditor().preview(),
}); });

View File

@@ -6,7 +6,7 @@
group: 'save', group: 'save',
category: 'Table data', category: 'Table data',
name: 'Save', name: 'Save',
// keyText: 'Ctrl+S', // keyText: 'CtrlOrCommand+S',
toolbar: true, toolbar: true,
isRelatedToTab: true, isRelatedToTab: true,
icon: 'icon save', icon: 'icon save',

View File

@@ -20,7 +20,7 @@
icon: 'icon run', icon: 'icon run',
toolbar: true, toolbar: true,
isRelatedToTab: true, isRelatedToTab: true,
keyText: 'F5 | Ctrl+Enter', keyText: 'F5 | CtrlOrCommand+Enter',
testEnabled: () => getCurrentEditor() != null, testEnabled: () => getCurrentEditor() != null,
onClick: () => getCurrentEditor().preview(), onClick: () => getCurrentEditor().preview(),
}); });

View File

@@ -13,7 +13,7 @@
id: 'query.insertSqlJoin', id: 'query.insertSqlJoin',
category: 'Query', category: 'Query',
name: 'Insert SQL Join', name: 'Insert SQL Join',
keyText: 'Ctrl+J', keyText: 'CtrlOrCommand+J',
testEnabled: () => getCurrentEditor()?.isSqlEditor(), testEnabled: () => getCurrentEditor()?.isSqlEditor(),
onClick: () => getCurrentEditor().insertSqlJoin(), onClick: () => getCurrentEditor().insertSqlJoin(),
}); });
@@ -34,7 +34,7 @@
id: 'query.executeCurrent', id: 'query.executeCurrent',
category: 'Query', category: 'Query',
name: 'Execute current', name: 'Execute current',
keyText: 'Ctrl+Shift+Enter', keyText: 'CtrlOrCommand+Shift+Enter',
testEnabled: () => testEnabled: () =>
getCurrentEditor() != null && !getCurrentEditor()?.isBusy() && getCurrentEditor()?.hasConnection(), getCurrentEditor() != null && !getCurrentEditor()?.isBusy() && getCurrentEditor()?.hasConnection(),
onClick: () => getCurrentEditor().executeCurrent(), onClick: () => getCurrentEditor().executeCurrent(),

View File

@@ -6,7 +6,7 @@
group: 'save', group: 'save',
category: 'Table data', category: 'Table data',
name: 'Save', name: 'Save',
// keyText: 'Ctrl+S', // keyText: 'CtrlOrCommand+S',
toolbar: true, toolbar: true,
isRelatedToTab: true, isRelatedToTab: true,
icon: 'icon save', icon: 'icon save',

View File

@@ -39,3 +39,23 @@ export async function asyncFilter(arr, predicate) {
return arr.filter((_v, index) => results[index]); return arr.filter((_v, index) => results[index]);
} }
export function isMac() {
// @ts-ignore
const platform = navigator?.platform || navigator?.userAgentData?.platform || 'unknown'
return platform.toUpperCase().indexOf('MAC') >= 0;
}
export function formatKeyText(keyText: string): string {
if (isMac()) {
return keyText.replace('CtrlOrCommand+', '⌘ ').replace('Shift+', '⇧ ').replace('Alt+', '⌥ ')
}
return keyText.replace('CtrlOrCommand+', 'Ctrl+');
}
export function resolveKeyText(keyText: string): string {
if (isMac()) {
return keyText.replace('CtrlOrCommand+', 'Command+')
}
return keyText.replace('CtrlOrCommand+', 'Ctrl+');
}

View File

@@ -104,7 +104,7 @@
id: 'tabs.nextTab', id: 'tabs.nextTab',
category: 'Tabs', category: 'Tabs',
name: 'Next tab', name: 'Next tab',
keyText: 'Ctrl+Tab', keyText: 'CtrlOrCommand+Tab',
testEnabled: () => getOpenedTabs().filter(x => !x.closedTime).length >= 2, testEnabled: () => getOpenedTabs().filter(x => !x.closedTime).length >= 2,
onClick: () => { onClick: () => {
const tabs = get(openedTabs).filter(x => x.closedTime == null); const tabs = get(openedTabs).filter(x => x.closedTime == null);
@@ -124,7 +124,7 @@
id: 'tabs.closeTab', id: 'tabs.closeTab',
category: 'Tabs', category: 'Tabs',
name: 'Close tab', name: 'Close tab',
keyText: isElectronAvailable() ? 'Ctrl+W' : null, keyText: isElectronAvailable() ? 'CtrlOrCommand+W' : null,
testEnabled: () => getOpenedTabs().filter(x => !x.closedTime).length >= 1, testEnabled: () => getOpenedTabs().filter(x => !x.closedTime).length >= 1,
onClick: closeCurrentTab, onClick: closeCurrentTab,
}); });

View File

@@ -1,7 +1,9 @@
<script context="module"> <script context="module">
function getCommandTitle(command) { function getCommandTitle(command) {
let res = command.text; let res = command.text;
if (command.keyText || command.keyTextFromGroup) res += ` (${command.keyText || command.keyTextFromGroup})`; if (command.keyText || command.keyTextFromGroup) {
res += ` (${formatKeyText(command.keyText || command.keyTextFromGroup)})`;
}
return res; return res;
} }
</script> </script>
@@ -15,6 +17,7 @@
import getElectron from '../utility/getElectron'; import getElectron from '../utility/getElectron';
import { useFavorites } from '../utility/metadataLoaders'; import { useFavorites } from '../utility/metadataLoaders';
import ToolbarButton from '../buttons/ToolbarButton.svelte'; import ToolbarButton from '../buttons/ToolbarButton.svelte';
import { formatKeyText } from '../utility/common';
const electron = getElectron(); const electron = getElectron();