skip to content
鰭狀漏斗

Obsidian 外掛程式:CJK Count

/ 閱讀時間 4 分鐘

之前寫了一篇文章,說 Obsidian 沒有中文字數統計很不方便。所以我就試著寫寫看外掛程式,結果只花一天就給我寫出來了!

外掛程式還在等待 Obsidian 官方審查中。現在要使用只能先在儲存庫的 .obsidian 資料夾裡新增一個資料夾,然後在 release 頁面 下載 main.jsmanifest.json,儲存到剛剛的資料夾裡,在設定 > 第三方外掛程式這邊啟用這個外掛程式。

做這個外掛程式的時候,我有向 ChatGPT 詢問一下意見,它給我一段能用的程式碼,只要稍微改過就可以發佈了,讓我少了很多研究的時間。我對 Obsidian 內部完全不熟,要完成這個外掛程式勢必要知道如何取得筆記內容、如何在筆記內容變更的時候更新字數以及如何在狀態列顯示字數。要知道這些,要把開發文件翻過幾遍才可能會知道,ChatGPT 卻在一次 prompt 就給出來了,真的是很方便。

不過監聽切換筆記的事件 ChatGPT 倒是選的不太好。它選的 active-leaf-change 會在換筆記時觸發多次,這樣顯示的字數會有不正常的跳動。後來它建議改用 file-open 事件,雖然的確在開筆記時只觸發一次,但是統計的可能是上一則筆記的字數。只能再加一個延遲,讓程式晚一點統計字數。

統計字數的時候要先分辨出哪些是中日韓統一表意文字,為此我選用的是 cjk-regex 這個函式庫。然而建置出來的 bundle 竟然高達 348 KB,以這麼簡單的程式來說算很大了。看 bundle 發現裡面大多數都是數字陣列,大概是 cjk-regex 或它相依的函式庫產生的,但實際用來辨別中日韓統一表意文字的正則表達式卻只有不到 200 B。為了減少 bundle 大小,我只能先用 cjk-regex 產生正則表達式的 .js 檔,然後再讓我的程式引用這個結果。這麼做讓 bundle 大小減少到只有 2.5 KB,這才是這種程式該有的大小。

以上就是 CJK Count 這個外掛程式在製作時印象比較深刻的地方。