Emacs Anywhere: Ejecuta Emacs para insertar texto en cualquier aplicación
Emacs Anywhere es un script que nos permite crear un atajo de teclado para iniciar una ventana temporal de Emacs. El texto es luego instertado (copiado y pegado) automáticamente en la aplicación que estemos usando.
Funciona mediante un script bash que nos permite iniciar una ventana temporal de Emacs. El texto es luego insertado automáticamente en la aplicación que estemos usando. Es una forma fácil de “integrar” Emacs a nuestro sistema sin tener que andar configurando distribuciones de teclado a nivel GTK o aplicaciones. Elegimos un atajo de teclado que crea un frame y buffer temporales, escribimos el texto, y al cerrar el frame éste se inserta en la aplicación que estábamos usando. En Emacs un frame es lo que conocemos generalmente como “ventana”, y un buffer es el objeto en el que escribimos texto.
Instalación
En GNU/Linux (también está disponible para Mac OS X), Emacs Anywhere depende de xdotool y xclip. Así que en sistemas Debian/Ubuntu, los podemos instalar con:
Es importante señalar que por el momento, Wayland no está soportado, sólo Xorg. En algunas distribuciones, podemos seleccionar si queremos usar Wayland o volver a Xorg en la pantalla de login de nuestro gestor de ventana. Una vez resueltas las dependencias, procedemos a instalar con:
Pueden ver el código fuente en este enlace, para estar seguros de qué están ejecutando en su terminal. Hecho todo ésto, debemos crear un atajo de teclado al script $HOME/.emacs_anywhere/bin/run
. Yo usé la tecla Super + E (de Emacs):
Configuración
En ~/.emacs_anywhere/config
` se crea el archivo de configuración de Emacs Anywhere. Ahí podemos editar el ejecutable a usar con la variable EA_EDITOR, además del comportamiento para copiar y pegar.
Si usan Emacs Client, la cosa se hace más fácil, ya que permite usar una instancia ya en uso. En mi caso estoy usando:
export EA_EDITOR="emacsclient -c"
Con este parámetro, emacsclient va a crear un frame nuevo en vez de usar el frame que ya tengamos abierto de Emacs. Me resulta más práctico para mantener mi ventana principal con el código por un lado, y un frame nuevo temporal para el tipo de texto que quiera editar y pegar eventualmente en una aplicación.
Al crear el frame nuevo, el hook disparador del evento “copiar y pegar el texto” es delete-frame. Por defecto en emacsclient, el comando es Ctrl-x 5 0
. Como me resultaba poco práctico, agregué un atajo de teclado para cerrar más fácilmente el frame una vez abierto con Emacs Anywhere:
(global-set-key (kbd "C-c q") 'delete-frame)
Hace poco que lo vengo usando, pero creo a medida que le agarre la mano veré si es algo que integro por completo a mi proceso de trabajo. Parece bastante práctico y acelera el andar copiando y pegando texto de un lado a otro.
Pueden leer más y ver el código fuente de Emacs Anywhere en GitHub.