Jul 03 2010

Org-mode : spreadsheet (hojas de calculo)

Tag: basicoverdrive @ 3:01 am

Y aqui estamos con un nuevo articulo sobre org-mode, como no, org-mode permite la creacion y uso de hojas de calculo (en ingles spreadsheet). Parece increible como un software que a simple vista parece tan simple, pueda llegar a tener tanta potencia, todo esto no seria posible sin el magnifico grupo de desarrolladores de org-mode y en general a la comunidad tan activa de GNU/emacs, sin mas dilacion comenzamos explicando el uso de referencias.

Antes de comenzar, debe conocer un minimo el uso de tablas en org-mode, ya que las hojas de calculo se emplean mediante dicho uso, por lo que es necesario leer el articulo sobre Org-mode: tablas para poder aplicar luego hojas de calculo sobre el.

Referencias

Se puede referenciar un campo para computarlo con otros. Se puede referenciar dado su nombre, sus coordenadas absolutas o coordenadas relativas. Para saber las corrdenadas de un campo debemos presionar C-c ? que mostrar las coordenadas de dicho campo o bien C-c } que hara toggle de las coordenadas del grid.

La notacion que usa org es @fila$columna, si es relativa debemos anadir + o delante del numero. Tambien se puede especificar ‘I‘ para referirse a la primera linea, ‘II‘ a la segunda linea, ‘-I‘ a la (n)anterior linea o bien ‘III+2‘ para referirse al segundo dato de la tercera linea de la tabla. 0 se referira a la columna y fila actual.

Existen referencias especiales como ‘$LR5‘ que pueden ser usadas para referirse al 5o campo de la ultma fila de la tabla.

@2$3 -> 2a fila, 3a columna
C2 -> igual que la anterior columna
$5 -> 5a columna en la fila actual
E& -> igual que la anterior
@2 -> columna actual, 2a fila
@-1$-3 -> una fila mas arriba, tres columnas mas a la derecha
@-I$2 -> encima de la fila actual, columna 2

Rangos

$1..$3 -> Los primeros 3 campos de la fila actual
$P..$Q -> rango usando nombres de columnas P y Q
@2$1..@4$3 -> 6 campos entre estos dos campos, dando rutas relativas
A2..C4 -> 6 campos entre estos dos campos, dando rutas absolutas
@-1$-2..@-1 -> 3 numeros de la columna a la derecha, 2 arriba de la fila actual.

Referencias con nombre

Se puede asignar un nombre a una referencia mediante la variable org-table-formula-constants, o localmente mediante el fichero de configuracion:

#+CONSTANTS: c=299792458. pi=3.14 eps=2.4e-6

Es posible usar referencias remotas mediante:

remote(NAME-OR-ID,REF)

Donde nombre es el nombre de la tabla dado por #+TBLNAME: NAME o su ID. REF es la direccion absoluta o rango de referencias valido en la tabla.

Las formulas pueden ser usadas como expresiones algebraicas mediante el paquete calc de emacs (importante saber que usa convencion no estandar donde / tiene menos precedencia que *) mediante la funcion calc-eval se puede realizar esta evaluacion.

Mediante org-calc-default-modes se usara el modo standard de calc (precision 12, unidades angulares graduales, fracciones y los modos simbolicos deshabilitados).

p20 -> cambia la precision interna a 20 digitos
n3 s3 e4 f4 -> normal, cientifica, ingeniero o formato fijo
D R -> gradianes o radiales (angulo)
F S -> fraccion y simbolicos
N -> interpreta todos los campos como numeros, y usa 0 para los campos que no tengan numeros.
T -> fuerza la intepretacion del texto
E -> mantiene campos vacios en rangos

Ademas se puede usar printf como especificador de formato para reformatear el resultado final:

$1+$2 : suma el primero y el segundo campo
$1+$2;%.2f : suma los dos primeros campos usando 2 decimales
exp($2)+exp($1) : funciones matematicas
$0;%.1f : reformatea la celda actual a un decimal
($3-32)*5/9 : Conversion de grados Farenheit a Celsius
$c/$1/$cm : Conversion de Hz a cm
tan($1);Dp3s1 : computa en grados, precision 3, mostrando SCI 1
sin($1);Dp3%.le : usa el especificador printf para mostrar
vmean($2..$7) : computa un rango de columnas, usando un vector de funciones
vmean($2..$7);EN : igual, pero usa los campos vacios como 0
taylor($3,x=7,2) : serie de taylor de $3, en x=7, segundo grado.

Tambien se pueden contener expresiones logicas tales como:

if($1<20,teen,string(«»)) : teen, si la edad de $1 es menor que 20, en cualquier otro caso vacio.

