diff --git a/package-lock.json b/package-lock.json index 2b2607a..9c76d4f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6471,6 +6471,37 @@ "jimp": "^0.2.27" } }, + "electron-is-accelerator": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/electron-is-accelerator/-/electron-is-accelerator-0.1.2.tgz", + "integrity": "sha1-UJ5RDCala1Xhf4Y6SwThEYRqsns=" + }, + "electron-localshortcut": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/electron-localshortcut/-/electron-localshortcut-3.1.0.tgz", + "integrity": "sha512-MgL/j5jdjW7iA0R6cI7S045B0GlKXWM1FjjujVPjlrmyXRa6yH0bGSaIAfxXAF9tpJm3pLEiQzerYHkRh9JG/A==", + "requires": { + "debug": "^2.6.8", + "electron-is-accelerator": "^0.1.0", + "keyboardevent-from-electron-accelerator": "^1.1.0", + "keyboardevents-areequal": "^0.2.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, "electron-osx-sign": { "version": "0.4.11", "resolved": "https://registry.npmjs.org/electron-osx-sign/-/electron-osx-sign-0.4.11.tgz", @@ -10391,6 +10422,16 @@ "integrity": "sha1-edk9LTM2PW/dKXCzNdkUGtWR15s=", "dev": true }, + "keyboardevent-from-electron-accelerator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/keyboardevent-from-electron-accelerator/-/keyboardevent-from-electron-accelerator-1.1.0.tgz", + "integrity": "sha512-VDC4vKWGrR3VgIKCE4CsXnvObGgP8C2idnTKEMUkuEuvDGE1GEBX9FtNdJzrD00iQlhI3xFxRaeItsUmlERVng==" + }, + "keyboardevents-areequal": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/keyboardevents-areequal/-/keyboardevents-areequal-0.2.2.tgz", + "integrity": "sha512-Nv+Kr33T0mEjxR500q+I6IWisOQ0lK1GGOncV0kWE6n4KFmpcu7RUX5/2B0EUtX51Cb0HjZ9VJsSY3u4cBa0kw==" + }, "keyv": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", diff --git a/package.json b/package.json index 6fc30b6..0894c90 100644 --- a/package.json +++ b/package.json @@ -26,6 +26,7 @@ "postuninstall": "electron-builder install-app-deps" }, "dependencies": { + "electron-localshortcut": "^3.1.0", "electron-window-state": "^5.0.3", "is-url-relative-without-domain": "^2.0.0", "lodash-id": "^0.14.0", diff --git a/src/App.vue b/src/App.vue index eaabac7..e2eb71a 100644 --- a/src/App.vue +++ b/src/App.vue @@ -14,6 +14,7 @@ import AppLayout from '@/components/AppLayout.vue'; import TabsList from '@/components/TabsList.vue'; import WindowDimmer from '@/components/WindowDimmer.vue'; +import Events from '@/utils/mixinEvents'; import NotificationSchedule from '@/utils/mixinNotificationSchedule'; export default { @@ -22,6 +23,9 @@ export default { TabsList, WindowDimmer, }, - mixins: [NotificationSchedule], + mixins: [ + Events, + NotificationSchedule, + ], }; diff --git a/src/background.js b/src/background.js index 3068773..2267aa3 100644 --- a/src/background.js +++ b/src/background.js @@ -1,3 +1,4 @@ +import electronLocalshortcut from 'electron-localshortcut'; import windowStateKeeper from 'electron-window-state'; import * as path from 'path'; import { format as formatUrl } from 'url'; @@ -114,6 +115,8 @@ app.on('ready', async () => { } mainWindow = createMainWindow(); + electronLocalshortcut.register('CmdOrCtrl+T', () => app.emit('app-router-goto-tabs-create')); + Menu.setApplicationMenu(Menu.buildFromTemplate([ { label: app.getName(), @@ -127,7 +130,18 @@ app.on('ready', async () => { { type: 'separator' }, { role: 'quit' }, ], - }, { + }, + { + label: 'File', + submenu: [ + { + label: 'New Tab', + accelerator: 'CmdOrCtrl+N', + click: () => app.emit('app-router-goto-tabs-create'), + }, + ], + }, + { label: 'Edit', submenu: [ { role: 'undo' }, diff --git a/src/components/TabsNav.vue b/src/components/TabsNav.vue index ec445c2..4bc310e 100644 --- a/src/components/TabsNav.vue +++ b/src/components/TabsNav.vue @@ -60,13 +60,6 @@ export default { return this.$store.getters['Settings/byKey']('navigation.displayTabLabels'); }, }, - created() { - const { app } = this.$electron.remote; - const r = this.$router; - app.on('app-router-goto-settings', () => r.push({ name: 'settings' })); - app.on('app-router-goto-welcome', () => r.push({ name: 'welcome' })); - app.on('app-router-goto-changelog', () => r.push({ name: 'changelog' })); - }, }; diff --git a/src/utils/mixinEvents.js b/src/utils/mixinEvents.js new file mode 100644 index 0000000..1dfc074 --- /dev/null +++ b/src/utils/mixinEvents.js @@ -0,0 +1,11 @@ +export default { + created() { + const { app } = this.$electron.remote; + const r = this.$router; + + app.on('app-router-goto-tabs-create', () => r.push({ name: 'tabs-create' })); + app.on('app-router-goto-settings', () => r.push({ name: 'settings' })); + app.on('app-router-goto-welcome', () => r.push({ name: 'welcome' })); + app.on('app-router-goto-changelog', () => r.push({ name: 'changelog' })); + }, +};