Próbuję napisać funkcję, która pobierze nagłówek i ponownie umieści go w jednym określonym miejscu. Dokument dla org-refile
jest
(org-refile &optional GOTO DEFAULT-BUFFER RFLOC MSG)
i RFLOC
jest
RFLOC can be a refile location obtained in a different way.
ale nie mam pojęcia, jaki byłby „inny sposób”, a od pół dnia googlowałem i nie widziałem żadnych przykładów. Znam plik i znam nagłówek celu, ale nie znam składni, aby sformułować go tak, jak chce. Najbliższe, jakie dostałem, to:
(org-refile nil #("~/Org/bookmarks.org")
która poprosi mnie o nagłówek, ale oczywiście nie chcę, żeby mnie o to pytał, chcę go podać.
Jestem nowy w elisp i zgaduję przy każdej składni, jaką mogę wymyślić. Czy ktoś wie jak to sformułować?
(let* ( (org-archive-location "/path/to/org-file::* NAME_OF_HEADING") (org-archive-save-context-info nil)) (org-archive-subtree))
prawdopodobnie nie dam odpowiedzi na to pytanie, skoro o to pytałeśorg-refile
, ale fragment ten całkiem nieźle sobie radzi. Potrzebne są dwa dwukropki . Korzystam z tego przez cały czas, a nawet stworzyłem niestandardową wersję,org-archive-subtree
aby ukryć wiadomość, tak że nie mam ich setek, gdy automatycznie reorganizuję cały plik org.Odpowiedzi:
Zastanawiałem się, jak powinien wyglądać RFLOC wcześniej, ale nigdy nie zbadałem. Patrząc na kod źródłowy organizacji, powinna to być lista składająca się z:
Nie eksperymentowałem z tym
re
elementem, ale oto prosta funkcja, która wywoła sięorg-refile
z RFLOC zbudowanym z danego PLIKU i GŁOWY:Spowoduje to otwarcie pliku docelowego i użycie funkcji organizacji w celu znalezienia pozycji docelowego nagłówka, a następnie utworzenie listy RFLOC do przekazania
org-refile
.źródło
Dzięki bardzo @glucas, opracowałem twoje rozwiązanie do mojego ostatniego. Kluczową informacją była znajomość formatu RFLOC. Eksperymentowałem z dostarczeniem listy nazw plików i tekstu nagłówka, ale brakowało mi tych innych elementów i dodatkowego zero. Właśnie z tym skończyłem:
Dokument dla
save-excursion
państw stwierdza, że wrócimy do miejsca, od którego zaczęliśmy, ale wydaje się, że tak nie działa. Pozostawia mnie w docelowym miejscu docelowym, co może być właściwe dla generałarefile-to
, ale chciałem, aby przesunęło linię i pozostało tam, gdzie byłem, więc zapisuję i przywracamrefile-to-bookmark
.Przepływ pracy, do którego to jest przeznaczone, polega na tym, że zaczynam od listy linków HTML pochodzących z mojego skryptu do czytania kanałów RSS. Początkowo miałem skrypt do tworzenia plików maildir dla mu4e, ale i tak po prostu podążałem za linkami do przeglądarki, a następnie dodawałem do zakładek te, które są interesujące, więc teraz po prostu generuję listę
** [[uri][title]]
linii. Po kliknięciu linku z emacsa do przeglądarki uzbl zamiast zakładek (która generuje tę samą formę linii) używam tego polecenia, aby przenieść link do mojego bookmarks.org po ustawieniu tagów. Tylko trochę szybciej, ponieważ używam również org-polecenie prędkości,t
aby oznaczyć ib
dla tego polecenia. Jestem teraz szczęśliwy i uwielbiam uczyć się więcej elisp!źródło
re
ile mi wiadomo, element RFLOC zostanie zignorowany. Jest używany w kilku innych funkcjach w org.el, które dotyczą docelowych lokalizacji.refile-to
funkcji, aby powrócić do pierwotnej pozycji, dodając to na końcu, polet
:(switch-to-buffer (current-buffer))
. Wydaje się, że to nie powinno nic robić, ale działa dla mnie.-push
i-goto
tym. Wydaje się dziwne, że zostałeś w innym buforze, a mimo to uważa on bufor za poprzedni.