Si lo que queremos es usar mas potencia podemos escribir formulas para la manipulacion de cadenas y el control de estrucutras tales como:

Intercambia los primeros dos caracteres de la columna 1:
‘(concat (substring $1 1 2) (substring $1 0 1) (substring $1 2))

Suma columnas 1 y 2, equivalnete a calc $1 y $2:
‘(+ $1 $2);N

Calcula la suma de las columnas 1 a 4:
‘(apply ‘+ ‘($1..$4));N

Para asignar una formula a un campo en particular, debe ir precedido por «:=«. Las formulas son guardadas en el formato especial con #+TBLFM: directamente debajo de la tabla. Ademas debemos usar el comando C-u C-c = si queremos insertar una nueva formula en el campo actual.

Es frecuente usar la misma formula para todos los campos de una columna, esto es posible mediante TAB, INTRO o C-c C-c para pasar guardar la formula en la columna usada. Una vez se sale a la siguiente fila tan solo debemos pulsar C-c =, e insertara la nueva formula en la columna actual, reemplazandola por el resultado, tambien es posible usar prefijos para aplicarlo en muchas celdas consecutivas de la columna actual.

Para editar y depurar (o debuggear) existe:

  • C-c = ó C-u C-c = : Edita una formula asociada con el campo/columna actual en el minibuffer.
  • C-u C-u C-c = : reinserta una formula activa en el campo actual. Ademas la ventaja de usar el minibuffer es que se puede emplear el comando C-c ?
  • C-c ? : Resalta el campo referenciado por la posicion del cursor en una formula.
  • C-c } : Muestra (toggle) los numeros de una fila y columna para una tabla, usando overlays. Con C-c C-c se puede formar la alineacion de la tabla cada vez.
  • C-c { : Hace toggle del debugger de formula.
  • C-c ‘ : Edita todas las formulas de la tabla actual en un buffer especial.
  • C-c C-c ó C-x C-s : Sale del editor de formulas
  • C-c C-q : Sale del editor de formula sin instalar los cambios.
  • C-c C-r : Hace toggle del editor de formulas para todas las referencias entre standard (B3, etc) e internas (@3$2, etc).
  • TAB : Hace impresion ‘bonita’, idnetando las formulas lisp, etc.
  • M-TAB : Completa los simbolos lisp.
  • S-up/down/left/right (tecla super + flechas) : Desplaza el punto de referencia.
  • M-S-up/down : Mueve la linea de test para formulas en columnas en el bufer de org.
  • M-up/down : Desplaza la ventana
  • C-c } : Muestra las coordenadas del grid de la tabla.

Cuando se evalua una forma que contiene errores se mostrara la cadena ‘#ERROR‘ para conocer que ocurrio en la substitucion de variables y calculos se puede emplear C-u C-u C-c = INTRO.

Para actualizar la tabla se pueden emplear los siguientes comandos:

  • C-c * : Recalcula la fila actual
  • C-u C-c * ó C-u C-c C-c : recalcula la tabla entera
  • C-u C-u C-c * ó C-u C-u C-c C-c : Itera la tabla para recalcularla hasta que los cambios ocurran.

Existen otras funciones avanzadas con tablas como:

  • C-# : rota la marca de calculos en la primera columa para los estados, ‘#‘, ‘*‘, ‘!‘, ‘$‘. Tambien se puede aplicar sobre regiones.

Las tablas especiales que comiencen con C-u C-c * solo afectara a filas marcadas por ‘#‘ y ‘*‘. Las marcas tienen los siguientes significados:

! : Define nombres para las columnas, por lo que es posible usar $nombre en lugar de $6.
^ : Define nombres para las filas, por lo que cualquier formula en la tabla que use $m1, tomara el valor de la misma.
_ : Define nombres en los campos de la fila inferior.
$ : Campos en esta fila pueden definir parametros para formulas. Por ej. si un campo de una fila contiene $, y dentro contiene max=50, las formulas en esta tabla se podran referir a $max usando como valor 50. Los parametros trabajaran como constantes.
# : Campos en esta fila seran automaticamente recalculados mediante TAB, INTRO o S-TAB o mediante C-u C-c * para recalcularlo de forma global.
* : Selecciona esta linea para recalcular globalmente con C-u C-c *, pero no de forma automatica (para evitar carga cuando se edita demasiado).
: Lineas desmarcadas estan excentas de calculos con C-u C-c *.
/ : No exporta esta linea.

Basicamente este es el uso de hojas de calculo con emacs, aunque en el siguiente articulo anadire una funcionalidad interesante que sabiendo esto puedan crearse graficos sobre dichos datos.


