(我不知道口齿不清,所以我怀疑这很简单。)
我想编写一个函数来简化我的组织模式和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"
有人可以帮助我指出正确的方向吗?
答案 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 ...)
,否则命令将无法正常扩展。