You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
301 lines
12 KiB
301 lines
12 KiB
10 months ago
|
---
|
||
|
weight: 4
|
||
|
title: "Apuntes: org-mode en Emacs"
|
||
|
date: 2020-12-17T10:19:04+0100
|
||
|
draft: false
|
||
|
summary: "Aprendiendo a usar org-mode"
|
||
|
categories:
|
||
|
- notes
|
||
|
tags:
|
||
|
- emacs
|
||
|
- org-mode
|
||
|
---
|
||
|
|
||
|
Apuntes **no terminados** sobre Emacs y org-mode
|
||
|
|
||
|
<!--more-->
|
||
|
|
||
|
{{< 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](https://staff.fnwi.uva.nl/c.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 llamamos `Meta` en Emacs) y las flechas derecha
|
||
|
e izquierda en una linea de cabecera cambiamos el nivel de la
|
||
|
cabecera
|
||
|
* Pulsado `M-Up` o `M-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`
|
||
|
|
||
|
```org-mode
|
||
|
#+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:
|
||
|
|
||
|
```org-mode
|
||
|
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:
|
||
|
|
||
|
```org-mode
|
||
|
** 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 pulsamos `C-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úscula `M` restringimos a tareas
|
||
|
`TODO`
|
||
|
- Con `s` podemos buscar una palabra en todas las tareas (buscará en
|
||
|
cabecera y contenido de la tarea). Si usámos la mayúscula `S`
|
||
|
restringimos a las tareas `TODO`
|
||
|
|
||
|
Ejemplos
|
||
|
- `+mini +docker` todas las tareas que contengan las dos palabras: `mini` y `docker`
|
||
|
- `{regexp}` las regexp van entre llaves
|
||
|
|
||
|
### Vistas de agenda "a medida"
|
||
|
|
||
|
```elisp
|
||
|
(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 esta
|
||
|
- `M-S-enter` genera una nueva entrada en la checklist
|
||
|
- `C-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 con `C-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.
|
||
|
|
||
|
```org-mode
|
||
|
#+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:
|
||
|
|
||
|
```org-mode
|
||
|
: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
|
||
|
|
||
|
```orgmode
|
||
|
#+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
|
||
|
|
||
|
* [Guia](https://orgmode.org/orgguide.pdf)
|
||
|
* [Youtube List](https://www.youtube.com/watch?v=15w3I6MwCfs&list=PLVtKhBrRV_ZkPnBtt_TD1Cs9PJlU0IIdE&index=2)
|
||
|
* [Tutorials](https://orgmode.org/worg/org-tutorials/)
|
||
|
* [Mastering emacs](https://www.masteringemacs.org/)
|
||
|
|
||
|
### Revisar
|
||
|
|
||
|
* [org-math](https://github.com/dryman/org-math) como tomar apuntes de matemáticas en _org-mode_
|
||
|
* [Latex for the impatients](https://karthinks.com/software/latex-input-for-impatient-scholars/): como teclear LaTeX rápido.
|
||
|
* [org-clock-remainder](https://github.com/inickey/org-clock-reminder): un módulo para configurar avisos en `org-mode`
|
||
|
* [Use org-mode to create LaTeX documents](https://opensource.com/article/20/4/emacs-org-mode)
|
||
|
* [Una serie de artículos con configuraciones de Emacs](https://lucidmanager.org/productivity/more-productive-with-emacs/)
|
||
|
* [Ricing Emacs](https://lucidmanager.org/productivity/ricing-org-mode/)
|
||
|
* Fniessen /org-mode html themes/
|
||
|
* [cheatsheet](https://github.com/fniessen/refcard-org-mode)
|
||
|
* [Repo in github](https://github.com/fniessen/org-html-themes)
|
||
|
* Olmon /org-mode html themes collection/
|
||
|
* [la página](https://olmon.gitlab.io/org-themes/)
|
||
|
* el [repo](https://gitlab.com/OlMon/org-themes/) en gitlab
|
||
|
|
||
|
## 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 |
|