ПРЕДПОСЫЛКА: В организационном режиме переменная 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») (более подробное объяснение ниже в ответах).