Der asynchrone Shell-Prozesspuffer blockiert immer die Fensteranordnung

8

Ich starte häufig externe Programme von Emacs mit M-!Firefox oder Evince usw. Immer wenn ich dies tue, wird ein Puffer mit Ergebnissen für den Prozess angezeigt, der alles blockiert, was ich sonst noch in Bezug auf die Windows-Anordnung vorhabe.

Gibt es eine Möglichkeit, solche Puffer standardmäßig zu begraben, damit ich sie nicht sehen muss, es sei denn, ich entscheide mich, sie zu suchen?

Steven Arntson
quelle

Antworten:

11

Da erwähnt wird, dass der Befehl asynchron ausgeführt wird, gehe ich davon aus, dass Sie den Befehl meinen, an den async-shell-commandgebunden ist M-&. Sie können die Beratung in Dokumentation folgen async-shell-command(Sie es , indem Sie lesen können C-hfasync-shell-commandRET) customize display-buffer-alistwie folgt

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

Jetzt wird der vom Befehl zum Anzeigen der Ausgabe verwendete Puffer nie mehr angezeigt.

Iqbal Ansari
quelle
Das funktioniert wunderbar, danke. Außerdem wusste ich auch nichts davon M-&. Ich habe den Befehl, den ich an die Shell übergeben habe, verwendet M-!und dann manuell hinzugefügt &.
Steven Arntson
4

Emacs verfügt über eine Allzweckfunktion, um zu verhindern, dass unbeabsichtigte (oder tatsächlich beabsichtigte) Änderungen der Fensterkonfiguration Probleme verursachen.

Fügen Sie (winner-mode 1)Ihrer Init-Datei hinzu. Wenn dann etwas Ihre Fenster durcheinander bringt, verwenden Sie C-c<left>( winner-undo), um sie wiederherzustellen. Sie können es wiederholt verwenden, um mehrere Fensterkonfigurationsänderungen rückgängig zu machen. C-c<right>( winner-redo) bringt Sie zur neuesten Konfiguration zurück.

Phils
quelle
Ja, ich bin ein sehr begeisterter Benutzer des Winner-Modus!
Steven Arntson
4

Hier ist meine Konfiguration. Es sollte gut funktionieren, wenn Sie unter Linux sind.

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

Diese lästigen Puffer werden nicht nur ausgeblendet, wenn Sie beispielsweise eine PDF-Datei öffnen dired, Evince bleibt auch dann bestehen , wenn Sie Emacs schließen. Es gibt auch eine kleine Anpassung für das Einreihen markierter Videodateien in eine VLC-Wiedergabeliste.

abo-abo
quelle
2

Sie können dieses Fenster für einen einzelnen Befehl unterdrücken, anstatt ihn global zu verwenden 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
quelle
Ich schlage (cons NEWTHING display-buffer-alist)stattdessen vor (list NEWTHING), den ursprünglichen Alist nicht vollständig zu hemmen.
Phils
Guter Vorschlag, umgesetzt.
killdash9