修改Typora的代碼以支持文件夾和文件混合排序


用Markdown文件寫筆記,用文件夾做分類,整個筆記文檔項目構成了一個樹形結構。筆記文章之間、文章與分類之間經常有特定的先后順序,於是就在文件名前面加上數字前綴來控制排序。但是,Windows的文件系統始終把文件夾和文件分開來排序,一般是所有文件夾排在所有普通文件之前,Typora也采用了這種策略,這對我的筆記組織造成了一些不便。因此,我嘗試對Typora的程序代碼進行一些修改,以支持文件夾和文件混合排序。

image

Typora是基於Electron的應用程序,編程語言是解釋型的JavaScript,而不是編譯型語言,因此應該可以找到其執行的JS文件,修改其中的代碼來添加我們自己的邏輯。Typora還允許打開DevTools,這更方便我們調試。

在Typora中打開DevTools,觀察到其加載了幾個JS文件,其中一個是C:\Program Files\Typora\resources\appsrc\window\frame.js,猜測是整個應用程序窗口的代碼。在文件最后添加一個alert(),重啟Typora,看到有彈窗,說明確實可以執行我們自己的代碼。

Typora中的JS文件都是編譯壓縮后的,修改前要先用VSCode或WebStorm格式化一下。因為經過編譯,所以變量名、程序流程寫法等都不容易閱讀,需要一些耐心去理解。

image

在DevTools中查看側邊欄文件樹的DOM結構,發現文件夾結點下的所有子文件(文件夾和普通文件)都位於.file-node-children元素中,因此,只要修改渲染這個DOM的邏輯,就可以實現自定義排序。

image

frame.js中搜索file-node-children,共有3處,查看、調試分析,發現了渲染文件列表的核心方法renderNode()。每個文件結點數據中,子目錄結點放在subdir屬性(數組)中,子文章結點放在content屬性(數組)中,它們是分開排序、分開渲染的。那么,只需要合並這兩個數組,放在一起一次性排序、渲染就可以實現混排了。添加代碼,重啟Typora,發現成功了。

image

image

image

此外,還要繼續分析、修改其他幾處代碼,才能讓文件列表始終都能正確混合排序,比如onAddFile()方法中添加了文件結點,那么也要調整邏輯適應新排序方式。思路和過程類似,就不詳述了。

一番分析、修改、調試下來,任務最終完成了。實現不難,重要的是走一走這種逆向工程,把學到的知識用起來的過程。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM