lunes, octubre 20, 2008

Insertando la salida de un comando de shell en un buffer de Emacs

Hace un rato que estaba buscando una forma de insertar la salida de un comando de shell en un buffer de Emacs, sin necesidad de copiar y pegar (así fuera entre buffers, lo cual me parece muy tedioso). Pues bien, encontré en el comp.emacs de USENET, una solución muy adecuada, simplemente agregando las siguientes líneas en el .emacs:

------

(defun my-shell-command-on-region nil
"Replace region with ``shell-command-on-region''.
By default, this will make mark active if it is not and then prompt
you for a shell command to run and replaces region with the results.
This is handy for doing things like getting external program locations
in scripts and running grep and whatnot on a region."
(interactive)
(save-excursion
(if (equal mark-active nil)
(push-mark nil nil -1))
(setq string
(read-from-minibuffer "Shell command on region: " nil nil nil
'shell-command-history))
(shell-command-on-region (region-beginning) (region-end) string -1)
; Get rid of final newline cause I normally did by hand anyway.
(delete-char -1)))

;;------------------------------------------------------------------------
(defun insert-output-from-shell-command (commandstr)
"Insert output from a shell command at point"
(interactive "*sInsert From Command:")
(shell-command commandstr 1))

(global-set-key "\M-oi" 'insert-output-from-shell-command)
(global-set-key "\M-or" 'my-shell-command-on-region)

----

Bien, ahora con sólo Esc-oi, escribo el comando a ejecutar y la salida se inserta en el punto en donde se encuentra el cursor. Bastante útil !.

No hay comentarios.: