Sortowanie nagłówków w pliku ORG

10

Robię notatki w dużym pliku trybu org, który ma następującą strukturę:

* Toto, A
Notes about Toto.
* Titi, C
Notes about Titi.
* Tutu, A
Notes about Tutu.

Chciałbym posortować plik tak, aby wszystkie nagłówki Apoprzedzone były nagłówkami B, które z kolei poprzedzają nagłówki Ci tak dalej. Czy istnieje zautomatyzowany sposób na to w trybie org?

jch
źródło
4
Próbowałeś org-sort?
abo-abo
C-c ^z pamięci (może być czymś podobnym kończącym się na ^, jak C-x C-c ^itp.)
wvxvw

Odpowiedzi:

13

Istnieje org-sortpolecenie, ale może być konieczne dostosowanie struktury pliku, aby uzyskać pożądane wyniki (jeśli dobrze rozumiem pytanie).

Użyj org-sort( C-c ^), aby posortować wpisy w konspekcie, wiersze w tabeli lub elementy na liście. Na przykład z nagłówka możesz zadzwonić, org-sortaby posortować wszystkie wpisy potomne.

W twoim przykładzie chcesz posortować wpisy najwyższego poziomu w swoim konspekcie, więc najpierw wybierz wszystkie wpisy. Kiedy zadzwonisz org-sort, zostaniesz poproszony o sortowanie: alfabetycznie, według priorytetów i tak dalej.

Zgaduję z twojego przykładu, że oczekiwany wynik końcowy to:

* Toto, A
Notes about Toto.
* Tutu, A
Notes about Tutu.
* Titi, C
Notes about Titi.

Czyli chcesz sortować alfabetycznie, ale czy ta ostatnia litera ma pierwszeństwo? Nie ma do tego wbudowanego sortowania. Jeśli zmieniłeś wpisy, aby najpierw umieścić tę literę sortowania (np. A, Toto), Wówczas działałoby normalne sortowanie alfabetyczne. Inną opcją byłoby przeniesienie tych informacji do właściwości na każdym elemencie, a następnie można sortować według właściwości.

Jak sugeruje @nanny w komentarzach, org-sortmoże również wywoływać funkcję sortowania niestandardowego. W ten sposób możesz użyć istniejącego pliku bez konieczności zmiany wszystkich wpisów. Oto funkcja sortowania, która wyszukuje bieżący tekst nagłówka i dołącza ostatni znak na początku, dzięki czemu ma on pierwszeństwo. Będziesz potrzebować czegoś bardziej niezawodnego, jeśli Twoje nagłówki nie będą zgodne z tym dokładnym wzorem.

(defun my-sort-last-letter ()
  (let ((text
         (plist-get
          (cadr (org-element-headline-parser (line-end-position)))
          :raw-value)))
    (concat (string (aref text (- (string-width text) 1))) text)))
glucas
źródło
1
Alternatywą dla zmiany pliku jest użycie [f]unctypu sortowania org-sorti napisanie funkcji do sortowania w oparciu o istniejącą strukturę.
niania
To całkiem dobrze rozwiązało mój problem, po szybkim przejściu query-replace-regexpdo edycji kilku nagłówków, które nie były ściśle zgodne z odpowiednim formatem. O wiele łatwiej niż konwersja wszystkich moich danych do właściwości.
jch
... lub możesz przenieść go do znacznika, np. „* Toto: A:”, a następnie posortuj TAGI Cc ^ r
jtgd
1
Chcę tylko poinformować, że mam ten problem dokładnie raz w roku, a wczoraj skorzystałem z twojego rozwiązania.
jch
0

W dowolnym miejscu pliku umieszczam nagłówki z różnymi priorytetami, nie martwię się o zamówienie. Później przeglądam je posortowane według widoków agendy . Za pomocą tagów posortowane nagłówki z konkretnych kategorii są wyświetlane z niestandardowymi widokami agendy .

Wiem, że nie jest to odpowiedź na pytanie, jak sortować nagłówki w pliku , ale przeglądanie nagłówków z widokami porządku dziennego jest zawsze najlepszym sposobem. Możesz szybko wstawiać nagłówki z priorytetami, nie martwiąc się o zamówienie.

Adam Skobodzinski
źródło