2011-08-01 28 views
5

Emacs rõ ràng có thể xử lý nhiều tiến trình phụ không đồng bộ, nếu không, một môi trường lập trình đa ngôn ngữ như org-babel, để đưa ra một ví dụ, sẽ không thể thực hiện được.Nhiều lệnh shell không đồng bộ trong Emacs-Dired?

Tuy nhiên, khi tôi đang ở Dired và bắt đầu một lệnh shell không đồng bộ để xem một file pdf (& tỏ ra), và sau đó cố gắng làm như vậy trên một tập tin pdf thứ hai, tôi nhận được thông báo sau:

"Một lệnh đang chạy - giết nó? Có hoặc Không?"

Có cách nào để chạy nhiều lệnh shell không đồng bộ song song, khi ở chế độ Mệt mỏi?

Trả lời

2

Tôi không nghĩ rằng nó có thể với dired-do-async-shell-command, nhưng nếu bạn chỉ muốn mở một số tệp là ứng dụng bên ngoài nhất định, tôi khuyên bạn nên sử dụng OpenWith, cho phép bất kỳ số lượng quy trình bên ngoài nào chạy.

+0

OpenWith hoạt động giống như một charme - nhờ. – Thorsten

11

Khi bạn sử dụng dired-do-async-shell-command Emacs tạo bộ đệm *Async Shell Command*. Nếu bạn muốn một lệnh async bạn cần phải đổi tên đệm này, ví dụ sử dụng M-x rename-uniquely

bạn có thể cố gắng thay đổi cách ứng xử của dired-do-async-shell-command bởi tư vấn cho nó:

(defadvice shell-command (after shell-in-new-buffer (command &optional output-buffer error-buffer)) 
    (when (get-buffer "*Async Shell Command*") 
     (with-current-buffer "*Async Shell Command*" 
     (rename-uniquely)))) 
(ad-activate 'shell-command) 

lưu ý rằng tôi thực sự khuyên các vỏ lệnh Emacs lệnh bởi vì nó được gọi bằng dired.

+0

Đây là một lựa chọn hợp lệ khác, quá xấu chỉ có thể chấp nhận một câu trả lời - cảm ơn bạn. – Thorsten

0

tôi đã thiết lập chỉ sau đó xóa các định nghĩa hiện tại của dired-run-shell-command để vượt qua một tên đệm dành riêng cho vỏ lệnh:

(defun dired-run-shell-command (command) 
     (let ((handler 
      (find-file-name-handler (directory-file-name default-directory) 
         'shell-command))) 
    (if handler (apply handler 'shell-command (list command)) 
     (shell-command command 
       (generate-new-buffer-name 
       (concat "*Shell Command Output: '" command "'*"))))) 
     ;; Return nil for sake of nconc in dired-bunch-files. 
     nil) 
Các vấn đề liên quan