El primer y único editor de textos que siempre he utilizado ha sido, y creo que será, Emacs. Sin emabrgo, para la toma de notas comencé con Obsidian por un tiempo, luego me moví a Logseq, y eventualmente comenzó el desenfrenado proceso de cambiar de uno a otro indiscriminadamente. Esto me hizo perder el tiempo de forma desproporcionada. Eventualmente agregué Emacs a la lista porque me encontré inicialmente con Org-roam y luego Denote, además de por sus claras ventajas con respecto a los dos anteriores

  • En Emacs puedes ajustar el flujo de trabajo como desees, incluso puedes escribir fácilmente tus propias funcionalidades (esto por supuesto requiere saber de Elisp).
  • Emacs integra todo lo que puedas necesitar (excepto la navegación web) en un solo entorno, yo actualmente lo uso para
    • Tomar notas,
    • Relacionar notas con código y archivos en el disco,
    • Utilizar Magit para el control de versiones con Git,
    • Trabajar en archivos Markdown (para mantener este blog),
    • Editar los archivos de configuración del blog (para mantener este blog),
    • Administrar proyectos, realizar un seguimiento del tiempo en cada tarea, exportar las notas al formato que desees… y otras características generales del Org-mode.
    • Gestión de subscripciones RSS,
    • Y, por supuesto, se puede extender a mucho más (estos son solo los usos que yo le doy).
  • Emacs es un software sólido y libre, con una gran comunidad y la Free Software Foundation detrás.
  • Está centrado en el teclado para que puedas trabajar más rápido que utilizando el mouse.

A pesar de que con Denote estaba súper bien, eventualmente sentí la necesidad de algo más visual frente a mí, como una vista gráfica de fácil acceso, texto con formato legible y páginas de diario para registrar cosas que estaba haciendo y viendo, pero que no tenía un lugar para escribirlas luego. Todo eso se puede hacer en Emacs, pero tendría que aprender Elisp. Por estas razones elegí usar Logseq para tomar notas, ya que viene con la mayoría de esas funciones listas para usar.

Actualización 25/05/2023

He ido regresando, sin esfuerzo ni intención algunos, como guiado por la corriente de un río, a utilizar Emacs con Denote para todo, dejando cada vez más Logseq de un lado. Supongo que, como se dice de donde vengo, la cabra siempre tira al monte. 😉

Administrar las notas con Denote

Denote es un paquete de Emacs creado y mantenido por Prot. Está basado en funciones simples, lo que lo hace bastante potente y fácilmente extensible. Además, las notas se nombran siguiendo un esquema que permite encontrarlas rápidamente incluso con un explorador de archivos (ver más en la sección correspondiente de su documentación).

