Org-mode, 用文本文件管理日常(四)

13 篇文章 0 订阅

1 定制化agenda视图


我定制了一个囊括所有的agenda视图。我也保留了另一个简单的agenda视图,该视图通常工作在我比较慢的 Eee PC上 - 因为它太慢了。我通常会花很多时间来简化agenda视图,同时希望agenda视图囊括所有东西。

我曾经大部分的定制化agenda视图已经不再使用,自从新的 org-mode 引入了过滤功能后。现在的agenda视图, 可以把所有东西都绑定在单一的视图里边。

定制化agenda视图使用场景:

  • 单个agenda视图显示下列信息

    • 当天概览

    • 方便找到需要重定向的任务

    • 方便找到无法推进的项目

    • 方便找到下一个需要执行的任务

    • 查看项目情况

    • 查看任务依赖

    • 查看需要归档的任务

  • 查找备忘

  • 查看爱好

如果需要查看当天的日历通过 F12 a 会比生成块agenda要快 - 但是当我需要查看一周或者 一个月需要关注的信息,或者查看任务计时数据。只有在这种情况我才会生成块视图,否则我也不想花 很多时间等它生成。

1.1 设置

#+header: :tangle yes
#+begin_src emacs-lisp
;; Do not dim blocked tasks
(setq org-agenda-dim-blocked-tasks nil)

;; Compact the block agenda view
(setq org-agenda-compact-blocks t)

