首页
/ 思源筆記 v3.5.8 技術解析:表格標題、閃卡互動與跨端細節優化

思源筆記 v3.5.8 技術解析:表格標題、閃卡互動與跨端細節優化

2026-09-09 11:32:52作者:瞿蔚英Wynne

本篇文章基於思源筆記(SiYuan)v3.5.8 版本的官方更新日誌(v3.5.8_zh_CHT.md),逐一拆解該版本在編輯器、表格、閃卡、行動端、匯入匯出與 RTL 顯示等方面的細節改進,並結合 app/srckernel/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。從實作細節可以看出其完整的交互流程:

  1. 觸發後彈出一個 Dialog 對話框,標題欄填入標題文字,位置選單提供「上方 / 下方」兩個選項;
  2. 確認後,程式會以 <caption> 元素的形式把標題插入到表格中,若選擇「下方」,則為 <caption> 增加 style="caption-side: bottom;" 樣式(見 table.ts#L869);
  3. 同時在表格區塊節點上寫入 caption 屬性,用於持久化標題資訊;
  4. 若清空標題文字,則移除 <caption> 元素與 caption 屬性,實現標題的刪除;
  5. 整個過程透過 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:對卡片進行複習評分,內部維護 reviewCardCacheskipCardCache 快取,用於支援「撤銷後再次複習」以及「跳過過濾」的操作(見 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#L18initAssets 呼叫處切入追蹤,其後端對應的資源管理能力由 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.gokernel/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.jsonelectron 的開發依賴已演進至更高的版本號(該檔案同時宣告了當前專案版本為 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.tsapp/src/menus/protyle.tskernel/model/flashcard.go 等原始碼,可以清晰地看到這些「細節改進」背後完整的實作與演進脈絡——正是這些點點滴滴的打磨,構成了思源筆記持續迭代的產品節奏。

登录后查看全文
热门项目推荐
相关项目推荐

项目优选

收起
kernelkernel
deepin linux kernel
C
33
18
docsdocs
暂无描述
Markdown
900
5.83 K
ops-transformerops-transformer
本项目是CANN提供的transformer类大模型算子库,实现网络在NPU上加速计算。
C++
1.14 K
2.76 K
pytorchpytorch
作为 Ascend for PyTorch 社区的核心组件,TorchNPU 是昇腾专为 PyTorch 打造的深度学习适配插件,使 PyTorch 框架能够直接调用昇腾 NPU,为开发者提供昇腾 AI 处理器的超强算力。
Python
860
1.35 K
ops-nnops-nn
本项目是CANN提供的神经网络类计算算子库,实现网络在NPU上加速计算。
C++
927
1.85 K
jiuwenswarmjiuwenswarm
JiuwenSwarm 是一款基于openJiuwen开发的智能AI Agent,它能够将大语言模型的强大能力,通过你日常使用的各类通讯应用,直接延伸至你的指尖。
Python
3.94 K
1.02 K
kernelkernel
openEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。
C
533
603
ops-mathops-math
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
1.37 K
1.46 K
AscendNPU-IRAscendNPU-IR
AscendNPU-IR是基于MLIR(Multi-Level Intermediate Representation)构建的,面向昇腾亲和算子编译时使用的中间表示,提供昇腾完备表达能力,通过编译优化提升昇腾AI处理器计算效率,支持通过生态框架使能昇腾AI处理器与深度调优
C++
548
396
cann-learning-hubcann-learning-hub
CANN 学习中心仓,支持在线互动运行、边学边练,提供教程、示例与优化方案,一站式助力昇腾开发者快速上手。
Jupyter Notebook
1.04 K
527