2011-09-04 12 views
5

¿Cómo hacer que Emacs ejecute un programa y no espere a la salida/respuesta? He intentado abrir un archivo PDF en un programa externo:Ejecute un programa de Emacs y no espere la salida

(shell-command (concat "start sumatrapdf " (shell-quote-argument path) " -page " search)))) 

pero no va a abrir otro archivo hasta que el proceso existente SumatraPDF está cerrado. Me cansé async-shell-command, pero abre un nuevo buffer con salida Async que no necesito.

¿Cuál es la forma correcta de archivos en programas externos?

función

Respuesta

9

start-process puede manejar eso:

(start-process NAME BUFFER PROGRAM &rest PROGRAM-ARGS) 

Start a program in a subprocess. Return the process object for it. 
NAME is name for process. It is modified if necessary to make it unique. 
BUFFER is the buffer (or buffer name) to associate with the process. 

Process output (both standard output and standard error streams) goes 
at end of BUFFER, unless you specify an output stream or filter 
function to handle the output. BUFFER may also be nil, meaning that 
this process is not associated with any buffer. 

PROGRAM is the program file name. It is searched for in `exec-path' 
(which see). If nil, just associate a pty with the buffer. Remaining 
arguments are strings to give program as arguments. 

If you want to separate standard output from standard error, invoke 
the command through a shell and redirect one of them using the shell 
syntax. 

Si no desea asociar con bufer proceso abierto - pass nil como argumento BUFFER

+0

Gracias, Victor. Con su pista, he encontrado una función ligeramente diferente ('start-process-shell-command') porque' start-process' no toma los argumentos correctamente. –

+0

Entonces, ¿cómo obtener el final de BUFFER y mostrarlo? – zobi8225

2

Ver C-h k M-!

... Si COMMAND finaliza en ampersand, ejecútelo de forma asíncrona. La salida aparece en el búfer `Async Shell Command '. Ese búfer está en el modo shell . ...

OIA, M-! my_command --opt=foo arg1 arg2 & comenzará my_command y crear un buffer *Async Shell Command* con my_command correr en ella, pero Emacs le dará el control de nuevo a usted de inmediato.

+0

En mi caso, Emacs no debería esperar por ninguna respuesta. Simplemente abra un archivo y olvídese (en realidad, es para el modo orgánico y el tipo de hipervínculo personalizado que abriría el pdf en la página determinada). De todos modos, gracias por su atención, Ross. –

Cuestiones relacionadas