Ordenar encabezados en un archivo ORG

10

Estoy tomando notas en un archivo de modo org largish que tiene la siguiente estructura:

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

Me gustaría ordenar el archivo para que todos los encabezados Aprecedan a los encabezados con B, que a su vez preceden a los encabezados con C, y así sucesivamente. ¿Hay una manera automatizada de hacer eso con el modo org?

jch
fuente
44
¿Lo intentaste org-sort?
abo-abo
C-c ^de memoria (podría ser algo similar que termina en ^, como C-x C-c ^etc.)
wvxvw

Respuestas:

13

Hay un org-sortcomando, pero es posible que deba ajustar la estructura de su archivo para obtener los resultados que desea (si entiendo la pregunta correctamente).

Use org-sort( C-c ^) para ordenar entradas en el esquema, filas en una tabla o elementos en una lista. Por ejemplo, desde un encabezado puede llamar org-sortpara ordenar todas las entradas secundarias.

En su ejemplo, desea ordenar las entradas de nivel superior en su esquema, así que seleccione primero todas las entradas. Cuando llame, org-sortse le preguntará cómo ordenar: alfabéticamente, por prioridad, etc.

Supongo por su ejemplo que el resultado final que espera es:

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

Es decir, está buscando ordenar alfabéticamente pero ¿tiene prioridad esa letra final? No hay un tipo incorporado para eso. Si cambió las entradas para poner esa letra de clasificación primero (por ejemplo A, Toto), funcionaría una clasificación alfabética normal. Otra opción sería mover esa información a una propiedad en cada elemento, luego puede ordenar por propiedad.

Como @nanny ha sugerido en los comentarios, org-sorttambién puede llamar a una función de clasificación personalizada. De esa manera puede usar su archivo existente sin tener que cambiar todas las entradas. Aquí hay una función de clasificación que encuentra el texto del título actual y agrega el último carácter al principio para que tenga prioridad. Necesitará algo más robusto si sus titulares no siguen ese patrón exacto.

(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
fuente
1
Una alternativa para cambiar el archivo es usar el [f]unctipo de clasificación org-sorty escribir una función para ordenar según la estructura existente.
niñera
Eso resolvió mi problema bastante bien, después de una rápida query-replace-regexpedición de los pocos encabezados que no seguían estrictamente el formato correcto. Mucho más fácil que convertir todos mis datos en propiedades.
jch
... o puede moverlo a una etiqueta, es decir, "* Toto: A:" y luego ordenar Cc ^ r TAGS
jtgd
1
Solo para hacerle saber que tengo este problema exactamente una vez al año, y ayer utilicé su solución nuevamente.
jch
0

Pongo titulares con diferentes prioridades en cualquier parte de un archivo, no me preocupa el orden. Más tarde los estoy viendo ordenados con vistas de agenda . Mediante el uso de etiquetas , los encabezados ordenados de categorías concretas se ven con vistas de agenda personalizadas .

Sé que esa no es la respuesta sobre cómo ordenar los titulares en un archivo , pero ver los titulares con vistas de agenda siempre es la mejor manera. Puede insertar titulares priorizados rápidamente, sin preocuparse por el pedido.

Adam Skobodzinski
fuente