diff --git a/src/editor/commands.js b/src/editor/commands.js index 38e38ac..3f34c58 100644 --- a/src/editor/commands.js +++ b/src/editor/commands.js @@ -8,9 +8,11 @@ import { deleteToLineEnd, deleteToLineStart, simplifySelection, splitLine, + insertNewlineAndIndent, } from "@codemirror/commands" import { foldCode, unfoldCode } from "@codemirror/language" import { selectNextOccurrence } from "@codemirror/search" +import { insertNewlineContinueMarkup } from "@codemirror/lang-markdown" import { addNewBlockAfterCurrent, addNewBlockBeforeCurrent, addNewBlockAfterLast, addNewBlockBeforeFirst, insertNewBlockAtCursor, @@ -113,6 +115,8 @@ const NON_EDITOR_CONTEXT_COMMANDS = { simplifySelection, splitLine, transposeChars, + insertNewlineAndIndent, + insertNewlineContinueMarkup, } for (const [key, cmCommand] of Object.entries(NON_EDITOR_CONTEXT_COMMANDS)) { diff --git a/src/editor/editor.js b/src/editor/editor.js index 5e01729..0d4d062 100644 --- a/src/editor/editor.js +++ b/src/editor/editor.js @@ -1,7 +1,7 @@ import { Annotation, EditorState, Compartment, Facet, EditorSelection, Transaction, Prec } from "@codemirror/state" -import { EditorView, keymap, drawSelection, ViewPlugin, lineNumbers } from "@codemirror/view" +import { EditorView, keymap as cmKeymap, drawSelection, ViewPlugin, lineNumbers } from "@codemirror/view" import { indentUnit, forceParsing, foldGutter, ensureSyntaxTree } from "@codemirror/language" -import { markdown } from "@codemirror/lang-markdown" +import { markdown, markdownKeymap } from "@codemirror/lang-markdown" import { closeBrackets } from "@codemirror/autocomplete"; import { undo, redo } from "@codemirror/commands" @@ -110,8 +110,12 @@ export class HeynoteEditor { autoSaveContent(this, AUTO_SAVE_INTERVAL), + // Markdown extensions, we need to add markdownKeymap manually with the highest precedence + // so that it takes precedence over the default keymap todoCheckboxPlugin, - markdown(), + markdown({addKeymap: false}), + Prec.highest(cmKeymap.of(markdownKeymap)), + links, ], }) diff --git a/src/editor/keymap.js b/src/editor/keymap.js index 35e4982..34f3ad5 100644 --- a/src/editor/keymap.js +++ b/src/editor/keymap.js @@ -40,6 +40,8 @@ const isLinux = window.heynote.platform.isLinux const isWindows = window.heynote.platform.isWindows export const DEFAULT_KEYMAP = [ + cmd("Enter", "insertNewlineAndIndent"), + cmd("Mod-a", "selectAll"), cmd("Mod-Enter", "addNewBlockAfterCurrent"), cmd("Mod-Shift-Enter", "addNewBlockAfterLast"), @@ -149,6 +151,13 @@ export const EMACS_KEYMAP = [ export function heynoteKeymap(editor, keymap, userKeymap) { + //return [ + // keymapFromSpec([ + // ...Object.entries(userKeymap).map(([key, command]) => cmd(key, command)), + // ...keymap, + // ], editor), + //] + // merge the default keymap with the custom keymap const defaultKeys = Object.fromEntries(keymap.map(km => [km.key, km.command])) //let mergedKeys = Object.entries({...defaultKeys, ...Object.fromEntries(userKeymap.map(km => [km.key, km.command]))}).map(([key, command]) => cmd(key, command))