阅读 965

Org Mode - 年轻人的第一堂时间管理课程

忙成狗,闲成猪。 上半年我的状态就是如此,为了做出改变我找了很多的任务管理工具,比如奇妙清单、滴答清单(现在我还在用)等等,但是依然没有满足我的需求。作为一名精力旺盛的开发仔,我甚至一度有了自己撸一个满足自己需求的时间管理工具的想法,最后也草草了之。

但作为当代新青年,怎么能没有一个时间管理工具呢?于是乎,通过我的同事、领导兼好朋友寻找到了 Emacs 的 Org Mode 大法,是真香,接下来,我就说一说我是如何通过 Org Mode 来管理时间的。

Emacs 的下载与配置

首先,我们需要下载并安装 Emacs。

apt install software-properties-common
add-apt-repository ppa:kelleyk/emacs
apt update
apt install emacs26
复制代码

这时候我们就能够通过 Emacs 打开 .org 文件来进行时间管理了,就像这样:

Great,我们已经完成了第一步,接下来,我个人比较懒,不想用裸奔的 Emacs,于是我入坑了 Spacemacs,这样就可以帮我们配置好一个够用的 Emacs 了。

git clone https://github.com/syl20bnr/spacemacs ~/.emacs.d
复制代码

文件下载完成后,即可运行 Emacs,然后根据初始化流程进行初始化,安装完成后,我们重新打开刚刚的文件。

接下来,我们正式开始时间管理教学。

给任务挪个窝

我们需要将任务拆分成我们需要的样子,比如,我的任务列表长这样:

我们需要将我们的工作,分成不同的模块进行管理,这里都是工作相关的内容,我并没有用 Emacs 管理生活,谁记录生活用电脑啊?我会么?我不会,你会么 ?哪个正经人用电脑记录生活啊。因为工作的电脑相关度非常高,所以我才选用了 Emacs,毕竟生活谁也不会天天呆在电脑旁边。

制定工作流

我们将任务安排好了之后,就需要制定工作流了,从 TODODONE 的一套流程。

每一行都可以有不同的状态,比如 未开始进行中已完成 等等,可以根据自己的需求来定义,那我们要如何进行定义呢?

我们需要打开用户目录下的 .spacemacs 配置文件,在里面添加流程配置并且加上颜色、背景色样式的配置。

;; 设置任务流程(这是我的配置)
(setq org-todo-keywords
      '((sequence "未开始(p!)" "进行中(t!)" "阻塞中(s!)" "|" "已完成(d!)" "已取消(a@/!)")))

;; 设置任务样式
(setq org-todo-keyword-faces
   '(("未开始" .   (:foreground "red" :weight bold))
    ("阻塞中" .   (:foreground "red" :weight bold))
    ("进行中" .      (:foreground "orange" :weight bold))
    ("已完成" .      (:foreground "green" :weight bold))
    ("已取消" .     (:background "gray" :foreground "black"))
))
复制代码

我们可以使用快捷键 Ctrl c + Ctrl t ,然后按对应的键就可以进行任务状态的标记了,就像下面这样。

安排任务时间

接下来,我们需要安排任务到指定的日期,使用快捷键 Ctrl c + Ctrl s 就可以安排对应任务的时间了(同时,还支持循环任务等复杂时间设置)。

单独这么安排,大家可能看不出什么,我们需要 Org Agenda 来配合食用。

我们需要给它设置一个快捷键,并且将刚刚的文件加入到日程列表里(在 .spacemacs 配置):

;; 设置 Org Agenda 快捷键
(global-set-key (kbd "C-c a") 'org-agenda)

;; 加入到日程列表里
(setq org-agenda-files (list "~/org-mode/111.org"))
复制代码

我们用 Ctrl c + a 快捷键即可打开 Agenda,我们按 a 选择查看当前周的任务情况。

同时我们在对应的天按 d 即可进入对应天的情况。

任务计时

有了 Agenda 之后,我们就能够完成时间管理了,但是想记录每个任务花了多少时间,那么就可以使用 Org Clock 进行时间记录。

我们将光标移动到想要进行时间记录的任务上,然后按 Ctrl c + Ctrl x + Ctrl i 就能够进行任务开始时间的记录了。

然后,当任务完成时,或者当任务需要暂定时,我们就可以用 Ctrl c + Ctrl x + Ctrl o 进行记录。

可以看到我们的任务的时间花费已经记录好了,并且这个时间记录可以多次开始和结束。

时间报告

刚刚我们已经在每个任务的开始和结束时打了时间戳,那我们就可以很方便的生成一个时间花费的报表。

我们进入到刚刚的 Agenda 界面,然后按下 v + R 就可以得到时间报告了。

这样就可以可以看到在任务上花费的时间统计报告了,同时我们也能在 Agenda 里看到整天的任务计时情况,我们在配置文件中加上下面的配置:

;; agenda 里面时间块彩色显示
;; From: https://emacs-china.org/t/org-agenda/8679/3
(defun ljg/org-agenda-time-grid-spacing ()
  "Set different line spacing w.r.t. time duration."
  (save-excursion
    (let* ((background (alist-get 'background-mode (frame-parameters)))
           (background-dark-p (string= background "dark"))
           (colors (list "#1ABC9C" "#2ECC71" "#3498DB" "#9966ff"))
           pos
           duration)
      (nconc colors colors)
      (goto-char (point-min))
      (while (setq pos (next-single-property-change (point) 'duration))
        (goto-char pos)
        (when (and (not (equal pos (point-at-eol)))
                   (setq duration (org-get-at-bol 'duration)))
          (let ((line-height (if (< duration 30) 1.0 (+ 0.5 (/ duration 60))))
                (ov (make-overlay (point-at-bol) (1+ (point-at-eol)))))
            (overlay-put ov 'face `(:background ,(car colors)
                                                :foreground
                                                ,(if background-dark-p "black" "white")))
            (setq colors (cdr colors))
            (overlay-put ov 'line-height line-height)
            (overlay-put ov 'line-spacing (1- line-height))))))))

(add-hook 'org-agenda-finalize-hook #'ljg/org-agenda-time-grid-spacing)
复制代码

这样我们就在 Agenda 通过 v + l 看到任务日志长这样子:

参考资料

  1. 神器 Org-mode
  2. Orgmode for GTD

非常感谢您的阅读,欢迎关注、转发、分享支持我。