Jun 21 2010

Org-mode : TAGS (etiquetas)

Tag: basicoverdrive @ 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.


Dic 10 2009

Org-mode : TODO (Tareas)

Tag: basicoverdrive @ 4:01 am

En Org tenemos opcion para almacenar y manejar listas de cosas a realizar (aka TODO), como marcar y mostrar dichas entradas, asignaciones y flujos de trabajos, fechas y notas del progreso, marcar prioridades, division de tareas por partes, etc.

Cualquier headline (a partir de ahora lo llamaremos linea de cabecera) se convertira en una tarea a realizar si se le precede de la palabra TODO:

*** TODO Leer onLisp

Aqui podemos aplicar distintos tipos de keystrokes interesantes:

  • C-c C-t : Rota el estado de TODO (pasando por unmarked, TODO, DONE). La misma rotacion es aplicacada mediante buffers de agenda y lineas de tiempo presionando la tecla t.
  • C-u C-c C-t : selecciona una palabra especifica usando autocompletion. Despues necesitamos asignar teclas a estados de TODO.
  • S–> o S-<- : Selecciona el siguiente o anterior estado de TODO.
  • C-c C-v o C-c / t : Muestra la lista de elementos de TODO en un arbol. Carpetas muestran el buffer entero, y muestra todos los elementos con sus cabeceras de forma jerarquica sobre el mismo. Se puede usar argumentos de prefijo dando una lista tal como KWD1|KWD2|… para listar entradas relacionadas, con prefijos numericos, mostrara el arbol Nth. Con dos prefijos, buscara en todos los TODO y entradas marcadas como DONE.
  • C-c a t : Muestra la lista global de TODO.
  • S-M-INTRO : Inserta una nueva entrada debajo del TODO actual.

Estados

Podemos usar claves de forma *secuencial* para estados de un trabajo en proceso:

(setq org-todo-keywords ‘((sequence «TODO» «FEEDBACK» «VERIFY» «|» «DONE» «DELEGATED»)))

La barra vertical o pipe diferenciaria de estados que requieren accion de los que no necesitan futura accion. Si no se provee de dicho pipe, la tarea estara por defecto ‘terminada’. Aqui podriamos aplicar comandos como:

  • C-c C-t para rotar el estado como explicamos anteriormente, aunque podriamos usarlo con el prefijo para dejarlo en un estado directamente como:
  • C-3 C-c C-t : Rota el estado directamente al tercero

Podemos usar claves para indicar un tipo de trabajo que se realizara a quien se le asignara, y cuando este terminado marcada como DONE, aqui C-c C-t se usara para reasignar la tarea a otra persona, pero si se vuelve a lanzar C-c C-t pasara de cualquier persona directamente al estado DONE, tambien se pueden usar prefijos para saltar directamente a cualquier persona:

(setq org-todo-keywords ‘((type «Fred» «Sara» «Lucy» «|» «DONE»)))

En dicho tipo de lista, podremos ver que tareas tiene asignadas la tercera persona (Lucy) mediante C-3 C-c C-v de dicho buffer, si queremos verlo a modo global podemos usar C-3 C-c t.

Para tener distintas propiedades para una tarea, es decir multiples claves podemos hacer algo asi:

(setq org-todo-keywords
‘((sequence «TODO» «|» «DONE»)
(sequence «REPORT» «BUG» «KNOWNCAUSE» | «FIXED»)
(sequence «|» «CANCELLED»)))

En este caso C-c C-t solo operara entre subsecuencias. Mientras que C-u C-u C-c C-t ó C-S–> saltara entre estados dentro de una subsecuencia. S-<– y S–> se desplazara por todas las propiedades de todas las subsecuencias.

Acceso Rapido

Tambien podemos crear ‘acceso rapido’ o ‘acceso directo’ a los estados mediante el siguiente ejemplo:

(setq org-todo-keywords
‘((sequence «TODO(t)» «|» «DONE(d)»)
(sequence «REPORT(r)» «BUG(b)» «KNOWNCAUSE(k)» «|» «FIXED(f)»)
(sequence «|» «CANCELLED(c)»)))

Presionando C-c C-t <letra> saltara directamente a dicho estado. Con SPC directamente se eliminara cualquier clave TODO de la lista.

Estados espeficios para ficheros individuales

Para ello debemos dejar la primera linea del fichero tal que asi:

#+TODO: TODO FEEDBACK VERYFY | DONE CANCELED

Tambien podemos especificar el tipo de tarea a quien sera asignada de manera especifica asi:

#+TYPE_TODO Fred Sara Lucy Mike | DONE

