Exportar una lista de entradas de Elfeed a formato Org
Para enterarme de lo que se cuece en blogs y demás publicaciones periódicas que disponen
de feed uso mucho en Emacs el agregador/lector de feeds Elfeed, que es bastante
competente, flexible y cumplidor. Hace poco se me ocurrió escribir esta serie de funciones
para poder exportar a formato Org (en una ventana temporal) cualquier lista de entradas
que tengamos marcadas en la ventana elfeed-search
(la que nos permite acotar las
entradas de las publicaciones suscritas mediante etiquetas de «leído»/«no leído», palabras
clave, marcadores, etc.); es decir, cada encabezado es el título de la entrada, y bado
éste va su contenido.
Basta con que marquemos aquellas entradas de la lista que queremos exportar, llamamos a la
función exporta-entradas-elfeed
y al momento obtenemos nuestras entradas en Org para
poder exportarlas a LaTeX, HTML, etc.
Primero de todo, requerimos el paquete dash
(nativo en Emacs), que nos permitirá
intercalar dos listas:
(require 'dash)
Y definimos una serie de funciones previas:
(defun reemplaza (antes despues) (save-excursion (goto-char (point-min)) (while (re-search-forward antes nil t) (replace-match despues t nil)))) (defun lineas-a-lista () "Esta primera función almacena en una lista cada línea de un texto marcado como elemento de la lista" (narrow-to-region (region-beginning) (region-end)) (split-string (buffer-string) "\n" nil)) (defun intercala-elfeed () "intercala los títulos de la lista de entradas con su contenido" (setq lineas-b (lineas-a-lista)) (setq lineas-c (-interleave lineas-b entradas-elfeed)) (replace-regexp ".+" "" nil (region-beginning) (region-end)) (deactivate-mark) (widen) (insert (mapconcat 'identity lineas-c "\n"))) (defun mi-elfeed-almacena-entradas () "almacena los contenidos de cada entrada marcada en la lista de Elfeed" (setq entradas-elfeed nil) (save-excursion (save-restriction (narrow-to-region (region-beginning) (region-end)) (goto-char (point-min)) (save-window-excursion (while (re-search-forward "\\(^[[:digit:]]+-\\)" nil t) (call-interactively 'elfeed-search-show-entry) (add-to-list 'entradas-elfeed (buffer-string) (switch-to-buffer "*elfeed-search*")))))))
Por último, nuestra función para exportar las entradas (en acción puede verse en la fig. 1):
(defun exporta-entradas-elfeed (desde hasta) "Exporta a formato Org una lista marcada de entradas de Elfeed" (interactive "r") (setq entradas-marcadas (substring (buffer-string) desde hasta)) (mi-elfeed-almacena-entradas) (when (get-buffer "*entradas*") (kill-buffer "*entradas*")) (get-buffer-create "*entradas*") (set-buffer "*entradas*") (insert entradas-marcadas) (reemplaza "\\(^[[:digit:]]+-\\)" "** \\1") (mark-whole-buffer) (intercala-elfeed) (deactivate-mark) (org-mode) (goto-char (point-min)) (insert "* Entradas") (temp-buffer-window-show "*entradas*"))
Figura 1: Exportando un árbol de Org una lista de entradas marcadas en Elfeed
∞
Publicado: 12/08/20
Última actualización: 26/12/20
Esta obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial 4.0 Internacional.