* Compilation * -Fenster ausblenden


20

Es ist ärgerlich zu sehen, dass das Zusammenstellungsfenster angezeigt wird, wenn es erfolgreich ist. Wie entferne ich das automatisch?

Ich möchte es sehen, wenn es nicht erfolgreich ist.

Antworten:


11

Vor Jahren habe ich auf dem IRC-Kanal #emacs diesen Code bekommen, den ich schon immer verwendet habe. Der Wert "2 sec" legt fest, wie lange das erfolgreiche Zusammenstellungsfenster sichtbar bleibt.

; from enberg on #emacs
(setq compilation-finish-function
  (lambda (buf str)
    (if (null (string-match ".*exited abnormally.*" str))
        ;;no errors, make the compilation window go away in a few seconds
        (progn
          (run-at-time
           "2 sec" nil 'delete-windows-on
           (get-buffer-create "*compilation*"))
          (message "No Compilation Errors!")))))

14

Wenn Sie sich den Code (in der Bibliothek compile.el) schnell ansehen , sollten Sie in der Lage sein, den angezeigten Puffer mit einer Funktion aufgelegt zu löschen oder zu verbergen compilation-finish-functions. Verwenden Sie dazu etwa Folgendes:

 (add-hook 'compilation-finish-functions (lambda (buf strg) (kill-buffer buf))

Wenn Sie den Puffer nicht löschen möchten, verwenden Sie Folgendes:

 (add-hook 'compilation-finish-functions
           (lambda (buf strg)
             (let ((win  (get-buffer-window buf 'visible)))
               (when win (delete-window win)))))

Im Allgemeinen können Sie sich vorstellen, dass für so etwas wahrscheinlich bereits ein Haken vorhanden ist, sodass Sie Code problemlos an einer so wichtigen Stelle in der Verarbeitung anhängen können. Wenn Sie den Code ein wenig durchstöbern oder verwenden, M-x aproposwerden Sie in der Regel schnell informiert. Die Namen von Hooks enden normalerweise mit -hookoder -functions.


2

Dieser Thread ist auch relevant, falls jemand interessiert ist:

/programming/11043004/emacs-compile-buffer-auto-close

Der Kredit geht an den Originalautor jpkotta . Hier ist seine Antwort:

Ich benutze die folgenden für die Kompilierung. Es behält den Kompilierungspuffer bei, wenn Warnungen oder Fehler vorliegen, und vergräbt ihn anderweitig (nach 1 Sekunde).

(defun bury-compile-buffer-if-successful (buffer string)
  "Bury a compilation buffer if succeeded without warnings "
  (if (and
       (string-match "compilation" (buffer-name buffer))
       (string-match "finished" string)
       (not
        (with-current-buffer buffer
          (search-forward "warning" nil t))))
      (run-with-timer 1 nil
                      (lambda (buf)
                        (bury-buffer buf)
                        (switch-to-prev-buffer (get-buffer-window buf) 'kill))
                      buffer)))
(add-hook 'compilation-finish-functions 'bury-compile-buffer-if-successful)

1
Bitte posten Sie keine Antwort, die nur aus einem Link besteht . Fügen Sie die wesentlichen Teile der Antwort in Ihren Beitrag ein, damit Ihr Beitrag die Frage beantwortet. Geben Sie den Link als Quelle und für weitere Informationen an. Weitere Informationen finden Sie in unseren Richtlinien zum Schreiben von Antworten .
Gilles 'SO- hör auf böse zu sein'

Aktualisiert meine Antwort.
Swarnendu Biswas


1

Ich habe diesen Ausschnitt in meinem .emacs.d:

    (defcustom compilation-auto-quit-window-delay 1
      "Time in seconds before auto closing the window."
      :group 'compilation
      :type 'number)  

    (defun compilation-auto-quit-window-finish-function (buffer status)
      "Quit the *compilation* window if it went well."
      (let ((window (get-buffer-window buffer)))
        (when (and (equal status "finished\n")
                   (compilation-went-super-p))
          (run-with-timer
              (or compilation-auto-quit-window-delay 0) nil
            (lambda nil
              (when (and (window-live-p window)
                         (eq (window-buffer window)
                             buffer)
                         (not (eq (selected-window)
                                  window)))
                (save-selected-window
                  (quit-window nil window))))))))

    (define-minor-mode compilation-auto-quit-window
      "Automatically close the *compilation* window if it went well."
      :global t
      (cond (compilation-auto-quit-window
             (add-hook 'compilation-finish-functions
                       'compilation-auto-quit-window-finish-function))
            (t
             (remove-hook 'compilation-finish-functions
                          'compilation-auto-quit-window-finish-function))))

    (defun compilation-went-super-p (&optional buffer)
      "Return t, if no gotoable output appeared."
      (with-current-buffer (or buffer (current-buffer))
        (save-excursion
          (goto-char (point-min))
          (let (;; (compilation-skip-threshold 1)
                )
            (not (ignore-errors
                   (compilation-next-error 1)
                   t))))))
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.