思源筆記 v3.5.8 技術解析:表格標題、閃卡互動與跨端細節優化
本篇文章基於思源筆記(SiYuan)v3.5.8 版本的官方更新日誌(v3.5.8_zh_CHT.md),逐一拆解該版本在編輯器、表格、閃卡、行動端、匯入匯出與 RTL 顯示等方面的細節改進,並結合 app/src 與 kernel/model 中的原始碼實現,說明每項變更背後的實際行為與底層原理。讀完本文,你將掌握 v3.5.8 帶來的具體功能變化、對應的原始碼位置,以及這些改進對日常寫作、知識管理與跨平台使用的實際影響。
版本概覽:一次面向細節的打磨
v3.5.8 是一個典型的「細節改進型」版本。官方在概述中僅用一句「此版本改進了一些細節」來概括,但從完整的變更清單來看,其改動橫跨四大類別:改進功能(16 項)、修復缺陷(7 項)、開發重構(1 項)。改動覆蓋了桌面端(Windows / macOS / Linux)、行動端(iOS / Android)、鴻蒙系統以及微軟商店分發版本,涉及編輯器交互、表格操作、閃卡(間隔重複)、剪藏、匯出、資源檔案管理等多條核心鏈路。
值得一提的是,其中多數改進項(如表格標題、一鍵插入多行多列、閃卡互動)都能在當前開源倉庫中找到對應的實作程式碼,這為理解該版本的技術內容提供了直接的原始碼依據。
表格能力增強:標題設定與批量插入
v3.5.8 在表格方向同時落地了兩項實用改進:
- 支援為表格設定標題(issue #17002)
- 表格的右鍵選單支援一鍵插入多行多列(issue #17051)
表格標題的實作方式
表格標題功能對應前端原始碼中的 updateTableTitle 函數,位於 app/src/protyle/util/table.ts#L828-L888。從實作細節可以看出其完整的交互流程:
- 觸發後彈出一個 Dialog 對話框,標題欄填入標題文字,位置選單提供「上方 / 下方」兩個選項;
- 確認後,程式會以
<caption>元素的形式把標題插入到表格中,若選擇「下方」,則為<caption>增加style="caption-side: bottom;"樣式(見 table.ts#L869); - 同時在表格區塊節點上寫入
caption屬性,用於持久化標題資訊; - 若清空標題文字,則移除
<caption>元素與caption屬性,實現標題的刪除; - 整個過程透過
updateTransaction記錄變更,確保可以正常進入撤銷/重做(undo/redo)歷史。
這種以 HTML 原生 <caption> + caption-side CSS 屬性來實作的方式,既保證了語意化結構,也讓標題位置的呈現完全交給瀏覽器排版引擎處理,對齊了 Markdown 標準中對表格標題的常見語法習慣。
一鍵插入多行多列
「一鍵插入多行多列」實作於 app/src/menus/protyle.ts#L2376-L2466。原始碼顯示,表格右鍵選單中的四個指令——insertRowAbove(在上方插入行)、insertRowBelow(在下方插入行)、insertColumnLeft(在左側插入列)、insertColumnRight(在右側插入列)——均在其標籤內嵌了一個數字輸入框:
<input type="number" step="1" min="1" value="1" ...>
也就是說,使用者可以在選單內直接輸入要插入的行/列數量(最小 1),點擊後程式會呼叫 insertRowAbove / insertRow / insertColumn 並把輸入的數值作為參數傳入,實現一次插入多行或多列,免去逐次操作的麻煩。此外,這四個指令都綁定了對應的鍵盤快捷鍵(accelerator),其預設值定義於 app/src/constants.ts 的鍵位配置結構中,使用者可以在「設定 → 按鍵綁定」中自訂。
合併儲存格後的換行處理
與表格相關的還有另一項細節改進:合併儲存格後改進換行處理 br(issue #17050)。該改進針對的是表格合併儲存格後,內部的 <br> 換行元素在視覺與資料層面的呈現一致性問題,確保合併操作不會破壞儲存格內的換行結構。
閃卡互動改進
v3.5.8 改進了閃卡互動(issue #16701)。閃卡(flashcard)是思源筆記基於 FSRS / 間隔重複演算法實現的知識複習功能,其後端核心邏輯集中在 kernel/model/flashcard.go。
從原始碼結構可以梳理出閃卡互動的完整鏈路:
GetFlashcardsByBlockIDs:根據區塊 ID 批量取得閃卡;ReviewFlashcard:對卡片進行複習評分,內部維護reviewCardCache與skipCardCache快取,用於支援「撤銷後再次複習」以及「跳過過濾」的操作(見 flashcard.go#L464-L471 的註釋);SkipReviewFlashcard:跳過當前卡片;resetFlashcards/SetFlashcardsDueTime:重設卡片狀態與調整到期時間;GetNotebookDueFlashcards等查詢函數:支撐「待複習卡片」的清單呈現。
v3.5.8 的「改進閃卡互動」正是在這套鏈路之上對交互細節(例如複習中的操作回應、卡片狀態切換)進行的打磨,讓長期的間隔重複使用體驗更流暢。
行動端體驗優化
v3.5.8 在行動端有多項針對性的改進與修復,這在思源筆記的版本迭代中屬於較為密集的一次行動端調整:
- 改進行動端的資源檔案編輯介面(issue #16670):優化了在手機/平板上編輯圖片、附件等資源檔案時的操作介面,使其更適合觸控與小螢幕場景;
- 修復在 iPhone 上編輯器滾動緩慢(issue #17052):解決 iOS 上捲動效能問題;
- 修復在某些 Android 裝置上鍵盤彈出後會自動收起(issue #17058):解決特定 Android 機型輸入法與編輯器焦點競爭導致的鍵盤異常收起。
行動端的資源初始化邏輯可從 app/src/mobile/index.ts#L18 的 initAssets 呼叫處切入追蹤,其後端對應的資源管理能力由 kernel/model/assets.go 等檔案提供。
匯入匯出與剪藏鏈路改進
本版本的匯出與剪藏相關改動較多,且互相關聯:
- 改進導入 .sy.zip(issue #17047):.sy.zip 是思源筆記的標準打包交換格式,本次改進針對導入流程中的相容性與完整性問題;
- 修復 Windows 上無法匯出資源檔案(issue #17045)與修復匯出 Markdown 時未匯出任何資源檔案(issue #17046):這兩個缺陷直接影響「導出後附件丟失」的用戶體驗,v3.5.8 一併修復;
- 改進將區塊引用匯出為腳註(issue #17059):優化了包含區塊引用內容的匯出結果,使其在匯出為腳註形式時結構更合理;
- 改進 HTML 清單剪藏(issue #17062)與改進 HTML 區塊級元素中嵌套行級元素的剪藏(issue #17063):剪藏功能(網頁正文抓取)依賴 HTML 到思源區塊結構的轉換,這兩項改進提升了嵌套列表與行級元素在剪藏後的重構準確性。
匯出相關的執行緒可參考 kernel/model/export.go 與 kernel/model/export_merge.go,Markdown 轉換底層則依賴 lute 引擎(見 kernel/util/lute.go)。
桌面端與系統整合細節
桌面端在本版本同樣有不少「小而關鍵」的改進:
- 將區塊圖示拖曳到停靠面板時編輯器不再捲動(issue #16618):拖曳區塊圖示(block icon)至停靠面板時,編輯器會產生非預期的捲動,本次已修正;
- 圖表寬度變化後重新渲染(issue #16633):當圖表(如 Mermaid 等)寬度因容器變化而改變時,會自動觸發重新渲染,避免顯示失真;
- 支援設定「開啟頁籤時不分割畫面」(issue #16833):為頁籤開啟行為新增一個開關,關閉後開啟頁籤不再自動分割視窗,滿足偏好在同一個視窗內堆疊開啟的使用者;
- 修正對話方塊互動後 Windows 上的焦點問題(issue #16862,PR):修復 Windows 平台上操作對話方塊後視窗焦點錯亂的問題;
- 在微軟商店版本中不再自動設定 Pandoc 參數(issue #17044):由於微軟商店分發環境的限制,該版本不再自動注入 Pandoc 參數,改由使用者手動配置,避免匯出異常;
- 在 Windows 和 macOS 的資源檔案選單中支援複製檔案(issue #17049,PR):資源檔案(圖片、附件)的右鍵選單新增「複製檔案」操作,可以直接把檔案複製到剪貼簿。
RTL(從右到左)語系的顯示改善
v3.5.8 改善從右到左(RTL)方向的數學、表格、圖表和程式碼區塊的顯示(issue #17069)。這是一項面向阿拉伯語、希伯來語等 RTL 語系使用者的基礎性改進:在 RTL 文檔中嵌入數學公式、表格、圖表與程式碼區塊時,這些「從左到右」的內容需要在雙向文字(bidi)環境下保持正確的排版方向。
前端中與 RTL 相關的處理散見於 app/src/protyle 目錄下的多個渲染模組(如 app/src/protyle/render/av/render.ts 等),v3.5.8 透過補齊這些區塊在 RTL 容器中的方向與對齊規則,改善了混合語系文檔的可讀性。
缺陷修復清單
除上述已分類說明的修復外,本版本還包含以下缺陷修復:
- 在浮動視窗中刪除焦點區塊會導致控制台錯誤(issue #16729):浮動視窗(如反鏈面板、屬性視窗)中刪除當前焦點區塊時,原先會觸發控制台報錯,現已修復;
- 鴻蒙系統升級後出現白屏或崩潰(issue #17043):針對鴻蒙(HarmonyOS)端系統升級後的相容性問題進行修復;
- 在某些情況下,main.js 在啟動時拋出錯誤(issue #17048):桌面端啟動階段偶發的
main.js異常已被處理。
開發重構:升級至 Electron v39.6.1
v3.5.8 的開發重構項為升級至 Electron v39.6.1(issue #17067)。Electron 是思源筆記桌面端的底層執行容器(入口見 app/electron/main.js),升級框架版本會帶來 V8/Chromium 引擎的效能與安全性更新,同時也為後續版本的功能迭代鋪路。
需要說明的是,當前倉庫的 app/package.json 中 electron 的開發依賴已演進至更高的版本號(該檔案同時宣告了當前專案版本為 3.7.2 之後的迭代狀態),這意味著 v3.5.8 的 Electron 升級是思源筆記持續跟進上游框架的節點之一,後續版本仍在持續更新。
升級與取得方式
v3.5.8 版本可透過思源筆記官方網站的下載頁面以及各分發渠道(桌面端安裝包、微軟商店、行動端應用商店)取得。升級前建議先備份工作空間資料(思源筆記的資料以 .sy 檔案與資源目錄的形式存放於工作空間中,相關格式說明可參考 docs/SY-FORMAT.zh-CN.md)。在應用程式內也可直接使用「設定 → 關於 → 檢查更新」完成版本升級。
小結
v3.5.8 雖然被官方描述為「改進了一些細節」,但實際上是一次覆蓋面相當廣的細節品質版本:表格標題與批量插入提升了結構化寫作效率,閃卡互動改進強化了長期複習體驗,行動端與鴻蒙端的修復照顧到了多平台使用者,匯入匯出與剪藏鏈路的修正則直接改善了資料流轉的可靠性。配合 app/src/protyle/util/table.ts、app/src/menus/protyle.ts 與 kernel/model/flashcard.go 等原始碼,可以清晰地看到這些「細節改進」背後完整的實作與演進脈絡——正是這些點點滴滴的打磨,構成了思源筆記持續迭代的產品節奏。
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust0634
MiniCPM5-2BMiniCPM5-2B 是一款面向端侧、本地部署和资源受限场景的 2B 稠密 Transformer,能够达到同尺寸开源模型 SOTA 水平。Markdown00
jforgamejforgame是一个一站式游戏服务器开发框架。包含游戏服务器开发所需要的各种组件,比如网关,socket服务端与客户端,自定义高效消息编解码,游戏热更新,游戏通用工具等等。包含游戏服,跨服,匹配服,后台管理系统等实现,同时提供大量业务案例以供学习。亦可用于其他socket应用,例如及时聊天等。Java01
fizz-gateway-nodeAn Aggregation API Gateway in Java . FizzGate 是一个基于 Java开发的微服务聚合网关,是拥有自主知识产权的应用网关国产化替代方案,能够实现热服务编排聚合、自动授权选择、线上服务脚本编码、在线测试、高性能路由、API审核管理、回调管理等目的,拥有强大的自定义插件系统可以自行扩展,并且提供友好的图形化配置界面,能够快速帮助企业进行API服务治理、减少中间层胶水代码以及降低编码投入、提高 API 服务的稳定性和安全性。Java00
certd开源SSL证书管理工具;全自动证书申请、更新、续期;通配符证书,泛域名证书申请;证书自动化部署到阿里云、腾讯云、主机、群晖、宝塔;https证书,pfx证书,der证书,TLS证书,nginx证书自动续签自动部署JavaScript00
Spark-X2.5-1.7BSpark-X2.5-1.7B 旨在让强大的 AI 更加实用、高效且易于获取。这些模型在广泛的日常任务中表现出色,涵盖对话、写作、翻译、推理、编程、工具调用和智能体工作流,并在同等规模的开源模型中取得领先结果。Spark-X2.5 将面向效率的架构与最高 1M tokens 的原生上下文窗口相结合,并支持 200 多种语言。Python00