To denerwujące, że okno kompilacji pojawia się, gdy się powiedzie. Jak usunąć to automatycznie?
Chcę to zobaczyć, jeśli się nie powiedzie.
źródło
To denerwujące, że okno kompilacji pojawia się, gdy się powiedzie. Jak usunąć to automatycznie?
Chcę to zobaczyć, jeśli się nie powiedzie.
lata temu na kanale IRC #emacs dostałem ten fragment kodu, którego używam od zawsze. Wartość „2 s” określa czas, przez który okno udanej kompilacji pozostaje widoczne.
; 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!")))))
Przyglądając się szybko kodowi (w bibliotece compile.el
), powinieneś być w stanie po prostu zabić lub ukryć wyświetlany bufor za pomocą funkcji przechwytującej compilation-finish-functions
. Aby to zrobić, użyj czegoś takiego:
(add-hook 'compilation-finish-functions (lambda (buf strg) (kill-buffer buf))
Jeśli nie chcesz zabić bufora, użyj czegoś takiego:
(add-hook 'compilation-finish-functions
(lambda (buf strg)
(let ((win (get-buffer-window buf 'visible)))
(when win (delete-window win)))))
Zasadniczo można sobie wyobrazić, że w przypadku czegoś takiego zapewniono już hak, dzięki czemu można łatwo dołączyć kod w tak znaczącym miejscu w przetwarzaniu. Trochę przeglądania kodu lub używania M-x apropos
zazwyczaj szybko da ci znać. Nazwy haków zwykle kończą się na -hook
lub -functions
.
Ten wątek jest również istotny, na wypadek, gdyby ktoś był zainteresowany:
/programming/11043004/emacs-compile-buffer-auto-close
Podziękowania należą się oryginalnemu autorowi jpkotta . Oto jego odpowiedź:
Używam następujących do kompilacji. Przechowuje bufor kompilacji, jeśli występują ostrzeżenia lub błędy, i zakopuje go w inny sposób (po 1 sekundzie).
(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)
Mam ten fragment w moim
.emacs.d
:źródło