Con use-package, la configuración actual de mi Denote es la siguiente (ver configuración en mi repositorio).

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
(use-package denote
    :ensure t
    :config
    ;;
    ;; General key bindings
    (setq denote-directory (expand-file-name "/media/Datos/notes"))
    (setq denote-known-keywords '("emacs" "project"))
    (setq denote-infer-keywords t)
    (setq denote-sort-keywords t)
    ;;
    ;; Tweaking the frontmatter
    (setq denote-org-front-matter
          "#+title: %s\n#+date: %s\n#+filetags: %s\n#+identifier: %s\n#+author:\n#+startup: content\n")
    :bind
    ("C-c n n" . denote-open-or-create)
    ("C-c n l" . denote-link-or-create)
    ("C-c n B" . denote-link-find-file)
    ("C-c n b" . denote-link-backlinks)
)

Esto me permite ver las notas existentes y crear nuevas C-c n n, vincularlas C-c n l y ver el conexiones C-c n b con mínima distracción.

Un consejo: si escribes el nombre de una nota con C-c n n y no existe, normalmente le pulsarás ENTER para crearla. Pero esto te volverá a pedir el nombre que le quieres dar a la nota. Presionado M-p, Denote autocompletará el nombre de la nueva nota con el que introdujiste en primera instancia.

Búsqueda de palabras en el cuerpo de las notas

Es muy importante poder buscar en todas tus notas algunos términos. Para búsqueda global dentro del contenido de las notas hay muchas posibilidades.

  • Usar grep desde una terminal externa
  • Usar M-x grep o M-x grep-find desde dentro de Emacs
  • Usar desde Dired M-x find-grep-dired

Pero lo que realmente es extraordinario usar, y funciona perfectamente, es M-x consult-grep. Esto por supuesto requiere que esté instalando el paquete consult. La siguiente es la configuración que tengo actualmente para consult, pero puedes comprobar la configuración completa en mi repositorio git, o ver la sección correspondiente del paquete consult aquí.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
(use-package consult
    :ensure t
    :hook (completion-list-mode . consult-preview-at-point-mode)
    :init
    (setq register-preview-delay 0.5
          register-preview-function #'consult-register-format)

    (advice-add #'register-preview :override #'consult-register-window)

    (setq xref-show-xrefs-function #'consult-xref
          xref-show-definitions-function #'consult-xref)
)

Captura de información

Es importante poder capturar información y, por supuesto, esta es un área donde el modo Org sobresale. En mi configuración tengo org-capture vinculado a C-c c, y abre directamente la plantilla de captura, que es bastante útil para capturar información. Por supuesto, esto se puede combinar con el correo electrónico y muchas otras funcionalidades, pero las cosas pueden complicarse muy rápidamente en esa dirección, así que prefiero mantenerlo simple.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
;;
;; Capture
;;
(setq org-directory "/media/Datos/notes/")
(setq org-default-notes-file (concat org-directory organizer-file))
(global-set-key (kbd "C-c c") 'org-capture)      ;; use C-c c to start capture mode

;; capture templates for: TODO tasks, Notes, appointments, meetings
(setq org-templates-location-var (concat org-directory organizer-file))
(setq org-capture-templates
   '(("t" "Todo" entry (file+headline org-templates-location-var "Inbox")
   "* TODO [#C] %? ")))

;; Refile
;; Targets include this file and any file contributing to the agenda - up to 9 levels deep
;; C-c C-w for refile
(setq org-refile-targets (quote ((nil :maxlevel . 3)
   (org-agenda-files :maxlevel . 3))))

organizer-file es una variable configurada con el nombre de la nota donde irán las capturas.

Logseq

Aunque Emacs tiene todo lo que uno puede desear y necesitar para realizar casi cualquier actividad en una computadora, le falta un diseño visual moderno, desde mi punto de vista. No se muestran fotos ni ecuaciones, y aunque eficiente para editar, a la hora de pensar y buscar algo es más fácil usar el mouse, simplemente es más sensorial para mí. Además, si se usa para todo, con el tiempo la configuración puede complicarse demasiado e incluso dejar de funcionar como es esperado.

Una posible solución a estos inconvenientes es utilizar Logseq para tomar notas y escribir en la página del Diario toda la información interesante que encuentre en línea, marcados con etiquetas que probablemente te harán encontrarla nuevamente en el futuro.

Por otro lado, Emacs se podría reservar para mantener proyectos que necesitan demasiados headlines y detalles. Por ejemplo, cuando pongo a correr 100 cálculos en un clúster como parte del trabajo de investigación, todos ellos tienen una entrada en la página de su proyecto, y puedo ocultar y mostrar de manera eficiente los niveles de encabezado, realizar un seguimiento del tiempo, tomar notas, relacionar unos con otros. Además aparecen en las vistas de Agenda personalizadas de Org-mode, para estar de esta manera al día con su estado. Esto es extremadamente útil, y si se hace en Logseq terminaría en páginas extremadamente grandes con mucha información al mismo tiempo.

Capturando la información en diarios

Descubrí que dedicar tiempo a “trabajar” en el sistema PKM tiende a ser contraproducente. Sólo capturando algunas cosas durante el día, y luego reorganizarlas en algún momento en el futuro es mejor. En Emacs esto se puede lograr con capture y refile, ya que todas las entradas capturadas estarán en el archivo especificado. Con Logseq la alternativa etiquetar como #inbox (por ejemplo) las capturas que necesitan ser revisadas en el futuro.

También mantengo un Bullet Journal minimalista para pensamientos escritos, que disfruto más que escribir en el teclado. Algo muy similar a un bullet journal se pueden configurar perfectamente con Denote, pero para mí hubo cierta fricción, cada vez que necesitaba capturar algo, tenía que encender la PC si estaba apagada, y las cosas simplemente no te pegan con la fuerza como lo hacen cuando están escritas en papel.

Sin embargo, si esto no te afecta y mantener un diario exclusivamente digital se ajusta a tus necesidades y gustos, Prot me ha proveído de una función que integrará en la próxima actualización del manual de Denote que permite crear una nota diaria, exactamente lo mismo que los Diarios de Logseq o un Bullet Journal. La función a la que me refiero es my-denote-journal, y se puede encontrar en esta sección de su manual. La versión modificada, que agregar la capacidad de chequear si ya la nota del día de hoy existe y si es así no crear una nueva, sino abrir la existente es:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
(defun my-denote-journal ()
    "Create an entry tagged 'journal' with the date as its title.
    If a journal for the current day exists, visit it.  If multiple
    entries exist, prompt with completion for a choice between them.
    Else create a new file."
    (interactive)
    (let* ((today (format-time-string "%A %e %B %Y"))
           (string (denote-sluggify today))
           (files (denote-directory-files-matching-regexp string)))
      (cond
       ((> (length files) 1)
        (find-file (completing-read "Select file: " files nil :require-match)))
       (files
        (find-file (car files)))
       (t
        (denote
         today
         '("journal"))))))

En mi caso, que uso use-package para el manejo de los paquetes instalados, para que funcione correctamente esta unción denote tiene que haber sido llamado con anterioridad en esta sesión, pues use-package no lo carga hasta que es requerido. Para solucionar esto es necesario incluir :demand t cuando se use use-package para configurar Denote.

Respecto al cambio constante de apps

Con el tiempo ido entendido que la app que utilicemos no importa realmente, y que estar cambiando de una a otra llega a ser muy contraproducente. Este video en YouTube o Invidious recoge un análisis de este tema, y te puede ser interesante en el caso que te hayas encontrado, como yo, cambiando de una para la otra.

Si tengo un consejo para darte, es el siguiente: no busques por la aplicación perfecta, pues no existe, y evita a todo coste los videos y guías en cómo hacer algo o sobre un workflow nuevo que resolverá todos tus problemas, estoy seguro que somos los suficientemente inteligentes para encontrar una solución por nosotros mismos sin tener que copiarla de alguien más. Ver esos videos y guías, incluyendo esta posiblemente, en mi experiencia sólo será una pérdida de tiempo.

⋇ ⋇ ⋇ ⋇ ⋇

Gracias por leer el post. No dudes en enviarme un correo para cualquier comentario, o para compartir tu punto de vista 😉: contact@poview.org