From 8a37b92bc83db229a788008c5a6a68cf51216ed2 Mon Sep 17 00:00:00 2001 From: Vijay Raghavan Aravamudhan Date: Sat, 14 Aug 2021 14:52:24 +0000 Subject: Refactoring: Url helpers (#1789) These changes are mainly to ensure that 'shell.open*' invocations are only in a single file. * Moved 'openPath' into the 'url-helpers' file. * Extract 'openExternalUrl' into a common location in 'url-helpers' This is done so that we can then apply vetting rules to ensure that there is no security concern as described in https://benjamin-altpeter.de/shell-openexternal-dangers/ --- src/lib/Menu.js | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) (limited to 'src/lib/Menu.js') diff --git a/src/lib/Menu.js b/src/lib/Menu.js index e4056e536..d34cfc4e6 100644 --- a/src/lib/Menu.js +++ b/src/lib/Menu.js @@ -1,7 +1,5 @@ -import { clipboard, shell } from 'electron'; -import { - app, Menu, dialog, systemPreferences, -} from '@electron/remote'; +import { clipboard } from 'electron'; +import { app, Menu, dialog, systemPreferences } from '@electron/remote'; import { autorun, observable } from 'mobx'; import { defineMessages } from 'react-intl'; import { CUSTOM_WEBSITE_RECIPE_ID, GITHUB_FERDI_URL, LIVE_API_FERDI_WEBSITE } from '../config'; @@ -15,6 +13,7 @@ import { todoActions } from '../features/todos/actions'; import { workspaceActions } from '../features/workspaces/actions'; import { workspaceStore } from '../features/workspaces/index'; import apiBase, { termsBase } from '../api/apiBase'; +import { openExternalUrl } from '../helpers/url-helpers'; const menuItems = defineMessages({ edit: { @@ -514,15 +513,15 @@ const _titleBarTemplateFactory = (intl, locked) => [ submenu: [ { label: intl.formatMessage(menuItems.learnMore), - click() { shell.openExternal(LIVE_API_FERDI_WEBSITE); }, + click() { openExternalUrl(LIVE_API_FERDI_WEBSITE, true); }, }, { label: intl.formatMessage(menuItems.changelog), - click() { shell.openExternal(`${GITHUB_FERDI_URL}/ferdi/blob/master/CHANGELOG.md`); }, + click() { openExternalUrl(`${GITHUB_FERDI_URL}/ferdi/blob/master/CHANGELOG.md`, true); }, }, { label: intl.formatMessage(menuItems.importExportData), - click() { shell.openExternal(apiBase(false)); }, + click() { openExternalUrl(apiBase(false), true); }, enabled: !locked, }, { @@ -540,18 +539,18 @@ const _titleBarTemplateFactory = (intl, locked) => [ }, { label: intl.formatMessage(menuItems.support), - click() { shell.openExternal(`${LIVE_API_FERDI_WEBSITE}/contact`); }, + click() { openExternalUrl(`${LIVE_API_FERDI_WEBSITE}/contact`, true); }, }, { type: 'separator', }, { label: intl.formatMessage(menuItems.tos), - click() { shell.openExternal(`${termsBase()}/terms`); }, + click() { openExternalUrl(`${termsBase()}/terms`, true); }, }, { label: intl.formatMessage(menuItems.privacy), - click() { shell.openExternal(`${termsBase()}/privacy`); }, + click() { openExternalUrl(`${termsBase()}/privacy`, true); }, }, ], }, -- cgit v1.2.3-54-g00ecf From 36e4d056edcb6b6df1a8950645dcbb324ab31ad8 Mon Sep 17 00:00:00 2001 From: Vijay A Date: Sun, 15 Aug 2021 10:36:19 +0530 Subject: fix: Fixed the 'Changelog' menu item to point to the correct branch --- src/lib/Menu.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/lib/Menu.js') diff --git a/src/lib/Menu.js b/src/lib/Menu.js index d34cfc4e6..86ac5ec9b 100644 --- a/src/lib/Menu.js +++ b/src/lib/Menu.js @@ -517,7 +517,7 @@ const _titleBarTemplateFactory = (intl, locked) => [ }, { label: intl.formatMessage(menuItems.changelog), - click() { openExternalUrl(`${GITHUB_FERDI_URL}/ferdi/blob/master/CHANGELOG.md`, true); }, + click() { openExternalUrl(`${GITHUB_FERDI_URL}/ferdi/blob/develop/CHANGELOG.md`, true); }, }, { label: intl.formatMessage(menuItems.importExportData), -- cgit v1.2.3-54-g00ecf From 59e503fdc61802bd9f9fac2c030c2192bd95c4ce Mon Sep 17 00:00:00 2001 From: Vijay A Date: Sun, 15 Aug 2021 20:27:45 +0530 Subject: fix: Fix issue with shortcut accelerators not working on macos where symbols were used for shift/alt keys --- src/components/services/tabs/TabItem.js | 6 +- src/environment.js | 18 +++--- .../workspaces/components/WorkspaceDrawerItem.js | 4 +- src/lib/Menu.js | 72 +++++++++++----------- src/webview/contextMenuBuilder.js | 16 ++--- 5 files changed, 58 insertions(+), 58 deletions(-) (limited to 'src/lib/Menu.js') diff --git a/src/components/services/tabs/TabItem.js b/src/components/services/tabs/TabItem.js index 6a6d2c8c5..6ad925670 100644 --- a/src/components/services/tabs/TabItem.js +++ b/src/components/services/tabs/TabItem.js @@ -10,7 +10,7 @@ import ms from 'ms'; import { observable, autorun } from 'mobx'; import ServiceModel from '../../../models/Service'; -import { shortcutKey } from '../../../environment'; +import { cmdOrCtrlShortcutKey } from '../../../environment'; const IS_SERVICE_DEBUGGING_ENABLED = ( localStorage.getItem('debug') || '' @@ -201,7 +201,7 @@ class TabItem extends Component { { label: intl.formatMessage(messages.reload), click: reload, - accelerator: `${shortcutKey()}+R`, + accelerator: `${cmdOrCtrlShortcutKey()}+R`, }, { label: intl.formatMessage(messages.edit), @@ -307,7 +307,7 @@ class TabItem extends Component { onClick={clickHandler} onContextMenu={() => menu.popup(getCurrentWindow())} data-tip={`${service.name} ${ - shortcutIndex <= 9 ? `(${shortcutKey(false)}+${shortcutIndex})` : '' + shortcutIndex <= 9 ? `(${cmdOrCtrlShortcutKey(false)}+${shortcutIndex})` : '' }`} > diff --git a/src/environment.js b/src/environment.js index f2a889be4..f8a51b207 100644 --- a/src/environment.js +++ b/src/environment.js @@ -79,17 +79,17 @@ export const is64Bit = osArch.match(/64/); const ctrlKey = isMac ? '⌘' : 'Ctrl'; const cmdKey = isMac ? 'Cmd' : 'Ctrl'; -export const altKey = isMac ? '⌥' : 'Alt'; -export const shiftKey = isMac ? '⇧' : 'Shift'; +export const altKey = (isAccelerator = true) => (!isAccelerator && isMac ? '⌥' : 'Alt'); +export const shiftKey = (isAccelerator = true) => (!isAccelerator && isMac ? '⇧' : 'Shift'); // Platform specific shortcut keys -export const shortcutKey = (isAccelerator = true) => (isAccelerator ? cmdKey : ctrlKey); -export const lockFerdiShortcutKey = (isAccelerator = true) => `${shortcutKey(isAccelerator)}+${shiftKey}+L`; -export const todosToggleShortcutKey = (isAccelerator = true) => `${shortcutKey(isAccelerator)}+T`; -export const workspaceToggleShortcutKey = (isAccelerator = true) => `${shortcutKey(isAccelerator)}+D`; -export const muteFerdiShortcutKey = (isAccelerator = true) => `${shortcutKey(isAccelerator)}+${shiftKey}+M`; -export const addNewServiceShortcutKey = (isAccelerator = true) => `${shortcutKey(isAccelerator)}+N`; -export const settingsShortcutKey = (isAccelerator = true) => `${shortcutKey(isAccelerator)}+${isMac ? ',' : 'P'}`; +export const cmdOrCtrlShortcutKey = (isAccelerator = true) => (isAccelerator ? cmdKey : ctrlKey); +export const lockFerdiShortcutKey = (isAccelerator = true) => `${cmdOrCtrlShortcutKey(isAccelerator)}+${shiftKey(isAccelerator)}+L`; +export const todosToggleShortcutKey = (isAccelerator = true) => `${cmdOrCtrlShortcutKey(isAccelerator)}+T`; +export const workspaceToggleShortcutKey = (isAccelerator = true) => `${cmdOrCtrlShortcutKey(isAccelerator)}+D`; +export const muteFerdiShortcutKey = (isAccelerator = true) => `${cmdOrCtrlShortcutKey(isAccelerator)}+${shiftKey(isAccelerator)}+M`; +export const addNewServiceShortcutKey = (isAccelerator = true) => `${cmdOrCtrlShortcutKey(isAccelerator)}+N`; +export const settingsShortcutKey = (isAccelerator = true) => `${cmdOrCtrlShortcutKey(isAccelerator)}+${isMac ? ',' : 'P'}`; let api; let wsApi; diff --git a/src/features/workspaces/components/WorkspaceDrawerItem.js b/src/features/workspaces/components/WorkspaceDrawerItem.js index fff607330..252158364 100644 --- a/src/features/workspaces/components/WorkspaceDrawerItem.js +++ b/src/features/workspaces/components/WorkspaceDrawerItem.js @@ -5,7 +5,7 @@ import { observer } from 'mobx-react'; import injectSheet from 'react-jss'; import classnames from 'classnames'; import { defineMessages, intlShape } from 'react-intl'; -import { altKey, shortcutKey } from '../../../environment'; +import { altKey, cmdOrCtrlShortcutKey } from '../../../environment'; const messages = defineMessages({ noServicesAddedYet: { @@ -125,7 +125,7 @@ class WorkspaceDrawerItem extends Component { onContextMenuEditClick && contextMenu.popup(getCurrentWindow()) } data-tip={`${ - shortcutIndex <= 9 ? `(${shortcutKey(false)}+${altKey}+${shortcutIndex})` : '' + shortcutIndex <= 9 ? `(${cmdOrCtrlShortcutKey(false)}+${altKey(false)}+${shortcutIndex})` : '' }`} > [ { label: intl.formatMessage(menuItems.edit), - accelerator: `${altKey}+E`, + accelerator: `${altKey()}+E`, submenu: [ { label: intl.formatMessage(menuItems.undo), @@ -332,22 +332,22 @@ const _titleBarTemplateFactory = (intl, locked) => [ }, { label: intl.formatMessage(menuItems.cut), - accelerator: `${shortcutKey()}+X`, + accelerator: `${cmdOrCtrlShortcutKey()}+X`, role: 'cut', }, { label: intl.formatMessage(menuItems.copy), - accelerator: `${shortcutKey()}+C`, + accelerator: `${cmdOrCtrlShortcutKey()}+C`, role: 'copy', }, { label: intl.formatMessage(menuItems.paste), - accelerator: `${shortcutKey()}+V`, + accelerator: `${cmdOrCtrlShortcutKey()}+V`, role: 'paste', }, { label: intl.formatMessage(menuItems.pasteAndMatchStyle), - accelerator: `${shortcutKey()}+${shiftKey}+V`, // Override the accelerator since this adds new key combo in macos + accelerator: `${cmdOrCtrlShortcutKey()}+${shiftKey()}+V`, // Override the accelerator since this adds new key combo in macos role: 'pasteAndMatchStyle', click() { getActiveWebview().pasteAndMatchStyle(); @@ -359,14 +359,14 @@ const _titleBarTemplateFactory = (intl, locked) => [ }, { label: intl.formatMessage(menuItems.selectAll), - accelerator: `${shortcutKey()}+A`, + accelerator: `${cmdOrCtrlShortcutKey()}+A`, role: 'selectall', }, ], }, { label: intl.formatMessage(menuItems.view), - accelerator: `${altKey}+V`, + accelerator: `${altKey()}+V`, visible: !locked, submenu: [ { @@ -374,7 +374,7 @@ const _titleBarTemplateFactory = (intl, locked) => [ }, { label: intl.formatMessage(menuItems.openQuickSwitch), - accelerator: `${shortcutKey()}+S`, + accelerator: `${cmdOrCtrlShortcutKey()}+S`, click() { window.ferdi.features.quickSwitch.state.isModalVisible = true; }, @@ -384,7 +384,7 @@ const _titleBarTemplateFactory = (intl, locked) => [ }, { label: intl.formatMessage(menuItems.findInPage), - accelerator: `${shortcutKey()}+F`, + accelerator: `${cmdOrCtrlShortcutKey()}+F`, click() { // Check if there is a service active if (!window.ferdi.stores.services.active) return; @@ -405,14 +405,14 @@ const _titleBarTemplateFactory = (intl, locked) => [ }, { label: intl.formatMessage(menuItems.back), - accelerator: `${shortcutKey()}+Left`, + accelerator: `${cmdOrCtrlShortcutKey()}+Left`, click() { getActiveWebview().goBack(); }, }, { label: intl.formatMessage(menuItems.forward), - accelerator: `${shortcutKey()}+Right`, + accelerator: `${cmdOrCtrlShortcutKey()}+Right`, click() { getActiveWebview().goForward(); }, @@ -422,7 +422,7 @@ const _titleBarTemplateFactory = (intl, locked) => [ }, { label: intl.formatMessage(menuItems.resetZoom), - accelerator: `${shortcutKey()}+0`, + accelerator: `${cmdOrCtrlShortcutKey()}+0`, role: 'resetZoom', click() { getActiveWebview().setZoomLevel(0); @@ -430,7 +430,7 @@ const _titleBarTemplateFactory = (intl, locked) => [ }, { label: intl.formatMessage(menuItems.zoomIn), - accelerator: `${shortcutKey()}+plus`, + accelerator: `${cmdOrCtrlShortcutKey()}+plus`, role: 'zoomIn', click() { const activeService = getActiveWebview(); @@ -442,7 +442,7 @@ const _titleBarTemplateFactory = (intl, locked) => [ }, { label: intl.formatMessage(menuItems.zoomOut), - accelerator: `${shortcutKey()}+-`, + accelerator: `${cmdOrCtrlShortcutKey()}+-`, role: 'zoomOut', click() { const activeService = getActiveWebview(); @@ -462,7 +462,7 @@ const _titleBarTemplateFactory = (intl, locked) => [ { label: intl.formatMessage(menuItems.toggleDarkMode), type: 'checkbox', - accelerator: `${shortcutKey()}+${shiftKey}+D`, + accelerator: `${cmdOrCtrlShortcutKey()}+${shiftKey()}+D`, checked: window.ferdi.stores.settings.app.darkMode, click: () => { window.ferdi.actions.settings.update({ @@ -477,13 +477,13 @@ const _titleBarTemplateFactory = (intl, locked) => [ }, { label: intl.formatMessage(menuItems.services), - accelerator: `${altKey}+S`, + accelerator: `${altKey()}+S`, visible: !locked, submenu: [], }, { label: intl.formatMessage(menuItems.workspaces), - accelerator: `${altKey}+W`, + accelerator: `${altKey()}+W`, submenu: [], visible: !locked && workspaceStore.isFeatureEnabled, }, @@ -508,7 +508,7 @@ const _titleBarTemplateFactory = (intl, locked) => [ }, { label: intl.formatMessage(menuItems.help), - accelerator: `${altKey}+H`, + accelerator: `${altKey()}+H`, role: 'help', submenu: [ { @@ -611,13 +611,13 @@ export default class FranzMenu { type: 'separator', }, { label: intl.formatMessage(menuItems.toggleDevTools), - accelerator: `${shortcutKey()}+${altKey}+I`, + accelerator: `${cmdOrCtrlShortcutKey()}+${altKey()}+I`, click: (menuItem, browserWindow) => { browserWindow.webContents.toggleDevTools(); }, }, { label: intl.formatMessage(menuItems.toggleServiceDevTools), - accelerator: `${shortcutKey()}+${shiftKey}+${altKey}+I`, + accelerator: `${cmdOrCtrlShortcutKey()}+${shiftKey()}+${altKey()}+I`, click: () => { this.actions.service.openDevToolsForActiveService(); }, @@ -627,7 +627,7 @@ export default class FranzMenu { if (this.stores.features.features.isTodosEnabled) { tpl[1].submenu.push({ label: intl.formatMessage(menuItems.toggleTodosDevTools), - accelerator: `${shortcutKey()}+${shiftKey}+${altKey}+O`, + accelerator: `${cmdOrCtrlShortcutKey()}+${shiftKey()}+${altKey()}+O`, click: () => { const webview = document.querySelector('#todos-panel webview'); if (webview) this.actions.todos.openDevTools(); @@ -638,7 +638,7 @@ export default class FranzMenu { tpl[1].submenu.unshift({ label: intl.formatMessage(menuItems.reloadService), id: 'reloadService', // TODO: needed? - accelerator: `${shortcutKey()}+R`, + accelerator: `${cmdOrCtrlShortcutKey()}+R`, click: () => { if (this.stores.user.isLoggedIn && this.stores.services.enabled.length > 0) { @@ -653,13 +653,13 @@ export default class FranzMenu { }, }, { label: intl.formatMessage(menuItems.reloadFerdi), - accelerator: `${shortcutKey()}+${shiftKey}+R`, + accelerator: `${cmdOrCtrlShortcutKey()}+${shiftKey()}+R`, click: () => { window.location.reload(); }, }, { label: intl.formatMessage(menuItems.reloadTodos), - accelerator: `${shortcutKey()}+${shiftKey}+${altKey}+R`, + accelerator: `${cmdOrCtrlShortcutKey()}+${shiftKey()}+${altKey()}+R`, click: () => { this.actions.todos.reload(); }, @@ -715,7 +715,7 @@ export default class FranzMenu { tpl.unshift({ label: isMac ? app.name : intl.formatMessage(menuItems.file), - accelerator: `${altKey}+F`, + accelerator: `${altKey()}+F`, submenu: [ { label: intl.formatMessage(menuItems.about), @@ -831,7 +831,7 @@ export default class FranzMenu { { label: intl.formatMessage(menuItems.quit), role: 'quit', - accelerator: `${shortcutKey()}+Q`, + accelerator: `${cmdOrCtrlShortcutKey()}+Q`, click() { app.quit(); }, @@ -882,22 +882,22 @@ export default class FranzMenu { type: 'separator', }, { label: intl.formatMessage(menuItems.activateNextService), - accelerator: `${shortcutKey()}+tab`, + accelerator: `${cmdOrCtrlShortcutKey()}+tab`, click: () => this.actions.service.setActiveNext(), visible: !cmdAltShortcutsVisibile, }, { label: intl.formatMessage(menuItems.activateNextService), - accelerator: `${shortcutKey()}+${altKey}+right`, + accelerator: `${cmdOrCtrlShortcutKey()}+${altKey()}+right`, click: () => this.actions.service.setActiveNext(), visible: cmdAltShortcutsVisibile, }, { label: intl.formatMessage(menuItems.activatePreviousService), - accelerator: `${shortcutKey()}+${shiftKey}+tab`, + accelerator: `${cmdOrCtrlShortcutKey()}+${shiftKey()}+tab`, click: () => this.actions.service.setActivePrev(), visible: !cmdAltShortcutsVisibile, }, { label: intl.formatMessage(menuItems.activatePreviousService), - accelerator: `${shortcutKey()}+${altKey}+left`, + accelerator: `${cmdOrCtrlShortcutKey()}+${altKey()}+left`, click: () => this.actions.service.setActivePrev(), visible: cmdAltShortcutsVisibile, }, { @@ -912,7 +912,7 @@ export default class FranzMenu { services.allDisplayed.forEach((service, i) => (menu.push({ label: this._getServiceName(service), - accelerator: i < 9 ? `${shortcutKey()}+${i + 1}` : null, + accelerator: i < 9 ? `${cmdOrCtrlShortcutKey()}+${i + 1}` : null, type: 'radio', checked: service.isActive, click: () => { @@ -929,7 +929,7 @@ export default class FranzMenu { type: 'separator', }, { label: intl.formatMessage(menuItems.serviceGoHome), - accelerator: `${shortcutKey()}+${shiftKey}+H`, + accelerator: `${cmdOrCtrlShortcutKey()}+${shiftKey()}+H`, click: () => this.actions.service.reloadActive(), }); } @@ -945,7 +945,7 @@ export default class FranzMenu { // Add new workspace item: menu.push({ label: intl.formatMessage(menuItems.addNewWorkspace), - accelerator: `${shortcutKey()}+${shiftKey}+N`, + accelerator: `${cmdOrCtrlShortcutKey()}+${shiftKey()}+N`, click: () => { workspaceActions.openWorkspaceSettings(); }, @@ -974,7 +974,7 @@ export default class FranzMenu { // Default workspace menu.push({ label: intl.formatMessage(menuItems.defaultWorkspace), - accelerator: `${shortcutKey()}+${altKey}+0`, + accelerator: `${cmdOrCtrlShortcutKey()}+${altKey()}+0`, type: 'radio', checked: !activeWorkspace, click: () => { @@ -985,7 +985,7 @@ export default class FranzMenu { // Workspace items workspaces.forEach((workspace, i) => menu.push({ label: workspace.name, - accelerator: i < 9 ? `${shortcutKey()}+${altKey}+${i + 1}` : null, + accelerator: i < 9 ? `${cmdOrCtrlShortcutKey()}+${altKey()}+${i + 1}` : null, type: 'radio', checked: activeWorkspace ? workspace.id === activeWorkspace.id : false, click: () => { diff --git a/src/webview/contextMenuBuilder.js b/src/webview/contextMenuBuilder.js index 126fa4086..8c39e6d04 100644 --- a/src/webview/contextMenuBuilder.js +++ b/src/webview/contextMenuBuilder.js @@ -8,7 +8,7 @@ */ import { clipboard, ipcRenderer, nativeImage } from 'electron'; import { Menu, MenuItem } from '@electron/remote'; -import { shortcutKey, isMac } from '../environment'; +import { cmdOrCtrlShortcutKey, isMac } from '../environment'; import { SEARCH_ENGINE_NAMES, SEARCH_ENGINE_URLS } from '../config'; import { openExternalUrl } from '../helpers/url-helpers'; @@ -375,7 +375,7 @@ module.exports = class ContextMenuBuilder { const webContents = this.getWebContents(); menu.append(new MenuItem({ label: this.stringTable.cut(), - accelerator: `${shortcutKey()}+X`, + accelerator: `${cmdOrCtrlShortcutKey()}+X`, enabled: menuInfo.editFlags.canCut, click: () => webContents.cut(), })); @@ -390,7 +390,7 @@ module.exports = class ContextMenuBuilder { const webContents = this.getWebContents(); menu.append(new MenuItem({ label: this.stringTable.copy(), - accelerator: `${shortcutKey()}+C`, + accelerator: `${cmdOrCtrlShortcutKey()}+C`, enabled: menuInfo.editFlags.canCopy, click: () => webContents.copy(), })); @@ -405,7 +405,7 @@ module.exports = class ContextMenuBuilder { const webContents = this.getWebContents(); menu.append(new MenuItem({ label: this.stringTable.paste(), - accelerator: `${shortcutKey()}+V`, + accelerator: `${cmdOrCtrlShortcutKey()}+V`, enabled: menuInfo.editFlags.canPaste, click: () => webContents.paste(), })); @@ -423,7 +423,7 @@ module.exports = class ContextMenuBuilder { menu.append( new MenuItem({ label: this.stringTable.pasteAndMatchStyle(), - accelerator: `${shortcutKey()}+Shift+V`, + accelerator: `${cmdOrCtrlShortcutKey()}+Shift+V`, click: () => webContents.pasteAndMatchStyle(), }), ); @@ -489,7 +489,7 @@ module.exports = class ContextMenuBuilder { const webContents = this.getWebContents(); menu.append(new MenuItem({ label: this.stringTable.goBack(), - accelerator: `${shortcutKey()}+left`, + accelerator: `${cmdOrCtrlShortcutKey()}+left`, enabled: webContents.canGoBack(), click: () => webContents.goBack(), })); @@ -504,7 +504,7 @@ module.exports = class ContextMenuBuilder { const webContents = this.getWebContents(); menu.append(new MenuItem({ label: this.stringTable.goForward(), - accelerator: `${shortcutKey()}+right`, + accelerator: `${cmdOrCtrlShortcutKey()}+right`, enabled: webContents.canGoForward(), click: () => webContents.goForward(), })); @@ -535,7 +535,7 @@ module.exports = class ContextMenuBuilder { const baseURL = new URL(menuInfo.pageURL); menu.append(new MenuItem({ label: this.stringTable.goToHomePage(), - accelerator: `${shortcutKey()}+Home`, + accelerator: `${cmdOrCtrlShortcutKey()}+Home`, enabled: true, click: () => { // webContents.loadURL(baseURL.origin); -- cgit v1.2.3-54-g00ecf