2011-08-01 16 views
5

Emacs obviamente puede manejar múltiples subprocesos asíncronos, de lo contrario un entorno de programación multilingüe como org-babel, por poner un ejemplo, no sería posible.¿Varios comandos de shell asíncronos en Emacs-Dired?

Sin embargo, cuando estoy en Dired y comienzo a un comando shell asíncrona para ver un archivo PDF (& evince) y, a continuación, tratar de hacer lo mismo en un segundo archivo PDF, me sale el siguiente mensaje:

"Se está ejecutando un comando, ¿matarlo? ¿Sí o no?"

¿Hay alguna manera de ejecutar varios comandos de shell asíncronos en paralelo, cuando en Dired?

Respuesta

2

No creo que sea posible con dired-do-async-shell-command, pero si solo quieres abrir un archivo es cierta aplicación externa que sugiero usar OpenWith, que permite que se ejecute cualquier cantidad de procesos externos.

+0

OpenWith funciona como un encanto - gracias. – Thorsten

11

Cuando usa dired-do-async-shell-command Emacs crea un buffer *Async Shell Command*. Si quieres otro comando asíncrono necesita cambiar el nombre de este tampón, por ejemplo usando M-x rename-uniquely

usted podría tratar de cambiar el comportamiento de dired-do-async-shell-command aconsejando que:

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

nota que realmente el consejo del shell-command Comando Emacs porque es llamado por dired.

+0

Esta es otra alternativa válida, lástima que uno solo puede aceptar una respuesta, gracias también. – Thorsten

0

acabo de configuración de los siguientes elementos que borra la definición actual de cáscara de mando ejecutar dired-pasar un nombre de almacenamiento intermedio dedicada a shell-command:

(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) 
Cuestiones relacionadas