4

背景:在 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 (after org-to-ref activate)
  (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

4 回答 4

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 的内部当然会发生变化,这个解决方案可能不会永远有效。

于 2011-02-18T23:48:24.157 回答
2

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

于 2011-02-18T21:22:46.523 回答
0

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

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

  ...)
于 2014-03-06T20:35:48.120 回答
0

你可以试试这个:#+ARCHIVE: %s.ref::在你的 org 文件的开头。在此处阅读更多相关信息。

此外,其他有趣的选项是在 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

后者是我从这个视频中截取的。

于 2017-11-02T02:32:01.007 回答