Podemos ejecutar comandos shell mediante M-! el cual mostrará su salida usando el buffer *Shell Command Output*. Tenemos otra alternativa si queremos ejecutar el comando tomando como entrada una región dada, mediante el uso del comando M-|.
Además C-u M-! nos permitirá ejecutar un comando y poner el resultado sobre esa misma región.
En el momento que deseemos ejecutar una cantidad ingente de comandos, podemos abrir un shell directamente mediante M-x shell. Desde este shell, podemos usar los siguientes keystrokes para tener un control mayor:
- C-c C-v :’comint-kill-output’; oculta la salida de un comando.
- C-c C-c : termina un comando en ejecución.
- C-c C-z : termina un comando en ejecución.
- C-c C-o : ‘comint-kill-output‘; sigue ejecutando el comando, pero oculta su salida.
- C-c C-r : ‘comint-show-output‘; muestra la salida de un comando.
- C-c C-e : ‘comint-show-maximum-output‘; muestra la salida de un comando con límite de buffer.
- C-c C-p : se mueve al anterior comando de grupo.
- C-c C-n : se mueve al siguiente comando de grupo.
Se puede redefinir la shell por defecto a usar añadiendo en nuestro .emacs dicha línea:
(setq shell-file-name «/bin/zsh»)
Existe otro problema, y es que si usamos el shell para conectar a ordenadores remotos, mostrará el password, si queremos que permanezca invisible debemos añadir esta línea a nuestro .emacs:
(add-hook ‘commit-output-filter-functions
‘comint-watch-for–password-prompt)
[Artículo bajo revisión – necesita ser mejor redactado]
En emacs podemos crear bookmarks y administrarlos mediante los siguientes comandos:
- C-x r m : ‘bookmark-set‘; crea un bookmark.
- C-x r b : ‘bookmark-jump‘; salta a un bookmark.
- C-x r l : ‘bookmark-menu-list‘; lista todos los bookmarks en forma de lista.
- (sin keystroke asociada) : ‘bookmark-rename‘; renombra un bookmark.
- (sin keystroke asociada) : ‘bookmark-delete‘; elimina un bookmark.
- (sin keystroke asociada) : ‘bookmark-save‘; guarda todos los bookmarks en un fichero alternativo.
- (sin keystroke asociada) : ‘bookmark-insert‘; inserta el texto asociado a un bookmark.
- (sin keystroke asociada) : ‘bookmark-write‘; guarda todos los bookmarks es un fichero especificado.
- (sin keystroke asociada) : ‘bookmark-load‘; carga los bookmarks de un fichero especificado.
- (sin keystroke asociada) : ‘bookmark-insert-location‘; inserta la ruta a asignar en la posición del cursor actual.
Al mostrar toda la lista de bookmarks mediante C-x r l, accederemos al buffer llamado *Bookmark List*, donde podemos realizar las siguientes acciones:
- f o j : salta a un bookmark.
- o : abre el bookmark en otra ventana sin mantener el cursor en la ventana actual.
- C-o : abre el bookmark en otra ventana manteniendo el cursor en la ventana actual.
- d o k : marca el bookmark para eliminación.
- r : renombra el bookmark.
- s : guarda todos los bookmarks listados.
- m : marca los bookmarks para ser mostrados en múltiples ventanas.
- v : muestra los bookmarks marcados por m. Si no hay ninguno marcado, muestra el actual.
- t : marca/desmarca como mostrado.
- w : muestra la dirección asociada al bookmark.
- x : elimina los bookmarks marcado para eliminación.
- u : desmarca un bookmark.
- Del : desmarca un bookmark, si no está marcado, desmarca el anterior.
- q : sale del listado de bookmarks.
- n : se desplaza al siguiente bookmark.
- p : se desplaza al bookmark anterior.
- l : carga un fichero de bookmarks.
- A : muestra todas las anotaciones.
- a : muestra la anotación de bookmark actual.
- e : edita o crea la anotación para el bookmark actual.
En este artículo explicaremos de forma más profunda el uso de buffers y ventanas.
Podemos emplear otros comandos además de los explicados anteriormente para conseguir un mayor control sobre los buffers:
- C-x -> : siguiente buffer.
- C-x <- : buffer anterior.
- M-x rename-buffer : renombra el buffer.
- M-x kill-some-buffers : elimina los buffers marcados para eliminación.
En uno de los artículos anteriores explicabamos que es posible listar todos los buffers mediante C-x C-b, podemos ver en dicho listado un campo llamado CRM que puede tomar los siguientes valores:
- D : marcado para eliminación.
- > : marcado para mostrar.
- S : marcado para guardar.
En dicho buffer podemos realizar acciones tales como las siguientes:
- n o flecha abajo : siguiente buffer de la lista.
- p o flecha arriba : buffer anterior de la lista.
- d o k : marcar buffer para eliminación.
- ~ : marcar buffer como modificado.
- % : marcar o desmarcar buffer como sólo lectura.
- m : marcar buffer para ser mostrado.
- Del : desmarcar buffer anterior.
- f : reemplazar la lista de buffers por esta nueva lista de buffers.
- o : reemplazar otra ventana con el buffer actual.
- 1 : mostrar buffer en pantalla completa.
- 2 : mostrar los siguientes 2 buffers en ventana horizontal.
- v : mostrar los buffers marcados por m.
- x : ejecutar comandos de marcado.
- q : salir del listado de buffers.
También podemos tener un mejor control sobre las ventanas, las cuales estan asociadas a un buffer determinado:
- C-x < : ‘scroll-left‘; mueve el scroll hacia la izquierda.
- C-x > : ‘scroll-right‘; mueve el scroll hacia la derecha.
- (sin keystroke asociada) : ‘shrink-window‘; reduce la ventana.
- C-x ^ : ‘enlarge-window‘; amplia la ventana.
- C-x } : ‘wider-frame‘; amplia el ancho del frame.
- C-x { : ‘shrink-window-horizontally‘; reduce el ancho de la ventana.
- C-u C-x ^ : amplia el ancho de la ventana actual.
- C-x – : ‘shrink-window-if-larger-than-buffer‘; amplia la ventana si el buffer es más largo.
- C-x + : ‘balance-windows‘; balancea las ventanas para que tengan el mismo tamaño.
- C-M-v : ‘scroll-other-window‘; baja el scroll de la ventana opuesta.
- C-x 4 f : ‘find-file-other-window‘; abre un fichero en la ventana opuesta.
- C-x 4 b : ‘switch-to-buffer-other-window‘; asocia y/o muestra un buffer en la ventana opuesta.
- (sin keystroke asociada) : ‘compare-windows‘; Compara ventanas mediante ediff.
La ventana opuesta sera la siguiente ventana en orden de izquierda a derecha y de arriba abajo.
Con esto ya podemos movernos de una forma avanzada las ventanas, así como administrar los buffers que tengamos en uso y ver sus estados.