Guardar marcadores, recortes y notas de Firefox en Emacs con org-protocol
Una de las muchísimas cosas gratas que nos ofrece Emacs es la posibilidad de usarlo mediante un sistema cliente-servidor. Es decir, el editor está corriendo como un proceso en segundo plano que podemos invocar rápidamente siempre que lo necesitemos. Las ventajas son obvias. Por ejemplo, si Emacs es nuestro editor predeterminado no necesitamos ir abriendo nuevas instancias de éste, y en cualquier momento tendremos a mano los búferes abiertos, el historial de comandos, etc. A todo esto podemos sumarle el poder llamar a Emacs desde otros programas, mediante org-protocol. Y si este último entra en feliz conjunción con org-capture, una extensión del Org Mode que nos permite tomar notas rápidas, entonces ya estamos en la gloria. Yo uso org-protocol-capture, principalmente, para gestionar marcadores y notas extraídas de Firefox. Poner un orden en todo ese material misceláneo y cotidiano, y hacerlo con la potencia y sensatez del Org Mode de Emacs es algo que no tiene precio, y desde luego resulta mucho más cómodo que almacenar los marcadores en el propio Firefox e ir buscándolos y exportándolos a mano.
Pero antes será necesario realizar una serie de ajustes, que no son muchos ni demasiado complicados. Veamos.
Configuración en Emacs y en el escritorio
Lo primero de todo, naturalmente, será crear un proceso servidor de Emacs. Hay diversas maneras de hacerlo, pero la que yo prefiero y me resulta más eficaz y cómoda es hacer que Emacs se inicie como servidor en cada inicio de sesión mediante el omnipresente Systemd. Para ello, teclearemos en una terminal los siguientes comandos:
systemctl --user enable emacs systemctl --user start emacs
Cuando ya tenemos a Emacs corriendo como servidor, podemos iniciar un cliente en nuestro escritorio mediante la orden
emacsclient -c
a la cual no estará de más asignar un atajo de teclado (en Xfce yo le asigno el atajo Tecla Windows + h
) o un icono
lanzador.
Una vez hecho esto, necesitamos activar org-protocol en Emacs. Basta con que incluyamos en algún lugar de nuestro archivo de configuración:
(require 'org-protocol)
Pero también tendremos que crear en nuestro sistema un archivo *.desktop
para org-protocol. Nos situamos en el
directorio ~/.local/share/applications
y creamos el archivo org-protocol.desktop
. Lo editamos e incluimos en él el
siguiente contenido:
[Desktop Entry] Name=org-protocol Exec=emacsclient -c %u Type=Application Terminal=false Categories=System; MimeType=x-scheme-handler/org-protocol;
Y, acto seguido, refrescamos la base de datos de aplicaciones mediante el comando en terminal:
update-desktop-database ~/.local/share/applications/
Con esto ya tenemos listo nuestro org-protocol para que sea invocado desde una aplicación externa a Emacs. Aquí la que nos interesa es Firefox.
Configuración en Firefox
La forma más sencilla que he encontrado de llamar a un cliente de Emacs con org-protocol-capture desde Firefox es
mediante la extensión Org Capture (también hay versión para Chrome). Tras instalar la extensión, sin embargo, hay que
hacer un pequeño ajuste a la configuración de Firefox, a fin de que el navegador reconozca el protocolo org-protocol. Para registrar
dicho protocolo, abrimos un about:config
en la barra de direcciones y, al inicio de la página de configuración, con el
botón derecho del ratón desplegamos el menú, donde elegiremos: nuevo --> sí/no
. En la casilla «nombre», escribimos:
network.protocol-handler.expose.org-protocol
Pulsamos «siguiente», y en la casilla «valor» escogemos true
.
A partir de aquí, el funcionamiento de la extensión es muy sencillo. Si tenemos abierta una página determinada en
Firefox y pulsamos el icono de Org Capture se nos abrirá un cliente de Emacs con una página de Capture donde se incluirá
automáticamente el enlace junto a otros datos, como la fecha de captura. Si seleccionamos un tramo de texto en esa
página y volvemos a pulsar el icono de la extensión, el texto se incluirá también en la página de Capture. Por supuesto,
para que esto suceda, necesitamos dos cosas: un documento *.org
donde almacenar los marcadores y notas extraídos de
Firefox y una plantilla que indique a Emacs la estructura mediante la cual este contenido ha de ser almacenado.
Para lo primero, yo tengo creado un archivo llamado Bookmarks.org
en mi carpeta sincronizada de Nextcloud. Y en mi
.emacs
he incluido la plantilla más simple que propone el autor de la extensión (con algunas pequeñas modificaciones
propias), que para lo que quiero me basta y me sobra:
(setq org-capture-templates '( ("p" "Protocol" entry (file "~/Documentos/docs-compartidos/org-protocol/Bookmarks.org") "* %^{Title}\nSource: %u, %c\n #+BEGIN_QUOTE\n%i\n#+END_QUOTE\n\n\n%?") ("L" "Protocol Link" entry (file "~/Documentos/docs-compartidos/org-protocol/Bookmarks.org") "* %? [[%:link][%:description]] \nCaptured On: %U") ))
Un ejemplo de uso se puede ver en este vídeo:
Org-capture (extensión para Firefox). Ejemplo de uso from Juan Manuel Macías Chaín on Vimeo.
Convertir nuestro archivo de Org a html
Siempre que queramos, podremos visitar desde Emacs el archivo *.org
que contiene nuestros marcadores, notas y recortes
varios. Pero tal vez nos apetezca en ocasiones poder convertirlo rápidamente a html para abrirlo en Firefox. Para ello,
creé este simplísimo script (donde hago uso de la útil opción --batch
de Emacs, que permite ejecutar funciones de
Emacs «a distancia», sin necesidad de abrirlo) y le asigné en Xfce el atajo Tecla Windows + b
:
#!/bin/bash emacs /home/juanmanuel/Documentos/docs-compartidos/org-protocol/Bookmarks.org --batch -f org-html-export-to-html --kill firefox /home/juanmanuel/Documentos/docs-compartidos/org-protocol/Bookmarks.html exit
Y cada vez que pulso el atajo se me abre en Firefox esta página:
∞
Publicado: 03/01/2019
Última actualización: 03/01/2019
Esta obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial 4.0 Internacional.