Ordinamento delle intestazioni in un file ORG


10

Sto prendendo appunti in un grande file in modalità org che ha la seguente struttura:

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

Vorrei ordinare il file in modo che tutte le intestazioni con Aprecedano le intestazioni B, che a loro volta precedono le intestazioni Ce così via. Esiste un modo automatizzato per farlo con la modalità org?


4
Ci hai provato org-sort?
a bordo del

C-c ^dalla memoria (potrebbe essere qualcosa di simile che termina in ^, come C-x C-c ^ecc.)
wvxvw,

Risposte:


13

Esiste un org-sortcomando, ma potrebbe essere necessario modificare la struttura del file per ottenere i risultati desiderati (se capisco correttamente la domanda).

Utilizzare org-sort( C-c ^) per ordinare le voci nella struttura, le righe in una tabella o gli elementi in un elenco. Ad esempio da un'intestazione è possibile chiamare org-sortper ordinare tutte le voci figlio.

Nel tuo esempio desideri ordinare le voci di livello superiore nella struttura, quindi seleziona prima tutte le voci. Quando chiami org-sortti verrà chiesto come ordinare: in ordine alfabetico, per priorità e così via.

Immagino dal tuo esempio che il risultato finale che ti aspetti sia:

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

Cioè, stai cercando di ordinare in ordine alfabetico, ma la tua lettera finale ha la precedenza? Non esiste un ordinamento integrato per questo. Se hai modificato le voci per inserire prima quella lettera di ordinamento (ad es. A, Toto), Allora un normale ordinamento alfabetico funzionerebbe. Un'altra opzione sarebbe quella di spostare tali informazioni in una proprietà su ciascun elemento, quindi è possibile ordinare per proprietà.

Come ha suggerito @nanny nei commenti, org-sortpuoi anche chiamare una funzione di ordinamento personalizzata. In questo modo è possibile utilizzare il file esistente senza dover modificare tutte le voci. Ecco una funzione di ordinamento che trova il testo del titolo corrente e aggiunge l'ultimo carattere all'inizio in modo che abbia la precedenza. Avrai bisogno di qualcosa di più robusto se i tuoi titoli non seguono tutti quel modello esatto.

(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)))

1
Un'alternativa alla modifica del file consiste nell'utilizzare il [f]unctipo di ordinamento org-sorte scrivere una funzione per ordinare in base alla struttura esistente.
tata

Ciò ha risolto il mio problema abbastanza bene, dopo un rapido passaggio query-replace-regexpper modificare le poche intestazioni che non seguivano rigorosamente il formato giusto. Molto più facile che convertire tutti i miei dati in proprietà.
Jch

... oppure potresti spostarlo in un tag, ovvero "* Toto: A:" quindi ordinare Cc ^ r TAGS
jtgd

1
Solo per farti sapere che ho questo problema esattamente una volta all'anno e ieri ho usato di nuovo la tua soluzione.
jch

0

Sto mettendo titoli con priorità diverse ovunque in un file, non sono preoccupato per l'ordine. Più tardi li vedrò ordinati con le viste dell'agenda . Utilizzando i tag , i titoli ordinati da categorie concrete vengono visualizzati con visualizzazioni dell'agenda personalizzate .

So che non è la risposta a come ordinare i titoli in un file , ma visualizzare i titoli con le viste dell'agenda è sempre il modo migliore. È possibile inserire rapidamente titoli prioritari, senza preoccuparsi dell'ordine.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.