Logo

Mi Blog con Emacs y Esteroides

Emacs, IA y Linux: Poder y Simplicidad en tu Flujo de Trabajo

mybloggingnotes@gmail.com


25/04/2025

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:

  1. Introducción a Emacs y Org Mode
  2. Instalación y configuración inicial
  3. Fundamentos de Emacs
  4. Dominando Org Mode
  5. Flujos de trabajo avanzados
  6. Extensiones y personalización
  7. Solución de problemas comunes
  8. 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

  1. Descarga el instalador desde la página oficial GNU: https://gnu.org/software/emacs/download.html
  2. Ejecuta el instalador y sigue las instrucciones
  3. 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:

  1. Presiona `Ctrl+x` seguido de `Ctrl+f` para abrir un archivo
  2. Escribe el nombre del archivo (nuevo o existente) y presiona Enter
  3. ¡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:

  1. Crea el directorio `~/.emacs.d/` si no existe
  2. Crea un archivo llamado `init.el` dentro de ese directorio
  3. Copia el código anterior y pégalo en el archivo
  4. Reinicia Emacs

3.4. Configurando el sistema de paquetes

Emacs incluye un gestor de paquetes que te permite instalar extensiones fácilmente:

  1. Presiona `M-x` (Alt+x o Esc+x)
  2. Escribe `package-refresh-contents` y presiona Enter
  3. 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:

  1. Abre cualquier archivo con extensión `.org`
  2. 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

  • Encabezado de cuarto nivel
    • Encabezado de quinto nivel

      Texto normal que forma parte del contenido.

      • Lista de viñetas
      • Otro elemento
        • Sub-elemento
        • Otro sub-elemento
          • Sub-sub-elemento
      • Lista numerada
      • Segundo elemento a. Sub-elemento con letras b. Otro sub-elemento

      #+END_EXAMPLE

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:

  1. Coloca el cursor sobre el encabezado de la tarea
  2. 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: <2025-04-28 lun> #+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

estructura_org_mode.png

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

  1. Capturar: Usa `C-c c` para añadir cualquier información a `inbox.org`
  2. 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
  3. Organizar: Usa `C-c C-w` (refile) para mover elementos a donde pertenecen
  4. Revisar: Usa la vista de agenda para revisar regularmente tus tareas
  5. 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

  1. Atomicidad: Cada nota aborda un solo concepto
  2. Autonomía: Cada nota es comprensible por sí misma
  3. Vinculación: Las notas se conectan entre sí mediante enlaces
  4. Explicación: Los enlaces explican por qué se conectan dos notas
  5. 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:

  1. Diagnóstico: Usa `M-x profiler-start` y `M-x profiler-report` para identificar cuellos de botella
  2. Reducir paquetes: Deshabilita paquetes que no uses frecuentemente
  3. Archivos Org grandes: Divide archivos muy grandes en varios más pequeños
  4. Org Agenda lenta: Reduce cantidad de archivos en `org-agenda-files`
  5. 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:

  1. Dependencias: Asegúrate de tener instaladas las dependencias necesarias (LaTeX, Pandoc, etc.)
  2. Errores de sintaxis: Verifica la sintaxis del documento con `M-x org-lint`
  3. Problemas con LaTeX: Usa `C-c C-e l L` para exportar a LaTeX y ver errores específicos
  4. Caracteres especiales: Usa `#+LATEX_HEADER: \usepackage[utf8]{inputenc}` para UTF-8

23.3. Errores en Org Mode

Soluciones a problemas comunes:

  1. Tareas no aparecen en agenda: Verifica que el archivo esté en `org-agenda-files`
  2. Problemas de indentación: Usa `org-indent-mode` o `M-x org-indent-region`
  3. Enlaces que no funcionan: Verifica la sintaxis ``
  4. 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:

  1. Distintas versiones de Emacs: Usa condicionales en tu configuración ```emacs-lisp (when (>= emacs-major-version 27) ;; Código específico para Emacs 27+ ) ```
  2. 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.1.1. Terminología

  • Buffers
  • Frames
  • Windows
  • Point & Mark
  • Modes

25.1.2. Navegación

  • Básica (C-f, C-b, etc.)
  • Avanzada (M-f, M-b, etc.)

25.1.3. Edición

  • Básica
  • Búsqueda y reemplazo
  • Región y kill ring

25.2. Org Mode Básico

25.2.1. Estructura de documentos

  • Encabezados y subencabezados
  • Listas
  • Tablas

25.2.2. Gestión de tareas

  • Estados TODO
  • Prioridades
  • Etiquetas

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

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

26.4. Comunidades y foros

26.5. Repositorios y configuraciones públicas

26.6. Canales de YouTube

27. Resumen y siguientes pasos

27.1. Lo que has aprendido

En esta guía has explorado:

  1. Fundamentos de Emacs: Configuración básica y comandos esenciales
  2. Org Mode: Toma de notas estructurada y gestión de tareas
  3. Flujos de trabajo avanzados: GTD, Zettelkasten y gestión de proyectos
  4. Personalización: Temas, paquetes y optimizaciones
  5. Solución de problemas: Estrategias para resolver problemas comunes

27.2. Recomendaciones para continuar

  1. Práctica regular: Usa Emacs y Org Mode a diario, incluso para tareas simples
  2. Incremento gradual: Añade nuevas funcionalidades de una en una
  3. Personalización progresiva: Modifica tu configuración cuando sea necesario
  4. Participación comunitaria: Únete a foros y grupos de usuarios
  5. 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

Categoría: emacs org-mode productividad editor-de-texto programación tutoriales

Suscribirse al Feed RSS | Mapa del Sitio

© 2025 M.Castillo | Hecho con ❤️ en Emacs y org-static-blog

📊 Estadísticas Visit counter For Websites