Eshell: la shell integrada de Emacs que debes conocer

Fuentes: Eschewing Zshell for Emacs Shell

Este artículo explora una alternativa inusual a las shells tradicionales (Zsh, Fish, Bash) para usuarios avanzados de Emacs: la Eshell integrada. La Eshell, a menudo pasada por alto, se presenta como una solución elegante para aquellos que ya trabajan principalmente dentro de Emacs y alternan entre edición de código y manipulación de archivos a través de la línea de comandos.

¿Qué es Eshell y por qué usarla? Eshell es una shell que reside dentro de Emacs, escrita en Emacs Lisp. Esto le otorga una serie de ventajas. A diferencia de las shells externas, Eshell ofrece un comportamiento consistente entre diferentes sistemas operativos, ya que se beneficia de la portabilidad de Emacs Lisp. Además, permite acceder directamente a las funciones de Emacs, abriendo la puerta a la escritura de scripts de shell en Lisp, lo que amplía enormemente las posibilidades de personalización. La principal ventaja que destaca el autor es la forma en que maneja la salida de comandos. En lugar de requerir el uso de paginadores como less, Eshell integra la paginación de Emacs, permitiendo navegar fácilmente por resultados extensos con atajos de teclado como C-c C-p (ir al principio del comando) y C-v (desplazarse hacia abajo). También ofrece una visualización inteligente que comienza en la parte superior del comando hasta que se presiona una tecla de movimiento del cursor.

¿Cómo funciona? Eshell funciona como un REPL (Read-Eval-Print Loop) impulsado por comandos. El autor proporciona un ejemplo de función Lisp (eshell-here) que abre una Eshell en el directorio del buffer actual de Emacs, creando una ventana dedicada y renombrándola para facilitar la gestión de múltiples shells. La sintaxis de Eshell permite una mezcla de comandos de shell tradicionales y expresiones de Lisp, con la posibilidad de omitir los paréntesis en algunos casos para una mayor rapidez. Además, introduce modificadores (como (:U)) que permiten filtrar la selección de archivos de manera similar a los modificadores de Zsh, pero integrados en el entorno Emacs.

Casos de uso: Este enfoque es ideal para usuarios de Emacs que ya prefieren trabajar dentro del editor y necesitan una shell para tareas de manipulación de archivos. Es especialmente útil para aquellos que buscan una shell consistente en diferentes plataformas y que deseen aprovechar la potencia de Emacs Lisp para personalizar su entorno de línea de comandos.

Consideraciones: La principal limitación de Eshell es su comportamiento cuando un programa intenta controlar el terminal directamente, lo que puede causar problemas. Además, la documentación es limitada, aunque el autor recomienda el libro "Mastering Emacs" de Mickey Petersen para una guía más completa. Finalmente, aunque Eshell se asemeja a una shell tradicional en muchos aspectos, su naturaleza como REPL de Lisp introduce algunas peculiaridades, como la necesidad de usar llaves ({}) para forzar la evaluación de expresiones como listas.