Jun 21 2010

Org-mode : TAGS (etiquetas)

Tag: basicadmin @ 3:37 am

Despues de un tiempo inactivo (unos 6 meses); algunos de ellos por estar viajando y sin conexion a Internet y otras veces por otras razones personales por fin vuelvo para continuar con este blog sobre GNU/Emacs, asi que pido disculpas a todos por este retraso y tiempo inactivo.

Tambien quiero pedir disculpas debido a que los ultimos articulos necesitan ser revisados, ya que contienen frases que no son del todo entendibles o con algunos ejemplos poco claros, asi que intentare revisarlos lo antes posible.

Por otro lado decir que hemos migrado a nuevos servidores de OVH (antes estaban en 1&1) con mejores servicios, asi pues, hemos instalado nuevas versiones de software mas modernas mas seguras y con mas funcionalidades. Gracias a |[TDP]| ya que ha cargado con la parte pesada y se ha encargado de todo ello. Sin mas dilacion, pasamos a la parte tecnica y especifica de GNU/Emacs, en el cual hablare de los TAGS (o etiquetas) en org-mode.

Una forma de relacionar informacion cruzada es usar TAGS en las lineas de cabecera. Cada linea de cabecera contiene una lista de TAGS (que deben tener un formato alfanumerico o bien ‘‘ o ‘_‘) por ejemplo:

* Reunion con el grupo Frances        :work:
** Sumario por Frank               :boss:notes:
*** TODO Preparar presentacion        :action:

Herencia

Para usar los TAGS definidos en un solo fichero podemos usar:

#+FILETAGS: :Peter:Boss:Secret:

Que ademas pueden usar herencia (o no) si se configuran las variables org-use-tag-inheritance y org-tags-exclude-from-inheritance.

Cuando una linea de cabecera coincide durante una busqueda de TAGS y la herencia esta activada (o habilitada), todos los subniveles del mismo nivel heredaran este mismo TAG, por lo que esto puede provocar muchos resultados en algunos casos, asi que si solo se quiere encontrar la primera coincidencia en un subarbol podemos configurar la variable org-tags-match-list-sublevels (aunque esto no se recomienda segun la web oficial de org-mode).

Creando TAGS

Generalmente los TAGS se escriben a mano despues de la linea de cabecera, aunque despues de pulsar ‘:‘ podemos usar M-TAB para autocompletion de TAGS, ademas existen algunos keystrokes interesantes relacionados:

C-c C-q ó C-c C-c : Crea TAGS para la linea de cabecera actual. Ademas despues de presionar INTRO el TAG sera alineado, pero con C-u INTRO todos los tags seran alineados respecto la variable org-tags-column.

Org soporta insercion basada en listas de TAGS, para ello debemos especificar de forma global org-tag-alist con una lista de TAGS o bien para un fichero especifico mediante:

#+TAGS: @work @home @tennisclub
#+TAGS: laptop car pc boat

En el caso de que la lista sea dinamica usando la variable org-tag-alist debemos dejar la lista de TAGS en blanco tal que asi:

#+TAGS:

Podemos especificar una lista de TAGS en la variable org-tag-persistent-alist, lo que usara automaticamente en cada fichero dicha lista de TAGS, a excepcion de si se anade esta linea:

#+STARTUP: noptag

Existe ademas un metodo de seleccion de TAGS ultrarapido llamado fast tag selection, que permite deseleccionar y seleccionar TAGS simplemente presionando una tecla, por lo que deberemos asignar teclas unicas a cada TAG. Tambien se pueden configurar de forma global configurando la variable org-tag-alist en nuestro .emacs:

(setq org-tag-alist ‘((“@work” . ?w) (“@home” . ?h) (“laptop” . ?l)))

Se puede configurar de manera local (solo relevante para un fichero) de la siguiente forma:

#+TAGS: @work(w) @home(h) @tennisclub(t) \n laptop(l) pc(p)

Especificando ‘\n‘ comenzara una nueva linea despues de un TAG especifico, que seria lo equivalente a:

#+TAGS: @work(w) @home(h) @tennisclub(t)
#+TAGS: laptop(l) pc(p)

Se pueden agrupar los TAGS mediante llaves, indicando asi que al menos uno de los 3 encerrado entre llaves debe ser seleccionado:

#+TAGS: { @work(w) @home(h) @tennisclub(t) } laptop(l) pc(p)

Para activar los cambios debemos pulsar C-c C-c.

Es posible crear TAGS de exclusion mutua configurando la variable org-tags-alist:

(setq org-tag-alist ‘((:startgroup . nil)
(“@work” . ?w) (“@home” . ?h)
(“@tennisclub” . ?t)
(:endgroup . nil)
(“laptop” . ?l) (“pc” . ?p)))

Presionando C-c C-c y cualquier tecla de las siguientes:

  • a-z ó ó _ : podremos anadir o eliminar un TAG de la linea actual (ademas tendra en cuenta tags de exclusion mutua).
  • TAB : Autocompletara un TAG.
  • SPC : Elimina todos los TAGS de la linea actual.
  • INTRO : Acepta el nuevo TAG modificado.
  • C-g : Cancela el nuevo TAG.
  • q : Si q no esta asignado como un TAG, abortara como C-g.
  • ! : Deshabilita todos los TAGS de exclusion mutua.
  • C-c : Hace toggle para auto-salida del siguiente cambio. En modo experto el primer C-c mostrara la ventana de seleccion.

Es posible modificar la variable org-fast-tag-selection-single-key para evitar tener que presionar INTRO para TAGS demasiado usados y asi tener el mismo efecto.

Busqueda en tags

Es posible extraer cierta informacion a partir de los TAGS. Por ejemplo:

  • C-c \ ó C-c / m : Crea un arbol con todas las lineas de cabecera que coincidan con dicho TAG.
  • C-u C-c \ ó C-u C-c / : Con el prefijo esta vez ignorara aquellas lineas de cabecera que no sean un TODO.
  • C-c a m : Crea una lista global de la agenda de todos los TAGS que coincidan.
  • C-c a M : Crea una lista global de la agenda de todos los TAGS que conicidan, pero solo buscara aquellos que sean TODO y forzara la busqueda en subtareas (ver variable org-tags-match-list-sublevels).

Estos comandos se pueden usar para buscar empleando logica booleana como por ejemplo ‘+boss+urgent-project1‘ para encontrar todas las cabeceras de linea que tengan el TAG de ‘jefe’ y el de ‘urgente’ pero no para el ‘proyecto1’.

Recordad que este articulo es interesante combinarlo con los anteriores referentes a org-mode (tablas, hiperenlaces y tareas).

Al principio el uso de org-mode puede resultar algo complejo (sobretodo si no estamos habituados o no lo hemos estado al antiguo outline-mode) pero con un poco de practica, ignorando aquellos comandos que usemos con menos frecuencia y usando solo aquellos que mas nos interesen en cada momento, al final conseguiremos dominar este modo de manera mecanica.