背景:在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”)(答案中的下面会有更长的解释)。
答案 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开始。