Досадно видеть, что окно компиляции появляется, когда оно успешно. Как удалить это автоматически?
Я хочу видеть это, хотя, если это не успешно.
источник
Досадно видеть, что окно компиляции появляется, когда оно успешно. Как удалить это автоматически?
Я хочу видеть это, хотя, если это не успешно.
Несколько лет назад на IRC-канале #emacs я получил этот фрагмент кода, который использовал всегда. Значение «2 сек» устанавливает время, в течение которого окно успешной компиляции остается видимым.
; 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!")))))
Глядя быстро на код (в библиотеке compile.el
), вы сможете просто убить или скрыть отображаемый буфер, используя функцию на крючке compilation-finish-functions
. Для этого используйте что-то вроде этого:
(add-hook 'compilation-finish-functions (lambda (buf strg) (kill-buffer buf))
Если вы не хотите уничтожать буфер, используйте что-то вроде этого:
(add-hook 'compilation-finish-functions
(lambda (buf strg)
(let ((win (get-buffer-window buf 'visible)))
(when win (delete-window win)))))
В общем, вы можете себе представить, что для чего-то подобного, вероятно, уже имеется зацепка, поэтому вы можете легко прикрепить код на столь значимое место в процессе обработки. Небольшой просмотр кода или использование M-x apropos
обычно быстро сообщит вам. Имена крючков обычно заканчиваются на -hook
или -functions
.
Эта тема также актуальна, если кто-то заинтересован:
/programming/11043004/emacs-compile-buffer-auto-close
Авторство относится к первоначальному автору jpkotta . Вот его ответ:
Я использую следующее для компиляции. Он сохраняет буфер компиляции, если есть предупреждения или ошибки, и скрывает его в противном случае (через 1 секунду).
(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)
У меня есть этот фрагмент в моем
.emacs.d
:источник