diff --git a/src/public/javascripts/dialogs/options/keyboard_shortcuts.js b/src/public/javascripts/dialogs/options/keyboard_shortcuts.js
index 5266eb5cc..b00a374a1 100644
--- a/src/public/javascripts/dialogs/options/keyboard_shortcuts.js
+++ b/src/public/javascripts/dialogs/options/keyboard_shortcuts.js
@@ -4,6 +4,8 @@ import utils from "../../services/utils.js";
const TPL = `
Keyboard shortcuts
+Multiple shortcuts for the same action can be separated by comma.
+
diff --git a/src/public/javascripts/services/entrypoints.js b/src/public/javascripts/services/entrypoints.js
index a05a4aaa9..3e421e247 100644
--- a/src/public/javascripts/services/entrypoints.js
+++ b/src/public/javascripts/services/entrypoints.js
@@ -31,31 +31,31 @@ function registerEntrypoints() {
jQuery.hotkeys.options.filterContentEditable = false;
jQuery.hotkeys.options.filterTextInputs = false;
- keyboardActionService.setActionHandler("AddLinkToText", () => import(ADD_LINK).then(d => d.showDialog()));
+ keyboardActionService.setGlobalActionHandler("AddLinkToText", () => import(ADD_LINK).then(d => d.showDialog()));
const showJumpToNoteDialog = () => import(JUMP_TO_NOTE).then(d => d.showDialog());
$("#jump-to-note-dialog-button").on('click', showJumpToNoteDialog);
- keyboardActionService.setActionHandler("JumpToNote", showJumpToNoteDialog);
+ keyboardActionService.setGlobalActionHandler("JumpToNote", showJumpToNoteDialog);
const showRecentChanges = () => import(RECENT_CHANGES).then(d => d.showDialog());
$("#recent-changes-button").on('click', showRecentChanges);
- keyboardActionService.setActionHandler("ShowRecentChanges", showRecentChanges);
+ keyboardActionService.setGlobalActionHandler("ShowRecentChanges", showRecentChanges);
$("#enter-protected-session-button").on('click', protectedSessionService.enterProtectedSession);
$("#leave-protected-session-button").on('click', protectedSessionService.leaveProtectedSession);
$("#toggle-search-button").on('click', searchNotesService.toggleSearch);
- keyboardActionService.setActionHandler('SearchNotes', searchNotesService.toggleSearch);
+ keyboardActionService.setGlobalActionHandler('SearchNotes', searchNotesService.toggleSearch);
const $noteTabContainer = $("#note-tab-container");
const showAttributesDialog = () => import(ATTRIBUTES).then(d => d.showDialog());
$noteTabContainer.on("click", ".show-attributes-button", showAttributesDialog);
- keyboardActionService.setActionHandler("ShowAttributes", showAttributesDialog);
+ keyboardActionService.setGlobalActionHandler("ShowAttributes", showAttributesDialog);
const showNoteInfoDialog = () => import(NOTE_INFO).then(d => d.showDialog());
$noteTabContainer.on("click", ".show-note-info-button", showNoteInfoDialog);
- keyboardActionService.setActionHandler("ShowNoteInfo", showNoteInfoDialog);
+ keyboardActionService.setGlobalActionHandler("ShowNoteInfo", showNoteInfoDialog);
const showNoteRevisionsDialog = function() {
if ($(this).hasClass("disabled")) {
@@ -66,7 +66,7 @@ function registerEntrypoints() {
};
$noteTabContainer.on("click", ".show-note-revisions-button", showNoteRevisionsDialog);
- keyboardActionService.setActionHandler("ShowNoteRevisions", showNoteRevisionsDialog);
+ keyboardActionService.setGlobalActionHandler("ShowNoteRevisions", showNoteRevisionsDialog);
const showNoteSourceDialog = function() {
if ($(this).hasClass("disabled")) {
@@ -77,33 +77,33 @@ function registerEntrypoints() {
};
$noteTabContainer.on("click", ".show-source-button", showNoteSourceDialog);
- keyboardActionService.setActionHandler("ShowNoteSource", showNoteSourceDialog);
+ keyboardActionService.setGlobalActionHandler("ShowNoteSource", showNoteSourceDialog);
const showLinkMapDialog = () => import(LINK_MAP).then(d => d.showDialog());
$noteTabContainer.on("click", ".show-link-map-button", showLinkMapDialog);
- keyboardActionService.setActionHandler("ShowLinkMap", showLinkMapDialog);
+ keyboardActionService.setGlobalActionHandler("ShowLinkMap", showLinkMapDialog);
const showOptionsDialog = () => import(OPTIONS).then(d => d.showDialog());
$("#options-button").on('click', showOptionsDialog);
- keyboardActionService.setActionHandler("ShowOptions", showOptionsDialog);
+ keyboardActionService.setGlobalActionHandler("ShowOptions", showOptionsDialog);
const showHelpDialog = () => import(HELP).then(d => d.showDialog());
$("#show-help-button").on('click', showHelpDialog);
- keyboardActionService.setActionHandler("ShowHelp", showHelpDialog);
+ keyboardActionService.setGlobalActionHandler("ShowHelp", showHelpDialog);
const showSqlConsoleDialog = () => import(SQL_CONSOLE).then(d => d.showDialog());
$("#open-sql-console-button").on('click', showSqlConsoleDialog);
- keyboardActionService.setActionHandler("ShowSQLConsole", showSqlConsoleDialog);
+ keyboardActionService.setGlobalActionHandler("ShowSQLConsole", showSqlConsoleDialog);
$("#show-about-dialog-button").on('click', () => import(ABOUT).then(d => d.showDialog()));
if (utils.isElectron()) {
$("#history-navigation").show();
$("#history-back-button").on('click', window.history.back);
- keyboardActionService.setActionHandler("BackInNoteHistory", window.history.back);
+ keyboardActionService.setGlobalActionHandler("BackInNoteHistory", window.history.back);
$("#history-forward-button").on('click', window.history.forward);
- keyboardActionService.setActionHandler("ForwardInNoteHistory", window.history.forward);
+ keyboardActionService.setGlobalActionHandler("ForwardInNoteHistory", window.history.forward);
}
// hide (toggle) everything except for the note content for zen mode
@@ -113,9 +113,9 @@ function registerEntrypoints() {
};
$("#toggle-zen-mode-button").on('click', toggleZenMode);
- keyboardActionService.setActionHandler("ToggleZenMode", toggleZenMode);
+ keyboardActionService.setGlobalActionHandler("ToggleZenMode", toggleZenMode);
- keyboardActionService.setActionHandler("InsertDateTimeToText", () => {
+ keyboardActionService.setGlobalActionHandler("InsertDateTimeToText", () => {
const date = new Date();
const dateString = utils.formatDateTime(date);
@@ -123,7 +123,7 @@ function registerEntrypoints() {
});
$("#reload-frontend-button").on('click', utils.reloadApp);
- keyboardActionService.setActionHandler("ReloadFrontendApp", utils.reloadApp);
+ keyboardActionService.setGlobalActionHandler("ReloadFrontendApp", utils.reloadApp);
$("#open-dev-tools-button").toggle(utils.isElectron());
@@ -135,7 +135,7 @@ function registerEntrypoints() {
};
$("#open-dev-tools-button").on('click', openDevTools);
- keyboardActionService.setActionHandler("OpenDevTools", openDevTools);
+ keyboardActionService.setGlobalActionHandler("OpenDevTools", openDevTools);
}
let findInPage;
@@ -157,7 +157,7 @@ function registerEntrypoints() {
caseSelectedColor: 'var(--main-border-color)'
});
- keyboardActionService.setActionHandler("FindInText", () => {
+ keyboardActionService.setGlobalActionHandler("FindInText", () => {
if (!glob.activeDialog || !glob.activeDialog.is(":visible")) {
findInPage.openFindWindow();
}
@@ -177,7 +177,7 @@ function registerEntrypoints() {
$("#toggle-fullscreen-button").on('click', toggleFullscreen);
- keyboardActionService.setActionHandler("ToggleFullscreen", toggleFullscreen);
+ keyboardActionService.setGlobalActionHandler("ToggleFullscreen", toggleFullscreen);
}
else {
// outside of electron this is handled by the browser
@@ -185,8 +185,8 @@ function registerEntrypoints() {
}
if (utils.isElectron()) {
- keyboardActionService.setActionHandler("ZoomOut", zoomService.decreaseZoomFactor);
- keyboardActionService.setActionHandler("ZoomIn", zoomService.increaseZoomFactor);
+ keyboardActionService.setGlobalActionHandler("ZoomOut", zoomService.decreaseZoomFactor);
+ keyboardActionService.setGlobalActionHandler("ZoomIn", zoomService.increaseZoomFactor);
}
$(document).on('click', "a[data-action='note-revision']", async event => {
@@ -201,7 +201,7 @@ function registerEntrypoints() {
return false;
});
- keyboardActionService.setActionHandler("CloneNotesTo", () => import(CLONE_TO).then(d => {
+ keyboardActionService.setGlobalActionHandler("CloneNotesTo", () => import(CLONE_TO).then(d => {
const activeNode = treeService.getActiveNode();
const selectedOrActiveNodes = treeService.getSelectedOrActiveNodes(activeNode);
@@ -211,7 +211,7 @@ function registerEntrypoints() {
d.showDialog(noteIds);
}));
- keyboardActionService.setActionHandler("MoveNotesTo", () => import(MOVE_TO).then(d => {
+ keyboardActionService.setGlobalActionHandler("MoveNotesTo", () => import(MOVE_TO).then(d => {
const activeNode = treeService.getActiveNode();
const selectedOrActiveNodes = treeService.getSelectedOrActiveNodes(activeNode);
@@ -219,7 +219,7 @@ function registerEntrypoints() {
d.showDialog(selectedOrActiveNodes);
}));
- keyboardActionService.setActionHandler("CreateNoteIntoDayNote", async () => {
+ keyboardActionService.setGlobalActionHandler("CreateNoteIntoDayNote", async () => {
const todayNote = await dateNoteService.getTodayNote();console.log(todayNote);
const notePath = await treeService.getSomeNotePath(todayNote);
@@ -233,14 +233,14 @@ function registerEntrypoints() {
});
});
- keyboardActionService.setActionHandler("EditBranchPrefix", async () => {
+ keyboardActionService.setGlobalActionHandler("EditBranchPrefix", async () => {
const node = treeService.getActiveNode();
const editBranchPrefixDialog = await import("../dialogs/branch_prefix.js");
editBranchPrefixDialog.showDialog(node);
});
- keyboardActionService.setActionHandler("ToggleNoteHoisting", async () => {
+ keyboardActionService.setGlobalActionHandler("ToggleNoteHoisting", async () => {
const node = treeService.getActiveNode();
hoistedNoteService.getHoistedNoteId().then(async hoistedNoteId => {
@@ -257,7 +257,7 @@ function registerEntrypoints() {
});
});
- keyboardActionService.setActionHandler("SearchInSubtree", () => {
+ keyboardActionService.setGlobalActionHandler("SearchInSubtree", () => {
const node = treeService.getActiveNode();
searchNotesService.searchInSubtree(node.data.noteId);
diff --git a/src/public/javascripts/services/keyboard_actions.js b/src/public/javascripts/services/keyboard_actions.js
index 886e7b094..1fec0ee98 100644
--- a/src/public/javascripts/services/keyboard_actions.js
+++ b/src/public/javascripts/services/keyboard_actions.js
@@ -33,7 +33,7 @@ const keyboardActionsLoaded = server.get('keyboard-actions').then(actions => {
}
});
-function setActionHandler(actionName, handler) {
+function setGlobalActionHandler(actionName, handler) {
keyboardActionsLoaded.then(() => {
const action = keyboardActionRepo[actionName];
@@ -51,6 +51,24 @@ function setActionHandler(actionName, handler) {
});
}
+function setElementActionHandler($el, actionName, handler) {
+ keyboardActionsLoaded.then(() => {
+ const action = keyboardActionRepo[actionName];
+
+ if (!action) {
+ throw new Error(`Cannot find keyboard action '${actionName}'`);
+ }
+
+ // not setting action.handler since this is not global
+
+ for (const shortcut of action.effectiveShortcuts) {
+ if (shortcut) {
+ utils.bindElShortcut($el, shortcut, handler);
+ }
+ }
+ });
+}
+
async function triggerAction(actionName) {
const action = getAction(actionName);
@@ -105,7 +123,8 @@ function updateDisplayedShortcuts($container) {
$(() => updateDisplayedShortcuts($(document)));
export default {
- setActionHandler,
+ setGlobalActionHandler,
+ setElementActionHandler,
triggerAction,
getAction,
updateDisplayedShortcuts
diff --git a/src/public/javascripts/services/note_detail.js b/src/public/javascripts/services/note_detail.js
index 343836e7d..7a65b982d 100644
--- a/src/public/javascripts/services/note_detail.js
+++ b/src/public/javascripts/services/note_detail.js
@@ -420,17 +420,17 @@ $(tabRow.el).on('contextmenu', '.note-tab', e => {
});
});
-keyboardActionService.setActionHandler('OpenNewTab', () => {
+keyboardActionService.setGlobalActionHandler('OpenNewTab', () => {
openEmptyTab();
});
-keyboardActionService.setActionHandler('CloseActiveTab', () => {
+keyboardActionService.setGlobalActionHandler('CloseActiveTab', () => {
if (tabRow.activeTabEl) {
tabRow.removeTab(tabRow.activeTabEl);
}
});
-keyboardActionService.setActionHandler('ActivateNextTab', () => {
+keyboardActionService.setGlobalActionHandler('ActivateNextTab', () => {
const nextTab = tabRow.nextTabEl;
if (nextTab) {
@@ -438,7 +438,7 @@ keyboardActionService.setActionHandler('ActivateNextTab', () => {
}
});
-keyboardActionService.setActionHandler('ActivatePreviousTab', () => {
+keyboardActionService.setGlobalActionHandler('ActivatePreviousTab', () => {
const prevTab = tabRow.previousTabEl;
if (prevTab) {
diff --git a/src/public/javascripts/services/note_detail_code.js b/src/public/javascripts/services/note_detail_code.js
index f00048054..bea8a4e0f 100644
--- a/src/public/javascripts/services/note_detail_code.js
+++ b/src/public/javascripts/services/note_detail_code.js
@@ -3,7 +3,7 @@ import bundleService from "./bundle.js";
import toastService from "./toast.js";
import server from "./server.js";
import noteDetailService from "./note_detail.js";
-import utils from "./utils.js";
+import keyboardActionService from "./keyboard_actions.js";
class NoteDetailCode {
@@ -17,7 +17,7 @@ class NoteDetailCode {
this.$editorEl = this.$component.find('.note-detail-code-editor');
this.$executeScriptButton = ctx.$tabContent.find(".execute-script-button");
- utils.bindElShortcut(ctx.$tabContent, "ctrl+return", () => this.executeCurrentNote());
+ keyboardActionService.setElementActionHandler(ctx.$tabContent, 'RunActiveNote', () => this.executeCurrentNote());
this.$executeScriptButton.on('click', () => this.executeCurrentNote());
}
diff --git a/src/public/javascripts/services/tree.js b/src/public/javascripts/services/tree.js
index c446f6793..58fbf2569 100644
--- a/src/public/javascripts/services/tree.js
+++ b/src/public/javascripts/services/tree.js
@@ -796,7 +796,7 @@ ws.subscribeToOutsideSyncMessages(async syncData => {
}
});
-keyboardActionService.setActionHandler('CreateNoteAfter', async () => {
+keyboardActionService.setGlobalActionHandler('CreateNoteAfter', async () => {
const node = getActiveNode();
const parentNoteId = node.data.parentNoteId;
const isProtected = await treeUtils.getParentProtectedStatus(node);
@@ -868,9 +868,9 @@ async function reloadNotes(noteIds, activateNotePath = null) {
window.glob.createNoteInto = createNoteInto;
-keyboardActionService.setActionHandler('CreateNoteInto', createNoteInto);
+keyboardActionService.setGlobalActionHandler('CreateNoteInto', createNoteInto);
-keyboardActionService.setActionHandler('ScrollToActiveNote', scrollToActiveNote);
+keyboardActionService.setGlobalActionHandler('ScrollToActiveNote', scrollToActiveNote);
$(window).bind('hashchange', async function() {
if (isNotePathInAddress()) {
@@ -908,7 +908,7 @@ async function duplicateNote(noteId, parentNoteId) {
}
-keyboardActionService.setActionHandler('CollapseTree', () => collapseTree()); // don't use shortened form since collapseTree() accepts argument
+keyboardActionService.setGlobalActionHandler('CollapseTree', () => collapseTree()); // don't use shortened form since collapseTree() accepts argument
$collapseTreeButton.on('click', () => collapseTree());
$createTopLevelNoteButton.on('click', createNewTopLevelNote);
diff --git a/src/public/javascripts/services/utils.js b/src/public/javascripts/services/utils.js
index f5f3aafbd..e52e27918 100644
--- a/src/public/javascripts/services/utils.js
+++ b/src/public/javascripts/services/utils.js
@@ -139,6 +139,7 @@ function bindElShortcut($el, keyboardShortcut, handler) {
if (isDesktop()) {
keyboardShortcut = keyboardShortcut
.toLowerCase()
+ .replace("enter", "return")
.replace("ctrl+alt", "alt+ctrl")
.replace("meta+alt", "alt+meta"); // alt needs to be first
diff --git a/src/services/keyboard_actions.js b/src/services/keyboard_actions.js
index 8de4f1d13..77c62d41f 100644
--- a/src/services/keyboard_actions.js
+++ b/src/services/keyboard_actions.js
@@ -26,67 +26,46 @@ const DEFAULT_KEYBOARD_ACTIONS = [
defaultShortcuts: ["CommandOrControl+J"],
description: 'Open "Jump to note" dialog'
},
-
-
- {
- separator: "Tabs"
- },
- {
- actionName: "OpenNewTab",
- defaultShortcuts: isElectron ? ["CommandOrControl+T"] : []
- },
{
- actionName: "CloseActiveTab",
- defaultShortcuts: isElectron ? ["CommandOrControl+W"] : []
- },
- {
- actionName: "ActivateNextTab",
- defaultShortcuts: isElectron ? ["CommandOrControl+Tab"] : []
- },
- {
- actionName: "ActivatePreviousTab",
- defaultShortcuts: isElectron ? ["CommandOrControl+Shift+Tab"] : []
- },
-
-
- {
- separator: "Dialogs"
- },
- {
- actionName: "ShowAttributes",
- defaultShortcuts: ["Alt+A"]
+ actionName: "ScrollToActiveNote",
+ defaultShortcuts: ["CommandOrControl+."]
},
{
- actionName: "ShowNoteInfo",
- defaultShortcuts: []
+ actionName: "SearchNotes",
+ defaultShortcuts: ["CommandOrControl+S"]
},
{
- actionName: "ShowNoteSource",
- defaultShortcuts: []
+ actionName: "SearchInSubtree",
+ defaultShortcuts: ["CommandOrControl+Shift+S"],
+ description: "Search for notes in the active note's subtree"
},
{
- actionName: "ShowLinkMap",
- defaultShortcuts: []
+ actionName: "CollapseTree",
+ defaultShortcuts: ["Alt+C"]
},
{
- actionName: "ShowOptions",
- defaultShortcuts: []
+ actionName: "CollapseSubtree",
+ defaultShortcuts: ["Alt+-"],
+ description: "Collapses subtree of current note"
},
{
- actionName: "ShowNoteRevisions",
- defaultShortcuts: []
+ actionName: "FocusNote",
+ defaultShortcuts: ["Enter"]
},
{
- actionName: "ShowRecentChanges",
- defaultShortcuts: []
+ actionName: "ActivateParentNote",
+ defaultShortcuts: ["Backspace"],
+ description: "Activates parent note of currently active note"
},
{
- actionName: "ShowHelp",
- defaultShortcuts: ["F1"]
+ actionName: "SortChildNotes",
+ defaultShortcuts: ["Alt+S"],
+ description: "Sort child notes"
},
+
+
{
- actionName: "PrintActiveNote",
- defaultShortcuts: []
+ separator: "Creating and moving notes"
},
{
actionName: "CreateNoteAfter",
@@ -101,22 +80,6 @@ const DEFAULT_KEYBOARD_ACTIONS = [
defaultShortcuts: ["global:CommandOrControl+Alt+P"],
description: "Create and open subnote of a current day note"
},
- {
- actionName: "ScrollToActiveNote",
- defaultShortcuts: ["CommandOrControl+."]
- },
- {
- actionName: "CollapseTree",
- defaultShortcuts: ["Alt+C"]
- },
- {
- actionName: "FocusNote",
- defaultShortcuts: ["return"]
- },
- {
- actionName: "RunCurrentNote",
- defaultShortcuts: ["CommandOrControl+return"]
- },
{
actionName: "DeleteNotes",
defaultShortcuts: ["Delete"],
@@ -143,15 +106,29 @@ const DEFAULT_KEYBOARD_ACTIONS = [
description: "Move note down in hierarchy"
},
{
- actionName: "AddNoteAboveToSelection",
- defaultShortcuts: ["Shift+Up"],
- description: "Add note above to the selection"
+ actionName: "EditNoteTitle",
+ defaultShortcuts: ["Enter"],
+ description: "Edit active note title"
},
{
- actionName: "AddNoteBelowToSelection",
- defaultShortcuts: ["Shift+Down"],
- description: "Add note above to the selection"
+ actionName: "EditBranchPrefix",
+ defaultShortcuts: ["F2"],
+ description: "Show Edit branch prefix dialog"
+ },
+ {
+ actionName: "CloneNotesTo",
+ defaultShortcuts: ["CommandOrControl+Shift+C"]
},
+ {
+ actionName: "MoveNotesTo",
+ defaultShortcuts: ["CommandOrControl+Shift+C"]
+ },
+
+ {
+ separator: "Note clipboard"
+ },
+
+
{
actionName: "CopyNotesToClipboard",
defaultShortcuts: ["CommandOrControl+C"],
@@ -168,77 +145,120 @@ const DEFAULT_KEYBOARD_ACTIONS = [
description: "Cut selected notes to the clipboard"
},
{
- actionName: "EditBranchPrefix",
- defaultShortcuts: ["F2"],
- description: "Show Edit branch prefix dialog"
+ actionName: "SelectAllNotesInParent",
+ defaultShortcuts: ["CommandOrControl+A"],
+ description: "Select all notes from the current note level"
},
{
- actionName: "CollapseSubtree",
- defaultShortcuts: ["Alt+-"],
- description: "Collapses subtree of current note"
+ actionName: "AddNoteAboveToSelection",
+ defaultShortcuts: ["Shift+Up"],
+ description: "Add note above to the selection"
},
{
- actionName: "SortChildNotes",
- defaultShortcuts: ["Alt+S"],
- description: "Sort child notes"
+ actionName: "AddNoteBelowToSelection",
+ defaultShortcuts: ["Shift+Down"],
+ description: "Add note above to the selection"
},
+
+
{
- actionName: "ActivateParentNote",
- defaultShortcuts: ["Backspace"],
- description: "Activates parent note of currently active note"
+ separator: "Tabs"
},
{
- actionName: "ToggleNoteHoisting",
- defaultShortcuts: ["Alt+H"],
- description: "Toggles note hoisting of active note"
+ actionName: "OpenNewTab",
+ defaultShortcuts: isElectron ? ["CommandOrControl+T"] : []
},
{
- actionName: "SearchInSubtree",
- defaultShortcuts: ["CommandOrControl+Shift+S"],
- description: "Search for notes in the active note's subtree"
+ actionName: "CloseActiveTab",
+ defaultShortcuts: isElectron ? ["CommandOrControl+W"] : []
},
{
- actionName: "EditNoteTitle",
- defaultShortcuts: ["Return"],
- description: "Edit active note title"
+ actionName: "ActivateNextTab",
+ defaultShortcuts: isElectron ? ["CommandOrControl+Tab"] : []
},
{
- actionName: "SelectAllNotesInParent",
- defaultShortcuts: ["CommandOrControl+A"],
- description: "Select all notes from the current note level"
+ actionName: "ActivatePreviousTab",
+ defaultShortcuts: isElectron ? ["CommandOrControl+Shift+Tab"] : []
},
+
+
{
- separator: "Text note operations"
+ separator: "Dialogs"
},
{
- actionName: "AddLinkToText",
- defaultShortcuts: ["CommandOrControl+L"],
- description: "Open dialog to add link to the text"
+ actionName: "ShowAttributes",
+ defaultShortcuts: ["Alt+A"]
},
{
- actionName: "CloneNotesTo",
- defaultShortcuts: ["CommandOrControl+Shift+C"]
+ actionName: "ShowNoteInfo",
+ defaultShortcuts: []
},
{
- actionName: "MoveNotesTo",
- defaultShortcuts: ["CommandOrControl+Shift+C"]
+ actionName: "ShowNoteSource",
+ defaultShortcuts: []
},
{
- actionName: "SearchNotes",
- defaultShortcuts: ["CommandOrControl+S"]
+ actionName: "ShowLinkMap",
+ defaultShortcuts: []
+ },
+ {
+ actionName: "ShowOptions",
+ defaultShortcuts: []
+ },
+ {
+ actionName: "ShowNoteRevisions",
+ defaultShortcuts: []
+ },
+ {
+ actionName: "ShowRecentChanges",
+ defaultShortcuts: []
},
{
actionName: "ShowSQLConsole",
defaultShortcuts: ["Alt+O"]
},
{
- actionName: "RunSQL",
- defaultShortcuts: ["CommandOrControl+return"]
+ actionName: "ShowHelp",
+ defaultShortcuts: ["F1"]
+ },
+
+
+ {
+ separator: "Text note operations"
+ },
+
+ {
+ actionName: "AddLinkToText",
+ defaultShortcuts: ["CommandOrControl+L"],
+ description: "Open dialog to add link to the text"
},
{
actionName: "InsertDateTimeToText",
defaultShortcuts: ["Alt+T"]
},
+
+ {
+ separator: "Other"
+ },
+
+ {
+ actionName: "PrintActiveNote",
+ defaultShortcuts: []
+ },
+ {
+ actionName: "RunActiveNote",
+ defaultShortcuts: ["CommandOrControl+Enter"],
+ description: "Run active JavaScript (frontend/backend) code note"
+ },
+ {
+ actionName: "ToggleNoteHoisting",
+ defaultShortcuts: ["Alt+H"],
+ description: "Toggles note hoisting of active note"
+ },
+ {
+ actionName: "RunSQL",
+ defaultShortcuts: ["CommandOrControl+Enter"]
+ },
{
actionName: "ReloadFrontendApp",
defaultShortcuts: ["F5", "CommandOrControl+R"]