2012-07-23 10 views
5

Come posso dire a emacs di non far apparire il buffer *Shell Command Output* quando si chiama un comando di shell come questo?Come può il buffer * output del comando di shell * essere mantenuto in background?

(shell-command MY_COMMAND) 

Attualmente emacs divide la finestra corrente in due, mostrando il buffer di output (per lo più irrilevante). Per me sarebbe del tutto sufficiente se potessi cercarlo più tardi se ne avrò voglia.

+0

'shell-comando' è una funzione di fantasia che utilizza' start-processo' - quest'ultimo offre un maggiore controllo - ecco un estratto dalla stringa doc di ' shell-command': 'In Elisp, ti verrà spesso servito chiamando 'call-process' o 'start-process' direttamente, poiché offre più controllo e non impone l'uso di una shell (con la sua necessità di quotare argomenti) .' Utilizzando il processo di avvio, è anche possibile impostare il buffer di output su 'nil'. – lawlist

risposta

7

magari usando shell-command era la radice del problema. Credo di avere trovato una soluzione con call-process che funziona, anche se ci può essere un modo più elegante:

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

shell-command accetta un argomento facoltativo OUTPUT-BUFFER in cui è possibile specificare il buffer su cui eseguire l'output. Se è t (in realtà non è un nome di buffer e non nil) verrà emesso nel buffer corrente. Così abbiamo avvolgere questo in un with-temp-buffer e non avrà mai preoccuparsi di esso:

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

Sì, ma questo ancora fa apparire il buffer '* Messages *'. – quazgar

+0

@quazgar Oh, non è stato così per le uscite piccole nei miei test. Proverò a incappare in giro. – pmr

+0

Sì, mentre un semplice buffer temporaneo non mostra alcun output, penso che questo si qualifichi come "risolto problemi". – quazgar

1

Questa funzione di utilità potrebbe aiutare. Restituisce il valore effettivo del comando di shell

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