O bien especificar distintas propiedades en paralelo para una tarea medianta:

#+TODO: TODO | DONE
#+TODO: REPORT BUG KNOWNCAUSE | FIXED
#+TODO: | CANCELED

Si usamos abbrev es decir (M-TAB) cuando escribamos #+ podemos usar el completion para asegurarnos de que lo escribimos correctamente.

Resaltado

Es posible resaltar los elementos dependiendo del estado del elemento. Por ejemplo:

(setq org-todo-keyword-faces
‘((«TODO»        . org-warning)
(«DEFERRED»    . shadow)
(«CANCELED»    . (:foreground «blue» :weight bold))))

Dependencias

Podemos crear estructuras mas complejas con dependencias y con ello crear listas y herencias, creando subtareas (hijos) bloqueando asi la padre u otras hermanas, por ejemplo:

* TODO Blocked until (two) is done
** DONE one
** TODO two

* Parent
:PROPERTIES:
:ORDERED: t
:END:
** TODO a
** TODO b, needs to wait for (a)
** TODO c, needs to wait for (a) and (b)

Para que ello surta efecto es necesario configurar el valor de la variable org-enforce-todo-dependencies. Y con los siguientes keybindings podemos hacer:

  • C-c C-x o : hace toggle de la propiedad ORDERED de la entrada actual. Si se quiere trazar el valor de dicha propiedad con un tag para tener mejor visibilidad debemos configurar la variable org-track-ordered-property-with-tag.
  • C-u C-u C-u C-c C-t : Cambia el estado de la lista de tareas, de cualquier estado a blocante.

Ademas configurando la variable org-agenda-dim-blocked-tasks, la lista de tareas no podra ser cerrado debido a las dependencias y sera invisible o mostrando en la agenda.
Tambien se pueden usar checkboxes para bloquear dicha lista mediante la variable org-enforce-todo-checkbox-dependencies, por lo que bloqueara el poder cambiar el estado a DONE.

Para mas complejidad en dependencias se puede revisar el modulo org-depend.el.

Archivando trabajos por tiempo

Se puede archivar usando la fecha:

(setq org-log-done ‘time)

O bien mediante una nota con dicha fecha (se debe crear una entrada en la cabecera con Closing Note):

(setq org-log-done ‘note)

Trazando cambios de estado

A la hora de ver dichos cambios es posible modificar la vista modificando la variable org-log-into-drawer asignandole el valor LOGBOOK (recomendado) o en forma de subarbol dandole el valor de LOG_INTRO_DRAWER.

Se usan ‘marcas‘ especiales para acortar la configuracion de las tazas, como ‘!‘ para timestamp y ‘@‘ para notas, por ejemplo:

(setq org-todo-keywords
‘((sequence «TODO(t)» «WAIT(w@/!)» «|» «DONE(d!)» «CANCELED(c@)»)))

Tambien podemos usar las mismas preferencias locales a un buffer:

#+TODO: TODO(t) WAIT(w@/!) | DONE(d!) CANCELED(c@)

Para guardar todas estas transiciones podemos usar LOGGING, sin embargo una linea indicando :LOGGING: nil causara que no loguee ninguna transicion:

* TODO Loguear cada estado con su fecha y hora
:PROPERTIES:
:LOGGING: TODO(!) WAIT(!) DONE(!) CANCELED(!)
:END:
* TODO Solo loguear la transicion a WAIT y cuando se repita esta
:PROPERTIES:
:LOGGING: WAIT(@) logrepeat
:END:
* TODO No loguear nada
:PROPERTIES:
:LOGGING: nil
:END:

Tazando los habitos

Para trazar los habitos debemos primero configurar la variable org-modules, el habito es TODO, usando la palabra clave TODO representando el estado de la tarea abierta. La propiedad STYLE debe tener el valor habit. Cada tarea puede ser repetitiva como por ejemplo afeitarse y se puede realizar por ejemplo con un minimo de 2 dias pero no mas de 4, eso lo indicamos con la sintaxis ‘.+2d/4d‘ y ademas queremos guardar un logging cada vez que finalicemos la tarea de forma historica, por ejemplo quedaria asi:

** TODO Afeitarse
SCHEDULED: <2009-10-17 Sat .+2d/4d>
… aqui se iran anadiendo entradas automaticamente …
:PROPERTIES:
:STYLE:    habit
:LAST_REPEAT: [2009-10-19 Mon 00:36]
:END:

Esto usara los siguientes colores:

Azul -> si la tarea se finalizo otro dia
Verde -> Si la tarea se ha finalizado hoy
Amarillo -> Si la tarea es para manana como muy tarde
Rojo -> Si la tarea es para hoy como muy tarde

