Fix redo shortcut on Windows, table rendering at doc start, and save on tab close

- Bind Mod-Shift-z to redo on all platforms (CodeMirror only binds it on Linux/macOS)
- Render tables based on editor focus so a note starting with a table is not shown as source
- Send the save request without waiting for the IndexedDB draft write, and flush on pagehide;
  Firefox could drop the last edit when a tab was closed right after typing
- Fall back to clipboardData.items when pasting images with an empty files list
This commit is contained in:
eezd committed 2026-10-16 19:19:16 +08:00
1 parent b3f05b501a
commit a11e0ec498
6 files changed
+103 -10

No files matched your search

+4 -2
View File
@@ -1,4 +1,4 @@
import { defaultKeymap, history, historyKeymap, indentWithTab } from '@codemirror/commands'
import { defaultKeymap, history, historyKeymap, indentWithTab, redo } from '@codemirror/commands'
import { markdownKeymap, markdownLanguage } from '@codemirror/lang-markdown'
import { EditorState, Prec, type Extension } from '@codemirror/state'
import { drawSelection, EditorView, keymap, type ViewUpdate } from '@codemirror/view'
@@ -31,7 +31,9 @@ export function createEditorState(opts: EditorStateOptions): EditorState {
livePreview,
codeBlockHighlight,
tableEditing,
keymap.of([indentWithTab, ...defaultKeymap, ...historyKeymap]),
// CodeMirror 只在 Linux/Mac 上把 Ctrl/Cmd+Shift+Z 绑定为重做,Windows 上会退化成撤销;
// 与 Typora、VS Code 保持一致,所有平台都支持
keymap.of([indentWithTab, { key: 'Mod-Shift-z', run: redo, preventDefault: true }, ...defaultKeymap, ...historyKeymap]),
EditorView.contentAttributes.of({ spellcheck: 'false', autocapitalize: 'sentences' }),
]
if (opts.resolveImage) extensions.push(resolveImageUrl.of(opts.resolveImage))