Ya comentamos que Emacs es algo más que un editor de textos. Desde Emacs podemos realizar tareas tan variadas como ejecutar comandos shell, gestionar directorios y archivos, enviar y recibir correo...etc.
Todas estas tareas implican un importante grado de integración de Emacs con el sistema operativo y, aunque Emacs es esencialmente un editor del entorno Unix, es posible, también, su integración con otros sistemas operativos.
Siguiendo la tónica de este manual, vamos a centrarnos en la utilización de Emacs como entorno de trabajo en sistemas Unix, aunque las explicaciones que se den son facilmente "traducibles" a otros sistemas operativos.
En el presente capítulo vamos a tratar sobre la utilización de Emacs como medio para la ejecución de comandos shell desde dos aspectos:
La posibilidad de ejecutar ccomandos de shell desde un buffer de Emacs es, posiblemente, una de las características más apreciadas de la aplicación. Y ellos por, entre otras, las siguientes razones:
Para ejecutar un comando shell desde una sesión de Emacs tenemos varias opciones:
Este comando opera de la siguiente forma:
![]() |
![]() |
Una variación del anterior comando es el siguiente:
Con dicho comando , la salida del comando shell no se muestra en la *Shell Command Output* , sino en el buffer activo: Se inserta a partir de la posición del cursor:
![]() |
![]() |
Una de las ventajas más interesantes de utilizar Emacs para la ejecución de comandos shell es la posibilidad de utilizar regiones de un buffer como inputs de comandos, como si se trataran de archivos. El comando utilizado para ellos es:
La forma de operar con este comando es la siguiente:
![]() |
Introducimos el comando que deseamos ejecutar, sin especificar input. Emacs tomará como input la región seleccionada: :
![]() |
Tras pulsar <Enter> , el outoput se nos presenta en una nueva ventana *Shell Command Output* :
![]() |
Puede abrirse un buffer de shell y trabajar en el como si de una cónsola se tratara. Pero con todas las ventajas que nos proporciona la capacidad de edición de Emacs.
Abrir un buffer de shell no es otra cosa que abrir un buffer con el modo mayor shell-mode. Para ello utilizamos el siguiente comando:
![]() |
![]() |
Vemos que tras ejecutar el comando se nos ha abierto una ventana, *shell* , conteniendo el prompt correspondiente. Observemos también el modo mayor de dicha ventana: Shell.
En la barra de menús han aparecido dos nuevas opciones: In/Out y Signals
Una observación: En el modo shell, por defecto, se muestra todo lo que tecleamos, passwords inclusive. Si deseamos que el texto que vayamos a teclear sea invisible debemos operar de la siguiente manera:
Antes de teclear el texto que deseamos ocultar, ejecutar el comando :
M-x send-invisible <Enter>.
Emacs nos pedirá , mediante un mensaje en el mini-buffer, ( Non echoed text: ), que introduzcamos el texto que desamos ocultar.
A medida que vayamos introduciendo el texto, Emacs lo irá mostrando como una sucesión de carácteres *
Pulsando <Enter> , el texto se introducirá en la posición del cursor, sin mostrarse en pantalla.
Si deseáramos ocultar los passwords cuando los tecleamos, debemos añadir las siguientes dos líneas al archivo .emacs:
(add-hook 'comint-output-filter-functions
'comint-watch-for-password-prompt)
Siempre que aparezca la solicitud ede un password en el prompt, Emacs nos solicitará que introduzcamos el texto en el mini-buffer.
Se pueden tener múltiples buffers de shell abiertos a la vez.
Podemos renombrar un buffer de shell mediante el siguiente comando:
M-x rename-uniquely <Enter>.
Emacs irá numerando los buffers de shell.
Además de los vistos en las anteriores secciones, el entorno shell dispone de una serie de comandos, la mayoria de ellos ejecutables atraves de las opciones de menú In/Out y Signals. Vamos a relacionar sólo las consideradas, más relevantes. Es recomendable "explorar" y experimentar con las opciones de menú propias del entorno shell que nos ofrecen.
| In/Out | Signals |
|---|---|
![]() |
![]() |
En entornos Unix, Emacs utilizará, en la ventana de shell, la shell que estemos usando en la terminal.
Si se deseara utilizar en Emacs una shell distinta a la del equipo, debemos añadir la siguiente linea en el archivo .emacs: (setq shell-file-name "/bin/shell")
En esta línea deberiamos sustituir shell por el nombre de la shell a utilizar ( zhs, bash,...etc.