Tri des en-têtes dans un fichier ORG

10

Je prends des notes dans un gros fichier en mode org qui a la structure suivante:

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

Je voudrais trier le fichier de sorte que toutes les rubriques avec Aprécèdent les rubriques avec B, qui à leur tour précèdent les rubriques avec C, et ainsi de suite. Existe-t-il un moyen automatisé de le faire avec le mode org?

jch
la source
4
As-tu essayé org-sort?
abo-abo
C-c ^de la mémoire (pourrait être quelque chose de similaire se terminant par ^, comme C-x C-c ^etc.)
wvxvw

Réponses:

13

Il existe une org-sortcommande, mais vous devrez peut-être modifier la structure de votre fichier pour obtenir les résultats souhaités (si je comprends bien la question).

Utilisez org-sort( C-c ^) pour trier les entrées du plan, les lignes d'un tableau ou les éléments d'une liste. Par exemple, à partir d'un en-tête, vous pouvez appeler org-sortpour trier toutes les entrées enfants.

Dans votre exemple, vous souhaitez trier les entrées de niveau supérieur dans votre plan, sélectionnez donc toutes les entrées en premier. Lorsque vous appelez, org-sortvous serez invité à indiquer comment trier: par ordre alphabétique, par priorité, etc.

Je suppose d'après votre exemple que le résultat final que vous attendez est:

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

C'est-à-dire que vous cherchez à trier par ordre alphabétique mais que cette lettre de fin a priorité? Il n'y a pas de tri intégré pour cela. Si vous avez modifié les entrées pour mettre cette lettre de tri en premier (par exemple A, Toto), un tri alphabétique normal fonctionnerait. Une autre option serait de déplacer ces informations vers une propriété sur chaque élément, puis vous pouvez trier par propriété.

Comme @nanny l'a suggéré dans les commentaires, org-sortpeut également appeler une fonction de tri personnalisée. De cette façon, vous pouvez utiliser votre fichier existant sans avoir à modifier toutes les entrées. Voici une fonction de tri qui trouve le texte du titre actuel et ajoute le dernier caractère au début pour qu'il ait la priorité. Vous aurez besoin de quelque chose de plus robuste si vos titres ne suivent pas tous ce modèle exact.

(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
la source
1
Une alternative à la modification du fichier consiste à utiliser le [f]unctype de tri dans org-sortet à écrire une fonction à trier en fonction de la structure existante.
nounou
Cela a résolu très bien mon problème, après une rapide passe de query-replace-regexpmodification des quelques titres qui ne respectaient pas strictement le bon format. Beaucoup plus facile que de convertir toutes mes données en propriétés.
jch
... ou vous pouvez le déplacer vers une balise, par exemple "* Toto: A:" puis trier Cc ^ r TAGS
jtgd
1
Juste pour vous faire savoir que j'ai ce problème exactement une fois par an, et j'ai utilisé votre solution à nouveau hier.
jch
0

Je mets les titres avec différentes priorités n'importe où dans un fichier, je ne suis pas préoccupé par la commande. Plus tard, je les regarde triés avec des vues d'agenda . En utilisant des balises , les titres triés de catégories concrètes sont affichés avec des vues d'agenda personnalisées .

Je sais que ce n'est pas la réponse pour trier les titres dans un fichier , mais afficher les titres avec des vues d'agenda est toujours le meilleur moyen. Vous pouvez insérer rapidement les titres prioritaires, sans vous soucier de la commande.

Adam Skobodzinski
la source