Я пытаюсь написать функцию, которая возьмет заголовок и переместит его в одно конкретное место. Документ для org-refile
это
(org-refile &optional GOTO DEFAULT-BUFFER RFLOC MSG)
и RFLOC
это
RFLOC can be a refile location obtained in a different way.
но я понятия не имею, каким будет «другой путь», и я гуглюл полдня и не видел примеров. Я знаю файл и знаю заголовок для цели, но я не знаю синтаксис, чтобы превратить его в то, что он хочет. Самое близкое, что я получил, это:
(org-refile nil #("~/Org/bookmarks.org")
который тогда побудит меня к заголовку, но конечно я не хочу, чтобы он подсказал мне, я хочу предоставить это.
Я новичок в elisp, и я догадался о каждом синтаксисе, который я могу придумать. Кто-нибудь знает, как это сформулировать?
(let* ( (org-archive-location "/path/to/org-file::* NAME_OF_HEADING") (org-archive-save-context-info nil)) (org-archive-subtree))
я, вероятно, не буду помещать это в ответ, так как вы спросили об этомorg-refile
, но фрагмент делает работу довольно хорошо. Два двоеточия будут необходимы. Я использую это все время, и даже создал собственную версиюorg-archive-subtree
для подавления сообщения, чтобы у меня не было сотен их, когда я автоматически реорганизую весь свой файл org.Ответы:
Я задавался вопросом, как RFLOC должен выглядеть раньше, но никогда не исследовал. Глядя на исходный код org, это должен быть список, состоящий из:
Я не экспериментировал с
re
элементом, но вот простая функция, которая будет вызыватьсяorg-refile
с помощью RFLOC, созданного из заданного ФАЙЛА и HEADING:Это открывает целевой файл и использует функцию org, чтобы найти позицию целевого заголовка, а затем создает список RFLOC для передачи
org-refile
.источник
Большое спасибо @glucas, я разработал твое решение в своем последнем. Ключевой информацией было знание формата RFLOC. Я экспериментировал с предоставлением списка имен файлов и заголовков, но мне не хватало этих других элементов и лишнего ноля. Вот чем я закончил:
В документе
save-excursion
говорится, что мы вернемся в то место, откуда начали, но, похоже, это не сработает. Это оставляет меня в целевом пункте назначения, что может быть подходящим для генералаrefile-to
, но я хотел просто заставить его переместить линию и остаться там, где я был, поэтому я сохраняю и восстанавливаю внутриrefile-to-bookmark
.Рабочий процесс, для которого это предназначено, состоит в том, что я начинаю со списка HTML-ссылок, которые приходят из моего скрипта для чтения RSS-каналов. Первоначально у меня был скрипт, создающий файлы maildir для mu4e, но я все равно просто следовал ссылкам на браузер, а затем делал закладки на интересующие их, так что теперь я просто генерирую список
** [[uri][title]]
строк. После того, как я перешел по ссылке из emacs в браузер uzbl, вместо закладки (которая генерирует те же формы строк) я использую эту команду, чтобы переместить ссылку на мой bookmarks.org после установки тегов. Чуть быстрее, так как я также использую скоростные команды org,t
чтобы пометить иb
для этой команды. Я счастлив сейчас и люблю учиться больше elisp!источник
re
Элемент RFLOC будет игнорироваться, насколько я могу судить. Он используется в нескольких других функциях в org.el, которые имеют дело с целевыми местоположениями.refile-to
функцию , чтобы вернуться в исходное положение, добавив это в конце, после того , какlet
:(switch-to-buffer (current-buffer))
. Кажется, это ничего не должно делать, но это работает для меня.-push
и-goto
этим. Кажется странным, что вы остались в другом буфере, и все же он считает текущий буфер предыдущим.