news 2026/9/11 9:32:02

思源笔记 v3.6.5 版本深入解析:编辑器细节改进、数据层修复与开发者 API 增强

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
思源笔记 v3.6.5 版本深入解析:编辑器细节改进、数据层修复与开发者 API 增强

思源笔记 v3.6.5 版本深入解析:编辑器细节改进、数据层修复与开发者 API 增强

【免费下载链接】siyuanAn open-source, privacy-first, self-hosted knowledge workspace where humans and AI agents work together 开源、隐私优先、自托管的知识工作空间,让人与智能体在此协作项目地址: https://gitcode.com/GitHub_Trending/si/siyuan

导读

思源笔记(SiYuan)v3.6.5 是 3.6.x 系列中的一个细节打磨型版本,官方概述仅一句「此版本改進了一些細節」,但实际变更横跨编辑器交互、数据索引、移动端体验、剪藏插件与插件开发 API 五个层面。本文将结合本仓库源码,逐条解读该版本的 20 项改进、11 项缺陷修复、1 项 Electron 升级与 3 项开发者能力增强,帮助桌面端、移动端用户与插件开发者准确理解每个变更的影响面与底层实现。

概述:一次「细节」背后的系统性打磨

v3.6.5 的改进清单看似零散,实则围绕三条主线展开:编辑器与 Markdown 数据层的一致性(任务清单data-task索引、表格撤销光标、粘贴锚文本解码)、跨端交互一致性(iOS 点击跳顶、移动端工具栏隐藏、行级文字外观)、插件 API 能力补齐openTabdoc.mode参数与 Protyle 实例的switchMode方法)。

改進功能:编辑器、索引与交互的 12 项增强

1. 将标签、书签和资源的重新命名视为数据历史中的Replace操作

此前,对标签、书签、资源(附件)的重新命名在数据历史(undo 历史记录)中的操作类型归属不够明确。v3.6.5 统一将这类重命名计入Replace(替换)操作。

从内核源码可以验证这一分类体系的落点:kernel/model/history.go 中定义了HistoryOpReplace = "replace",并纳入合法操作集合validOps(L1070)。而标签、书签、资源三处重命名路径分别调用getHistoryDir(HistoryOpReplace)生成历史目录:kernel/model/bookmark.go(书签)、kernel/model/assets.go(资源)。这意味着重命名操作现在会被数据历史机制完整记录,并可在历史面板中按Replace类型检索与回滚。

2. 改进行动端行级文字的外观设定

移动端对行内文字(如行级样式)的外观配置得到改进,涉及移动端编辑器对 Protyle 渲染的适配,相关入口位于 app/src/mobile/editor.ts(移动端编辑器切换编辑模式时对 Protyle 的调用)。

3. 行动端点选编辑器外部时工具列不会隐藏

修复了移动端编辑状态下,点击编辑器外部区域导致工具栏意外收起的交互问题,提升了移动端单手操作时的稳定性。

4. 改进任务清单项目中data-task标记的 Markdown 索引

任务清单项(todo)在 Markdown 中以data-task属性标记完成状态(如[ ][x])。本次改进让该属性在 Markdown 索引与解析链路中被更正确地处理。前端侧,任务状态的切换逻辑位于 app/src/protyle/util/editorCommonEvent.ts(通过setAttribute("data-task", ...)/removeAttribute("data-task")维护状态),配合内核索引的同步改进,保证了搜索与大纲等依赖索引的功能对任务状态变化的一致性响应。

5. 改进标签切换

标签页(Tab)之间的切换行为得到优化,涉及标签激活、内容刷新与布局重建的协调,相关实现可参考 app/src/layout 目录下的标签管理代码。

6. 改进贴上超链接时对锚文本的解码

粘贴超链接时,对链接锚文本(anchor text)中的 URL 编码字符(如%20%E4%B8%AD)进行正确的解码还原。前端提示与填充链路中多处使用decodeURIComponent处理data-value与链接文本,例如 app/src/protyle/hint/index.ts 与 app/src/protyle/toolbar/index.ts,本次改进使粘贴场景下的解码行为与这些既有路径保持一致。

7. 改良kbd字体--b3-font-family-kbd

kbd(键盘按键样式)的字体系列由 CSS 变量--b3-font-family-kbd控制,本次对该变量的字体栈进行了改良。该变量在样式系统中被广泛引用:app/src/assets/scss/component/_typography.scss(L90)、_menu.scss(L372)、business/_config.scss(L285)、business/_search.scss(L169)以及util/_function.scss(L149),同时快捷键设置面板的搜索输入框也直接应用该字体(app/src/config/tabs/keymapUi.ts)。若用户自定义主题,可通过覆盖该变量统一调整所有kbd元素的外观。

