2011-08-01 6 views
5

Emacs peut évidemment gérer plusieurs sous-processus asynchrones, sinon un environnement de programmation multilingue comme org-babel, pour donner un exemple, ne serait pas possible.Plusieurs commandes shell asynchrones dans Emacs-Dired?

Cependant, quand je suis en Dired et démarrer une commande shell asynchrone pour afficher un fichier pdf (& Evince), et ensuite essayer de faire la même chose sur un deuxième fichier pdf, je reçois le message suivant:

"Une commande est en cours - tuez-la? Oui ou Non?"

Existe-t-il un moyen d'exécuter plusieurs commandes shell asynchrones en parallèle, lorsqu'elles sont dans Dired?

Répondre

2

Je ne pense pas que ce soit possible avec dired-do-async-shell-command, mais si vous voulez juste ouvrir un fichier, il y a certaines applications externes que je vous suggère d'utiliser OpenWith, ce qui permet d'exécuter un certain nombre de processus externes.

+0

OpenWith fonctionne comme un charme - merci. – Thorsten

11

Lorsque vous utilisez dired-do-async-shell-command Emacs créer un tampon *Async Shell Command*. Si vous voulez une autre commande async vous devez renommer ce tampon, par exemple en utilisant M-x rename-uniquely

vous pouvez essayer de changer le comportement de dired-do-async-shell-command en conseillant:

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

note que je conseille vraiment la commande shell Commande Emacs car elle est appelée par dired.

+0

Ceci est une autre alternative valable, dommage que l'on ne peut accepter qu'une seule réponse - merci aussi. – Thorsten

0

Je viens de configurer les éléments suivants qui efface la définition actuelle de-commande shell dired terme pour passer un nom de tampon dédié à commande shell:

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