2011-02-18 41 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了後者。