【问题标题】:Write and call function from agenda (org-mode)从议程编写和调用函数(组织模式)
【发布时间】:2013-06-19 04:37:36
【问题描述】:

(我不懂 lisp,所以我怀疑这真的很简单。)

我想编写一个函数来简化我的 org-mode 和 GTD 设置。

我的 org-mode 设置基于此处写的: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"

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

【问题讨论】:

    标签: emacs elisp org-mode gtd


    【解决方案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 ...),否则命令将无法正常展开。

    【讨论】:

    • 不错的解决方案 - 谢谢!我的 emacs init 现在更干净了。 :-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-31
    • 1970-01-01
    • 1970-01-01
    • 2012-11-20
    相关资源
    最近更新 更多