2011-02-18 87 views
4

背景:在组织模式下,默认情况下变量org-archive-location设置为“%s_archive ::”,因此文件“toto.org “归档到文件”toto.org_archive“。我想将它归档为“toto.ref”。我使用的是组织模式版本7.4(不在git服务器中)。如何在组织模式下巧妙配置组织档案位置

我还以为它是作为

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

一样简单,但我指出,这是不妥当的LISP(加,它不工作)。我的最终解决方案如下,您应该能够适应组织最归档的位置:

(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”)(答案如下更长的解释)。

+1

您将变量设置为由replace-regexp-in-string(一个函数),“.org”,“.ref”和任何%s组成的列表。我假设该变量中预期的是某种表示格式规范的字符串。看起来像函数调用的列表不会执行任何操作... – Arkadiy 2011-02-18 21:21:56

回答

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-的内部模式可能会发生变化,此解决方案可能无法永久运行。

+0

Sean,您使用的是哪种组织模式(我使用的是7.4版本)? – Jeremy 2011-02-20 11:26:20

2

您不应该在quote表达式中进行评估。还要注意,在正则表达式中,.与任何字符匹配。

0

下面是如何设置文件中的文件时,该位置(例如,主标题)的例子,以及是否或不包括额外的档案信息:

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

    ...) 
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了后者。