Cuaderno de GNUtas

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:

  1. 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]*$
  2. La función org-mark-element, que ejecuta lo que promete. En este caso nos marcará todo el contenido de un cajón.
  3. 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.

cajones2.gif

Publicado: 15/10/2019

Última actualización: 15/10/2019


Índice general

Acerca de...

Esta obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial 4.0 Internacional.

© Juan Manuel Macías
Creado con esmero en
GNU Emacs