【问题标题】:Org-mode: org-agenda-files defvar directory "evaluation"?org-mode:org-agenda-files defvar 目录“评估”?
【发布时间】:2024-08-01 11:15:01
【问题描述】:

我的 .emacs 中有以下设置 ...

(defvar org-dir "/home/mash/read/org/")

并在周围使用它,例如...

(setq org-directory org-dir)
(setq org-default-notes-file (concat org-dir "mash.org"))

现在我了解到您可以指定一个目录,例如...

(setq org-agenda-files '("/home/mash/read/org/"))

但是我该如何处理这个变量呢?

(setq org-agenda-files '(org-dir))
(setq org-agenda-files '(,(org-dir))

任何我想在我的捕获模板中使用它的想法......

(setq org-capture-templates
  '(("t" "Test" entry (file+headline (concat org-dir "test.org" "test")
      "* %?")))

【问题讨论】:

    标签: lisp elisp org-mode


    【解决方案1】:

    '(foo bar) 语法等同于写作(list 'foo 'bar)。所以你可以像这样设置org-agenda-files

    (setq org-agenda-files (list org-dir))
    

    或者,您可以将撇号 ' 替换为反引号 ` 以创建一个列表,然后使用逗号来评估该列表的一部分

    (setq org-capture-templates
      `(("t" "Test" entry (file+headline ,(concat org-dir "test.org" "test")
          "* %?")))
    

    【讨论】:

    • 非常感谢,使用list 有效。奇怪你不能用'?此外,我似乎可以在捕获模板中使用concat。我之前确实尝试过使用,,但我收到了“旧式”警告。
    • 引号' 和` 之间的区别在于,无法评估' 引用的列表中的表达式。 IE。你可以写(,(+ 1 2)) which will eval to (3), but '(,(+ 1 2)) 将评估为`(\, (+ 1 2))。在这种情况下,准引用的*条目可能会有所帮助。