如何在org-mode中巧妙配置org-archive-location

时间:2011-02-18 21:16:27

标签: emacs elisp org-mode

背景:在org-mode中,默认情况下变量org-archive-location设置为“%s_archive ::”,因此文件“toto.org”会归档到文件“toto.org_archive”中。我希望它存档到“toto.ref”而不是。我正在使用org-mode版本7.4(在git服务器之外)。

我原以为它就像

一样简单
(setq org-archive-location 
      `(replace-regexp-in-string ".org" ".ref" %s)
      )

但有人指出,这在LISP中并不合适(加上,它没有用)。我的最终解决方案如下,您应该能够适应org-archive-location的大多数聪明配置:

(setq org-archive-location“%s :: * ARCHIVES”) (defadvice org-extract-archive-file(在org-to-ref激活之后)   (setq ad-return-value         (replace-regexp-in-string“\ .org”“。ref”ad-return-value)     )   )

请注意:

1)我自愿不在“.org”末尾添加$,以便将“test.org.gpg”正确地改为“test.ref.gpg”。

2)似乎应该使用正则表达式“\ .org”(而不是“.org”)(答案中的下面会有更长的解释)。

4 个答案:

答案 0 :(得分:3)

您无法在Emacs中定义变量,以便通过运行代码获取其值;变量具有简单的静态值。

您可以通过建议功能org-extract-archive-file来实现您描述的效果,该功能是从org-archive-location生成存档位置的功能:

(defadvice org-extract-archive-file (after org-to-ref activate)
  (setq ad-return-value
        (replace-regexp-in-string "\\.org" ".ref" ad-return-value)))

这对我来说现在很有用,但当然org-mode的内部结构可能会发生变化,这个解决方案可能永远不会有效。

答案 1 :(得分:2)

您不应该quote要评估的表达式。另请注意,在正则表达式中,.匹配任何字符。

答案 2 :(得分:0)

以下是如何设置文件,文件中的位置(例如主标题)以及是否包含其他存档信息的示例:

(let* (
    (org-archive-location "~/todo.org::* TASKS")
    (org-archive-save-context-info nil))

  ...)

答案 3 :(得分:0)

您可以在组织文件的开头尝试:#+ARCHIVE: %s.ref::。 阅读更多相关信息here

此外,其他有趣的选项是在您的headtree中设置以下内容,例如:

* Main Header of tree
:PROPERTIES:
:ARCHIVE: toto.ref:: * Main Header of tree in archive file
:END:
** sub tree of main header and so on

后者我从this video开始。