Nasconde la finestra * compilation *


20

È fastidioso vedere apparire la finestra della compilation quando ha successo. Come rimuoverlo automaticamente?

Voglio vederlo però se non ha successo.

Risposte:


11

anni fa sul canale IRC #emacs ho ricevuto questo codice che uso da sempre. Il valore "2 sec" imposta la quantità di tempo in cui la finestra della compilation eseguita correttamente rimane visibile.

; 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

Guardando rapidamente il codice (nella libreria compile.el), dovresti essere in grado di uccidere o nascondere il buffer visualizzato usando una funzione agganciata compilation-finish-functions. Per farlo, usa qualcosa del genere:

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

Se non vuoi uccidere il buffer, usa qualcosa del genere:

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

In generale, puoi immaginare che per qualcosa del genere sia probabilmente già presente un hook, quindi puoi facilmente collegare il codice in un punto così significativo dell'elaborazione. Un po 'di navigazione del codice o l'utilizzo M-x aproposin genere ti farà sapere rapidamente. I nomi degli hook in genere terminano con -hooko -functions.


2

Questo thread è anche rilevante, nel caso qualcuno fosse interessato:

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

Il merito va all'autore originale jpkotta . Ecco la sua risposta:

Uso quanto segue per la compilazione. Mantiene il buffer di compilazione se ci sono avvisi o errori e lo seppellisce altrimenti (dopo 1 secondo).

(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
Si prega di non pubblicare una risposta che consiste solo in un link . Includi le parti essenziali della risposta nel tuo post, in modo che il tuo post risponda alla domanda. Fornire il collegamento come fonte e per ulteriori informazioni. Per ulteriori informazioni, leggi le nostre linee guida sulla scrittura di risposte .
Gilles 'SO- smetti di essere malvagio' il

Aggiornato la mia risposta.
Swarnendu Biswas,


1

Ho questo frammento nel mio .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))))))
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.