议程中的写入和调用功能(组织模式)

时间:2013-06-19 04:37:36

标签: emacs elisp org-mode gtd

(我不知道口齿不清,所以我怀疑这很简单。)

我想编写一个函数来简化我的组织模式和GTD设置。

我的编组设置基于我的组织设置:http://doc.norang.ca/org-mode.html#CustomAgendaViewSetup

我想对多个标签使用“NEXT”设置(见下文) - 我可以简单地一遍又一遍地剪切和粘贴相同的代码,但编写一个函数会更加清晰,所以不要这个:

            (tags-todo "-WAITING-CANCELLED/!NEXT"
                       ((org-agenda-overriding-header "Next Tasks")
                        (org-agenda-skip-function 'bh/skip-projects-and-habits-and-single-tasks)
                        (org-agenda-todo-ignore-scheduled 'future)
                        (org-agenda-todo-ignore-deadlines 'future)
                        (org-tags-match-list-sublevels t)
                        (org-agenda-sorting-strategy
                         '(todo-state-down effort-up category-keep))))

我更喜欢这样的东西:

            (MyFunction "@work")
            (MyFunction "@computer")

函数的参数将上述代码块中的过滤更改为:

            (tags-todo "-WAITING-CANCELLED+<XXX>/!NEXT"

            (tags-todo "-WAITING-CANCELLED+@work/!NEXT"

有人可以帮助我指出正确的方向吗?

1 个答案:

答案 0 :(得分:1)

以下应该做的伎俩(它还包括一个变量来测试是否在标记之前使用+-,默认为-)。

(defun zin/agenda-test (tag &optional signp)
  "Simplify agenda coding, only require TAG to create new block.

SIGNP determines whether to use `+' or `-' when adding the tag.
Defaulting to `-'."
  (let ((sign (if signp "+" "-")))
    `(tags-todo ,(format "-WAITING-CANCELLED%s%s/!NEXT" sign tag)
        ((org-agenda-overriding-header "Next Tasks")
         (org-agenda-skip-function 'bh/skip-projects-and-habits-and-single-tasks)
         (org-agenda-todo-ignore-scheduled 'future)
         (org-agenda-todo-ignore-deadlines 'future)
         (org-tags-match-list-sublevels t)
         (org-agenda-sorting-strategy
          '(todo-state-down effort-up category-keep))))))

(setq org-agenda-custom-commands `(("t" "Test"
                                (,(zin/agenda-test "@tag")
                                 ,(zin/agenda-test "@test" '+)))))

您必须确保org-agenda-custom-commands使用反引用语法(`)而不是(quote ...),否则命令将无法正常扩展。