Co-authored-by: JavenLu233 <javenlu233@163.com>
This commit is contained in:
JavenLu233
2026-05-08 13:54:48 +08:00
committed by GitHub
parent 162bf33e47
commit 0d097b1400

View File

@@ -658,7 +658,18 @@ export const keydown = (protyle: IProtyle, editorElement: HTMLElement) => {
) ||
(!firstEditElement && nodeElement === protyle.wysiwyg.element.firstElementChild)) {
// 不能用\n判断否则文字过长折行将错误 https://github.com/siyuan-note/siyuan/issues/6156
if (getSelectionPosition(nodeEditableElement, range).top - nodeEditableElement.getBoundingClientRect().top < 20 || nodeElement.classList.contains("av")) {
// 代码块中光标在第一行之后时不应跳到标题,因为 getSelectionPosition 对非第一行的计算是错误的 https://github.com/siyuan-note/siyuan/issues/17602
let skipJumpToTitle = false;
if (nodeElement.classList.contains("code-block")) {
const hljsElement = nodeElement.querySelector(".hljs");
const codeText = hljsElement?.textContent || "";
const firstNewlineIndex = codeText.indexOf("\n");
// 有多行并且在第一行之后则需要skipJumpToTitle
if (firstNewlineIndex !== -1 && position.start > firstNewlineIndex) {
skipJumpToTitle = true;
}
}
if ((getSelectionPosition(nodeEditableElement, range).top - nodeEditableElement.getBoundingClientRect().top < 20 || nodeElement.classList.contains("av")) && !skipJumpToTitle) {
if (protyle.title && protyle.title.editElement &&
(protyle.wysiwyg.element.firstElementChild.getAttribute("data-eof") === "1" ||
protyle.contentElement.scrollTop === 0)) {