Le tampon de processus du shell asynchrone encombre toujours la disposition des fenêtres

8

Je lance fréquemment des programmes externes à partir d'emacs en utilisant M-!, tels que Firefox ou Evince, etc. Chaque fois que je le fais, un tampon apparaît plein de résultats pour le processus, ce qui détruit tout ce que j'ai en termes d'agencement de fenêtres.

Existe-t-il un moyen d'enterrer de tels tampons par défaut, de sorte que je n'ai pas à les voir à moins que je décide d'aller les chercher?

Steven Arntson
la source

Réponses:

11

Étant donné que la commande s'exécute de manière asynchrone, je suppose que vous voulez dire la commande async-shell-commandliée à M-&. Vous pouvez suivre les conseils dans la documentation de async-shell-command(vous pouvez le lire en faisant C-hfasync-shell-commandRET) personnaliser display-buffer-alistcomme suit

(add-to-list 'display-buffer-alist (cons "\\*Async Shell Command\\*.*" (cons #'display-buffer-no-window nil)))

Maintenant, le tampon utilisé par la commande pour afficher la sortie ne sera plus affiché.

Iqbal Ansari
la source
Cela fonctionne à merveille, merci. De plus, je ne savais rien M-&non plus. J'utilisais M-!puis j'ajoutais manuellement le &à la commande que j'ai passée au shell.
Steven Arntson
4

Emacs dispose d'une fonction à usage général pour empêcher tout changement de configuration de fenêtre non intentionnel (ou même intentionnel) de causer des problèmes.

Ajoutez (winner-mode 1)à votre fichier init. Ensuite, lorsque quelque chose perturbe vos fenêtres, utilisez C-c<left>( winner-undo) pour les restaurer. Vous pouvez l'utiliser à plusieurs reprises pour annuler les modifications de configuration de plusieurs fenêtres. C-c<right>( winner-redo) vous ramène à la configuration la plus récente.

phils
la source
Oui, je suis un utilisateur très enthousiaste du mode gagnant!
Steven Arntson
4

Voici ma configuration. Cela devrait très bien fonctionner si vous êtes sous Linux.

(require 'dired-aux)

(defvar dired-filelist-cmd
  '(("vlc" "-L")))

(defun dired-start-process (cmd &optional file-list)
  (interactive
   (let ((files (dired-get-marked-files t current-prefix-arg)))
     (list
      (dired-read-shell-command "& on %s: " current-prefix-arg files)
      files)))
  (start-process
   cmd nil shell-file-name
   shell-command-switch
   (format "nohup 1>/dev/null 2>/dev/null %s \"%s\""
           (if (> (length file-list) 1)
               (format "%s %s" cmd
                       (cadr (assoc cmd dired-filelist-cmd)))
             cmd)
           (mapconcat #'expand-file-name file-list "\" \""))))

(define-key dired-mode-map "r" 'dired-start-process)

Non seulement il masquera ces tampons embêtants lorsque vous ouvrirez par exemple un fichier pdf dired, mais Evince persistera même si vous fermez Emacs. Il y a aussi une petite personnalisation pour mettre en file d'attente des fichiers vidéo marqués pour une liste de lecture vlc.

abo-abo
la source
2

Vous pouvez supprimer cette fenêtre pour une seule commande au lieu d'utiliser globalement let

(let ((display-buffer-alist
       (cons (cons "\\*Async Shell Command\\*.*"
                   (cons #'display-buffer-no-window nil))
             display-buffer-alist))) ;; suppress async shell command window
  (async-shell-command command))
killdash9
la source
Je suggère (cons NEWTHING display-buffer-alist)plutôt de (list NEWTHING)ne pas inhiber complètement l'aliste d'origine.
phils
Bonne suggestion, mise en œuvre.
killdash9