2013-06-19 39 views
0

(我不知道口齒不清,所以我懷疑這是非常簡單的。)寫和從議程調用函數(組織模式)

我想編寫一個函數來簡化我的組織模式和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 "[email protected]/!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 ...),否則命令將無法正常展開。

+0

不錯的解決方案 - 謝謝!我的emacs init現在更清潔了。 :-) – olaf