[英]Write and call function from agenda (org-mode)
(我不懂lisp,所以我懷疑這真的很簡單。)
我想編寫一個函數來簡化我的組織模式和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"
有人可以幫我指出正確的方向嗎?
以下應該可以解決問題(它還包含一個變量,用於測試在標記之前使用+
還是-
,默認為-
)。
(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 ...)
,否則命令將無法正確擴展。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.