8. 将 macOS 上预设的重做快捷键改为⇧⌘Z

macOS 平台的重做(Redo)默认快捷键从⌘⇧Z之外的旧组合统一调整为业界惯例的⇧⌘Z,与 macOS 系统级文本编辑习惯保持一致。快捷键配置可通过「设置 → 快捷键」面板自定义,相关 UI 在 app/src/config/tabs/keymapUi.ts。

9. 改进表格中撤销后的游标定位

修复了表格内执行撤销操作后光标位置不合理的问题,使撤销后的光标重新定位到编辑发生处,提升表格编辑的连续性。

10. 优化程式码区块行号渲染以提升效能

代码块行号的渲染逻辑被重构优化。底层实现在 app/src/protyle/render/highlightRender.ts 的lineNumberRender函数中:该函数通过比较行号元素与代码元素的高度差来判定是否触发渲染,并动态计算行高(lineHeight)、统计换行后的实际行数(lineList)、在代码开启自动换行(word-break: break-word)时通过临时 DOM 节点精确测量行号栏宽度(L141-L154)。本次优化减少了不必要的重绘与 DOM 计算,在长代码块与大量代码块场景下收益明显。

11. 改进资料索引

数据索引(database index)的构建与更新逻辑得到改进,影响全文搜索、反链、关系图谱等依赖索引的功能,相关实现位于 kernel/sql 与 kernel/model 目录。

12. 改进输入法相容性

修复了特定输入法(尤其是中文、日文等东亚输入法)在编辑过程中的组合态显示问题,涉及编辑器中输入法 composition 事件的处理。

13. 改进剪藏扩展解决图片过大无法剪藏

网页剪藏扩展(Clipper)在处理超大图片时的失败问题得到解决,剪藏流程现在能更好地应对大体积图片资源的抓取与入库。

