12 KiB
weight | title | date | draft | summary | categories | tags | |||
---|---|---|---|---|---|---|---|---|---|
4 | Apuntes: org-mode en Emacs | 2020-12-17T10:19:04+0100 | false | Aprendiendo a usar org-mode |
|
|
Apuntes no terminados sobre Emacs y org-mode
{{< admonition type=warning title="Work in progress" open=true >}} Estos apuntes no están completos, (ni de lejos) {{< /admonition >}}
org-mode es un invento de Carsten Dominik. Mr. Carsten lo inventó como un método para implementar GTD, pero poco a poco lo fue refinando añdiendo Emacs Calc y org-babel. A partir de ahí no ha parado de mejorar.
Esquema básico con cabeceras
Lo primero que te encuentras en org-mode es un esquema basado en cabeceras:
- Cada cabecera empieza con uno (o varios) caracteres *
- Pulsando
Tab
en la linea de cabecera se colapsa o expande esa sección - Pulsando
S-Tab
en cualquier parte del documento se cambia el estado colapsado/expandido en todo el documento - Pulsando
Alt
(que llamamosMeta
en Emacs) y las flechas derecha e izquierda en una linea de cabecera cambiamos el nivel de la cabecera - Pulsado
M-Up
oM-Down
en una linea de cabecera la cambiamos de posición en el documento - La combinación
C-c C-w
en una cabecera nos permite cambiarla de rama (interactivo)
Listas de Tareas
Cualquier cabecera puede marcarse como TODO
o DONE
(son las
opciones por defecto), basta con presionar S-right
o S-left
en la
linea de cabecera para ir cambiando de estado. Alternativamente puedes
usar C-c C-t
para poner un estado interactivamente (más rápido)
Si necesitamos algo más sofisticado podemos añadir estados en la
cabecera de nuestro fichero .org
Los estados a la izquierda del pipe son TODO
, y a la derecha son
DONE
#+SEQ_TODO: Next(n) TODO(t) Waiting(w) Someday(s) | DONE(d) CANCELLED(c)
Si cambias las lineas de configuración en la cabecera, puedes recargar
el local setup
con C-c C-c
(en la cabecera)
Agendar tareas
Para agendar (schedule) una tarea usamos C-c C-s
, en la linea de
schedule podemos añadir una hora o un periódo:
SCHEDULED: <2020-10-15 Thu 16:00>
SCHEDULED: <2020-10-15 Thu 16:00-17:00>
En org-mode
normalmente se considera que la fecha SCHEDULED
es el momento en que se debe empezar con la tarea.
Si queremos definir la fecha en la que la tarea debe estar realizada usamos DEADLINE
que se define de forma análoga a SCHEDULED
con la combinación C-c C-d
En generál en org-mode
las fechas entre ángulos son fechas activas y las fechas entre corchetes son informativas, una vista de tarea podría ser:
** TODO [2021-03-15 Mon] Probar Caddy :hometask:
SCHEDULED: <2021-03-20 Sat> DEADLINE: <2021-03-21 Sun>
:PROPERTIES:
:Effort: 2:00
:Beat: Now
:END:
Donde tenemos una fecha de captura de la tarea (informativa) y las fechas de SCHEDULED
y DEADLINE
(activas).
Vista de agenda
Nuestro fichero o ficheros .org
pueden tener distintas tareas con fechas asignadas pero no estarán ordenados cronológicamente.
Para una visión cronológica disponemos de las Agenda Views.
Para acceder a las vistas de agenda usamos: C-c a
y después seleccionamos la vista deseada. Recuerda si usamos un prefijo C-u n
justo antes de C-c a
limitaremos a n
dias las vistas de agenda.
Dentro de la vista agenda, podemos activar el Follow mode con S-f
para que la vista del fichero se mueva a la tarea señalada en la
agenda. También podemos usar las teclas f
y b
para movernos adelante,atrás (p.ej. en la agenda semanal cambiaríamos a semana anterior
o siguiente)
Por defecto el margen de aviso para tareas con DEADLINE
es de 14 dias, pero se puede configurar en la variable org-deadline-warning-days
Agenda Advance
-
C-c a
Agenda -
Se puede limitar a n dias con prefijo:
C-u n
P.ej. para ver las task para hoy pulsamosC-u 1 C-c a
-
Si seleccionamos
a
entramos en la agenda, con el prefijo podemos limitar a n dias -
Con
t
vamos a la lista de tareas podemos filtrar más siguiendo instrucciones -
Con
T
vamos a la lista de tareas con una o varias palabras clave especiales (p.ej.TODO|NEXT
) -
Con
m
podemos seleccionar un TAG y más criterios. P. ej.phone+TODO="NEXT"
. Con la mayúsculaM
restringimos a tareasTODO
-
Con
s
podemos buscar una palabra en todas las tareas (buscará en cabecera y contenido de la tarea). Si usámos la mayúsculaS
restringimos a las tareasTODO
Ejemplos
+mini +docker
todas las tareas que contengan las dos palabras:mini
ydocker
{regexp}
las regexp van entre llaves
Vistas de agenda "a medida"
(setq org-agenda-custom-commands
'(("c" "Desk Work" tags-todo "computer" ;; (1) (2) (3) (4)
((org-agenda-files '("~/org/widgets.org" "~/org/clients.org")) ;; (5)
(org-agenda-sorting-strategy '(priority-up effort-down))) ;; (5) cont.
("~/computer.html")) ;; (6)
;; ...other commands here
))
En la primera linea tenemos el atajo (1), el título de la búsqueda
(2), el criterio de búsqueda, tags-todo
(3) y la cadena que queremos
buscar "computer"
En la segunda linea (5) podemos poner restricciones y/o condiciones a nuestra búsqueda, en este caso restringimos los ficheros a buscar y en que orden mostramos los resultados.
En la sexta linea especificamos que esta busqueda se exportaria al
fichero ~/computer.html
en el caso de que hiciésemos una exportación
de la agenda.
Tareas repetitivas
Podemos hacer las tareas repetitivas añadiendo la especificación de repetición a la fecha schedule:
+1w
Repetir en una semana (w, d, m, y)++1w
Siguiente repetición en una semana, pero asegurate que sea en el futuro. Esto nos garantiza que la repetición se programa bien en el caso de que completemos la tarea con retraso.+1w
Una semana después de marcarla como realizada
Checklist
- [ ]
como estaM-S-enter
genera una nueva entrada en la checklistC-c C-c
cambia el estado de la linea- Con [/] o [%] podemos ver el estado del avance de la lista de checklists
Tags
C-c C-q
para añadir Tags- Pueden ser predefinidas
#+TAGS: PHONE(p) COMPUTER(c) GARAGE(g)
- Con
Tab
podemos teclear un tag no predefinido - En mi caso para borrar todos los tag puedo user
C-q C-j enter
- Las etiquetas (Tags) se heredan, aunque no las veas las etiquetas se heredan en las ramas
Drawers (o cajones)
Podemos definir un drawer con una sintáxis (:drawer_name:
) muy parecida a la de una etiqueta (tag). Pero los drawers no van en la primera linea (como las etiquetas) y se terminan con un :END:
Los drawers son también plegables, así que podemos usarlos como un nivel más de plegado dentro de la etiqueta. Pero los más utilizados son los predefinidos :PROPERTIES:
y LOGBOOK
En el cajón de :PROPERTIES:
se guardan las propiedades que vayamos añadiendo a nuestra entrada en el fichero .org
En el cajón de :LOGBOOK:
se guardan las notas de progreso o cambios de estado de nuestra entrada.
Log. Notas asociadas al :LOGBOOK:
C-c C-z
Para escribir una nota asociada a una entrada, la cerramos conC-c C-c
Podemos configurar si las notas se guardan en un drawer o no con las opciones- En la cabecera:
#+STARTUP: logdrawer / nologdrawer
- Añadiendo a una rama la Property:
LOG_INTO_DRAWER
Registrando los cambios de estado
Cuando especificamos los estados en la cabecera podemos especificar que hacer al entrar y salir del estado.
#+SEQ_TODO: Next(n) TODO(t@/!) Waiting(w) Someday(s) | DONE(d) CANCELLED(c)
@
implica grabar un timestamp y una nota al entrar en el estado
!
implica un timestamp al salir del estado
#+STARTUP: logdone
Graba timestamp al pasar de un estado TODO
a un estado CLOSE
También hay opciones para grabar los reschedules org-log-reschedule
Archivado
Las tareas se pueden archivar internamente (sin quitarlas de su fichero .org
original) o moviéndolas a un fichero externo.
El archivado interno supone pegar una etiqueta :ARCHIVE:
con la combinación C-c C-x a
. Una tarea archivada ya no aparecerá en las vistas de la agenda.
Para el archivado externo podemos configurar el fichero de destino de varias maneras:
- Definiendo un fichero de archivo en la cabecera con, por ejemplo (valor por defecto),
#+ARCHIVE: %s_archive::
, donde%s
es el nombre de nuestro fichero.org
- Definiendo un fichero de archivo en una rama con:
:PROPERTIES:
:ARCHIVE: <archiveName>::* <headSection>
:END:
- Definiendo los objetivos de archivado a nivel global con la variable
org-refile-targets
que permite establecer una lista de ficheros objetivo. Esta sería una manera indirecta de archivar tareas. Ya que no es una operación de archivo propiamente dicha
Para las dos primeras opciones el atajo de teclado sería C-c$
para activar el archivado.
Para la última opción invocaríamos refile con el atajo C-c C-w
Fórmulas matemáticas
Si especificamos la opción
#+STARTUP entitiespretty
Se renderizarán las entidades LaTeX (probar a escribir por ejemplo: \alpha + \beta
)
La opción C-c C-x C-l
invoca a org-toggle-latex-preview
El paquete org-fragtog
parece muy interesante para esto.
Links
Revisar
- org-math como tomar apuntes de matemáticas en org-mode
- Latex for the impatients: como teclear LaTeX rápido.
- org-clock-remainder: un módulo para configurar avisos en
org-mode
- Use org-mode to create LaTeX documents
- Una serie de artículos con configuraciones de Emacs
- Ricing Emacs
- Fniessen /org-mode html themes/
- Olmon /org-mode html themes collection/
chuleta de comandos
Esquema básico
Atajo | Entorno | Significado |
---|---|---|
Tab |
Cabecera | Colapsa/Expande |
S-Tab |
Cualquiera | Colap/Exp. Global |
M-right /M-left |
Cabecera | Sección cambia de nivel |
M-Up /M-Down |
Cabecera | Sección cambia posición |
C-c C-w |
Cabecera | Sección cambia de rama |
Lista de tareas
Atajo | Entorno | Significado |
---|---|---|
S-Right /S-Left |
Cabecera | Ciclar estado 'todo' |
C-c C-t |
Cabecera | Cambiar estado 'todo' |
C-s |
Cabecera | Agendar tarea |
C-d |
Cabecera | Deadline |
C-c a |
Cualquiera | Vista de agenda (int.) |
S-f |
Vista Agenda | Act./Desactiva follow mode |
f /b |
Vista Agenda | Adelante atrás |
q |
Vista Agenda | Salir de agenda |
checklist
Atajo | Entorno | Significado |
---|---|---|
C-S-enter |
Añade una linea |
Misc
Atajo | Entorno | Significado |
---|---|---|
C-c C-c |
Varios | "Ejecutar"" esa linea o sección |