From b1499d721ca454639e52214425d14033c386e099 Mon Sep 17 00:00:00 2001 From: Vanessa Date: Mon, 29 Aug 2022 12:24:19 +0800 Subject: [PATCH] :art: fix https://github.com/siyuan-note/siyuan/issues/5748 --- app/src/menus/protyle.ts | 1 + app/src/protyle/gutter/index.ts | 2 ++ app/src/protyle/wysiwyg/keydown.ts | 42 ++++++++++++++++++++++++------ 3 files changed, 37 insertions(+), 8 deletions(-) diff --git a/app/src/menus/protyle.ts b/app/src/menus/protyle.ts index 24f58f244..73172316b 100644 --- a/app/src/menus/protyle.ts +++ b/app/src/menus/protyle.ts @@ -257,6 +257,7 @@ export const contentMenu = (protyle: IProtyle, nodeElement: Element) => { }).element); window.siyuan.menus.menu.append(new MenuItem({ label: window.siyuan.languages.copyPlainText, + accelerator: window.siyuan.config.keymap.editor.general.copyPlainText.custom, click() { focusByRange(getEditorRange(nodeElement)); const cloneContents = getSelection().getRangeAt(0).cloneContents(); diff --git a/app/src/protyle/gutter/index.ts b/app/src/protyle/gutter/index.ts index 2c571fcca..94cf83163 100644 --- a/app/src/protyle/gutter/index.ts +++ b/app/src/protyle/gutter/index.ts @@ -487,6 +487,7 @@ export class Gutter { }).element); window.siyuan.menus.menu.append(new MenuItem({ label: window.siyuan.languages.copyPlainText, + accelerator: window.siyuan.config.keymap.editor.general.copyPlainText.custom, click() { let html = ""; selectsElement.forEach(item => { @@ -854,6 +855,7 @@ export class Gutter { } }, { label: window.siyuan.languages.copyPlainText, + accelerator: window.siyuan.config.keymap.editor.general.copyPlainText.custom, click() { let text = ""; nodeElement.querySelectorAll('[contenteditable="true"]').forEach(item => { diff --git a/app/src/protyle/wysiwyg/keydown.ts b/app/src/protyle/wysiwyg/keydown.ts index 195b5e0af..bd820f033 100644 --- a/app/src/protyle/wysiwyg/keydown.ts +++ b/app/src/protyle/wysiwyg/keydown.ts @@ -232,14 +232,6 @@ export const keydown = (protyle: IProtyle, editorElement: HTMLElement) => { } } - if (!isCtrl(event) && event.key !== "Backspace" && event.key !== "Escape" && event.key !== "Delete" && !event.shiftKey && !event.altKey && - !matchHotKey(window.siyuan.config.keymap.editor.list.indent.custom, event) && - !matchHotKey(window.siyuan.config.keymap.editor.list.outdent.custom, event) && - !matchHotKey(window.siyuan.config.keymap.editor.general.newContentFile.custom, event) && - event.key !== "Enter") { - hideElements(["select"], protyle); - } - if (range.toString() !== "") { // 选中后继续输入 https://ld246.com/article/1626710391372 if (protyle.toolbar.getCurrentType(range).length > 0) { @@ -1446,6 +1438,35 @@ export const keydown = (protyle: IProtyle, editorElement: HTMLElement) => { event.stopPropagation(); } + if (matchHotKey(window.siyuan.config.keymap.editor.general.copyPlainText.custom, event)) { + if (range.toString() === "") { + const selectsElement: HTMLElement[] = Array.from(protyle.wysiwyg.element.querySelectorAll(".protyle-wysiwyg--select")); + let html = ""; + if (selectsElement.length === 0) { + selectsElement.push(nodeElement) + } + selectsElement.forEach(item => { + item.querySelectorAll('[contenteditable="true"]').forEach(editItem => { + const cloneNode = editItem.cloneNode(true) as HTMLElement; + cloneNode.querySelectorAll('[data-type="backslash"]').forEach(slashItem => { + slashItem.firstElementChild.remove(); + }); + html += cloneNode.textContent + "\n"; + }); + }); + writeText(html.trimEnd()); + } else { + const cloneContents = range.cloneContents(); + cloneContents.querySelectorAll('[data-type="backslash"]').forEach(item => { + item.firstElementChild.remove(); + }); + writeText(cloneContents.textContent); + } + event.preventDefault(); + event.stopPropagation(); + return; + } + if (matchHotKey(window.siyuan.config.keymap.editor.general.vLayout.custom, event)) { event.preventDefault(); event.stopPropagation(); @@ -1619,5 +1640,10 @@ export const keydown = (protyle: IProtyle, editorElement: HTMLElement) => { return; } /// #endif + + // 置于最后,太多快捷键会使用到选中元素 + if (!isCtrl(event) && event.key !== "Backspace" && event.key !== "Escape" && event.key !== "Delete" && !event.shiftKey && !event.altKey && event.key !== "Enter") { + hideElements(["select"], protyle); + } }); };