2011-09-04 40 views
5

Làm cách nào để Emacs chạy chương trình và không đợi kết quả đầu ra/trả lời? Tôi cố gắng để mở một pdf trong một chương trình bên ngoài:Chạy chương trình từ Emacs và không đợi đầu ra

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

Nhưng nó sẽ không mở các file khác cho đến khi SumatraPDF quá trình hiện được đóng lại. Tôi mệt mỏi async-shell-command, nhưng nó sẽ mở ra một bộ đệm mới với đầu ra Async mà tôi không cần.

Cách thích hợp để tệp trong các chương trình bên ngoài là gì?

Trả lời

9

start-process chức năng có thể xử lý rằng:

(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. 

Nếu bạn không muốn liên kết bufer với quá trình mở - vượt qua nil như là đối số ĐỆM

+0

Cảm ơn bạn, Victor. Với gợi ý của bạn, tôi đã tìm thấy một hàm hơi khác ('start-process-shell-command') bởi vì' start-process' không lấy đối số đúng cách. –

+0

Vì vậy, làm thế nào để có được kết thúc của BUFFER và hiển thị nó? – zobi8225

2

Xem C-h k M-!

... Nếu COMMAND kết thúc bằng dấu và, hãy thực thi nó không đồng bộ. Đầu ra xuất hiện trong bộ đệm 'Lệnh Async Shell'. Bộ đệm đó nằm trong chế độ shell . ...

IOW, M-! my_command --opt=foo arg1 arg2 & sẽ bắt đầu my_command và tạo một bộ đệm *Async Shell Command* với my_command chạy trong nó, nhưng emacs sẽ cho kiểm soát lại cho bạn ngay lập tức.

+0

Trong trường hợp của tôi, Emacs không nên chờ đợi bất kỳ phản hồi nào. Chỉ cần mở một tập tin và quên nó đi (thực ra, nó dành cho kiểu siêu kết nối và chế độ org và tùy chỉnh sẽ mở pdf ở một trang nào đó). Dù sao, cảm ơn sự chú ý của bạn, Ross. –

Các vấn đề liên quan