Написать и вызвать функцию из повестки дня (режим орг)
(Я не знаю шуток, поэтому я подозреваю, что это действительно просто.)
Я хочу написать функцию для упрощения моего режима org и настройки GTD.
Я основал свою настройку режима org на записи здесь: http://doc.norang.ca/org-mode.html
Я хочу использовать настройку "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 ответ
Следующее должно сделать трюк (он также включает в себя переменную, чтобы проверить, следует ли использовать +
или же -
перед тегом, по умолчанию -
).
(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 ...)
иначе команды не будут расширяться должным образом.