2012-07-23 13 views
5

¿Cómo puedo decirle a emacs que no muestre el buffer *Shell Command Output* al llamar a un comando de shell como este?¿Cómo se puede mantener el buffer del * shell command output * en segundo plano?

(shell-command MY_COMMAND) 

Actualmente, emacs divide la ventana actual en dos, mostrando el búfer de salida (casi irrelevante). Para mí sería completamente suficiente si pudiera buscarlo más tarde si tuviera ganas.

+0

'shell-command' es una función de lujo que utiliza' puesta en process' - que el segundo ofrece un mayor control - aquí es un extracto de la cadena de documentación de ' shell-command': 'En Elisp, a menudo será más útil llamar directamente a 'call-process' o 'start-process', ya que ofrece más control y no impone el uso de un shell (con su necesidad de citar argumentos) .' Al usar el proceso de inicio, también puede configurar el búfer de salida a 'nil'. – lawlist

Respuesta

7

Tal vez usando shell-command era la raíz del problema. Creo que he encontrado una solución con la que trabaja call-process, aunque puede haber una forma más elegante:

(call-process-shell-command 
"cat ~/.emacs.d/init.el" 
nil "*Shell Command Output*" t 
) 
8

shell-command toma un argumento opcional OUTPUT-BUFFER donde puede especificar el búfer a la salida. Si es t (en realidad no es un nombre de búfer y no nil) saldrá en el búfer en uso. Así que terminar con esto en un with-temp-buffer y nunca tiene que preocuparse con ella:

(with-temp-buffer 
    (shell-command "cat ~/.emacs.d/init.el" t)) 
+0

Sí, pero esto aún muestra el búfer '* Messages *'. – quazgar

+0

@quazgar Oh, no hizo eso para pequeñas salidas en mis pruebas. Intentaré hackear. – pmr

+0

Sí, aunque un temp-buffer simple no muestra ningún resultado, creo que esto califica como "problema resuelto". – quazgar

1

Esta función de utilidad podría ayudar. Devuelve el valor real del comando shell

(defun shell-command-as-string (cmd) 
    (with-temp-buffer 
    (shell-command-on-region (point-min) (point-max) 
          cmd t) 
    (buffer-string))) 
Cuestiones relacionadas