Función para eliminar los cajones (drawers) de un encabezado en Org Mode
Los drawers («cajones») que se van acomodando bajo los encabezados de un documento Org son muy útiles y yo hago
bastante uso de ellos. No sólo los más típicos de propiedades, «logbook» (para ir dejando notas de los distintos cambios
de estado), «custom-id», etc., sino otros que yo me pueda crear eventualmente para ir metiendo allí dentro lo que se me
vaya antojando (mediante el atajo C-c C-x C-d
). Lo que ocurre es que también muy a menudo necesito limpiar algún
encabezado de cajones. Y cualquier usuario encontrará entonces que es más fácil saludarlos que despedirlos. Así que se
me ocurrió escribir esta función para reducir a la nada todos los drawers del árbol en que nos encontremos y (ojo)
también los de todos los sub-árboles que dependan de éste.
La función es muy sencilla y echa mano de tres expresiones de Org Mode que ya vienen de fábrica:
- La constante
org-drawer-regexp
, que devuelve la expresión regular para localizar cualquier cajón (bien, nos ahorramos de escribirla), y que no es otra que^[ \t]*:\\(\\(?:\\w\\|[-_]\\)+\\):[ \t]*$
- La función
org-mark-element
, que ejecuta lo que promete. En este caso nos marcará todo el contenido de un cajón. - La función, por último,
org-remove-empty-drawer-at
, que también se explica por si sola.
De modo que mi pequeña función quedaría tal que así:
(defun elimina-cajones-org-encabezado () "Borra todos los cajones en un encabezado de org" (interactive) (save-restriction (org-narrow-to-subtree) (save-excursion (goto-char (point-min)) (while (re-search-forward org-drawer-regexp nil t) (forward-line) (beginning-of-line) (org-mark-element) (delete-region (region-beginning) (region-end)) (org-remove-empty-drawer-at (point))))))
Para probar la función, podemos añadirla como bloque de código a cualquier subárbol y evaluarla.
∞
Publicado: 15/10/2019
Última actualización: 15/10/2019
Esta obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial 4.0 Internacional.