Cuaderno de GNUtas

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:

org-captura.png

Publicado: 03/01/2019

Última actualización: 03/01/2019


Índice general

Acerca de...

Esta obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial 4.0 Internacional.

© Juan Manuel Macías
Creado con esmero en
GNU Emacs