Notxor tiene un blog

Defenestrando la vida


Reorganizar las capturas de la agenda con plantillas

Llevo tiempo oyendo hablar de GTD1 como una forma de organizarse las tareas y flujo de trabajo que consigue aumentar la productividad y reducir el estrés. Sin embargo, no ha sido hasta hace unas semanas que me he propuesto empezar a aplicarlo a mi caso. Mi vida se ha ido complicando ─complicándomela yo sólo, se entiende─ y necesito un mejor control de las cosas que debo hacer. Entiendo que GTD me servirá para eso ─y algunos ya me han dicho que o me sirve o no habrá nada que me sirva─. Llevo muy poco estudiado sobre el tema de cómo funciona el sistema, pero lo poco que llevo hace énfasis en la captura de tareas.

Tengo que anotar tareas para varios aspectos de mi vida: las cosas del trabajo, las cosas de la asociación con la que colaboro, otras cosas que son personales y otras relacionadas con la Frateco de esperanto. Las tareas por tanto, llevarán las etiquetas correspondientes a esos aspectos y se anotarán todas en la agenda, para que estén juntas, pero no revueltas.

Ayer mismo, el amigo Rui Figueiredo me enlazaba un fichero de captura bastante interesante y completo que me ha hecho replantearme lo que tenía ya hecho, añadiendo algunas cosas y cambiando el cómo lo hacía también. El resultado completo, de cómo han quedado mis plantillas para hacer la captura, lo pongo al final del artículo.

La primera decisión ha sido sacar las plantillas de captura del init.el y las he puesto en un fichero, dentro del mismo directorio donde tengo la agenda. ¿Por qué? Pues básicamente porque de momento lo quiero compartir entre dispositivos, igual que comparto la agenda, para ir haciendo modificaciones según vaya aprendiendo cómo funciona el GTD. Además, ha quedado un listado bastante largo y hace más confuso el fichero de configuración de Emacs así que la decisión redunda también en mayor claridad del código.

Básicamente, las plantillas están divididas en tres grupos principales:

  1. Tareas pendientes. Son las tareas que hay que hacer pero no tienen una fecha determinada para hacerlas. Son ese tipo de cosas que me he responsabilizado a hacer (no hace falta que me lo recuerdes cada seis meses).
  2. Tareas a la espera. Son las tareas que hay que hacer pero no dependen de uno mismo, bien porque están delegadas en otras personas, bien porque dependen de otra tarea anterior, o por cualquier otro motivo, están esperando que se las complete.
  3. Tareas con fecha límite. Algunas de las tareas tienen una fecha concreta en las que tienen que estar realizadas, o bien un momento concreto en las que hacerlas. Por ejemplo, las reuniones, las conferencias y algunas otras cosas que hago, como charlas en colegios o sesiones clínicas, son las típicas que se encontrarán aquí.

Además, como he dicho antes, necesito saber cuándo una tarea pertenece a qué aspecto de mi vida. Y tengo varios:

  1. Trabajo. Todas las acciones y tareas destinadas a ingresar dinero en mi cuenta corriente.
  2. Asociación. Colaboro con una asociación que se llama Protección a la Infancia Contra el Abuso. Les echo una mano como psicólogo, aunque también con otras tareas.
  3. Personal. Todas las demás acciones, que no son del trabajo ni de la asociación. Por ejemplo, todas las cosas que hago relacionadas con el Esperanto.

Capturas que no son para la agenda

