Es molesto ver aparecer la ventana de compilación cuando tiene éxito. ¿Cómo eliminar eso automáticamente?
Sin embargo, quiero verlo si no tiene éxito.
fuente
Es molesto ver aparecer la ventana de compilación cuando tiene éxito. ¿Cómo eliminar eso automáticamente?
Sin embargo, quiero verlo si no tiene éxito.
Hace años en el canal #emacs IRC obtuve este código que he estado usando desde siempre. El valor "2 segundos" establece la cantidad de tiempo que la ventana de compilación exitosa permanece 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!")))))
Mirando rápidamente el código (en la biblioteca compile.el
), debería poder simplemente matar u ocultar el búfer mostrado usando una función en el gancho compilation-finish-functions
. Para hacer eso, usa algo como esto:
(add-hook 'compilation-finish-functions (lambda (buf strg) (kill-buffer buf))
Si no quieres matar el búfer, usa algo como esto:
(add-hook 'compilation-finish-functions
(lambda (buf strg)
(let ((win (get-buffer-window buf 'visible)))
(when win (delete-window win)))))
En general, puede imaginar que para algo como esto probablemente ya se haya proporcionado un gancho, por lo que puede adjuntar fácilmente el código en un lugar tan significativo en el procesamiento. Una pequeña exploración del código o el uso M-x apropos
generalmente le informarán rápidamente. Los nombres de los ganchos generalmente terminan en -hook
o -functions
.
Este hilo también es relevante, en caso de que alguien esté interesado:
/programming/11043004/emacs-compile-buffer-auto-close
El crédito va al autor original jpkotta . Aquí está su respuesta:
Yo uso lo siguiente para la compilación. Mantiene el búfer de compilación si hay advertencias o errores, y lo entierra de otro modo (después de 1 segundo).
(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)
Tengo este fragmento en mi
.emacs.d
:fuente