mirror of
https://github.com/zadam/trilium.git
synced 2025-06-06 18:08:33 +02:00
support global shortcuts with global: prefix
This commit is contained in:
parent
00c295e4bf
commit
0e5028acd3
42
electron.js
42
electron.js
@ -8,6 +8,7 @@ const cls = require('./src/services/cls');
|
|||||||
const url = require("url");
|
const url = require("url");
|
||||||
const port = require('./src/services/port');
|
const port = require('./src/services/port');
|
||||||
const env = require('./src/services/env');
|
const env = require('./src/services/env');
|
||||||
|
const keyboardActionsService = require('./src/services/keyboard_actions');
|
||||||
const appIconService = require('./src/services/app_icon');
|
const appIconService = require('./src/services/app_icon');
|
||||||
const windowStateKeeper = require('electron-window-state');
|
const windowStateKeeper = require('electron-window-state');
|
||||||
|
|
||||||
@ -95,21 +96,42 @@ app.on('activate', () => {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
async function registerGlobalShortcuts() {
|
||||||
|
const allActions = await keyboardActionsService.getKeyboardActions();
|
||||||
|
|
||||||
|
for (const action of allActions) {
|
||||||
|
if (!action.effectiveShortcuts) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (const shortcut of action.effectiveShortcuts) {
|
||||||
|
if (shortcut.startsWith('global:')) {
|
||||||
|
const translatedShortcut = shortcut.substr(7);
|
||||||
|
|
||||||
|
const result = globalShortcut.register(translatedShortcut, cls.wrap(async () => {
|
||||||
|
// window may be hidden / not in focus
|
||||||
|
mainWindow.focus();
|
||||||
|
|
||||||
|
mainWindow.webContents.send('globalShortcut', action.actionName);
|
||||||
|
}));
|
||||||
|
|
||||||
|
if (result) {
|
||||||
|
log.info(`Registered global shortcut ${translatedShortcut} for action ${action.actionName}`);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
log.info(`Could not register global shortcut ${translatedShortcut}`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
app.on('ready', async () => {
|
app.on('ready', async () => {
|
||||||
app.setAppUserModelId('com.github.zadam.trilium');
|
app.setAppUserModelId('com.github.zadam.trilium');
|
||||||
|
|
||||||
mainWindow = await createMainWindow();
|
mainWindow = await createMainWindow();
|
||||||
|
|
||||||
const result = globalShortcut.register('CommandOrControl+Alt+P', cls.wrap(async () => {
|
registerGlobalShortcuts();
|
||||||
// window may be hidden / not in focus
|
|
||||||
mainWindow.focus();
|
|
||||||
|
|
||||||
mainWindow.webContents.send('create-day-sub-note');
|
|
||||||
}));
|
|
||||||
|
|
||||||
if (!result) {
|
|
||||||
log.error("Could not register global shortcut CTRL+ALT+P");
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
app.on('will-quit', () => {
|
app.on('will-quit', () => {
|
||||||
|
213
package-lock.json
generated
213
package-lock.json
generated
@ -2680,14 +2680,22 @@
|
|||||||
"integrity": "sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA=="
|
"integrity": "sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA=="
|
||||||
},
|
},
|
||||||
"electron": {
|
"electron": {
|
||||||
"version": "8.0.0-beta.3",
|
"version": "6.0.12",
|
||||||
"resolved": "https://registry.npmjs.org/electron/-/electron-8.0.0-beta.3.tgz",
|
"resolved": "https://registry.npmjs.org/electron/-/electron-6.0.12.tgz",
|
||||||
"integrity": "sha512-MvzV3ApP5b+xGJXMPLaQkNSkggd0OixqRJvR1NvR/j4ZvvsEvL4K+ytT0PugvvOC7odgmsh2bmj0JCJZEg64eA==",
|
"integrity": "sha512-70ODZa1RP6K0gE9IV9YLCXPSyhLjXksCuYSSPb3MljbfwfHo5uE6X0CGxzm+54YuPdE2e7EPnWZxOOsJYrS5iQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"@electron/get": "^1.0.1",
|
"@types/node": "^10.12.18",
|
||||||
"@types/node": "^12.0.12",
|
"electron-download": "^4.1.0",
|
||||||
"extract-zip": "^1.0.3"
|
"extract-zip": "^1.0.3"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"@types/node": {
|
||||||
|
"version": "10.17.5",
|
||||||
|
"resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.5.tgz",
|
||||||
|
"integrity": "sha512-RElZIr/7JreF1eY6oD5RF3kpmdcreuQPjg5ri4oQ5g9sq7YWU8HkfB3eH8GwAwxf5OaCh0VPi7r4N/yoTGelrA==",
|
||||||
|
"dev": true
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"electron-builder": {
|
"electron-builder": {
|
||||||
@ -2837,6 +2845,57 @@
|
|||||||
"unused-filename": "^1.0.0"
|
"unused-filename": "^1.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"electron-download": {
|
||||||
|
"version": "4.1.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/electron-download/-/electron-download-4.1.1.tgz",
|
||||||
|
"integrity": "sha512-FjEWG9Jb/ppK/2zToP+U5dds114fM1ZOJqMAR4aXXL5CvyPE9fiqBK/9YcwC9poIFQTEJk/EM/zyRwziziRZrg==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"debug": "^3.0.0",
|
||||||
|
"env-paths": "^1.0.0",
|
||||||
|
"fs-extra": "^4.0.1",
|
||||||
|
"minimist": "^1.2.0",
|
||||||
|
"nugget": "^2.0.1",
|
||||||
|
"path-exists": "^3.0.0",
|
||||||
|
"rc": "^1.2.1",
|
||||||
|
"semver": "^5.4.1",
|
||||||
|
"sumchecker": "^2.0.2"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"debug": {
|
||||||
|
"version": "3.2.6",
|
||||||
|
"resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
|
||||||
|
"integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"ms": "^2.1.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"fs-extra": {
|
||||||
|
"version": "4.0.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz",
|
||||||
|
"integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"graceful-fs": "^4.1.2",
|
||||||
|
"jsonfile": "^4.0.0",
|
||||||
|
"universalify": "^0.1.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"ms": {
|
||||||
|
"version": "2.1.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
|
||||||
|
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"semver": {
|
||||||
|
"version": "5.7.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
|
||||||
|
"integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
|
||||||
|
"dev": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"electron-find": {
|
"electron-find": {
|
||||||
"version": "1.0.6",
|
"version": "1.0.6",
|
||||||
"resolved": "https://registry.npmjs.org/electron-find/-/electron-find-1.0.6.tgz",
|
"resolved": "https://registry.npmjs.org/electron-find/-/electron-find-1.0.6.tgz",
|
||||||
@ -3266,6 +3325,12 @@
|
|||||||
"resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz",
|
"resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz",
|
||||||
"integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w=="
|
"integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w=="
|
||||||
},
|
},
|
||||||
|
"env-paths": {
|
||||||
|
"version": "1.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/env-paths/-/env-paths-1.0.0.tgz",
|
||||||
|
"integrity": "sha1-QWgTO0K7BcOKNbGuQ5fIKYqzaeA=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
"error-ex": {
|
"error-ex": {
|
||||||
"version": "1.3.2",
|
"version": "1.3.2",
|
||||||
"resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
|
"resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
|
||||||
@ -7071,6 +7136,32 @@
|
|||||||
"boolbase": "~1.0.0"
|
"boolbase": "~1.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"nugget": {
|
||||||
|
"version": "2.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/nugget/-/nugget-2.0.1.tgz",
|
||||||
|
"integrity": "sha1-IBCVpIfhrTYIGzQy+jytpPjQcbA=",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"debug": "^2.1.3",
|
||||||
|
"minimist": "^1.1.0",
|
||||||
|
"pretty-bytes": "^1.0.2",
|
||||||
|
"progress-stream": "^1.1.0",
|
||||||
|
"request": "^2.45.0",
|
||||||
|
"single-line-log": "^1.1.2",
|
||||||
|
"throttleit": "0.0.2"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"debug": {
|
||||||
|
"version": "2.6.9",
|
||||||
|
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
|
||||||
|
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"ms": "2.0.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"number-is-nan": {
|
"number-is-nan": {
|
||||||
"version": "1.0.1",
|
"version": "1.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
|
||||||
@ -8281,6 +8372,16 @@
|
|||||||
"resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz",
|
||||||
"integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks="
|
"integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks="
|
||||||
},
|
},
|
||||||
|
"pretty-bytes": {
|
||||||
|
"version": "1.0.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-1.0.4.tgz",
|
||||||
|
"integrity": "sha1-CiLoIQYJrTVUL4yNXSFZr/B1HIQ=",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"get-stdin": "^4.0.1",
|
||||||
|
"meow": "^3.1.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"process": {
|
"process": {
|
||||||
"version": "0.5.2",
|
"version": "0.5.2",
|
||||||
"resolved": "https://registry.npmjs.org/process/-/process-0.5.2.tgz",
|
"resolved": "https://registry.npmjs.org/process/-/process-0.5.2.tgz",
|
||||||
@ -8291,6 +8392,67 @@
|
|||||||
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
|
||||||
"integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
|
"integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
|
||||||
},
|
},
|
||||||
|
"progress-stream": {
|
||||||
|
"version": "1.2.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/progress-stream/-/progress-stream-1.2.0.tgz",
|
||||||
|
"integrity": "sha1-LNPP6jO6OonJwSHsM0er6asSX3c=",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"speedometer": "~0.1.2",
|
||||||
|
"through2": "~0.2.3"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"isarray": {
|
||||||
|
"version": "0.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
|
||||||
|
"integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"object-keys": {
|
||||||
|
"version": "0.4.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz",
|
||||||
|
"integrity": "sha1-KKaq50KN0sOpLz2V8hM13SBOAzY=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"readable-stream": {
|
||||||
|
"version": "1.1.14",
|
||||||
|
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
|
||||||
|
"integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"core-util-is": "~1.0.0",
|
||||||
|
"inherits": "~2.0.1",
|
||||||
|
"isarray": "0.0.1",
|
||||||
|
"string_decoder": "~0.10.x"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"string_decoder": {
|
||||||
|
"version": "0.10.31",
|
||||||
|
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
|
||||||
|
"integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"through2": {
|
||||||
|
"version": "0.2.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/through2/-/through2-0.2.3.tgz",
|
||||||
|
"integrity": "sha1-6zKE2k6jEbbMis42U3SKUqvyWj8=",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"readable-stream": "~1.1.9",
|
||||||
|
"xtend": "~2.1.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"xtend": {
|
||||||
|
"version": "2.1.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz",
|
||||||
|
"integrity": "sha1-bv7MKk2tjmlixJAbM3znuoe10os=",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"object-keys": "~0.4.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"proto-list": {
|
"proto-list": {
|
||||||
"version": "1.2.4",
|
"version": "1.2.4",
|
||||||
"resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz",
|
"resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz",
|
||||||
@ -9010,6 +9172,15 @@
|
|||||||
"moment": "^2.20.1"
|
"moment": "^2.20.1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"single-line-log": {
|
||||||
|
"version": "1.1.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/single-line-log/-/single-line-log-1.1.2.tgz",
|
||||||
|
"integrity": "sha1-wvg/Jzo+GhbtsJlWYdoO1e8DM2Q=",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"string-width": "^1.0.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
"slash": {
|
"slash": {
|
||||||
"version": "3.0.0",
|
"version": "3.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
|
||||||
@ -9104,6 +9275,12 @@
|
|||||||
"resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz",
|
"resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz",
|
||||||
"integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q=="
|
"integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q=="
|
||||||
},
|
},
|
||||||
|
"speedometer": {
|
||||||
|
"version": "0.1.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/speedometer/-/speedometer-0.1.4.tgz",
|
||||||
|
"integrity": "sha1-mHbb0qFp0xFUAtSObqYynIgWpQ0=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
"sprintf-js": {
|
"sprintf-js": {
|
||||||
"version": "1.0.3",
|
"version": "1.0.3",
|
||||||
"resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
|
"resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
|
||||||
@ -9333,6 +9510,26 @@
|
|||||||
"chalk": "^1.0.0"
|
"chalk": "^1.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"sumchecker": {
|
||||||
|
"version": "2.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-2.0.2.tgz",
|
||||||
|
"integrity": "sha1-D0LBDl0F2l1C7qPlbDOZo31sWz4=",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"debug": "^2.2.0"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"debug": {
|
||||||
|
"version": "2.6.9",
|
||||||
|
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
|
||||||
|
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"ms": "2.0.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"supports-color": {
|
"supports-color": {
|
||||||
"version": "2.0.0",
|
"version": "2.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
|
||||||
@ -9433,6 +9630,12 @@
|
|||||||
"execa": "^0.7.0"
|
"execa": "^0.7.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"throttleit": {
|
||||||
|
"version": "0.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/throttleit/-/throttleit-0.0.2.tgz",
|
||||||
|
"integrity": "sha1-z+34jmDADdlpe2H90qg0OptoDq8=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
"through": {
|
"through": {
|
||||||
"version": "2.3.8",
|
"version": "2.3.8",
|
||||||
"resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
|
"resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
|
||||||
|
@ -16,7 +16,7 @@
|
|||||||
"start-server": "TRILIUM_ENV=dev node ./src/www",
|
"start-server": "TRILIUM_ENV=dev node ./src/www",
|
||||||
"start-electron": "TRILIUM_ENV=dev electron . --disable-gpu",
|
"start-electron": "TRILIUM_ENV=dev electron . --disable-gpu",
|
||||||
"build-backend-docs": "./node_modules/.bin/jsdoc -c jsdoc-conf.json -d ./docs/backend_api src/entities/*.js src/services/backend_script_api.js",
|
"build-backend-docs": "./node_modules/.bin/jsdoc -c jsdoc-conf.json -d ./docs/backend_api src/entities/*.js src/services/backend_script_api.js",
|
||||||
"build-frontend-docs": "./node_modules/.bin/jsdoc -c jsdoc-conf.json -d ./docs/frontend_api src/public/javascripts/entities/*.js src/public/javascripts/services/keyboard_action.js src/public/javascripts/services/frontend_script_api.js",
|
"build-frontend-docs": "./node_modules/.bin/jsdoc -c jsdoc-conf.json -d ./docs/frontend_api src/public/javascripts/entities/*.js src/public/javascripts/services/frontend_script_api.js",
|
||||||
"build-docs": "npm run build-backend-docs && npm run build-frontend-docs"
|
"build-docs": "npm run build-backend-docs && npm run build-frontend-docs"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
@ -77,7 +77,7 @@
|
|||||||
"ws": "7.2.0"
|
"ws": "7.2.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"electron": "8.0.0-beta.3",
|
"electron": "6.0.12",
|
||||||
"electron-builder": "22.1.0",
|
"electron-builder": "22.1.0",
|
||||||
"electron-installer-debian": "2.0.1",
|
"electron-installer-debian": "2.0.1",
|
||||||
"electron-packager": "14.1.0",
|
"electron-packager": "14.1.0",
|
||||||
|
@ -30,6 +30,7 @@ import cssLoader from './services/css_loader.js';
|
|||||||
import dateNoteService from './services/date_notes.js';
|
import dateNoteService from './services/date_notes.js';
|
||||||
import sidebarService from './services/sidebar.js';
|
import sidebarService from './services/sidebar.js';
|
||||||
import importService from './services/import.js';
|
import importService from './services/import.js';
|
||||||
|
import keyboardActionService from "./services/keyboard_actions.js";
|
||||||
|
|
||||||
window.glob.isDesktop = utils.isDesktop;
|
window.glob.isDesktop = utils.isDesktop;
|
||||||
window.glob.isMobile = utils.isMobile;
|
window.glob.isMobile = utils.isMobile;
|
||||||
@ -108,18 +109,8 @@ $("body").on("click", "a.external", function () {
|
|||||||
});
|
});
|
||||||
|
|
||||||
if (utils.isElectron()) {
|
if (utils.isElectron()) {
|
||||||
require('electron').ipcRenderer.on('create-day-sub-note', async function(event) {
|
require('electron').ipcRenderer.on('globalShortcut', async function(event, actionName) {
|
||||||
const todayNote = await dateNoteService.getTodayNote();
|
keyboardActionService.triggerAction(actionName);
|
||||||
const notePath = await treeService.getSomeNotePath(todayNote);
|
|
||||||
|
|
||||||
const node = await treeService.expandToNote(notePath);
|
|
||||||
|
|
||||||
await noteDetailService.openEmptyTab(false);
|
|
||||||
|
|
||||||
await treeService.createNote(node, todayNote.noteId, 'into', {
|
|
||||||
type: "text",
|
|
||||||
isProtected: node.data.isProtected
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4,7 +4,9 @@ import zoomService from "./zoom.js";
|
|||||||
import protectedSessionService from "./protected_session.js";
|
import protectedSessionService from "./protected_session.js";
|
||||||
import searchNotesService from "./search_notes.js";
|
import searchNotesService from "./search_notes.js";
|
||||||
import treeService from "./tree.js";
|
import treeService from "./tree.js";
|
||||||
import server from "./server.js";
|
import dateNoteService from "./date_notes.js";
|
||||||
|
import noteDetailService from "./note_detail.js";
|
||||||
|
import keyboardActionService from "./keyboard_actions.js";
|
||||||
|
|
||||||
const NOTE_REVISIONS = "../dialogs/note_revisions.js";
|
const NOTE_REVISIONS = "../dialogs/note_revisions.js";
|
||||||
const OPTIONS = "../dialogs/options.js";
|
const OPTIONS = "../dialogs/options.js";
|
||||||
@ -27,31 +29,31 @@ function registerEntrypoints() {
|
|||||||
jQuery.hotkeys.options.filterContentEditable = false;
|
jQuery.hotkeys.options.filterContentEditable = false;
|
||||||
jQuery.hotkeys.options.filterTextInputs = false;
|
jQuery.hotkeys.options.filterTextInputs = false;
|
||||||
|
|
||||||
setActionHandler("AddLinkToText", () => import(ADD_LINK).then(d => d.showDialog()));
|
keyboardActionService.setActionHandler("AddLinkToText", () => import(ADD_LINK).then(d => d.showDialog()));
|
||||||
|
|
||||||
const showJumpToNoteDialog = () => import(JUMP_TO_NOTE).then(d => d.showDialog());
|
const showJumpToNoteDialog = () => import(JUMP_TO_NOTE).then(d => d.showDialog());
|
||||||
$("#jump-to-note-dialog-button").on('click', showJumpToNoteDialog);
|
$("#jump-to-note-dialog-button").on('click', showJumpToNoteDialog);
|
||||||
setActionHandler("JumpToNote", showJumpToNoteDialog);
|
keyboardActionService.setActionHandler("JumpToNote", showJumpToNoteDialog);
|
||||||
|
|
||||||
const showRecentChanges = () => import(RECENT_CHANGES).then(d => d.showDialog());
|
const showRecentChanges = () => import(RECENT_CHANGES).then(d => d.showDialog());
|
||||||
$("#recent-changes-button").on('click', showRecentChanges);
|
$("#recent-changes-button").on('click', showRecentChanges);
|
||||||
setActionHandler("ShowRecentChanges", showRecentChanges);
|
keyboardActionService.setActionHandler("ShowRecentChanges", showRecentChanges);
|
||||||
|
|
||||||
$("#enter-protected-session-button").on('click', protectedSessionService.enterProtectedSession);
|
$("#enter-protected-session-button").on('click', protectedSessionService.enterProtectedSession);
|
||||||
$("#leave-protected-session-button").on('click', protectedSessionService.leaveProtectedSession);
|
$("#leave-protected-session-button").on('click', protectedSessionService.leaveProtectedSession);
|
||||||
|
|
||||||
$("#toggle-search-button").on('click', searchNotesService.toggleSearch);
|
$("#toggle-search-button").on('click', searchNotesService.toggleSearch);
|
||||||
setActionHandler('SearchNotes', searchNotesService.toggleSearch);
|
keyboardActionService.setActionHandler('SearchNotes', searchNotesService.toggleSearch);
|
||||||
|
|
||||||
const $noteTabContainer = $("#note-tab-container");
|
const $noteTabContainer = $("#note-tab-container");
|
||||||
|
|
||||||
const showAttributesDialog = () => import(ATTRIBUTES).then(d => d.showDialog());
|
const showAttributesDialog = () => import(ATTRIBUTES).then(d => d.showDialog());
|
||||||
$noteTabContainer.on("click", ".show-attributes-button", showAttributesDialog);
|
$noteTabContainer.on("click", ".show-attributes-button", showAttributesDialog);
|
||||||
setActionHandler("ShowAttributes", showAttributesDialog);
|
keyboardActionService.setActionHandler("ShowAttributes", showAttributesDialog);
|
||||||
|
|
||||||
const showNoteInfoDialog = () => import(NOTE_INFO).then(d => d.showDialog());
|
const showNoteInfoDialog = () => import(NOTE_INFO).then(d => d.showDialog());
|
||||||
$noteTabContainer.on("click", ".show-note-info-button", showNoteInfoDialog);
|
$noteTabContainer.on("click", ".show-note-info-button", showNoteInfoDialog);
|
||||||
setActionHandler("ShowNoteInfo", showNoteInfoDialog);
|
keyboardActionService.setActionHandler("ShowNoteInfo", showNoteInfoDialog);
|
||||||
|
|
||||||
const showNoteRevisionsDialog = function() {
|
const showNoteRevisionsDialog = function() {
|
||||||
if ($(this).hasClass("disabled")) {
|
if ($(this).hasClass("disabled")) {
|
||||||
@ -62,7 +64,7 @@ function registerEntrypoints() {
|
|||||||
};
|
};
|
||||||
|
|
||||||
$noteTabContainer.on("click", ".show-note-revisions-button", showNoteRevisionsDialog);
|
$noteTabContainer.on("click", ".show-note-revisions-button", showNoteRevisionsDialog);
|
||||||
setActionHandler("ShowNoteRevisions", showNoteRevisionsDialog);
|
keyboardActionService.setActionHandler("ShowNoteRevisions", showNoteRevisionsDialog);
|
||||||
|
|
||||||
const showNoteSourceDialog = function() {
|
const showNoteSourceDialog = function() {
|
||||||
if ($(this).hasClass("disabled")) {
|
if ($(this).hasClass("disabled")) {
|
||||||
@ -73,33 +75,33 @@ function registerEntrypoints() {
|
|||||||
};
|
};
|
||||||
|
|
||||||
$noteTabContainer.on("click", ".show-source-button", showNoteSourceDialog);
|
$noteTabContainer.on("click", ".show-source-button", showNoteSourceDialog);
|
||||||
setActionHandler("ShowNoteSource", showNoteSourceDialog);
|
keyboardActionService.setActionHandler("ShowNoteSource", showNoteSourceDialog);
|
||||||
|
|
||||||
const showLinkMapDialog = () => import(LINK_MAP).then(d => d.showDialog());
|
const showLinkMapDialog = () => import(LINK_MAP).then(d => d.showDialog());
|
||||||
$noteTabContainer.on("click", ".show-link-map-button", showLinkMapDialog);
|
$noteTabContainer.on("click", ".show-link-map-button", showLinkMapDialog);
|
||||||
setActionHandler("ShowLinkMap", showLinkMapDialog);
|
keyboardActionService.setActionHandler("ShowLinkMap", showLinkMapDialog);
|
||||||
|
|
||||||
const showOptionsDialog = () => import(OPTIONS).then(d => d.showDialog());
|
const showOptionsDialog = () => import(OPTIONS).then(d => d.showDialog());
|
||||||
$("#options-button").on('click', showOptionsDialog);
|
$("#options-button").on('click', showOptionsDialog);
|
||||||
setActionHandler("ShowOptions", showOptionsDialog);
|
keyboardActionService.setActionHandler("ShowOptions", showOptionsDialog);
|
||||||
|
|
||||||
const showHelpDialog = () => import(HELP).then(d => d.showDialog());
|
const showHelpDialog = () => import(HELP).then(d => d.showDialog());
|
||||||
$("#show-help-button").on('click', showHelpDialog);
|
$("#show-help-button").on('click', showHelpDialog);
|
||||||
setActionHandler("ShowHelp", showHelpDialog);
|
keyboardActionService.setActionHandler("ShowHelp", showHelpDialog);
|
||||||
|
|
||||||
const showSqlConsoleDialog = () => import(SQL_CONSOLE).then(d => d.showDialog());
|
const showSqlConsoleDialog = () => import(SQL_CONSOLE).then(d => d.showDialog());
|
||||||
$("#open-sql-console-button").on('click', showSqlConsoleDialog);
|
$("#open-sql-console-button").on('click', showSqlConsoleDialog);
|
||||||
setActionHandler("ShowSQLConsole", showSqlConsoleDialog);
|
keyboardActionService.setActionHandler("ShowSQLConsole", showSqlConsoleDialog);
|
||||||
|
|
||||||
$("#show-about-dialog-button").on('click', () => import(ABOUT).then(d => d.showDialog()));
|
$("#show-about-dialog-button").on('click', () => import(ABOUT).then(d => d.showDialog()));
|
||||||
|
|
||||||
if (utils.isElectron()) {
|
if (utils.isElectron()) {
|
||||||
$("#history-navigation").show();
|
$("#history-navigation").show();
|
||||||
$("#history-back-button").on('click', window.history.back);
|
$("#history-back-button").on('click', window.history.back);
|
||||||
setActionHandler("BackInNoteHistory", window.history.back);
|
keyboardActionService.setActionHandler("BackInNoteHistory", window.history.back);
|
||||||
|
|
||||||
$("#history-forward-button").on('click', window.history.forward);
|
$("#history-forward-button").on('click', window.history.forward);
|
||||||
setActionHandler("ForwardInNoteHistory", window.history.forward);
|
keyboardActionService.setActionHandler("ForwardInNoteHistory", window.history.forward);
|
||||||
}
|
}
|
||||||
|
|
||||||
// hide (toggle) everything except for the note content for zen mode
|
// hide (toggle) everything except for the note content for zen mode
|
||||||
@ -109,9 +111,9 @@ function registerEntrypoints() {
|
|||||||
};
|
};
|
||||||
|
|
||||||
$("#toggle-zen-mode-button").on('click', toggleZenMode);
|
$("#toggle-zen-mode-button").on('click', toggleZenMode);
|
||||||
setActionHandler("ToggleZenMode", toggleZenMode);
|
keyboardActionService.setActionHandler("ToggleZenMode", toggleZenMode);
|
||||||
|
|
||||||
setActionHandler("InsertDateTime", () => {
|
keyboardActionService.setActionHandler("InsertDateTime", () => {
|
||||||
const date = new Date();
|
const date = new Date();
|
||||||
const dateString = utils.formatDateTime(date);
|
const dateString = utils.formatDateTime(date);
|
||||||
|
|
||||||
@ -119,7 +121,7 @@ function registerEntrypoints() {
|
|||||||
});
|
});
|
||||||
|
|
||||||
$("#reload-frontend-button").on('click', utils.reloadApp);
|
$("#reload-frontend-button").on('click', utils.reloadApp);
|
||||||
setActionHandler("ReloadApp", utils.reloadApp);
|
keyboardActionService.setActionHandler("ReloadApp", utils.reloadApp);
|
||||||
|
|
||||||
$("#open-dev-tools-button").toggle(utils.isElectron());
|
$("#open-dev-tools-button").toggle(utils.isElectron());
|
||||||
|
|
||||||
@ -131,7 +133,7 @@ function registerEntrypoints() {
|
|||||||
};
|
};
|
||||||
|
|
||||||
$("#open-dev-tools-button").on('click', openDevTools);
|
$("#open-dev-tools-button").on('click', openDevTools);
|
||||||
setActionHandler("OpenDevTools", openDevTools);
|
keyboardActionService.setActionHandler("OpenDevTools", openDevTools);
|
||||||
}
|
}
|
||||||
|
|
||||||
let findInPage;
|
let findInPage;
|
||||||
@ -153,7 +155,7 @@ function registerEntrypoints() {
|
|||||||
caseSelectedColor: 'var(--main-border-color)'
|
caseSelectedColor: 'var(--main-border-color)'
|
||||||
});
|
});
|
||||||
|
|
||||||
setActionHandler("FindInText", () => {
|
keyboardActionService.setActionHandler("FindInText", () => {
|
||||||
if (!glob.activeDialog || !glob.activeDialog.is(":visible")) {
|
if (!glob.activeDialog || !glob.activeDialog.is(":visible")) {
|
||||||
findInPage.openFindWindow();
|
findInPage.openFindWindow();
|
||||||
}
|
}
|
||||||
@ -173,7 +175,7 @@ function registerEntrypoints() {
|
|||||||
|
|
||||||
$("#toggle-fullscreen-button").on('click', toggleFullscreen);
|
$("#toggle-fullscreen-button").on('click', toggleFullscreen);
|
||||||
|
|
||||||
setActionHandler("ToggleFullscreen", toggleFullscreen);
|
keyboardActionService.setActionHandler("ToggleFullscreen", toggleFullscreen);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
// outside of electron this is handled by the browser
|
// outside of electron this is handled by the browser
|
||||||
@ -181,8 +183,8 @@ function registerEntrypoints() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (utils.isElectron()) {
|
if (utils.isElectron()) {
|
||||||
setActionHandler("ZoomOut", zoomService.decreaseZoomFactor);
|
keyboardActionService.setActionHandler("ZoomOut", zoomService.decreaseZoomFactor);
|
||||||
setActionHandler("ZoomIn", zoomService.increaseZoomFactor);
|
keyboardActionService.setActionHandler("ZoomIn", zoomService.increaseZoomFactor);
|
||||||
}
|
}
|
||||||
|
|
||||||
$(document).on('click', "a[data-action='note-revision']", async event => {
|
$(document).on('click', "a[data-action='note-revision']", async event => {
|
||||||
@ -197,7 +199,7 @@ function registerEntrypoints() {
|
|||||||
return false;
|
return false;
|
||||||
});
|
});
|
||||||
|
|
||||||
setActionHandler("CloneNotesTo", () => import(CLONE_TO).then(d => {
|
keyboardActionService.setActionHandler("CloneNotesTo", () => import(CLONE_TO).then(d => {
|
||||||
const activeNode = treeService.getActiveNode();
|
const activeNode = treeService.getActiveNode();
|
||||||
|
|
||||||
const selectedOrActiveNodes = treeService.getSelectedOrActiveNodes(activeNode);
|
const selectedOrActiveNodes = treeService.getSelectedOrActiveNodes(activeNode);
|
||||||
@ -207,62 +209,26 @@ function registerEntrypoints() {
|
|||||||
d.showDialog(noteIds);
|
d.showDialog(noteIds);
|
||||||
}));
|
}));
|
||||||
|
|
||||||
setActionHandler("MoveNotesTo", () => import(MOVE_TO).then(d => {
|
keyboardActionService.setActionHandler("MoveNotesTo", () => import(MOVE_TO).then(d => {
|
||||||
const activeNode = treeService.getActiveNode();
|
const activeNode = treeService.getActiveNode();
|
||||||
|
|
||||||
const selectedOrActiveNodes = treeService.getSelectedOrActiveNodes(activeNode);
|
const selectedOrActiveNodes = treeService.getSelectedOrActiveNodes(activeNode);
|
||||||
|
|
||||||
d.showDialog(selectedOrActiveNodes);
|
d.showDialog(selectedOrActiveNodes);
|
||||||
}));
|
}));
|
||||||
}
|
|
||||||
|
|
||||||
class KeyboardAction {
|
keyboardActionService.setActionHandler("CreateNoteIntoDayNote", async () => {
|
||||||
constructor(params) {
|
const todayNote = await dateNoteService.getTodayNote();console.log(todayNote);
|
||||||
/** @property {string} */
|
const notePath = await treeService.getSomeNotePath(todayNote);
|
||||||
this.actionName = params.actionName;
|
|
||||||
/** @property {string[]} */
|
|
||||||
this.defaultShortcuts = params.defaultShortcuts;
|
|
||||||
/** @property {string[]} */
|
|
||||||
this.effectiveShortcuts = params.effectiveShortcuts;
|
|
||||||
/** @property {string} */
|
|
||||||
this.description = params.description;
|
|
||||||
}
|
|
||||||
|
|
||||||
addShortcut(shortcut) {
|
const node = await treeService.expandToNote(notePath);
|
||||||
this.effectiveShortcuts.push(shortcut);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
await noteDetailService.openEmptyTab(false);
|
||||||
* @param {string|string[]} shortcuts
|
|
||||||
*/
|
|
||||||
replaceShortcuts(shortcuts) {
|
|
||||||
this.effectiveShortcuts = Array.isArray(shortcuts) ? shortcuts : [shortcuts];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const keyboardActionRepo = {};
|
await treeService.createNote(node, todayNote.noteId, 'into', {
|
||||||
|
type: "text",
|
||||||
const keyboardActionsLoaded = server.get('keyboard-actions').then(actions => {
|
isProtected: node.data.isProtected
|
||||||
for (const action of actions) {
|
|
||||||
keyboardActionRepo[action.actionName] = new KeyboardAction(action);
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
function setActionHandler(actionName, handler) {
|
|
||||||
keyboardActionsLoaded.then(() => {
|
|
||||||
const action = keyboardActionRepo[actionName];
|
|
||||||
|
|
||||||
if (!action) {
|
|
||||||
throw new Error(`Cannot find keyboard action '${actionName}'`);
|
|
||||||
}
|
|
||||||
|
|
||||||
action.handler = handler;
|
|
||||||
|
|
||||||
for (const shortcut of action.effectiveShortcuts) {
|
|
||||||
if (shortcut) {
|
|
||||||
utils.bindGlobalShortcut(shortcut, handler);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -11,7 +11,6 @@ import dateNotesService from './date_notes.js';
|
|||||||
import StandardWidget from '../widgets/standard_widget.js';
|
import StandardWidget from '../widgets/standard_widget.js';
|
||||||
import ws from "./ws.js";
|
import ws from "./ws.js";
|
||||||
import hoistedNoteService from "./hoisted_note.js";
|
import hoistedNoteService from "./hoisted_note.js";
|
||||||
import KeyboardAction from "./keyboard_action.js";
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This is the main frontend API interface for scripts. It's published in the local "api" object.
|
* This is the main frontend API interface for scripts. It's published in the local "api" object.
|
||||||
@ -41,9 +40,6 @@ function FrontendScriptApi(startNote, currentNote, originEntity = null, tabConte
|
|||||||
/** @property {StandardWidget} */
|
/** @property {StandardWidget} */
|
||||||
this.StandardWidget = StandardWidget;
|
this.StandardWidget = StandardWidget;
|
||||||
|
|
||||||
/** @property {KeyboardAction} */
|
|
||||||
this.KeyboardAction = KeyboardAction;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Activates note in the tree and in the note detail.
|
* Activates note in the tree and in the note detail.
|
||||||
*
|
*
|
||||||
|
@ -1,261 +0,0 @@
|
|||||||
/**
|
|
||||||
* blaa vlaa
|
|
||||||
*/
|
|
||||||
class KeyboardAction {
|
|
||||||
constructor(params) {
|
|
||||||
/** @property {string} */
|
|
||||||
this.optionName = params.optionName;
|
|
||||||
/** @property {string[]} */
|
|
||||||
this.defaultShortcuts = Array.isArray(params.defaultShortcuts) ? params.defaultShortcuts : [params.defaultShortcuts];
|
|
||||||
/** @property {string[]} */
|
|
||||||
this.activeShortcuts = this.defaultShortcuts.slice();
|
|
||||||
/** @property {string} */
|
|
||||||
this.description = params.description;
|
|
||||||
}
|
|
||||||
|
|
||||||
addShortcut(shortcut) {
|
|
||||||
this.activeShortcuts.push(shortcut);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param {string|string[]} shortcuts
|
|
||||||
*/
|
|
||||||
replaceShortcuts(shortcuts) {
|
|
||||||
this.activeShortcuts = Array.isArray(shortcuts) ? shortcuts : [shortcuts];
|
|
||||||
}
|
|
||||||
|
|
||||||
/** @return {KeyboardAction[]} */
|
|
||||||
static get allActions() {
|
|
||||||
return Object.keys(KeyboardAction)
|
|
||||||
.map(key => KeyboardAction[key])
|
|
||||||
.filter(obj => obj instanceof KeyboardAction);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const ELECTRON = 1;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Open "Jump to note" dialog
|
|
||||||
* @static
|
|
||||||
*/
|
|
||||||
KeyboardAction.JumpToNote = new KeyboardAction({
|
|
||||||
optionName: "JumpToNote",
|
|
||||||
defaultShortcuts: "mod+j",
|
|
||||||
description: 'Open "Jump to note" dialog'
|
|
||||||
});
|
|
||||||
|
|
||||||
/** @static */
|
|
||||||
KeyboardAction.MarkdownToHTML = new KeyboardAction({
|
|
||||||
optionName: "MarkdownToHTML",
|
|
||||||
defaultShortcuts: "mod+return"
|
|
||||||
});
|
|
||||||
|
|
||||||
/** @static */
|
|
||||||
KeyboardAction.NewTab = new KeyboardAction({
|
|
||||||
optionName: "NewTab",
|
|
||||||
defaultShortcuts: "mod+t",
|
|
||||||
only: ELECTRON
|
|
||||||
});
|
|
||||||
|
|
||||||
/** @static */
|
|
||||||
KeyboardAction.CloseTab = new KeyboardAction({
|
|
||||||
optionName: "CloseTab",
|
|
||||||
defaultShortcuts: "mod+w",
|
|
||||||
only: ELECTRON
|
|
||||||
});
|
|
||||||
|
|
||||||
/** @static */
|
|
||||||
KeyboardAction.NextTab = new KeyboardAction({
|
|
||||||
optionName: "NextTab",
|
|
||||||
defaultShortcuts: "mod+tab",
|
|
||||||
only: ELECTRON
|
|
||||||
});
|
|
||||||
|
|
||||||
/** @static */
|
|
||||||
KeyboardAction.PreviousTab = new KeyboardAction({
|
|
||||||
optionName: "PreviousTab",
|
|
||||||
defaultShortcuts: "mod+shift+tab",
|
|
||||||
only: ELECTRON
|
|
||||||
});
|
|
||||||
|
|
||||||
/** @static */
|
|
||||||
KeyboardAction.CreateNoteAfter = new KeyboardAction({
|
|
||||||
optionName: "CreateNoteAfter",
|
|
||||||
defaultShortcuts: "mod+o"
|
|
||||||
});
|
|
||||||
|
|
||||||
/** @static */
|
|
||||||
KeyboardAction.CreateNoteInto = new KeyboardAction({
|
|
||||||
optionName: "CreateNoteInto",
|
|
||||||
defaultShortcuts: "mod+p"
|
|
||||||
});
|
|
||||||
|
|
||||||
/** @static */
|
|
||||||
KeyboardAction.ScrollToActiveNote = new KeyboardAction({
|
|
||||||
optionName: "ScrollToActiveNote",
|
|
||||||
defaultShortcuts: "mod+."
|
|
||||||
});
|
|
||||||
|
|
||||||
/** @static */
|
|
||||||
KeyboardAction.CollapseTree = new KeyboardAction({
|
|
||||||
optionName: "CollapseTree",
|
|
||||||
defaultShortcuts: "alt+c"
|
|
||||||
});
|
|
||||||
|
|
||||||
/** @static */
|
|
||||||
KeyboardAction.RunSQL = new KeyboardAction({
|
|
||||||
optionName: "RunSQL",
|
|
||||||
defaultShortcuts: "mod+return"
|
|
||||||
});
|
|
||||||
|
|
||||||
/** @static */
|
|
||||||
KeyboardAction.FocusNote = new KeyboardAction({
|
|
||||||
optionName: "FocusNote",
|
|
||||||
defaultShortcuts: "return"
|
|
||||||
});
|
|
||||||
|
|
||||||
/** @static */
|
|
||||||
KeyboardAction.RunCurrentNote = new KeyboardAction({
|
|
||||||
optionName: "RunCurrentNote",
|
|
||||||
defaultShortcuts: "mod+return"
|
|
||||||
});
|
|
||||||
|
|
||||||
/** @static */
|
|
||||||
KeyboardAction.ClipboardCopy = new KeyboardAction({
|
|
||||||
optionName: "ClipboardCopy",
|
|
||||||
defaultShortcuts: "mod+c"
|
|
||||||
});
|
|
||||||
|
|
||||||
/** @static */
|
|
||||||
KeyboardAction.ClipboardPaste = new KeyboardAction({
|
|
||||||
optionName: "ClipboardPaste",
|
|
||||||
defaultShortcuts: "mod+v"
|
|
||||||
});
|
|
||||||
|
|
||||||
/** @static */
|
|
||||||
KeyboardAction.ClipboardCut = new KeyboardAction({
|
|
||||||
optionName: "ClipboardCut",
|
|
||||||
defaultShortcuts: "mod+x"
|
|
||||||
});
|
|
||||||
|
|
||||||
/** @static */
|
|
||||||
KeyboardAction.SelectAllNotesInParent = new KeyboardAction({
|
|
||||||
optionName: "SelectAllNotesInParent",
|
|
||||||
defaultShortcuts: "mod+a"
|
|
||||||
});
|
|
||||||
|
|
||||||
/** @static */
|
|
||||||
KeyboardAction.Undo = new KeyboardAction({
|
|
||||||
optionName: "Undo",
|
|
||||||
defaultShortcuts: "mod+z"
|
|
||||||
});
|
|
||||||
|
|
||||||
/** @static */
|
|
||||||
KeyboardAction.Redo = new KeyboardAction({
|
|
||||||
optionName: "Redo",
|
|
||||||
defaultShortcuts: "mod+y"
|
|
||||||
});
|
|
||||||
|
|
||||||
/** @static */
|
|
||||||
KeyboardAction.AddLinkToText = new KeyboardAction({
|
|
||||||
optionName: "AddLinkToText",
|
|
||||||
defaultShortcuts: "mod+l"
|
|
||||||
});
|
|
||||||
|
|
||||||
/** @static */
|
|
||||||
KeyboardAction.CloneNotesTo = new KeyboardAction({
|
|
||||||
optionName: "CloneNotesTo",
|
|
||||||
defaultShortcuts: "mod+shift+c"
|
|
||||||
});
|
|
||||||
|
|
||||||
/** @static */
|
|
||||||
KeyboardAction.MoveNotesTo = new KeyboardAction({
|
|
||||||
optionName: "MoveNotesTo",
|
|
||||||
defaultShortcuts: "mod+shift+c"
|
|
||||||
});
|
|
||||||
|
|
||||||
/** @static */
|
|
||||||
KeyboardAction.SearchNotes = new KeyboardAction({
|
|
||||||
optionName: "SearchNotes",
|
|
||||||
defaultShortcuts: "mod+s"
|
|
||||||
});
|
|
||||||
|
|
||||||
/** @static */
|
|
||||||
KeyboardAction.ShowAttributes = new KeyboardAction({
|
|
||||||
optionName: "ShowAttributes",
|
|
||||||
defaultShortcuts: "alt+a"
|
|
||||||
});
|
|
||||||
|
|
||||||
/** @static */
|
|
||||||
KeyboardAction.ShowHelp = new KeyboardAction({
|
|
||||||
optionName: "ShowHelp",
|
|
||||||
defaultShortcuts: "f1"
|
|
||||||
});
|
|
||||||
|
|
||||||
/** @static */
|
|
||||||
KeyboardAction.OpenSQLConsole = new KeyboardAction({
|
|
||||||
optionName: "OpenSQLConsole",
|
|
||||||
defaultShortcuts: "alt+o"
|
|
||||||
});
|
|
||||||
|
|
||||||
/** @static */
|
|
||||||
KeyboardAction.BackInNoteHistory = new KeyboardAction({
|
|
||||||
optionName: "BackInNoteHistory",
|
|
||||||
defaultShortcuts: "alt+left"
|
|
||||||
});
|
|
||||||
|
|
||||||
/** @static */
|
|
||||||
KeyboardAction.ForwardInNoteHistory = new KeyboardAction({
|
|
||||||
optionName: "ForwardInNoteHistory",
|
|
||||||
defaultShortcuts: "alt+right"
|
|
||||||
});
|
|
||||||
|
|
||||||
/** @static */
|
|
||||||
KeyboardAction.ToggleZenMode = new KeyboardAction({
|
|
||||||
optionName: "ToggleZenMode",
|
|
||||||
defaultShortcuts: "alt+m"
|
|
||||||
});
|
|
||||||
|
|
||||||
/** @static */
|
|
||||||
KeyboardAction.InsertDateTime = new KeyboardAction({
|
|
||||||
optionName: "InsertDateTime",
|
|
||||||
defaultShortcuts: "alt+t"
|
|
||||||
});
|
|
||||||
|
|
||||||
/** @static */
|
|
||||||
KeyboardAction.ReloadApp = new KeyboardAction({
|
|
||||||
optionName: "ReloadApp",
|
|
||||||
defaultShortcuts: ["f5", "mod+r"]
|
|
||||||
});
|
|
||||||
|
|
||||||
/** @static */
|
|
||||||
KeyboardAction.OpenDevTools = new KeyboardAction({
|
|
||||||
optionName: "OpenDevTools",
|
|
||||||
defaultShortcuts: "mod+shift+i"
|
|
||||||
});
|
|
||||||
|
|
||||||
/** @static */
|
|
||||||
KeyboardAction.FindInText = new KeyboardAction({
|
|
||||||
optionName: "FindInText",
|
|
||||||
defaultShortcuts: "mod+f"
|
|
||||||
});
|
|
||||||
|
|
||||||
/** @static */
|
|
||||||
KeyboardAction.ToggleFullscreen = new KeyboardAction({
|
|
||||||
optionName: "ToggleFullscreen",
|
|
||||||
defaultShortcuts: "f11"
|
|
||||||
});
|
|
||||||
|
|
||||||
/** @static */
|
|
||||||
KeyboardAction.ZoomOut = new KeyboardAction({
|
|
||||||
optionName: "ZoomOut",
|
|
||||||
defaultShortcuts: "mod+-"
|
|
||||||
});
|
|
||||||
|
|
||||||
/** @static */
|
|
||||||
KeyboardAction.ZoomIn = new KeyboardAction({
|
|
||||||
optionName: "ZoomIn",
|
|
||||||
defaultShortcuts: "mod+="
|
|
||||||
});
|
|
||||||
|
|
||||||
export default KeyboardAction;
|
|
73
src/public/javascripts/services/keyboard_actions.js
Normal file
73
src/public/javascripts/services/keyboard_actions.js
Normal file
@ -0,0 +1,73 @@
|
|||||||
|
import server from "./server.js";
|
||||||
|
import utils from "./utils.js";
|
||||||
|
|
||||||
|
class KeyboardAction {
|
||||||
|
constructor(params) {
|
||||||
|
/** @property {string} */
|
||||||
|
this.actionName = params.actionName;
|
||||||
|
/** @property {string[]} */
|
||||||
|
this.defaultShortcuts = params.defaultShortcuts;
|
||||||
|
/** @property {string[]} */
|
||||||
|
this.effectiveShortcuts = params.effectiveShortcuts;
|
||||||
|
/** @property {string} */
|
||||||
|
this.description = params.description;
|
||||||
|
}
|
||||||
|
|
||||||
|
addShortcut(shortcut) {
|
||||||
|
this.effectiveShortcuts.push(shortcut);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {string|string[]} shortcuts
|
||||||
|
*/
|
||||||
|
replaceShortcuts(shortcuts) {
|
||||||
|
this.effectiveShortcuts = Array.isArray(shortcuts) ? shortcuts : [shortcuts];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const keyboardActionRepo = {};
|
||||||
|
|
||||||
|
const keyboardActionsLoaded = server.get('keyboard-actions').then(actions => {
|
||||||
|
for (const action of actions) {
|
||||||
|
keyboardActionRepo[action.actionName] = new KeyboardAction(action);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
function setActionHandler(actionName, handler) {
|
||||||
|
keyboardActionsLoaded.then(() => {
|
||||||
|
const action = keyboardActionRepo[actionName];
|
||||||
|
|
||||||
|
if (!action) {
|
||||||
|
throw new Error(`Cannot find keyboard action '${actionName}'`);
|
||||||
|
}
|
||||||
|
|
||||||
|
action.handler = handler;
|
||||||
|
|
||||||
|
for (const shortcut of action.effectiveShortcuts) {
|
||||||
|
if (shortcut) {
|
||||||
|
utils.bindGlobalShortcut(shortcut, handler);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
async function triggerAction(actionName) {
|
||||||
|
await keyboardActionsLoaded;
|
||||||
|
|
||||||
|
const action = keyboardActionRepo[actionName];
|
||||||
|
|
||||||
|
if (!action) {
|
||||||
|
throw new Error(`Cannot find action ${actionName}`);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!action.handler) {
|
||||||
|
throw new Error(`Action ${actionName} has no handler`);
|
||||||
|
}
|
||||||
|
|
||||||
|
await action.handler();
|
||||||
|
}
|
||||||
|
|
||||||
|
export default {
|
||||||
|
setActionHandler,
|
||||||
|
triggerAction
|
||||||
|
};
|
@ -13,12 +13,13 @@ const DATE_LABEL = 'dateNote';
|
|||||||
const DAYS = ['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'];
|
const DAYS = ['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'];
|
||||||
const MONTHS = ['January','February','March','April','May','June','July','August','September','October','November','December'];
|
const MONTHS = ['January','February','March','April','May','June','July','August','September','October','November','December'];
|
||||||
|
|
||||||
async function createNote(parentNoteId, noteTitle, noteText) {
|
async function createNote(parentNoteId, noteTitle) {
|
||||||
return (await noteService.createNewNote({
|
return (await noteService.createNewNote({
|
||||||
parentNoteId: parentNoteId,
|
parentNoteId: parentNoteId,
|
||||||
title: noteTitle,
|
title: noteTitle,
|
||||||
content: noteText,
|
content: '',
|
||||||
isProtected: false
|
isProtected: false,
|
||||||
|
type: 'text'
|
||||||
})).note;
|
})).note;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -19,7 +19,7 @@ const DEFAULT_KEYBOARD_ACTIONS = [
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
actionName: "JumpToNote",
|
actionName: "JumpToNote",
|
||||||
defaultShortcuts: ["Mod+J"],
|
defaultShortcuts: ["CommandOrControl+J"],
|
||||||
description: 'Open "Jump to note" dialog'
|
description: 'Open "Jump to note" dialog'
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -29,22 +29,22 @@ const DEFAULT_KEYBOARD_ACTIONS = [
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
actionName: "NewTab",
|
actionName: "NewTab",
|
||||||
defaultShortcuts: ["Mod+T"],
|
defaultShortcuts: ["CommandOrControl+T"],
|
||||||
only: ELECTRON
|
only: ELECTRON
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
actionName: "CloseTab",
|
actionName: "CloseTab",
|
||||||
defaultShortcuts: ["Mod+W"],
|
defaultShortcuts: ["CommandOrControl+W"],
|
||||||
only: ELECTRON
|
only: ELECTRON
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
actionName: "NextTab",
|
actionName: "NextTab",
|
||||||
defaultShortcuts: ["Mod+Tab"],
|
defaultShortcuts: ["CommandOrControl+Tab"],
|
||||||
only: ELECTRON
|
only: ELECTRON
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
actionName: "PreviousTab",
|
actionName: "PreviousTab",
|
||||||
defaultShortcuts: ["Mod+Shift+Tab"],
|
defaultShortcuts: ["CommandOrControl+Shift+Tab"],
|
||||||
only: ELECTRON
|
only: ELECTRON
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -86,15 +86,20 @@ const DEFAULT_KEYBOARD_ACTIONS = [
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
actionName: "CreateNoteAfter",
|
actionName: "CreateNoteAfter",
|
||||||
defaultShortcuts: ["Mod+O"]
|
defaultShortcuts: ["CommandOrControl+O"]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
actionName: "CreateNoteInto",
|
actionName: "CreateNoteInto",
|
||||||
defaultShortcuts: ["Mod+P"]
|
defaultShortcuts: ["CommandOrControl+P"]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
actionName: "CreateNoteIntoDayNote",
|
||||||
|
defaultShortcuts: ["global:CommandOrControl+Alt+P"],
|
||||||
|
description: "Create and open subnote of a current day note"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
actionName: "ScrollToActiveNote",
|
actionName: "ScrollToActiveNote",
|
||||||
defaultShortcuts: ["Mod+."]
|
defaultShortcuts: ["CommandOrControl+."]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
actionName: "CollapseTree",
|
actionName: "CollapseTree",
|
||||||
@ -106,26 +111,26 @@ const DEFAULT_KEYBOARD_ACTIONS = [
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
actionName: "RunCurrentNote",
|
actionName: "RunCurrentNote",
|
||||||
defaultShortcuts: ["Mod+return"]
|
defaultShortcuts: ["CommandOrControl+return"]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
actionName: "ClipboardCopy",
|
actionName: "ClipboardCopy",
|
||||||
defaultShortcuts: ["Mod+C"],
|
defaultShortcuts: ["CommandOrControl+C"],
|
||||||
description: "Copy selected notes to the clipboard"
|
description: "Copy selected notes to the clipboard"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
actionName: "ClipboardPaste",
|
actionName: "ClipboardPaste",
|
||||||
defaultShortcuts: ["Mod+V"],
|
defaultShortcuts: ["CommandOrControl+V"],
|
||||||
description: "Paste notes from the clipboard into active note"
|
description: "Paste notes from the clipboard into active note"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
actionName: "ClipboardCut",
|
actionName: "ClipboardCut",
|
||||||
defaultShortcuts: ["Mod+X"],
|
defaultShortcuts: ["CommandOrControl+X"],
|
||||||
description: "Copy selected notes to the clipboard"
|
description: "Copy selected notes to the clipboard"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
actionName: "SelectAllNotesInParent",
|
actionName: "SelectAllNotesInParent",
|
||||||
defaultShortcuts: ["Mod+A"],
|
defaultShortcuts: ["CommandOrControl+A"],
|
||||||
description: "Select all notes from the current note level"
|
description: "Select all notes from the current note level"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -133,30 +138,30 @@ const DEFAULT_KEYBOARD_ACTIONS = [
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
actionName: "Undo",
|
actionName: "Undo",
|
||||||
defaultShortcuts: ["Mod+Z"],
|
defaultShortcuts: ["CommandOrControl+Z"],
|
||||||
description: "Undo last text operation (applicable on MacOS only)"
|
description: "Undo last text operation (applicable on MacOS only)"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
actionName: "Redo",
|
actionName: "Redo",
|
||||||
defaultShortcuts: ["Mod+Y"],
|
defaultShortcuts: ["CommandOrControl+Y"],
|
||||||
description: "Undo last text operation (applicable on MacOS only)"
|
description: "Undo last text operation (applicable on MacOS only)"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
actionName: "AddLinkToText",
|
actionName: "AddLinkToText",
|
||||||
defaultShortcuts: ["Mod+L"],
|
defaultShortcuts: ["CommandOrControl+L"],
|
||||||
description: "Open dialog to add link to the text"
|
description: "Open dialog to add link to the text"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
actionName: "CloneNotesTo",
|
actionName: "CloneNotesTo",
|
||||||
defaultShortcuts: ["Mod+Shift+C"]
|
defaultShortcuts: ["CommandOrControl+Shift+C"]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
actionName: "MoveNotesTo",
|
actionName: "MoveNotesTo",
|
||||||
defaultShortcuts: ["Mod+Shift+C"]
|
defaultShortcuts: ["CommandOrControl+Shift+C"]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
actionName: "SearchNotes",
|
actionName: "SearchNotes",
|
||||||
defaultShortcuts: ["Mod+S"]
|
defaultShortcuts: ["CommandOrControl+S"]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
actionName: "ShowSQLConsole",
|
actionName: "ShowSQLConsole",
|
||||||
@ -164,7 +169,7 @@ const DEFAULT_KEYBOARD_ACTIONS = [
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
actionName: "RunSQL",
|
actionName: "RunSQL",
|
||||||
defaultShortcuts: ["Mod+return"]
|
defaultShortcuts: ["CommandOrControl+return"]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
actionName: "InsertDateTime",
|
actionName: "InsertDateTime",
|
||||||
@ -172,15 +177,15 @@ const DEFAULT_KEYBOARD_ACTIONS = [
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
actionName: "ReloadApp",
|
actionName: "ReloadApp",
|
||||||
defaultShortcuts: ["F5", "Mod+R"]
|
defaultShortcuts: ["F5", "CommandOrControl+R"]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
actionName: "OpenDevTools",
|
actionName: "OpenDevTools",
|
||||||
defaultShortcuts: ["Mod+Shift+I"]
|
defaultShortcuts: ["CommandOrControl+Shift+I"]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
actionName: "FindInText",
|
actionName: "FindInText",
|
||||||
defaultShortcuts: ["Mod+F"]
|
defaultShortcuts: ["CommandOrControl+F"]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
actionName: "ToggleFullscreen",
|
actionName: "ToggleFullscreen",
|
||||||
@ -192,22 +197,22 @@ const DEFAULT_KEYBOARD_ACTIONS = [
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
actionName: "ZoomOut",
|
actionName: "ZoomOut",
|
||||||
defaultShortcuts: ["Mod+-"]
|
defaultShortcuts: ["CommandOrControl+-"]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
actionName: "ZoomIn",
|
actionName: "ZoomIn",
|
||||||
defaultShortcuts: ["Mod+="]
|
defaultShortcuts: ["CommandOrControl+="]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
actionName: "MarkdownToHTML",
|
actionName: "MarkdownToHTML",
|
||||||
defaultShortcuts: ["Mod+Return"]
|
defaultShortcuts: ["CommandOrControl+Return"]
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
if (process.platform === "darwin") {
|
if (process.platform === "darwin") {
|
||||||
for (const action of DEFAULT_KEYBOARD_ACTIONS) {
|
for (const action of DEFAULT_KEYBOARD_ACTIONS) {
|
||||||
if (action.defaultShortcuts) {
|
if (action.defaultShortcuts) {
|
||||||
action.defaultShortcuts = action.defaultShortcuts.map(shortcut => shortcut.replace("Mod", "Meta"));
|
action.defaultShortcuts = action.defaultShortcuts.map(shortcut => shortcut.replace("CommandOrControl", "Meta"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -218,7 +223,7 @@ if (process.platform === "darwin") {
|
|||||||
else {
|
else {
|
||||||
for (const action of DEFAULT_KEYBOARD_ACTIONS) {
|
for (const action of DEFAULT_KEYBOARD_ACTIONS) {
|
||||||
if (action.defaultShortcuts) {
|
if (action.defaultShortcuts) {
|
||||||
action.defaultShortcuts = action.defaultShortcuts.map(shortcut => shortcut.replace("Mod", "Ctrl"));
|
action.defaultShortcuts = action.defaultShortcuts.map(shortcut => shortcut.replace("CommandOrControl", "Ctrl"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -100,7 +100,9 @@ async function initStartupOptions() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function getKeyboardDefaultOptions() {
|
function getKeyboardDefaultOptions() {
|
||||||
return keyboardActions.DEFAULT_KEYBOARD_ACTIONS.map(ka => {
|
return keyboardActions.DEFAULT_KEYBOARD_ACTIONS
|
||||||
|
.filter(ka => !!ka.actionName)
|
||||||
|
.map(ka => {
|
||||||
return {
|
return {
|
||||||
name: "keyboardShortcuts" + ka.actionName,
|
name: "keyboardShortcuts" + ka.actionName,
|
||||||
value: JSON.stringify(ka.defaultShortcuts),
|
value: JSON.stringify(ka.defaultShortcuts),
|
||||||
|
Loading…
x
Reference in New Issue
Block a user