Teniendo ya la inercia de capturar cosas y copiándome un poco de los sistemas de captura que he encontrado por ahí, decidí tener también la posibilidad de capturar información que no tiene que ver con la agenda, o con las tareas. También puedo capturar anotaciones en un fichero especial que he llamado bitacora.org. En él tengo dos tipos de anotaciones:

  1. Notas. En el diario se pueden hacer anotaciones que me gusta ordenar por fechas y por eso, lo he metido de la siguiente forma:

    ("nd" "Anotar (d) diario" entry (file+headline "~/agenda/bitacora.org" "Diario")
    "** %U
    %?" :empty-lines 1)
    
  2. Ideas. Hay veces que se me ocurre alguna idea que no puedo desarrollar en ese momento. Ideas, por ejemplo, para artículos del blog, o para los sienes y sienes de proyectos, aventuras conversacionales y otras historias que tengo.

    ("ni" "Anotar (i) idea" entry (file+headline "~/agenda/bitacora.org" "Ideas")
     "** Idea para %^{Tema}
      :PROPERTIES:
      :Tema:      %\\1
      :fecha:     %U
      :END:
    %?" :empty-lines 1)
    

Al utilizar esta última plantilla, el sistema de captura me preguntará por el Tema y luego me dejará escribir lo que sea, marcándolo con la fecha correspondiente.

Sin embargo, el gran avance de lo que he copiado (adaptado) de otros sistemas de captura es la posibilidad de tomar datos personales. Aunque utilizo como base de datos el BBDB. Porque funciona, porque está completo, me permite importar y exportar a vcard, mientras que otros sistemas en org-mode sólo me permiten importar. Normalmente, cuando tomo notas de datos personales lo hago directamente a la base de datos, pero en ocasiones no la tengo a mano, porque está guardada en un disco externo encriptado y a veces no lo tengo montado. Así que he planteado la siguiente solución con las plantillas de captura:

("nc" "Anotar (c) contacto" entry (file "~/agenda/especiales/personal.org.gpg")
 "* %^{Nombre} %^{Apellidos}%?
  :PROPERTIES:
  :Nombre:     %\\1
  :Apellidos:  %\\2
  :F-nacim:    %^{F-nacim}u
  :Móvil:      %^{Móvil}
  :Email:      %^{Email}
  :Web:
  :Dirección:  %^{Dirección}
  :Ciudad:     %^{Ciudad}
  :Provincia:  %^{Provincia}
  :Cód.Pos:    %^{Código Postal}
  :Compañía:
  :Trab-Grupo:
  :Trab-puesto:
  :Trab-Tel.:
  :Trab-Email:
  :Trab-Web:
  :Trab-Dirección:
  :Trab-Oficina:
  :Trab-ciudad:
  :Trab-Provincia:
  :Trab-CP:
  :Notas:
  :END:" :empty-lines 1)

Como se puede ver, la captura va a un fichero especial que he llamado personal.org.gpg porque se encuentra cifrado con GPG. Los datos se guardan, por tanto a buen recaudo hasta que los pueda pasar a la base de datos junto con todos los demás.

Los códigos del estilo %^{Nombre} lo que hacen es decirle a org-capture que debe preguntar por un dato Nombre que el usuario debe introducir en el buffer. Los códigos del estilo %\\1 lo que hace es sustituir ese código por el parámetro 1, en nuestro caso el nombre, que introduzca el usuario.

Y por último, el cursor se quedará, una vez introducidos todos los campos que se han marcado interactivamente, en la posición indicada por los caracteres %?.

El fichero de plantillas completo

Este es el resultado:

;; Capturar cualquier cosa a formato org-mode
(setq org-capture-templates
          ; Es una lista de listas así que vamos por partes
      '(("t" "Tarea Pendiente")
    ("tt" "Tarea Simple    (t) trabajo" entry (file "~/agenda/agenda.org")
     "* PENDIENTE %? \t :trabajo:
   :PROPERTIES:
   :CREATE:      %U
   :END:
   :LOGBOOK:
   - State  \"PENDIENTE\"            from \"\"      %U
   :END:" :empty-lines 1)
    ("ta" "Tarea Simple    (a) asociación" entry (file+headline "~/agenda/agenda.org" "Asociación")
     "* PENDIENTE %? \t :asociación:
   :PROPERTIES:
   :CREATE:       %U
   :END:
   :LOGBOOK:
   - State  \"PENDIENTE\"            from \"\"      %U
   :END:" :empty-lines 1)
    ("tp" "Tarea Simple    (a) personal" entry (file+headline "~/agenda/agenda.org" "Personal")
     "* PENDIENTE %? \t :personal:
   :PROPERTIES:
   :CREATE:       %U
   :END:
   :LOGBOOK:
   - State  \"PENDIENTE\"            from \"\"      %U
   :END:" :empty-lines 1)
 ;;; Capturar tareas que pasan a estar a la espera
    ("e" "Tarea a la espera")
    ("et" "Tarea Simple    (t) trabajo" entry (file "~/agenda/agenda.org")
     "* ESPERANDO %? \t :trabajo:
   :PROPERTIES:
   :CREATE:      %U
   :END:
   :LOGBOOK:
   - State  \"ESPERANDO\"            from \"\"      %U
   :END:" :empty-lines 1)
    ("ea" "Tarea Simple    (a) asociación" entry (file+headline "~/agenda/agenda.org" "Asociación")
     "* ESPERANDO %? \t :asociación:
   :PROPERTIES:
   :CREATE:       %U
   :END:
   :LOGBOOK:
   - State  \"ESPERANDO\"            from \"\"      %U
   :END:" :empty-lines 1)
    ("ep" "Tarea Simple    (p) personal" entry (file+headline "~/agenda/agenda.org" "Personal")
     "* ESPERANDO %? \t :personal:
   :PROPERTIES:
   :CREATE:       %U
   :END:
   :LOGBOOK:
   - State  \"ESPERANDO\"            from \"\"      %U
   :END:" :empty-lines 1)
 ;;; Capturas que tienen «deadline» asociada
    ("l" "Tarea con fecha límite")
    ("lt" "Tarea    (t) trabajo" entry (file "~/agenda/agenda.org")
     "* PENDIENTE %? \t :trabajo:
   DEADLINE: %(substring (call-interactively 'org-deadline) 12)
   :PROPERTIES:
   :CREATE:      %U
   :END:
   :LOGBOOK:
   - State  \"PENDIENTE\"            from \"\"      %U
   :END:" :empty-lines 1)
    ("la" "Tarea    (a) asociación" entry (file+headline "~/agenda/agenda.org" "Asociación")
     "* PENDIENTE %? \t :asociación:
   DEADLINE: %(substring (call-interactively 'org-deadline) 12)
   :PROPERTIES:
   :CREATE:       %U
   :END:
   :LOGBOOK:
   - State  \"PENDIENTE\"            from \"\"      %U
   :END:" :empty-lines 1)
    ("lp" "Tarea    (p) personal" entry (file+headline "~/agenda/agenda.org" "Personal")
     "* PENDIENTE %? \t :personal:
   DEADLINE: %(substring (call-interactively 'org-deadline) 12)
   :PROPERTIES:
   :CREATE:       %U
   :END:
   :LOGBOOK:
   - State  \"PENDIENTE\"            from \"\"      %U
   :END:" :empty-lines 1)
 ;;; Templates de captura para cosas que no son para la agenda
    ("n" "Capturas no para agenda")
    ("nc" "Anotar (c) contacto" entry (file "~/agenda/especiales/personal.org.gpg")
     "* %^{Nombre} %^{Apellidos}%?
  :PROPERTIES:
  :Nombre:     %\\1
  :Apellidos:  %\\2
  :F-nacim:    %^{F-nacim}u
  :Móvil:      %^{Móvil}
  :Email:      %^{Email}
  :Web:
  :Dirección:  %^{Dirección}
  :Ciudad:     %^{Ciudad}
  :Provincia:  %^{Provincia}
  :Cód.Pos:    %^{Código Postal}
  :Compañía:
  :Trab-Grupo:
  :Trab-puesto:
  :Trab-Tel.:
  :Trab-Email:
  :Trab-Web:
  :Trab-Dirección:
  :Trab-Oficina:
  :Trab-ciudad:
  :Trab-Provincia:
  :Trab-CP:
  :Notas:
  :END:" :empty-lines 1)
    ("nd" "Anotar (d) diario" entry (file+headline "~/agenda/bitacora.org" "Diario")
     "** %U
%?" :empty-lines 1)
    ("ni" "Anotar (i) idea" entry (file+headline "~/agenda/bitacora.org" "Ideas")
     "** Idea para %^{Tema}
   :PROPERTIES:
   :Tema:      %\\1
   :fecha:     %U
   :END:
%?" :empty-lines 1)
;;; Lista de templates de captura para Frateco
    ("f" "Tareas para Frateco Esperanto")
    ("ff" "Tarea    (f) Frateco" entry (file+headline "~/agenda/agenda.org" "Esperanto")
     "* PENDIENTE %? \t :personal:
   DEADLINE: %(substring (call-interactively 'org-deadline) 12)
   :PROPERTIES:
   :CREATE:       %U
   :END:
   :LOGBOOK:
   - State  \"PENDIENTE\"            from \"\"      %U
   :END:" :empty-lines 1)
    ))

Nota al pie de página:

1

Acrónimo de Getting Things Done.


Comentarios

Debido a algunos ataques mailintencionados a través de la herramienta de comentarios, se ha decidido activar un filtro antispam y guardar las direcciones IP con el único objeto de añadir a la lista de bloqueos las que correspondan a spam y otras actividades maliciosas.

Disculpen las molestias.