Emacs 系列(四):使用 Org 模式自動管理郵件及同步文件

2018-12-11 13:05:00

這是 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,只要檔案被儲存 —— 即使我沒有在另一個機器上同步 —— 它們也會被拉取進來。

我發現這個設定非常好用。

用 Org 模式發郵件

在繼續下去之前,首先要問自己一下:你真的需要它嗎? 我用的是帶有 mu4e 的 Org 模式,而且它整合的也很好;任何 Org 模式的任務都可以通過 Message-id 連結到電子郵件,這很理想 —— 它可以讓一個人做一些事情,比如提醒他在一週內回復一條訊息。

然而,Org 模式不僅僅只有提醒。它還是一個知識庫、創作系統等,但是並不是我所有的郵件用戶端都使用 mu4e。(注意:移動裝置中有像 MobileOrg 這樣的應用)。我並沒有像我想的那樣經常使用它,但是它有它的用途,所以我認為我也應該在這裡記錄它。

現在我不僅想處理純文字電子郵件。我希望能夠處理附件、HTML 郵件等。這聽起來很快就有問題了 —— 但是通過使用 ripmime 和 pandoc 這樣的工具,情況還不錯。

第一步就是要用某些方法將獲取到的郵件放入指定的資料夾下。擴充套件名、特殊使用者等。然後我用一個 fetchmail 設定 來將它拉取下來並執行我自己的 insorgmail 指令碼。

這個指令碼就是處理所有有趣的部分了。它開始用 ripmime 處理訊息,用 pandoc 將 HTML 的部分轉換為 Org 模式的格式。 Org 模式的層次結構是用來盡可能最好地表示 email 的結構。使用 HTML 和其他工具時,email 可能會變得相當複雜,但我發現這對於我來說是可以接受的。

下一篇

我最後一篇關於 Org 模式的文章將討論如何使用它來編寫文件和準備幻燈片 —— 我發現自己對 Org 模式的使用非常滿意,但這需要一些調整。