Il est ennuyeux de voir apparaître la fenêtre de compilation lorsqu'elle réussit. Comment supprimer cela automatiquement?
Je veux le voir si ça ne réussit pas.
la source
Il est ennuyeux de voir apparaître la fenêtre de compilation lorsqu'elle réussit. Comment supprimer cela automatiquement?
Je veux le voir si ça ne réussit pas.
il y a des années sur le canal IRC #emacs, j'ai obtenu ce morceau de code que j'utilise depuis toujours. La valeur "2 sec" définit la durée pendant laquelle la fenêtre de compilation réussie reste visible.
; 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!")))))
En regardant rapidement le code (dans la bibliothèque compile.el
), vous devriez pouvoir simplement tuer ou masquer le tampon affiché en utilisant une fonction raccrochée compilation-finish-functions
. Pour ce faire, utilisez quelque chose comme ceci:
(add-hook 'compilation-finish-functions (lambda (buf strg) (kill-buffer buf))
Si vous ne voulez pas tuer le tampon, utilisez quelque chose comme ceci:
(add-hook 'compilation-finish-functions
(lambda (buf strg)
(let ((win (get-buffer-window buf 'visible)))
(when win (delete-window win)))))
En général, vous pouvez imaginer que pour quelque chose comme ça, il y a probablement un crochet déjà fourni, vous pouvez donc facilement attacher du code à un endroit aussi important dans le traitement. Une petite navigation dans le code ou une utilisation vous en M-x apropos
informe généralement rapidement. Les noms des crochets se terminent généralement par -hook
ou -functions
.
Ce fil est également pertinent, au cas où quelqu'un serait intéressé:
/programming/11043004/emacs-compile-buffer-auto-close
Le mérite revient à l'auteur original jpkotta . Voici sa réponse:
J'utilise ce qui suit pour la compilation. Il conserve le tampon de compilation s'il y a des avertissements ou des erreurs et l'enterre sinon (après 1 seconde).
(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)
J'ai cet extrait dans mon
.emacs.d
:la source