修复缺陷:11 项影响日常使用的稳定性修复

  • iOS 上点击编辑器导致页面跳到顶部(#17454):修复移动端 Safari/WebView 中点击编辑区触发滚动位置重置的问题。
  • IFrame 区块无法编辑(#17486):修复嵌入的 IFrame 块在编辑模式下无法正常交互的问题。
  • 将链接贴到资料库资源栏位时建立重复条目(#17492):修复数据库资源(asset)字段粘贴链接后产生重复条目的问题,这属于数据库字段写入逻辑的边界处理。
  • 大纲不会自动刷新(#17493):修复文档内容变化后右侧大纲面板不自动更新的问题。大纲更新逻辑通过 app/src/editor/util.ts 的updateOutline触发,该函数会在 Protyle 渲染完成后被调用(见 app/src/protyle/util/setEditMode.ts)。
  • 云端设定介面中事件缺失(#17495):修复云服务设置界面部分事件未正确绑定的问题。
  • 分割标签页后出现空白区域(#17499):修复标签页分割(split)后布局残留空白的问题。
  • 修复一些安全漏洞(#17503):该版本包含安全修复,建议所有用户及时升级。
  • 启动时缺少window.siyuan.config导致报错(#17508):修复某些启动场景下前端全局配置对象缺失引发的异常,window.siyuan.config是前端读取编辑器配置(如代码块行号开关codeSyntaxHighlightLineNum、默认字号fontSize)的入口(见 app/src/protyle/render/highlightRender.ts)。
  • 斜线选单中的「引用」选项无法搜寻(#17510):修复斜杠菜单(/)中「引用」条目的过滤搜索失效问题。
  • 由于 Cookie 过长导致授权页验证失败(#17512):修复 Cookie 体积过大时授权/登录页面校验失败的问题,属于鉴权链路的健壮性修复。
  • 修复预览模式下大纲的问题(#17551):修复文档处于预览模式(Preview)时大纲面板的显示异常。

开发重构:升级至 Electron v40.9.1

桌面端运行时从旧版本 Electron 升级至v40.9.1(#17501)。Electron 是思源桌面端的 Web 容器(入口见 app/electron/main.js),升级主要带来 Chromium 内核的渲染性能、Web 安全与 API 兼容性提升。需要说明的是,本仓库当前版本已迭代至更高版本,根目录 app/package.json 中electron依赖已为 42.6.1,v3.6.5 引入的 v40.9.1 属于当时发布时刻的基线,实际体验请以你安装版本对应的运行时为准。

开发者:面向插件生态的 3 项 API 增强

1. 独立视窗中卸载插件报错修复

修复了在独立窗口(separate window)中执行插件卸载时报错的问题,完善了多窗口场景下的插件生命周期管理。

2. 为openTab新增文件开启模式参数doc.mode

插件 APIopenTabdoc参数新增mode字段,用于指定文档打开时的编辑模式,默认值为"wysiwyg"。参数类型为TEditorMode(取值为"wysiwyg""preview")。完整的参数签名定义在 app/src/plugin/API.ts:

openTab = (options: { app: App, doc?: { id: string, // 块 id action?: TProtyleAction[], // cb-get-all / cb-get-focus / cb-get-hl 等 zoomIn?: boolean, // 是否缩放 mode?: TEditorMode, // 文档打开模式,默认 "wysiwyg" }, pdf?: { path: string, page?: number, id?: string }, asset?: { path: string }, search?: Config.IUILayoutTabSearchConfig, card?: { type: TCardType, id?: string, title?: string }, custom?: { title: string, icon: string, data?: any, id: string }, ... })

mode参数会被透传给openFileById(app/src/plugin/API.ts),从而控制新开标签页的初始渲染模式。插件开发者可以在打开文档时直接指定预览模式,省去额外切换。

3. 为 Protyle 实例新增switchMode方法

Protyle 类(编辑器核心实例)新增公开方法switchMode(mode: TEditorMode),定义于 app/src/protyle/index.ts:

public switchMode(mode: TEditorMode) { setEditMode(this.protyle, mode); }

其内部委托给 app/src/protyle/util/setEditMode.ts 的setEditMode:切换为"preview"时隐藏内容区、显示预览区并重新渲染,同时刷新大纲(updateOutline);切换回"wysiwyg"时反向恢复并触发resize;最后统一隐藏浮动 UI(工具栏、选区、提示等)并向所有插件广播switch-protyle-mode事件(L41-L43)。这意味着插件现在可以以编程方式精确控制单个编辑器实例的渲染模式,并借助事件总线感知模式切换。

此前,setEditMode仅在快捷键(app/src/boot/globalEvent/keydown.ts)、菜单(app/src/menus/util.ts)、移动端返回(app/src/mobile/util/MobileBackFoward.ts)等内部路径使用,switchMode的加入将这一能力开放给了插件开发者。

小结与升级建议

思源笔记 v3.6.5 通过「改进 + 修复 + 开发者 API」三类变更,完成了对编辑器细节、数据索引一致性、移动端交互与插件能力的一次系统性打磨。对普通用户而言,最直观的收益是:表格撤销光标、粘贴锚文本、输入法兼容、iOS 点击跳顶等高频痛点被消除;对插件开发者而言,doc.modeswitchMode让「按需打开文档并以指定模式渲染」成为一等公民能力。

该版本还包含安全漏洞修复,若你仍停留在 3.6.x 早期版本,建议升级至 v3.6.5 或更新版本,以获得安全补丁与上述全部改进。

【免费下载链接】siyuanAn open-source, privacy-first, self-hosted knowledge workspace where humans and AI agents work together 开源、隐私优先、自托管的知识工作空间,让人与智能体在此协作项目地址: https://gitcode.com/GitHub_Trending/si/siyuan

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/11 9:32:01

微信车险投保系统Java实现:授权、支付与核保全链路

简介:本资源是一套基于Java开发的微信平台车险投保系统毕业设计源码,面向计算机及相关专业本科生,解决课程设计与毕业设计中缺乏真实业务场景项目参考的问题。系统完整实现用户投保、保单管理、微信支付对接及后台审核等核心流程,…

作者头像 李华
网站建设 2026/9/11 9:31:44

WorkBuddy开放平台接入实战:从Agent设计到本地部署全攻略

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/11 9:31:26

W5500硬件TCP/IP协议栈深度解析:寄存器映射与SPI时序设计

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/11 9:27:41

OI-wiki 归并排序全解析:稳定分治排序、合并过程与逆序对计数

OI-wiki 归并排序全解析:稳定分治排序、合并过程与逆序对计数 【免费下载链接】OI-wiki :star2: Wiki of OI / ICPC for everyone. (某大型游戏线上攻略,内含炫酷算术魔法) 项目地址: https://gitcode.com/GitHub_Trending/oi/O…

作者头像 李华
网站建设 2026/9/11 9:18:20

CYW240128驱动与ESP32+FPGA协同开发实战指南

1. 项目概述:别被标题带偏——CYW240128 驱动例程的本质与边界 CYW240128 是 Cypress(现属英飞凌)推出的一款高度集成的 Wi-Fi 蓝牙双模 SoC,主打低功耗、高可靠性与工业级通信能力。它本身不是主控芯片,而是典型的“…

作者头像 李华