Как правильно настроить org-archive-location в org-mode - PullRequest
4 голосов
/ 19 февраля 2011

ОБЩАЯ ИНФОРМАЦИЯ: В режиме org переменная org-archive-location по умолчанию имеет значение "% s_archive ::", поэтому файл "toto.org" архивируется в файл "toto.org_archive".Я хотел бы вместо этого архивировать в "toto.ref".Я использую версию 7.4 в режиме org (вне 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 ]

3 голосов
/ 19 февраля 2011

Вы не можете определить переменную в 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 могут быть изменены, и это решение может не работать вечно.

2 голосов
/ 19 февраля 2011

Вы не должны quote выражение, которое вы хотите оценить. Также обратите внимание, что в регулярном выражении . соответствует любому символу.

0 голосов
/ 02 ноября 2017

Вы можете попробовать это: #+ARCHIVE: %s.ref:: в начале вашего файла org.Подробнее об этом здесь .

Кроме того, другой интересный вариант - установить в вашей голове следующее, например:

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

Последнее, которое я взял у это видео .

0 голосов
/ 07 марта 2014

Вот пример того, как установить файл, местоположение (например, основной заголовок) в файле и включать или нет дополнительную информацию архива:

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

  ...)
...