如何隨機挑選要做的任務
由於個人喜好的因素,選擇了用Emacs的org-mode來實踐GTD,管理自己的任務和安排日程。但也因為個人喜好的因素,導致在安排第二天的計劃,從積累的TODO列表中挑選要做的事情時,總會下意識地跳過一些一看就很麻煩的任務。久而久之,在列表的頂部,便堆積著一些好久前就建立的TODO。而因為總是從上往下挑選任務,列表的底部則是堆積著好久沒有露臉的TODO。有不見者,三十六年。
迫切需要一個辦法來解決這個難題,但若真的一絲不苟地從上往下處理每一條TODO又覺得沒意思,該怎麼辦?不如從中隨機地挑選TODO來安排到第二天的日程中?Sounds good。
如何實現
一開始,我是打算找找現成的類似功能的,不過放狗搜了一番後並沒有什麼收穫。之後的某天我忽然意識到,.org檔案不過就是普通的文字檔案而已,直接用命令列工具處理就好了呀。摸索一番之後才知道並不難,成果就是下面這段簡單的shell命令
find . -name '*.org' ! -name 'trash.org' ! -name 'work.org' -exec grep -Hn '\*\* TODO' {} \; | sort -R | head -3
稍微解釋一下。首先登場的是find
,它用來遍歷目錄下的所有.org檔案——因為我把TODO按照不同的領域放到了不同的.org檔案下。傳遞給find
的引數的意思,是“匹配所有檔名以.org結尾、但既不叫trash.org、也不叫work.org的檔案”
-name '*.org' ! -name 'trash.org' ! -name 'work.org'
trash.org是垃圾箱,work.org存放的是工作相關的任務——我可不喜歡把工作安排到自己的閒暇時光裡。
通過-exec
讓find
呼叫grep
從.org檔案中過濾出符合條件的帶有TODO關鍵字的行——在我的.org檔案中,有很多行是沒有TODO關鍵字的非任務型的內容,它們可能是一個目標、一個分類,甚至可以是某個TODO條目下的“筆記”。用下面的正則即可篩選出想要的內容
'\*\* TODO'
總和運用find
和grep
後,便到了從中挑選的環節了。雖然開始的時候提到的是“隨機地挑選”,但可以參考音樂播放器的“隨機播放”功能的做法,即先將所有的TODO條目隨機排序,然後從頭開始按順序取出前幾個。sort
命令的-R
選項已經實現了隨機排序,再用head
選取前3個即可。
全文完