;; Custom agenda command definitions
(setq org-agenda-custom-commands
      (quote (("N" "Notes" tags "NOTE"
               ((org-agenda-overriding-header "Notes")
                (org-tags-match-list-sublevels t)))
              ("h" "Habits" tags-todo "STYLE=\"habit\""
               ((org-agenda-overriding-header "Habits")
                (org-agenda-sorting-strategy
                 '(todo-state-down effort-up category-keep))))
              (" " "Agenda"
               ((agenda "" nil)
                (tags "REFILE"
                      ((org-agenda-overriding-header "Tasks to Refile")
                       (org-tags-match-list-sublevels nil)))
                (tags-todo "-CANCELLED/!"
                           ((org-agenda-overriding-header "Stuck Projects")
                            (org-agenda-skip-function 'bh/skip-non-stuck-projects)
                            (org-agenda-sorting-strategy
                             '(category-keep))))
                (tags-todo "-HOLD-CANCELLED/!"
                           ((org-agenda-overriding-header "Projects")
                            (org-agenda-skip-function 'bh/skip-non-projects)
                            (org-tags-match-list-sublevels 'indented)
                            (org-agenda-sorting-strategy
                             '(category-keep))))
                (tags-todo "-CANCELLED/!NEXT"
                           ((org-agenda-overriding-header (concat "Project Next Tasks"
                                                                  (if bh/hide-scheduled-and-waiting-next-tasks
                                                                      ""
                                                                    " (including WAITING and SCHEDULED tasks)")))
                            (org-agenda-skip-function 'bh/skip-projects-and-habits-and-single-tasks)
                            (org-tags-match-list-sublevels t)
                            (org-agenda-todo-ignore-scheduled bh/hide-scheduled-and-waiting-next-tasks)
                            (org-agenda-todo-ignore-deadlines bh/hide-scheduled-and-waiting-next-tasks)
                            (org-agenda-todo-ignore-with-date bh/hide-scheduled-and-waiting-next-tasks)
                            (org-agenda-sorting-strategy
                             '(todo-state-down effort-up category-keep))))
                (tags-todo "-REFILE-CANCELLED-WAITING-HOLD/!"
                           ((org-agenda-overriding-header (concat "Project Subtasks"
                                                                  (if bh/hide-scheduled-and-waiting-next-tasks
                                                                      ""
                                                                    " (including WAITING and SCHEDULED tasks)")))
                            (org-agenda-skip-function 'bh/skip-non-project-tasks)
                            (org-agenda-todo-ignore-scheduled bh/hide-scheduled-and-waiting-next-tasks)
                            (org-agenda-todo-ignore-deadlines bh/hide-scheduled-and-waiting-next-tasks)
                            (org-agenda-todo-ignore-with-date bh/hide-scheduled-and-waiting-next-tasks)
                            (org-agenda-sorting-strategy
                             '(category-keep))))
                (tags-todo "-REFILE-CANCELLED-WAITING-HOLD/!"
                           ((org-agenda-overriding-header (concat "Standalone Tasks"
                                                                  (if bh/hide-scheduled-and-waiting-next-tasks
                                                                      ""
                                                                    " (including WAITING and SCHEDULED tasks)")))
                            (org-agenda-skip-function 'bh/skip-project-tasks)
                            (org-agenda-todo-ignore-scheduled bh/hide-scheduled-and-waiting-next-tasks)
                            (org-agenda-todo-ignore-deadlines bh/hide-scheduled-and-waiting-next-tasks)
                            (org-agenda-todo-ignore-with-date bh/hide-scheduled-and-waiting-next-tasks)
                            (org-agenda-sorting-strategy
                             '(category-keep))))
                (tags-todo "-CANCELLED+WAITING|HOLD/!"
                           ((org-agenda-overriding-header (concat "Waiting and Postponed Tasks"
                                                                  (if bh/hide-scheduled-and-waiting-next-tasks
                                                                      ""
                                                                    " (including WAITING and SCHEDULED tasks)")))
                            (org-agenda-skip-function 'bh/skip-non-tasks)
                            (org-tags-match-list-sublevels nil)
                            (org-agenda-todo-ignore-scheduled bh/hide-scheduled-and-waiting-next-tasks)
                            (org-agenda-todo-ignore-deadlines bh/hide-scheduled-and-waiting-next-tasks)))
                (tags "-REFILE/"
                      ((org-agenda-overriding-header "Tasks to Archive")
                       (org-agenda-skip-function 'bh/skip-non-archivable-tasks)
                       (org-tags-match-list-sublevels nil))))
               nil))))

#+end_src

我的agenda视图如果范围不限制在项目中,大致看上去就是这样。该视图显示最上层层级项目以及 NEXT 任务, 由于当前没有聚焦单个项目所以项目的细节被隐藏了。

注意 该agenda视图截图并不是我目前使用的视图,有些老了,跟文档中描述的设置有些差异,后续会上传新的。

当选定一个项目(在agenda中通过快捷键 P 选定)agenda块视图切换到显示项目以及子项目信息。相反如果不选定一个项目,那么与 项目无关的就被隐藏了。

这使得很容易聚焦手上的任务。

 

注意 目前这个agenda截屏有点老,跟文档中描述的设置有些差异,后续会替换掉这个图片。

通常我是从上到下处理agenda上的任务。因为有截止日期以及计划任务(往往是当天或者更早计划)都是显示 在最上方。

我每个工作日工作流程如下:

  • Punch in(对于默认的任务会自动启动计时)

  • 打开agenda视图,对今天哪些重要事情需要处理做到心中有数

  • 读邮件查看新闻

    • 通过org-capture创建需要响应的备忘以及任务

  • 查看重定向任务以及回复邮件

  • 查看我的agenda视图,开始处理今天重要任务

    • 对任务启动计时

    • 将其完成,并设置为 DONE 状态,当然有可能被中断

  • 继续完成其他任务

  • 对于打断的任务,创建journal任务入口( C-c c j )

  • Punch out,吃完午饭继续 punch in

  • 完成更多任务

  • 清空重定向任务

    • 通过 m 选定多个具有相同目标任务

    • 通过 B r 批量重定向标记的任务

    • 对所有任务重复上述动作(或者对单个任务做重定向 命令 C-c C-w) 直到所有任务重定向完成。

  • 将习惯标记完成状态

  • Punch out工作日结束

1.2 我是如何选择接下来的任务

首先会从agenda视图中选择处理今日截止的以及今天计划的或者之前计划的任务。然后开始着手处理 在 Next Tasks 列表中的任务。我通常会将当前所做的项目设置为今天的任务,这样这些项目就会 显示在每日agenda中,并能够提醒我需要及时完成他们。每次我也只会将一到两个项目添加到当日agenda视图 中显示,对于不是特别重要的项目并不会在当日agenda显示,这样能保证当日agenda视图不会因为任务太多分 散我的注意力。

当我需要转向新任务处理时候,我会执行 F12 SPC 启动agenda视图,并按照如下优先级处理:

  • 从当日agenda选择任务

    • 截止日期是今天的(优先处理-还不是特别晚)

    • 已过截止日期的任务(有点晚)

    • 计划今日完成任务(计划今日完成的)

    • 依然在agenda中显示的计划任务

    • 将会截止的任务

  • 选择 NEXT 状态任务

  • 如果找不到 NEXT 状态的任务,从当前项目选择一个任务继续执行.

1.2.1 为什么将任务都显示在 NEXT 列表

我已经尝试一种新的时间管理方法处理事情。现在我只用一个 NEXT 列表。对于新创建项目 或者在项目中新建一个 NEXT 状态任务时候,该项目才会标记为 NEXT 状态。对于标记 NEXT 状态任务,它表示该任务 现在 可以着手处理的任务,从逻辑上讲,表示项目接下来 需要做的事情。

我曾经还为任务定义 ONGOING 状态任务,这种状态的任务表示我花了些时间,但是还没有 真正着手开始。我有个专门的agenda视图来查看 ONGOING 任务,这样我就能快速从中找到 接下来着手处理的任务。

但现在我已经将 ONGOING 状态已经从我的状态列表中移除了。在agenda视图中显示的 NEXT 状态任务就可以表示将要着手处理的任务了-我就不需要再去检查 ONGOING 列表同时还去检查 NEXT 状态任务列表了。=NEXT= 列表中的任务表示这些任务完成后,项目也可以继续前进。我希望事情能够快速找到下一步需要执行的任务 - 因此不要把时间花在在不同的org文件中查找任务 上面,这也是为什么我只保留 NEXT 任务列表,不再使用 ONGOING 列表原因。

1.3 读邮件, 新闻组, 以及通过IRC交流

当读邮件,看新闻组以及通过IRC沟通时我会给默认任务(通常是 ** Organization )启动 计时来记录在该项任务中花了多长时间。当查看邮件时,我会去Gnus然后查看收件箱中的所有邮件 。当有些邮件需要响应时候,我会通过org-capture创建标题为'回复 <用户>'新任务, 这样它能够 容易找到。有些邮件可以快速回复,但是有些邮件需要花点时间研究甚至会花很多时间才能完成。对于那些需要记录计时信息的任务,我会先创建它,然后对它计时。对于通过capture模板创建的需要 回复的任务类型当前都是计划今日开始。因此这些任务可以一直保留着不会丢失。

接着,我通过快捷键 F12 a 启动视图,然后在agenda视图中对这个任务计时并处理它们。一直重复直到所有 ‘对客户响应' 任务完成,标记任务状态为 DONE 为止。

我在Gnus中读邮件以及新闻组,因此我不需要对这种阅读任务另外计时(已经通过默认任务计时)。如果需 要记住的文章我会通过快捷键 C-c c n 创建一个note任务。基本上不用花时间,我也知道这个note也会存盘 (保存在refile.org中),不会丢失。仅仅花了些捕获note的时间而已。

1.4 过滤

时间很短,但是任务很多。通常我在一个时候会有很多任务(现在有373个)。那么多任务需要查看令人望而生畏。这时候agenda 过滤功能将派上用场。

现在是11:53AM 我依然在工作。我不希望看到与工作无关的任务。我也不想在午餐前花时间做个 大项目。。。因此我需要找到小工作量的任务,然后可以着手该任务。

怎么可以做到这点呢?先从ageda视图中获取所有NEXT状态的任务,然后通过过滤来缩小范围。任务是按照工作量来排序的,因此排在最上的就是工作量最小的–只要做最上面的任务,然后依次 向下。我可以通过 / + 1 限制显示工作量在10分钟以内的,这样就可以既完成任务也不用耽误 吃午饭。

1.4.1 通过 / RET 自动移除带有上下文的任务

在agenda中快捷键/ RET 非常有用。这个功能是由John Wiegley添加进org-mode中的。它可以执行 用户自定义的过滤器,过滤掉不想显示的任务。

在工作中,假如我正在做个项目经理指派给我的任务。假如说有更重要事情来了,手上项目需要推迟到 后面处理。意味着我需要停下手上的工作。我会先在项目任务添加 HOLD 标签,然后去做优先级更高的任务。当执行 / RET 被标记 HOLD 的任务以及子任务将会被过滤掉(因为标签会继承)。

在家我会给我的一些任务标记上 farm 因为这些任务需要在我家农场里亲自处理。如果我不在 农场,我会通过这个功能将带有该标签的任务将会从agenda中自动过滤掉。当我在农场时候,我可以通过快捷键 / TAB farm RET 来显示出这些任务。

如下是我的设置,来实现 / RET 上面描述的使用场景。

#+header: :tangle yes
#+begin_src emacs-lisp
(defun bh/org-auto-exclude-function (tag)
  "Automatic task exclusion in the agenda with / RET"
  (and (cond
        ((string= tag "hold")
         t)
        ((string= tag "farm")
         t))
       (concat "-" tag)))

(setq org-agenda-auto-exclude-function 'bh/org-auto-exclude-function)
#+end_src

这样我就可以通过执行 / RET 在agenda中将我暂时无法工作的任务先过滤掉。这使得我的agenda更加简洁有序。

更多资讯可以关注如下微信公众号:

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值