Guía Completa de Emacs y Org Mode: De Principiante a Experto
1. Prefacio
Esta guía está diseñada para proporcionar un recurso completo para aprender a trabajar con Emacs y Org Mode, desde los conceptos básicos hasta las técnicas avanzadas. Está orientada tanto a principiantes como a usuarios intermedios que desean profundizar sus conocimientos y mejorar su flujo de trabajo.
1.1. Estructura de la guía
La guía está dividida en varias secciones principales:
- Introducción a Emacs y Org Mode
- Instalación y configuración inicial
- Fundamentos de Emacs
- Dominando Org Mode
- Flujos de trabajo avanzados
- Extensiones y personalización
- Solución de problemas comunes
- Recursos y referencias
2. Introducción a Emacs y Org Mode
2.1. ¿Qué es Emacs?
Emacs es mucho más que un simple editor de texto. Es un entorno completo para programación, escritura, organización y casi cualquier tarea relacionada con texto. Desarrollado originalmente en la década de 1970 por Richard Stallman, Emacs se ha convertido en uno de los editores más potentes y extensibles disponibles.
Algunas características distintivas de Emacs:
- Extensibilidad ilimitada: Emacs está escrito en Lisp (específicamente Emacs Lisp), lo que permite a los usuarios personalizar y extender cualquier aspecto del editor.
- Auto-documentado: Incluye documentación extensa y accesible desde dentro del propio editor.
- Multi-plataforma: Funciona en prácticamente cualquier sistema operativo.
- Ecosistema rico: Miles de paquetes y extensiones disponibles.
- Longevidad: Con más de 45 años de desarrollo continuo, Emacs es uno de los programas más antiguos en uso activo.
2.2. ¿Qué es Org Mode?
Org Mode es una de las extensiones más populares y potentes para Emacs. Creado por Carsten Dominik en 2003, Org Mode comenzó como un simple organizador de notas y ha evolucionado hasta convertirse en un sistema completo para:
- Tomar notas estructuradas
- Mantener listas de tareas y proyectos
- Planificar proyectos
- Gestionar documentos
- Programar literaria
- Publicar documentos en múltiples formatos
- Mantener una agenda y calendario
- Implementar metodologías como GTD (Getting Things Done)
Org Mode utiliza archivos de texto plano con una sintaxis simple pero poderosa, lo que garantiza que tus datos sean accesibles a largo plazo.
2.3. ¿Por qué aprender Emacs y Org Mode?
En la era de aplicaciones especializadas para cada tarea específica, puede parecer anacrónico dedicar tiempo a aprender una herramienta compleja como Emacs. Sin embargo, hay razones convincentes para hacerlo:
- Unificación de herramientas: Un solo entorno para programación, escritura, organización, correo electrónico y más.
- Eficiencia a largo plazo: La inversión inicial en la curva de aprendizaje se compensa con mayor productividad a lo largo del tiempo.
- Adaptabilidad: Emacs se adapta a tu flujo de trabajo, no al revés.
- Formato de datos duradero: Los archivos de texto plano seguirán siendo legibles décadas después, a diferencia de formatos propietarios.
- Control total: No dependes de servicios en la nube o compañías que puedan discontinuar sus productos.
- Comunidad vibrante: Acceso a una comunidad de usuarios experimentados y entusiastas.
"Emacs no es solo un editor de texto; es un estilo de vida." — Un usuario anónimo de Emacs
3. Instalación y configuración inicial
3.1. Instalación de Emacs
3.1.1. Linux
En distribuciones basadas en Debian/Ubuntu:
sudo apt update sudo apt install emacs
En distribuciones basadas en Red Hat/Fedora:
sudo dnf install emacs
En Arch Linux:
sudo pacman -S emacs
3.1.2. macOS
Usando Homebrew:
brew install emacs
Alternativamente, puedes descargar una versión precompilada como Emacs For Mac OS X (https://emacsformacosx.com/).
3.1.3. Windows
- Descarga el instalador desde la página oficial GNU: https://gnu.org/software/emacs/download.html
- Ejecuta el instalador y sigue las instrucciones
- Opcionalmente, añade Emacs al PATH del sistema para acceder desde la línea de comandos
3.2. Primera ejecución
Al iniciar Emacs por primera vez, verás una pantalla de bienvenida con información básica y enlaces útiles. Para empezar a usar Emacs inmediatamente:
- Presiona `Ctrl+x` seguido de `Ctrl+f` para abrir un archivo
- Escribe el nombre del archivo (nuevo o existente) y presiona Enter
- ¡Comienza a editar!
3.3. Configuración básica inicial
Emacs utiliza un archivo de configuración llamado `init.el` ubicado en el directorio `~/.emacs.d/` (en sistemas Unix/macOS) o `AppData\Roaming\.emacs.d\` (en Windows).
Aquí hay una configuración básica para empezar:
;; Configuración básica para Emacs y Org Mode ;; Interfaz de usuario (menu-bar-mode -1) ; Desactivar barra de menú (tool-bar-mode -1) ; Desactivar barra de herramientas (scroll-bar-mode -1) ; Desactivar barra de desplazamiento (global-display-line-numbers-mode) ; Mostrar números de línea ;; Comportamiento general (setq inhibit-startup-screen t) ; Saltar pantalla de inicio (setq make-backup-files nil) ; No crear archivos de respaldo (setq auto-save-default nil) ; No crear archivos de auto-guardado (global-auto-revert-mode 1) ; Actualizar buffer cuando el archivo cambia ;; Configuración de Org Mode (require 'org) (setq org-startup-indented t) ; Sangría visual (setq org-startup-folded nil) ; Mostrar todo el contenido al abrir (setq org-directory "~/org") ; Directorio principal para archivos Org (setq org-default-notes-file "~/org/notes.org") ; Archivo predeterminado para notas ;; Atajos globales para Org Mode (global-set-key (kbd "C-c l") 'org-store-link) (global-set-key (kbd "C-c a") 'org-agenda) (global-set-key (kbd "C-c c") 'org-capture) ;; Sistema de paquetes (require 'package) (add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/") t) (package-initialize)
Para usar esta configuración:
- Crea el directorio `~/.emacs.d/` si no existe
- Crea un archivo llamado `init.el` dentro de ese directorio
- Copia el código anterior y pégalo en el archivo
- Reinicia Emacs
3.4. Configurando el sistema de paquetes
Emacs incluye un gestor de paquetes que te permite instalar extensiones fácilmente:
- Presiona `M-x` (Alt+x o Esc+x)
- Escribe `package-refresh-contents` y presiona Enter
- Para instalar un paquete:
- Presiona `M-x`
- Escribe `package-install` y presiona Enter
- Escribe el nombre del paquete (e.g., `use-package`) y presiona Enter
3.4.1. Uso de use-package
Para simplificar la configuración de paquetes, recomendamos instalar `use-package`:
;; Instalar use-package si no está instalado (unless (package-installed-p 'use-package) (package-refresh-contents) (package-install 'use-package)) (require 'use-package) (setq use-package-always-ensure t) ; Instalar automáticamente paquetes si no están presentes
4. Fundamentos de Emacs
4.1. Terminología esencial
Antes de avanzar, es importante familiarizarse con la terminología específica de Emacs:
- Buffer: Área de edición donde se visualiza y modifica el contenido de un archivo.
- Frame: Lo que otros programas llamarían "ventana" (la ventana completa de la aplicación).
- Window: División dentro de un frame (lo que otros programas llamarían "panel" o "split").
- Point: La posición actual del cursor.
- Mark: Una posición guardada en el buffer.
- Region: El texto entre point y mark.
- Kill: Cortar texto (eliminarlo y guardarlo en el kill ring).
- Yank: Pegar texto desde el kill ring.
- Kill ring: Equivalente al portapapeles, pero con historial.
- Minibuffer: Área en la parte inferior de la pantalla donde Emacs solicita entrada del usuario.
- Mode line: Barra de estado en la parte inferior de cada ventana.
4.2. Notación de teclas
Emacs utiliza una notación especial para describir combinaciones de teclas:
- `C-x`: Presionar Ctrl y x simultáneamente
- `M-x`: Presionar Alt (o Meta) y x simultáneamente, o Esc seguido de x
- `C-x C-f`: Presionar Ctrl+x, seguido de Ctrl+f
- `C-x k RET`: Presionar Ctrl+x, seguido de k, seguido de Enter (Return)
4.3. Comandos básicos de navegación
| Atajo | Comando | Descripción |
|---|---|---|
| `C-f` | `forward-char` | Mover cursor un carácter hacia adelante |
| `C-b` | `backward-char` | Mover cursor un carácter hacia atrás |
| `C-n` | `next-line` | Mover cursor a la siguiente línea |
| `C-p` | `previous-line` | Mover cursor a la línea anterior |
| `C-a` | `move-beginning-of-line` | Ir al principio de la línea actual |
| `C-e` | `move-end-of-line` | Ir al final de la línea actual |
| `M-f` | `forward-word` | Avanzar una palabra |
| `M-b` | `backward-word` | Retroceder una palabra |
| `M-a` | `backward-sentence` | Ir al principio de la oración actual |
| `M-e` | `forward-sentence` | Ir al final de la oración actual |
| `M-<` | `beginning-of-buffer` | Ir al principio del buffer |
| `M->` | `end-of-buffer` | Ir al final del buffer |
| `C-v` | `scroll-up-command` | Avanzar una pantalla |
| `M-v` | `scroll-down-command` | Retroceder una pantalla |
4.4. Comandos básicos de edición
| Atajo | Comando | Descripción |
|---|---|---|
| `C-d` | `delete-char` | Eliminar carácter bajo el cursor |
| `M-d` | `kill-word` | Eliminar palabra desde el cursor |
| `C-k` | `kill-line` | Eliminar desde el cursor hasta el final de la línea |
| `M-k` | `kill-sentence` | Eliminar oración desde el cursor |
| `C-w` | `kill-region` | Cortar región seleccionada |
| `M-w` | `kill-ring-save` | Copiar región seleccionada |
| `C-y` | `yank` | Pegar (último texto cortado/copiado) |
| `M-y` | `yank-pop` | Ciclar a través del historial del kill ring (después de `C-y`) |
| `C-/` | `undo` | Deshacer último cambio |
| `C-x u` | `undo` | Alternativa para deshacer |
| `C-g` | `keyboard-quit` | Cancelar comando actual o área de selección |
4.5. Gestión de archivos y buffers
| Atajo | Comando | Descripción |
|---|---|---|
| `C-x C-f` | `find-file` | Abrir archivo |
| `C-x C-s` | `save-buffer` | Guardar archivo actual |
| `C-x C-w` | `write-file` | Guardar como… |
| `C-x k` | `kill-buffer` | Cerrar buffer actual |
| `C-x b` | `switch-to-buffer` | Cambiar a otro buffer |
| `C-x C-b` | `list-buffers` | Listar todos los buffers |
| `C-x C-c` | `save-buffers-kill-terminal` | Salir de Emacs |
4.6. Gestión de ventanas y frames
| Atajo | Comando | Descripción |
|---|---|---|
| `C-x 0` | `delete-window` | Cerrar ventana actual |
| `C-x 1` | `delete-other-windows` | Cerrar todas las ventanas excepto la actual |
| `C-x 2` | `split-window-below` | Dividir ventana horizontalmente |
| `C-x 3` | `split-window-right` | Dividir ventana verticalmente |
| `C-x o` | `other-window` | Mover cursor a otra ventana |
| `C-x 5 2` | `make-frame` | Crear un nuevo frame |
| `C-x 5 0` | `delete-frame` | Cerrar frame actual |
4.7. Búsqueda y reemplazo
| Atajo | Comando | Descripción |
|---|---|---|
| `C-s` | `isearch-forward` | Búsqueda incremental hacia adelante |
| `C-r` | `isearch-backward` | Búsqueda incremental hacia atrás |
| `M-%` | `query-replace` | Buscar y reemplazar interactivo |
| `C-M-s` | `isearch-forward-regexp` | Búsqueda con expresiones regulares hacia adelante |
| `C-M-r` | `isearch-backward-regexp` | Búsqueda con expresiones regulares hacia atrás |
| `C-M-%` | `query-replace-regexp` | Buscar y reemplazar con expresiones regulares |
4.8. Ayuda y documentación
| Atajo | Comando | Descripción |
|---|---|---|
| `C-h t` | `help-with-tutorial` | Abrir tutorial interactivo de Emacs |
| `C-h k` | `describe-key` | Describir qué hace una combinación de teclas |
| `C-h f` | `describe-function` | Describir una función |
| `C-h v` | `describe-variable` | Describir una variable |
| `C-h m` | `describe-mode` | Describir el modo actual y sus atajos |
| `C-h a` | `apropos-command` | Buscar comandos por palabra clave |
| `C-h i` | `info` | Abrir sistema de documentación Info |
4.9. Diagrama: Estructura básica de Emacs
5. Dominando Org Mode
5.1. Fundamentos de Org Mode
Org Mode es un sistema de organización y toma de notas dentro de Emacs. Para activarlo:
- Abre cualquier archivo con extensión `.org`
- Alternativamente, ejecuta `M-x org-mode` para activarlo en cualquier buffer
5.1.1. Estructura básica de un documento Org
Un documento Org tiene la siguiente estructura:
#+BEGIN_EXAMPLE
6. Encabezado de primer nivel
6.1. Encabezado de segundo nivel
6.1.1. Encabezado de tercer nivel
6.1.2. Navegación en documentos Org
| Atajo | Descripción |
|---|---|
| `TAB` | Ciclar visibilidad del encabezado actual |
| `S-TAB` | Ciclar visibilidad global del documento |
| `C-c C-n` | Ir al siguiente encabezado |
| `C-c C-p` | Ir al encabezado anterior |
| `C-c C-f` | Ir al siguiente encabezado del mismo nivel |
| `C-c C-b` | Ir al encabezado anterior del mismo nivel |
| `C-c C-u` | Subir un nivel en la jerarquía de encabezados |
| `C-c C-j` | Saltar a un encabezado específico |
6.1.3. Edición de la estructura
| Atajo | Descripción |
|---|---|
| `M-RET` | Insertar nuevo encabezado/elemento |
| `M-S-RET` | Insertar nuevo TODO |
| `M-left/right` | Promover/degradar encabezado actual |
| `M-up/down` | Mover encabezado arriba/abajo |
| `C-c *` | Convertir línea normal en encabezado o viceversa |
| `C-c C-w` | Reubicar encabezado (con subárbol) |
| `C-c C-x b` | Mostrar solo el subárbol actual |
6.2. Gestión de tareas y proyectos
6.2.1. Estados de TODO
Por defecto, Org Mode incluye los estados TODO y DONE:
#+BEGIN_EXAMPLE
7. TODO Completar informe trimestral
8. DONE Enviar correo al equipo
#+END_EXAMPLE
Para cambiar el estado de una tarea:
- Coloca el cursor sobre el encabezado de la tarea
- Presiona `C-c C-t` o `S-left/right` para ciclar entre estados
Para personalizar los estados de TODO:
;; Secuencia básica de estados (setq org-todo-keywords '((sequence "TODO(t)" "IN-PROGRESS(p)" "WAITING(w)" "|" "DONE(d)" "CANCELLED(c)"))) ;; Con colores personalizados (setq org-todo-keyword-faces '(("TODO" . org-warning) ("IN-PROGRESS" . "orange") ("WAITING" . "purple") ("DONE" . "green") ("CANCELLED" . "gray")))
8.0.1. Prioridades
Puedes asignar prioridades a las tareas:
#+BEGIN_EXAMPLE
9. TODO Tarea crítica de alta prioridad
10. TODO Tarea de prioridad media
11. TODO Tarea de baja prioridad
#+END_EXAMPLE
Para cambiar la prioridad: `C-c ,`
11.0.1. Plazos y programación
Org Mode permite establecer fechas para tus tareas:
#+BEGIN_EXAMPLE
12. TODO Completar proyecto
SCHEDULED: #+END_EXAMPLE
- `DEADLINE`: Fecha límite para completar la tarea
- `SCHEDULED`: Fecha planificada para comenzar a trabajar en la tarea
Para establecer estas fechas:
- `C-c C-d`: Establecer DEADLINE
- `C-c C-s`: Establecer SCHEDULED
12.0.1. Propiedades y etiquetas
Las propiedades permiten añadir metadatos estructurados:
#+BEGIN_EXAMPLE
13. TODO Escribir propuesta de proyecto
#+END_EXAMPLE
Las etiquetas ayudan a categorizar:
#+BEGIN_EXAMPLE
14. TODO Actualizar sitio web web tecnología
15. TODO Llamar al cliente Acme teléfono clientes
#+END_EXAMPLE
Para añadir etiquetas: `C-c C-q`
15.1. Agenda y organización
15.1.1. Configuración básica de agenda
Para usar la agenda, primero debes especificar qué archivos incluir:
(setq org-agenda-files '("~/org/trabajo.org" "~/org/personal.org" "~/org/proyectos.org"))
Para abrir la agenda: `C-c a`
Las vistas comunes de agenda son:
- `a`: Vista semanal/diaria
- `t`: Lista de tareas TODO
- `m`: Coincidir con etiquetas/propiedades
- `s`: Búsqueda por palabras clave
15.1.2. Vista personalizada de agenda
Puedes crear vistas personalizadas para la agenda:
(setq org-agenda-custom-commands '(("p" "Proyectos activos" ((tags-todo "PROYECTO+ACTIVO"))) ("w" "Agenda laboral semanal" ((agenda "" ((org-agenda-span 'week) (org-agenda-tag-filter-preset '("+trabajo")))) (tags-todo "+trabajo-reunión")))))
15.1.3. Sistema de captura
Org Capture permite tomar notas rápidamente sin interrumpir el flujo de trabajo:
(setq org-capture-templates '(("t" "Tarea" entry (file+headline "~/org/tareas.org" "Tareas") "* TODO %?\n %i\n %a") ("n" "Nota" entry (file+datetree "~/org/notas.org") "* %?\n %U\n %i\n %a") ("j" "Diario" entry (file+datetree "~/org/diario.org") "* %?\n %U\n %i") ("i" "Idea" entry (file+headline "~/org/ideas.org" "Ideas") "* %? :IDEA:\n %U")))
Para capturar: `C-c c`
15.2. Toma de notas avanzada
15.2.1. Enlaces y referencias cruzadas
Org Mode tiene un potente sistema de enlaces:
[[https://gnu.org][Sitio de GNU]] # Enlace externo [[file:imagen.png]] # Enlace a archivo [[./documentos/informe.pdf]] # Ruta relativa [[#ID]] # Enlace a un ID en el documento [[proyectos.org::*Proyecto X]] # Enlace a un encabezado en otro archivo
Para insertar un enlace: `C-c C-l` Para seguir un enlace: `C-c C-o`
15.2.2. Listas de control (checklists)
Para tareas con subtareas:
#+BEGIN_EXAMPLE
16. TODO Preparar presentación [0/3]
[ ]Recopilar datos[ ]Crear diapositivas[ ]Ensayar presentación
#+END_EXAMPLE
Para marcar un elemento como completo: `C-c C-c`
16.0.1. Tablas y cálculos
Org Mode tiene un potente sistema de tablas con capacidades de hoja de cálculo:
#+ATTR_HTML: :border 2 :rules all :frame border | Nombre | Horas | Tarifa | Total | |---------+-------+--------+--------| | Juan | 10 | 25 | 250 | | María | 8 | 30 | 240 | | Carlos | 12 | 20 | 240 | |---------+-------+--------+--------| | Total | 30 | | 730 | #+TBLFM: @5$2=vsum(@2..@4$2)::@2$4=$2*$3::@3$4=$2*$3::@4$4=$2*$3::@5$4=vsum(@2..@4$4)
Para crear una tabla: Comienza a escribir `|` y presiona TAB
Comandos útiles para tablas:
- `TAB`: Navegar entre celdas
- `RET`: Crear nueva fila
- `M-left/right/up/down`: Mover columnas/filas
- `C-c -`: Insertar línea horizontal
- `C-c ^`: Ordenar tabla
- `C-c *`: Recalcular fórmulas
16.0.2. Código fuente y bloques de código
Org Mode permite incluir bloques de código ejecutables:
#+BEGIN_SRC python :results output
def fibonacci(n):
a, b = 0, 1
for i in range(n):
print(a, end=' ')
a, b = b, a + b
fibonacci(10)
#+END_SRC
#+RESULTS:
: 0 1 1 2 3 5 8 13 21 34
Para crear un bloque de código: `C-c C-,` o simplemente escribe `<s` y presiona TAB Para ejecutar un bloque de código: `C-c C-c` con el cursor dentro del bloque
16.0.3. Exportación y publicación
Org Mode puede exportar documentos a múltiples formatos:
| Formato | Comando |
|---|---|
| HTML | `C-c C-e h h` |
| PDF (vía LaTeX) | `C-c C-e l p` |
| Markdown | `C-c C-e m m` |
| ASCII/Text | `C-c C-e t a` |
| ODT | `C-c C-e o o` |
| iCalendar | `C-c C-e c c` |
| LaTeX | `C-c C-e l l` |
Para personalizar la exportación, puedes usar opciones al principio del documento:
#+OPTIONS: toc:2 num:t ^:nil
#+LATEX_CLASS: article
#+LATEX_CLASS_OPTIONS: [a4paper,11pt]
#+LATEX_HEADER: \usepackage{xcolor}
#+HTML_HEAD: <style>body { max-width: 800px; margin: auto; }</style>
16.1. Diagrama: Estructura de Org Mode
17. Flujos de trabajo avanzados
17.1. Sistema GTD (Getting Things Done)
Org Mode es ideal para implementar el método GTD de David Allen:
17.1.1. Estructura de archivos
~/org/ ├── inbox.org # Captura inicial de todo ├── gtd.org # Tareas organizadas ├── someday.org # Proyectos e ideas futuras ├── tickler.org # Recordatorios cronológicos └── referencias.org # Material de referencia
17.1.2. Configuración básica para GTD
;; Estados para el flujo GTD (setq org-todo-keywords '((sequence "TODO(t)" "NEXT(n)" "WAITING(w)" "SOMEDAY(s)" "|" "DONE(d)" "CANCELLED(c)"))) ;; Archivos para agenda (setq org-agenda-files '("~/org/inbox.org" "~/org/gtd.org" "~/org/tickler.org")) ;; Plantillas de captura para GTD (setq org-capture-templates '(("t" "Todo" entry (file "~/org/inbox.org") "* TODO %?\n%i\n%U") ("n" "Nota" entry (file "~/org/inbox.org") "* %? :NOTE:\n%i\n%U") ("m" "Reunión" entry (file "~/org/inbox.org") "* MEETING %? :MEETING:\n%i\n%U") ("r" "Referencia" entry (file "~/org/referencias.org") "* %? :REFERENCE:\n%i\n%U") ("s" "Someday" entry (file "~/org/someday.org") "* SOMEDAY %?\n%i\n%U"))) ;; Configuración de refiling para procesar la bandeja de entrada (setq org-refile-targets '(("~/org/gtd.org" :maxlevel . 3) ("~/org/someday.org" :level . 1) ("~/org/referencias.org" :level . 1) ("~/org/tickler.org" :maxlevel . 2))) ;; Vistas personalizadas para GTD (setq org-agenda-custom-commands '(("g" "Vista GTD" ((agenda "" ((org-agenda-span 'day) (org-agenda-skip-function '(org-agenda-skip-entry-if 'todo 'done)) (org-agenda-sorting-strategy '(time-up priority-down)))) (todo "NEXT" ((org-agenda-skip-function '(org-agenda-skip-entry-if 'scheduled)) (org-agenda-overriding-header "Próximas acciones:"))) (todo "WAITING" ((org-agenda-overriding-header "Esperando:"))) (todo "TODO" ((org-agenda-skip-function '(org-agenda-skip-entry-if 'scheduled)) (org-agenda-overriding-header "Tareas pendientes:"))))) ("r" "Revisión semanal" ((agenda "" ((org-agenda-span 'week) (org-agenda-start-on-weekday 1) (org-agenda-start-with-log-mode t))) (stuck "") (todo "SOMEDAY" ((org-agenda-overriding-header "Proyectos futuros:")))))))
17.1.3. Flujo de trabajo GTD en Org Mode
- Capturar: Usa `C-c c` para añadir cualquier información a `inbox.org`
- Procesar: Regularmente revisa `inbox.org` y decide qué hacer con cada ítem:
- Si es accionable y toma menos de 2 minutos, hazlo ahora
- Si es accionable pero toma más tiempo, conviértelo en un TODO
- Si no es accionable, archívalo en referencias o someday
- Organizar: Usa `C-c C-w` (refile) para mover elementos a donde pertenecen
- Revisar: Usa la vista de agenda para revisar regularmente tus tareas
- Hacer: Usa la vista "Próximas acciones" para decidir qué hacer ahora
17.2. Zettelkasten para gestión de conocimiento
El método Zettelkasten es un sistema de toma de notas interconectadas:
17.2.1. Configuración básica
;; Directorio para notas Zettelkasten (setq org-zettelkasten-directory "~/org/zettelkasten/") ;; Plantilla para nueva nota (defun org-zettelkasten-new-note () (interactive) (let ((title (read-string "Título de la nota: "))) (let ((file (concat org-zettelkasten-directory (format-time-string "%Y%m%d%H%M") "-" (replace-regexp-in-string " " "_" (downcase title)) ".org"))) (find-file file) (insert (format "#+TITLE: %s\n#+DATE: %s\n#+FILETAGS: \n\n" title (format-time-string "[%Y-%m-%d %a %H:%M]"))) (save-buffer)))) ;; Atajo global para crear nueva nota (global-set-key (kbd "C-c z n") 'org-zettelkasten-new-note) ;; Función para buscar notas (defun org-zettelkasten-find-note () (interactive) (let ((default-directory org-zettelkasten-directory)) (call-interactively 'find-file))) ;; Atajo global para buscar notas (global-set-key (kbd "C-c z f") 'org-zettelkasten-find-note)
17.2.2. Uso con org-roam
Para una implementación más completa, puedes usar `org-roam`:
;; Configuración básica de org-roam (use-package org-roam :ensure t :hook (after-init . org-roam-mode) :custom (org-roam-directory "~/org/roam") :bind (:map org-roam-mode-map (("C-c n l" . org-roam) ("C-c n f" . org-roam-find-file) ("C-c n g" . org-roam-graph)) :map org-mode-map (("C-c n i" . org-roam-insert)) (("C-c n I" . org-roam-insert-immediate))))
17.2.3. Principios de Zettelkasten en Org Mode
- Atomicidad: Cada nota aborda un solo concepto
- Autonomía: Cada nota es comprensible por sí misma
- Vinculación: Las notas se conectan entre sí mediante enlaces
- Explicación: Los enlaces explican por qué se conectan dos notas
- Indexación: Usa notas de índice para agrupar temáticamente
17.3. Gestión de proyectos y tareas
17.3.1. Tareas recurrentes
Org Mode permite definir tareas que se repiten automáticamente después de completarlas:
#+BEGIN_EXAMPLE
18. TODO Revisar correo electrónico
19. TODO Reunión semanal de equipo
20. TODO Pago de servicios
#+END_EXAMPLE
Marcadores de repetición:
- `.+1d`: Repetir cada día después de completar
- `++1w`: Repetir cada semana en el mismo día
- `+1m`: Repetir cada mes en la misma fecha
20.0.1. Hábitos
Para seguimiento de hábitos, puedes usar `org-habit`:
(require 'org-habit) (setq org-habit-graph-column 40) (setq org-habit-show-habits-only-for-today t)
Ejemplo de hábito:
#+BEGIN_EXAMPLE
21. TODO Ejercicio diario
#+END_EXAMPLE
21.0.1. Seguimiento de tiempo
Org Mode permite registrar el tiempo dedicado a tareas:
Para iniciar el reloj: `C-c C-x C-i` Para detener el reloj: `C-c C-x C-o` Para ver informe de tiempo: `C-c C-x C-r`
Configuración para seguimiento de tiempo:
;; Formato para informe de tiempo (setq org-clock-report-include-clocks t) (setq org-agenda-start-with-clockreport-mode t) (setq org-clock-persist t) (org-clock-persistence-insinuate) ;; Guardar última tarea en la que se trabajó (setq org-clock-persist 'history)
21.1. Integración con correo electrónico
Org Mode puede integrarse con el correo electrónico para una gestión eficiente:
21.1.1. Configuración con mu4e
(use-package mu4e :ensure nil :config ;; Integración con Org Mode (require 'org-mu4e) ;; Guardar enlaces a correos electrónicos (org-link-set-parameters "mu4e" :follow #'org-mu4e-open :store #'org-mu4e-store-link) ;; Capturar correos electrónicos como tareas (add-to-list 'org-capture-templates '("e" "Email" entry (file+headline "~/org/inbox.org" "Correos") "* TODO %?\nENLACE: %a\n %i")) ;; Convertir correos en tareas (define-key mu4e-headers-mode-map (kbd "C-c c") 'org-mu4e-store-and-capture) (define-key mu4e-view-mode-map (kbd "C-c c") 'org-mu4e-store-and-capture))
21.2. Publicación en la web
Org Mode permite crear sitios web completos:
21.2.1. Configuración básica de org-publish
(require 'ox-publish) (setq org-publish-project-alist '(("sitio-web" :base-directory "~/org/sitio/" :base-extension "org" :publishing-directory "~/public_html/" :recursive t :publishing-function org-html-publish-to-html :headline-levels 4 :auto-preamble t :auto-sitemap t :sitemap-title "Mi Sitio Web") ("sitio-web-static" :base-directory "~/org/sitio/static/" :base-extension "css\\|js\\|png\\|jpg\\|gif" :publishing-directory "~/public_html/static/" :recursive t :publishing-function org-publish-attachment) ("sitio-web-completo" :components ("sitio-web" "sitio-web-static"))))
Para publicar el sitio: `M-x org-publish` y selecciona "sitio-web-completo"
22. Extensiones y personalización
22.1. Paquetes esenciales para Org Mode
Estos paquetes complementan la funcionalidad de Org Mode:
22.1.1. org-bullets
Mejora la visualización de los encabezados con Unicode:
(use-package org-bullets :ensure t :hook (org-mode . org-bullets-mode))
22.1.2. org-super-agenda
Agrupa elementos en la agenda para mejor visualización:
(use-package org-super-agenda :ensure t :config (org-super-agenda-mode) (setq org-super-agenda-groups '((:name "Importantes" :priority "A") (:name "Trabajo" :tag "trabajo") (:name "Urgentes" :deadline today) (:name "Próximas tareas" :todo "NEXT") (:name "Esperando" :todo "WAITING"))))
22.1.3. org-download
Permite insertar imágenes fácilmente en documentos Org:
(use-package org-download :ensure t :after org :config (setq org-download-method 'directory) (setq org-download-image-dir "~/org/images") (setq org-download-heading-lvl nil) (setq org-download-timestamp "%Y%m%d-%H%M%S_") (setq org-image-actual-width 400))
22.1.4. org-noter
Para tomar notas mientras lees documentos PDF:
(use-package org-noter :ensure t :config (setq org-noter-notes-search-path '("~/org/notas")) (setq org-noter-separate-notes-from-heading t))
22.2. Temas y personalización visual
22.2.1. Temas populares
;; Doom Themes - conjunto de temas modernos (use-package doom-themes :ensure t :config (load-theme 'doom-one t) ;; Configurar org-mode específicamente (doom-themes-org-config)) ;; Modus Themes - temas accesibles incluidos en Emacs (use-package modus-themes :ensure t :config (load-theme 'modus-operandi t)) ; Tema claro, usa modus-vivendi para oscuro ;; Spacemacs Theme (use-package spacemacs-theme :ensure t :defer t :init (load-theme 'spacemacs-dark t))
22.2.2. Personalización de fuentes
;; Establecer fuentes para diferentes contextos (set-face-attribute 'default nil :font "JetBrains Mono-12") (set-face-attribute 'variable-pitch nil :font "Cantarell-12") (set-face-attribute 'fixed-pitch nil :font "JetBrains Mono-12") ;; Mejorar la visualización de Org Mode (add-hook 'org-mode-hook 'variable-pitch-mode) (add-hook 'org-mode-hook 'visual-line-mode) ;; Mantener fuente monoespaciada en ciertos elementos (set-face-attribute 'org-block nil :inherit 'fixed-pitch) (set-face-attribute 'org-code nil :inherit 'fixed-pitch) (set-face-attribute 'org-table nil :inherit 'fixed-pitch)
22.3. Gestión avanzada de configuraciones
22.3.1. use-package
Para mantener tu configuración de Emacs organizada:
;; Instalación de use-package (unless (package-installed-p 'use-package) (package-refresh-contents) (package-install 'use-package)) (require 'use-package) (setq use-package-always-ensure t) ;; Ejemplo de uso (use-package org :ensure t :bind (("C-c a" . org-agenda) ("C-c c" . org-capture) ("C-c l" . org-store-link)) :config (setq org-agenda-files '("~/org/agenda.org")) (setq org-default-notes-file "~/org/notes.org"))
22.3.2. Organización por archivos
Una estructura recomendada para configuración de Emacs:
~/.emacs.d/
├── init.el # Archivo principal
├── early-init.el # Configuración temprana (Emacs 27+)
├── custom.el # Personalizaciones generadas por customize
└── lisp/ # Carpeta para módulos propios
├── init-core.el # Configuración básica
├── init-ui.el # Interfaz de usuario
├── init-org.el # Configuración Org Mode
└── init-dev.el # Herramientas de desarrollo
Ejemplo de init.el para cargar módulos:
;; Establecer directorio lisp (add-to-list 'load-path (expand-file-name "lisp" user-emacs-directory)) ;; Cargar módulos (require 'init-core) (require 'init-ui) (require 'init-org) (require 'init-dev) ;; Cargar personalizaciones externas (setq custom-file (expand-file-name "custom.el" user-emacs-directory)) (when (file-exists-p custom-file) (load custom-file))
22.4. Productividad con pequeñas mejoras
;; Mejorar la función de auto-completado (use-package company :ensure t :hook (after-init . global-company-mode) :config (setq company-idle-delay 0.1) (setq company-minimum-prefix-length 1)) ;; Mejorar búsqueda/selección (use-package ivy :ensure t :config (ivy-mode 1) (setq ivy-use-virtual-buffers t) (setq enable-recursive-minibuffers t)) ;; Ayuda con comandos (use-package which-key :ensure t :config (which-key-mode)) ;; Acceso rápido a archivos recientes (recentf-mode 1) (setq recentf-max-menu-items 25) (global-set-key "\C-x\ \C-r" 'recentf-open-files) ;; Atajos globales útiles (global-set-key (kbd "<f5>") 'revert-buffer) (global-set-key (kbd "C-c r") 'replace-string)
23. Solución de problemas comunes
23.1. Problemas de rendimiento
Si Emacs se vuelve lento:
- Diagnóstico: Usa `M-x profiler-start` y `M-x profiler-report` para identificar cuellos de botella
- Reducir paquetes: Deshabilita paquetes que no uses frecuentemente
- Archivos Org grandes: Divide archivos muy grandes en varios más pequeños
- Org Agenda lenta: Reduce cantidad de archivos en `org-agenda-files`
- Inicio lento: Usa `use-package` con `:defer t` para cargar paquetes solo cuando se necesiten
;; Mejorar rendimiento con GC (setq gc-cons-threshold 100000000) ;; 100 MB (setq read-process-output-max (* 1024 1024)) ;; 1 MB ;; Acelerar Org Mode (setq org-agenda-dim-blocked-tasks nil) (setq org-agenda-inhibit-startup t) ;; Optimizar para archivos grandes (use-package so-long :ensure t :config (global-so-long-mode 1))
23.2. Problemas de exportación
Para resolver problemas al exportar documentos:
- Dependencias: Asegúrate de tener instaladas las dependencias necesarias (LaTeX, Pandoc, etc.)
- Errores de sintaxis: Verifica la sintaxis del documento con `M-x org-lint`
- Problemas con LaTeX: Usa `C-c C-e l L` para exportar a LaTeX y ver errores específicos
- Caracteres especiales: Usa `#+LATEX_HEADER: \usepackage[utf8]{inputenc}` para UTF-8
23.3. Errores en Org Mode
Soluciones a problemas comunes:
- Tareas no aparecen en agenda: Verifica que el archivo esté en `org-agenda-files`
- Problemas de indentación: Usa `org-indent-mode` o `M-x org-indent-region`
- Enlaces que no funcionan: Verifica la sintaxis ``
- Bloques de código no se ejecutan: Verifica que hayas cargado el lenguaje en `org-babel-load-languages`
23.4. Problemas de compatibilidad
Para problemas entre versiones o sistemas:
- Distintas versiones de Emacs: Usa condicionales en tu configuración ```emacs-lisp (when (>= emacs-major-version 27) ;; Código específico para Emacs 27+ ) ```
- Distintos sistemas operativos: ```emacs-lisp (cond ((eq system-type 'windows-nt) ;; Configuración para Windows ) ((eq system-type 'darwin) ;; Configuración para macOS ) ((eq system-type 'gnu/linux) ;; Configuración para Linux )) ```
24. Diagrama: Jerarquía de conceptos en Emacs y Org Mode
#+BEGIN_SRC plantuml @startmindmap skinparam backgroundColor #EEEBDC skinparam handwritten true
25. Emacs + Org Mode
25.1. Fundamentos de Emacs
25.2. Org Mode Básico
25.2.3. Enlaces y referencias
25.2.4. Fechas y horarios
25.3. Org Mode Avanzado
25.3.1. Agenda
25.3.2. Captura
25.3.3. Exportación
25.3.4. Babel (código)
25.3.5. Bloques especiales
25.4. Flujos de trabajo
25.4.1. GTD
25.4.2. Zettelkasten
25.4.3. Gestión de proyectos
25.4.4. Toma de notas
25.5. Personalización
25.5.1. Temas
25.5.2. Paquetes adicionales
25.5.3. Configuración propia
@endmindmap #+END_SRC
26. Recursos y referencias
26.1. Documentación oficial
- [Manual de Org Mode](https://orgmode.org/manual/)
- [Manual de Emacs](https://www.gnu.org/software/emacs/manual/)
- [Org-mode Compact Guide](https://orgmode.org/guide/)
- [Worg: Wiki de Org Mode](https://orgmode.org/worg/)
26.2. Libros
- "Org Mode Compact Guide" por Carsten Dominik
- "Mastering Emacs" por Mickey Petersen
- "Practical Emacs Tutorial" por Xah Lee
- "Writing GNU Emacs Extensions" por Bob Glickstein
- "Learning GNU Emacs" por Debra Cameron, et al.
26.3. Tutoriales en línea
- [Curso Org Mode UC Irvine](https://github.com/zamansky/using-emacs)
- [Org Mode - Organize Your Life In Plain Text](http://doc.norang.ca/org-mode.html) por Bernt Hansen
- [Emacs Tutorial de Sacha Chua](https://sachachua.com/blog/category/emacs/)
26.4. Comunidades y foros
- [Reddit r/emacs](https://www.reddit.com/r/emacs/)
- [Reddit r/orgmode](https://www.reddit.com/r/orgmode/)
- [Emacs Stack Exchange](https://emacs.stackexchange.com/)
- [Org Mode Mailing List](https://lists.gnu.org/mailman/listinfo/emacs-orgmode)
26.5. Repositorios y configuraciones públicas
- [Doom Emacs](https://github.com/hlissner/doom-emacs) - Configuración popular y modular
- [Spacemacs](https://www.spacemacs.org/) - Configuración comunitaria con características de Vim
- [Prelude](https://github.com/bbatsov/prelude) - Configuración mejorada para Emacs
26.6. Canales de YouTube
- [System Crafters](https://www.youtube.com/c/SystemCrafters)
- [Protesilaos Stavrou](https://www.youtube.com/c/ProtesilaosStavrou)
- [David Wilson](https://www.youtube.com/c/DavidWilson3)
27. Resumen y siguientes pasos
27.1. Lo que has aprendido
En esta guía has explorado:
- Fundamentos de Emacs: Configuración básica y comandos esenciales
- Org Mode: Toma de notas estructurada y gestión de tareas
- Flujos de trabajo avanzados: GTD, Zettelkasten y gestión de proyectos
- Personalización: Temas, paquetes y optimizaciones
- Solución de problemas: Estrategias para resolver problemas comunes
27.2. Recomendaciones para continuar
- Práctica regular: Usa Emacs y Org Mode a diario, incluso para tareas simples
- Incremento gradual: Añade nuevas funcionalidades de una en una
- Personalización progresiva: Modifica tu configuración cuando sea necesario
- Participación comunitaria: Únete a foros y grupos de usuarios
- Contribución: Comparte tus conocimientos y mejoras con la comunidad
27.3. Plan de aprendizaje de 30 días
| Día | Tema | Actividad |
|---|---|---|
| 1-5 | Comandos básicos | Memorizar atajos esenciales, hacer el tutorial integrado |
| 6-10 | Edición avanzada | Practicar selección, búsqueda y reemplazo |
| 11-15 | Org Mode básico | Crear archivo de tareas, capturar notas, usar agenda |
| 16-20 | Configuración | Personalizar init.el, instalar paquetes esenciales |
| 21-25 | Org Mode avanzado | Implementar GTD, exportar a diferentes formatos |
| 26-30 | Flujo de trabajo | Integrar Emacs en tu vida diaria, automatizar tareas |
28. Conclusión
Emacs y Org Mode representan una inversión significativa de tiempo y esfuerzo, pero ofrecen un retorno extraordinario en términos de productividad, control y longevidad. Con esta guía, estás equipado para comenzar tu viaje hacia el dominio de estas herramientas poderosas y flexibles.
Recuerda que la configuración ideal es aquella que se adapta a tu flujo de trabajo, no al revés. Tómate tu tiempo para experimentar y encontrar lo que funciona mejor para ti.
La comunidad de Emacs es una de las más antiguas y colaborativas en el mundo del software libre. Nunca dudes en buscar ayuda, compartir soluciones o contribuir al desarrollo continuo de este ecosistema.
"La verdadera productividad no está en hacer más cosas, sino en hacer las cosas correctas con las herramientas adecuadas." — Anónimo