這是 Emacs 和 Org 模式系列的第四篇。
至今為止,你已經見識到了 Org 模式的強大和高效,如果你像我一樣,你可能會想:
“我真的很想讓它在我所有的裝置上同步。”
或者是說:
“我能在 Org 模式中轉發郵件嗎?”
答案當然是肯定的,因為這就是 Emacs。
由於 Org 模式只使用文字檔案,所以使用任意工具都可以很容易地實現同步。我使用的是 git 的 git-remote-gcrypt
。由於 git-remote-gcrypt
的一些限制,每台機器都傾向於推到自己的分支,並使用命令來控制。每台機器都會先合併其它所有的分支,然後再將合併後的結果推播到主幹上。cron 作業可以實現將機器上的分支推播上去,而 elisp 會協調這一切 —— 確保在同步之前儲存緩衝區,在同步之後從磁碟重新整理緩衝區,等等。
這篇文章的程式碼有點多,所以我將把它連結到 github 上,而不是寫在這裡。
我有一個用來存放我所有的 Org 模式的檔案的目錄 $HOME/org
,在 ~/org
目錄下有個 Makefile 檔案來處理同步。該檔案定義了以下目標:
push
: 新增、提交和推播到以主機命名的分支上fetch
: 一個簡單的 git fetch
操作sync
: 新增、提交和拉取遠端的修改,合併,並(假設合併成功)將其推播到以主機命名的分支和主幹上現在,在我的使用者 crontab 中有這個:
*/15 * * * * make -C $HOME/org push fetch 2>&1 | logger --tag 'orgsync'
與之相關的 elisp 程式碼 定義了一個快捷鍵(C-c s
)來呼叫同步。多虧了 cronjob,只要檔案被儲存 —— 即使我沒有在另一個機器上同步 —— 它們也會被拉取進來。
我發現這個設定非常好用。
在繼續下去之前,首先要問自己一下:你真的需要它嗎? 我用的是帶有 mu4e 的 Org 模式,而且它整合的也很好;任何 Org 模式的任務都可以通過 Message-id
連結到電子郵件,這很理想 —— 它可以讓一個人做一些事情,比如提醒他在一週內回復一條訊息。
然而,Org 模式不僅僅只有提醒。它還是一個知識庫、創作系統等,但是並不是我所有的郵件用戶端都使用 mu4e。(注意:移動裝置中有像 MobileOrg 這樣的應用)。我並沒有像我想的那樣經常使用它,但是它有它的用途,所以我認為我也應該在這裡記錄它。
現在我不僅想處理純文字電子郵件。我希望能夠處理附件、HTML 郵件等。這聽起來很快就有問題了 —— 但是通過使用 ripmime 和 pandoc 這樣的工具,情況還不錯。
第一步就是要用某些方法將獲取到的郵件放入指定的資料夾下。擴充套件名、特殊使用者等。然後我用一個 fetchmail 設定 來將它拉取下來並執行我自己的 insorgmail 指令碼。
這個指令碼就是處理所有有趣的部分了。它開始用 ripmime 處理訊息,用 pandoc 將 HTML 的部分轉換為 Org 模式的格式。 Org 模式的層次結構是用來盡可能最好地表示 email 的結構。使用 HTML 和其他工具時,email 可能會變得相當複雜,但我發現這對於我來說是可以接受的。
我最後一篇關於 Org 模式的文章將討論如何使用它來編寫文件和準備幻燈片 —— 我發現自己對 Org 模式的使用非常滿意,但這需要一些調整。