Se pueden modificar algunas variables interesantes para mostrar los habitos en la agenda:

  • org-habit-graph-column : La columna del buffer con que consistencia debe ser grabado el grafico.
  • org-habit-preceding-days : El historial maximo.
  • org-habit-following-days : Numero de dias que debe seguir apareciendo una tarea despues de ser realizada.
  • org-habit-show-habits-only-for-today : Si no es nil, mostrara solo los habitos de la agenda de hoy.

Ademas presionando K en la agenda, desabilitaremos/habilitaremos temporalmente los habitos.

Prioridades

Es posible prioridad tareas mediante:

*** TODO [#A] Escribir una carta a Richard Stallman

Por defecto Org permite 3 prioridades (A, B y C) siendo A la maxima prioridad. Las prioridades se reflejan solo en la agenda, fuera de ella no tienen efecto.

  • C-c , : Le asigna la prioridad a la tarea actual (A, B o C). Si se pulsa SPC la prioridad es eliminada. Las prioridades tambien pueden ser modificadas remotamente desde la agenda.
  • S-flechaarriba : Incrementa la prioridad.
  • S-flechaabajo : Decrementa la prioridad.

Se pueden modificar la posibles prioridades modificando las variables org-highest-priority, org-lowest-priority y org-default-priority.

Para modificar las prioridades de una tarea de un buffer individual se puede hacer mediante:

#+PRIORITIES: A C B

Rompiendo una tarea en subtareas

Podemos coger una tarea compleja y dividirla en subtareas, viendo asi la progresion respecto al total, para ello usaremos [/] ó [%]. Estas cookies actualizaran su estado cuando una subtarea cambie de estado o bien cuando se pulse C-c C-c en la cookie:

* Organize Party [%]
** TODO Llamar a gente [/]
*** TODO Peter
*** DONE Sarah
** TODO Comprar comida
** DONE Hablar con el vecino

Si queremos guardar las estadisticas de un subarbol de tareas (no directamente del hijo) debemos configurar la variable org-hierarchical-todo-statistics. Para realizar esto en un subarbol simlpe debemos incluir la palabra ‘recursive‘ como valor de la propiedad COOKIE_DATA:

* Parent capturing statistics [/]
:PROPERTIES:
:COOKIE_DATA: todo recursive
:END:

Si queremos cambiar automaticamente a DONE la tarea cuando todas las tareas hijas hayan finalizado:

(defun org-summary-todo (n-done n-not-done)
«Switch entry to DONE when all subentries are done, to TODO otherwise.»
(let (org-log-done org-log-states)
(org-todo (if (= n-not-done 0) «DONE» «TODO»))))

En caso de tener muchas subtareas es conveniente usar checkboxes.

Checkboxes

Cada tarea puede ser mostrada usando un checkbox, tan solo debemos crear [ ]. Para hacer toggle en una tarea de checkbox debemos usar C-c C-c o directamente usar el raton ya que es clickable, aqui un ejemplo de checkbox:

* TODO Organizar fiesta [/]
– [ ] Llamar a gente [/]
– [ ] Peter
– [ ] Sarah
– [ ] Sam
– [ ] Pedir comida
– [ ] Preparar la musica
– [ ] Hablar con los vecinos

Si las tareas deben efectuarse en secuencia obligatoria, los checkboxes deben deshabilitarse para evitar problemas y comportamientos no deseados. Los siguientes comandos funcionan con checkboxes:

  • C-c C-c : Hace toggle de una tarea en checkbox (ademas las estadisticas del headline se actualizaran).
  • C-c C-x C-b : Hace toggle de una tarea en checkbox (tambien funciona para regiones, ademas puede usar argumentos/prefijo en dichas regiones).
  • M-S-RET : Inserta una nueva tarea de tipo checkbox. (realmente es M-Ret).
  • C-c C-x o : Hace toggle de ORDERED si deben ser las tareas ejecutadas en secuencia. Si queremos trazar estos tipos de tareas ademas debemos configurar la variable org-track-ordered-property-with-tag.
  • C-c # : Actualiza las estadisticas de la entrada actual. Si es ejecutada con argumentos/prefijo C-u, actualizara el fichero entero.
  • M-<flecha arriba> : Mueve un elemento de la lista hacia arriba.
  • M-<fleha abajo> : Mueve un elemento de la lista hacia abajo.
  • C-u C-c ! : Anadira un timestamp donde nos escontremos.
  • C-c C-t : Aplicara un timestamp para el headline si incluimos las siguiente linea en nuestro .emacs:

(setq org-log-done ‘time)


« Página anteriorPágina siguiente »