
思源笔记 v3.1.20 版本解析编辑器细节打磨、数据库字段改进与插件 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.1.20 的官方更新日志v3.1.20_zh_CHT.md、v3.1.20_zh_CN.md展开逐一解析该版本 21 项功能改进、1 项开发重构与 2 项插件 API 变更并结合仓库前端app/src与内核kernel源码说明每一项改动背后的实现位置与使用影响。读完本文你可以完整了解 v3.1.20 的改动全貌掌握新增插件 APIopenSetting的用法、addFloatLayer参数调整后的正确调用方式以及 PlantUML、PDF 标注、移动端代理等配置在源码中的落点。版本总览一次面向细节的稳定性迭代v3.1.20 的官方概述只有一句话——该版本改进了一些细节但实际变更清单覆盖了编辑器交互、行级元素解析、数据库字段、超级块与列表编辑、反向链接、PDF 标注、剪藏扩展、移动端以及开发者 API等多个维度共 21 项功能改进。这说明该版本的主基调是在既有功能体系上做精细化打磨而非引入全新的大模块。按主题可归纳为以下六类主题类别涉及变更项数典型改进编辑器交互体验5页签拖动高亮、工具栏隐藏、窗口控件避让、拖拽改进行级元素与解析4复制移除 Markdown 标记、行级代码/下划线解析数据库属性视图2字段内容转义、更改字段类型超级块、列表与反向链接5合并约束、反向链接传递与计数导入、PDF、PlantUML、剪藏4PDF 标注转文本、PlantUML 超链接点击移动端与网络2Android 保活通知、移动端代理设置以下按主题逐项解析。编辑器交互体验改进页签拖动高亮改进页签拖动时的高亮反馈PR 13549让用户在拖拽页签Tab过程中能更清晰地看到目标插入位置。此项属于前端布局模块的视觉反馈优化相关拖拽逻辑位于 app/src/layout 下的布局管理代码中。工具栏的显示与避让两项改动共同优化了工具栏的可用性当鼠标按在工具栏以外的元素上时隐藏工具栏issue 13653改进了编辑器浮动工具栏的显隐判定避免鼠标点击正文后工具栏仍残留遮挡视线。避免窗口控件覆盖 SiYuan 工具栏按钮PR 13771主要针对桌面端窗口确保系统窗口控制按钮最小化/最大化/关闭不会与思源自身的工具栏按钮发生层叠覆盖。文档、大纲、数据库和块的拖拽改进文档、大纲、数据库和块的拖动issue 13785属于跨模块的拖拽体验统一优化覆盖了左侧文档树、大纲面板、数据库视图以及编辑器内的块拖拽场景可视为该版本交互层的一次集中梳理。行级元素与 Markdown 解析改进复制行级元素时移除 Markdown 标记符此前的复制行为可能把行级元素背后的 Markdown 标记符如行级代码的反引号、下划线的等一并带出导致粘贴到其他应用时出现多余的符号。v3.1.20 改为复制时剥离标记符只保留纯文本内容提升了复制—粘贴到外部的体验。支持复制图片文件后多次粘贴修复了复制图片文件后只能粘贴一次的问题issue 13736现在复制一张图片后可以在文档中连续多次粘贴。这与前端的剪贴板处理逻辑相关对应仓库 app/src/asset 目录下的资源处理代码。改进行级代码元素解析行级代码inline code的解析逻辑得到改进issue 13754主要涉及 Markdown 解析边界情况的处理——例如行内代码中的特殊字符、相邻标记等场景。思源使用 app/stage/protyle 中内置的 Lute 引擎完成 Markdown 解析。改进下划线元素解析下划线元素解析同样得到改进issue 13768保证文本之类的标记在复杂上下文嵌套、边界符号中仍能被正确识别与渲染。数据库属性视图字段改进主键、关联和汇总字段的内容转义数据库属性视图的主键、关联relation和汇总rollup字段在展示时其内容中的特殊字符可能被错误解析。该版本改进了这些字段的内容转义issue 13704确保特殊字符按字面值展示。数据库相关的表与字段渲染逻辑分布在 kernel/av内核属性视图模块与 app/src/protyle前端渲染中。改进更改数据库字段类型当用户在属性视图中把某个字段从一种类型切换为另一种类型时涉及值的兼容转换与空值处理。该版本改进了这一流程issue 13797降低误操作导致的数据异常风险。超级块、列表与反向链接超级块合并约束当超级块的所有子块都被选中时不再支持合并为超级块issue 13729。这是一个合理的边界约束全部子块选中再合并会产生语义歧义因此直接禁用该操作。改进列表超级块编辑列表项作为超级块的编辑场景issue 13764得到改进主要涉及列表嵌套层级下的块操作正确性。相关块操作逻辑位于 kernel/treenode 目录。反向链接的传递与计数反向链接是本版本改进的重点方向之一共涉及三项改进列表项、超级块和引用块的反向链接传递issue 13776修复了嵌套结构列表项、超级块、引用块中反向链接未能正确向上传递的问题文档块标题的反向链接计数包括子块issue 13791文档块标题上显示的反向链接数量现在会包含其所有子块产生的引用统计口径更完整改进块内容统计issue 13759配合反向链接与字数统计的底层计算逻辑做了修正。反向链接的生成与聚合逻辑位于 kernel/model/backlink.go。PDF 标注转文本与 PlantUML 超链接PDF 标注支持转换为文本v3.1.20 支持将 PDF 标注转换为文本issue 13742意味着用户可以把在 PDF 上的高亮、批注等标注内容抽取为可编辑的文本。内核中 PDF 相关能力链接标注提取等位于 kernel/model/pdf.go。支持点击 PlantUML 图表超链接PlantUML 图表中的超链接此前无法点击跳转该版本支持点击issue 13801。PlantUML 的渲染服务地址由配置项plantUMLServePath控制默认值为https://www.plantuml.com/plantuml/svg/~1其默认值定义可见 kernel/conf/editor.go并在 kernel/api/setting.go 的配置处理中做了兜底补全。该配置同样可在界面设置 → 编辑器中修改。导入、剪藏与移动端改进导入配置导入功能的配置项处理得到改进issue 13767涉及导入时的路径与格式选项的解析正确性。思源内核导入相关逻辑位于 kernel/model/import.go。改进浏览器剪藏扩展的懒加载图片处理针对浏览器剪藏扩展Web Clipper抓取页面时遇到的懒加载图片data-src等抓取不全的问题该版本做了改进issue 13810使剪藏结果中的图片能更完整地落入文档。支持通过网络伺服设置移动端代理当通过局域网/网络伺服访问移动端时现在支持设置代理issue 13784方便在受限网络环境下使用移动端连接桌面内核。网络伺服相关能力由 kernel/server/serve.go 提供。支持在 Android 上设置保活通知文本Android 端新增保活通知文本的自定义能力issue 13815用户可以在通知栏中看到更友好的常驻通知文案降低进程被系统回收的概率。开发重构升级至 Electron v32.2.8本版本将桌面端运行时从旧版 Electron 升级至v32.2.8issue 13752属于安全性与稳定性驱动的例行升级。桌面端构建相关配置位于 app/electron-builder.yml 及各平台的构建文件中如 app/electron-builder-linux.ymlElectron 主进程入口为 app/electron/main.js。插件 API 更新面向开发者v3.1.20 对插件 API 做了两项调整对插件开发者有直接影响。新增插件 APIopenSetting新增插件 APIopenSettingPR 13761用于以编程方式打开插件的设置对话框。其前端实现位于 app/src/plugin/index.ts核心逻辑如下public openSetting() { if (!this.setting) { return; } this.setting.open(this.displayName || this.name); }即仅当插件声明了setting配置面板时才打开设置对话框标题取插件的显示名或名称。该 API 已被导出到插件 API 集合中见 app/src/plugin/API.ts。此外内核侧也提供了对应的设置对话框辅助能力插件还可在顶部工具栏菜单中通过openSetting入口打开设置相关调用见 app/src/plugin/openTopBarMenu.ts。使用示例插件代码中// 插件需声明 setting 配置面板 this.openSetting();更改插件 APIaddFloatLayer的参数addFloatLayer的参数由原先的多个独立参数改为聚合为一个 options 对象issue 13816。从当前源码 app/src/plugin/index.ts 可以确认其新签名public addFloatLayer (options: { refDefs: IRefDefs[], x?: number, y?: number, targetElement?: HTMLElement, originalRefBlockIDs?: IObject, isBacklink: boolean, }) { window.siyuan.blockPanels.push(new BlockPanel({ app: this.app, originalRefBlockIDs: options.originalRefBlockIDs, targetElement: options.targetElement, isBacklink: options.isBacklink, x: options.x, y: options.y, refDefs: options.refDefs, })); };从源码结构看原有参数originalRefBlockIDs、targetElement、isBacklink、x、y、refDefs全部被保留在options对象内部因此已使用旧签名调用addFloatLayer的插件需要将调用方式改写为// 旧this.addFloatLayer(app, originalRefBlockIDs, targetElement, x, y, refDefs, isBacklink); // 新聚合为 options 对象 this.addFloatLayer({ originalRefBlockIDs: ids, targetElement: el, x: 0, y: 0, refDefs: refs, isBacklink: false, });该 API 用于在编辑器内打开一个基于块引用的浮动面板BlockPanel常用于实现引用浮层、反链面板类功能。下载与升级v3.1.20 已在各平台发布桌面端可通过官方下载页与各平台发布渠道获取移动端可通过应用商店升级。升级后建议关注上述数据库字段、超级块、反向链接相关的行为变化插件开发者则务必检查addFloatLayer的调用签名是否已适配新参数形式。小结v3.1.20 是思源笔记在细节层面的一次集中打磨编辑器交互与行级元素解析更顺手、数据库字段处理更健壮、反向链接统计口径更完整同时为移动端和剪藏场景补齐了多项实用能力。对开发者而言新增的openSettingAPI 降低了插件配置面板的接入成本而addFloatLayer的参数聚合则要求插件作者跟进适配。如果你想深入验证文中提到的每处实现细节可直接在仓库中查阅对应的源码路径。【免费下载链接】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),仅供参考