Sortieren von Überschriften in einer ORG-Datei

10

Ich mache mir Notizen in einer großen Datei im Organisationsmodus, die die folgende Struktur hat:

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

Ich möchte die Datei so sortieren, dass alle Überschriften mit Avor den Überschriften stehen B, die wiederum vor den Überschriften mit stehen C, und so weiter. Gibt es eine automatisierte Möglichkeit, dies im org-Modus zu tun?

jch
quelle
4
Hast du es versucht org-sort?
abo-abo
C-c ^aus dem Gedächtnis (könnte etwas Ähnliches sein, das in endet ^, wie C-x C-c ^usw.)
wvxvw

Antworten:

13

Es gibt einen org-sortBefehl, aber Sie müssen möglicherweise Ihre Dateistruktur anpassen, um die gewünschten Ergebnisse zu erzielen (wenn ich die Frage richtig verstehe).

Verwenden Sie org-sort( C-c ^), um Einträge in der Gliederung, Zeilen in einer Tabelle oder Elemente in einer Liste zu sortieren. Beispielsweise können Sie aus einer Überschrift aufrufen org-sort, um alle untergeordneten Einträge zu sortieren.

In Ihrem Beispiel möchten Sie die Einträge der obersten Ebene in Ihrer Gliederung sortieren. Wählen Sie daher zuerst alle Einträge aus. Wenn Sie anrufen, werden org-sortSie aufgefordert, zu sortieren: alphabetisch, nach Priorität usw.

Ich vermute aus Ihrem Beispiel, dass das Endergebnis, das Sie erwarten, ist:

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

Das heißt, Sie möchten alphabetisch sortieren, aber hat dieser nachgestellte Buchstabe Vorrang? Dafür gibt es keine eingebaute Sorte. Wenn Sie die Einträge so ändern, dass dieser Sortierbuchstabe an erster Stelle steht (z. B. A, Toto), funktioniert eine normale alphabetische Sortierung. Eine andere Möglichkeit wäre, diese Informationen in eine Eigenschaft für jedes Element zu verschieben und dann nach Eigenschaften zu sortieren.

Wie @nanny in den Kommentaren vorgeschlagen hat, org-sortkann auch eine benutzerdefinierte Sortierfunktion aufgerufen werden. Auf diese Weise können Sie Ihre vorhandene Datei verwenden, ohne alle Einträge ändern zu müssen. Hier ist eine Sortierfunktion, die den aktuellen Überschriftentext findet und das letzte Zeichen an den Anfang anfügt, damit es Vorrang hat. Sie benötigen etwas Robusteres, wenn Ihre Überschriften nicht alle genau diesem Muster folgen.

(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
quelle
1
Eine Alternative zum Ändern der Datei besteht darin, den [f]uncSortiertyp zu verwenden org-sortund eine Funktion zum Sortieren basierend auf der vorhandenen Struktur zu schreiben.
Kindermädchen
Das hat mein Problem ganz gut gelöst, nachdem ich query-replace-regexpdie wenigen Überschriften, die nicht genau dem richtigen Format entsprachen , schnell bearbeitet hatte. Viel einfacher als alle meine Daten in Eigenschaften zu konvertieren.
20.
... oder Sie könnten es in ein Tag verschieben, dh "* Toto: A:", und dann Cc ^ r TAGS
jtgd
1
Nur um Ihnen mitzuteilen, dass ich dieses Problem genau einmal im Jahr habe und Ihre Lösung gestern erneut verwendet habe.
jch
0

Ich setze überall in einer Datei Überschriften mit unterschiedlichen Prioritäten. Ich mache mir keine Sorgen um die Reihenfolge. Später sehe ich sie sortiert nach Agenda-Ansichten . Mithilfe von Tags werden sortierte Überschriften aus konkreten Kategorien mit benutzerdefinierten Agenda-Ansichten angezeigt .

Ich weiß, dass dies nicht die Antwort für das Sortieren von Überschriften in einer Datei ist , aber das Anzeigen von Überschriften mit Agenda-Ansichten ist immer der beste Weg. Sie können priorisierte Überschriften schnell einfügen, ohne sich um die Reihenfolge kümmern zu müssen.

Adam Skobodzinski
quelle