Сховати вікно * компіляції *


20

Прикро бачити, що вікно компіляції з’являється, коли воно успішно. Як видалити це автоматично?

Я хочу бачити це, хоча це не буде успішним.

Відповіді:


11

років тому на каналі #emacs IRC я ​​отримав цей біт коду, який я використовував назавжди. Значення "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!")))))

14

Швидко оглянувши код (у бібліотеці 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.


2

Ця тема також є актуальною, якщо хтось зацікавлений:

/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)

1
Будь ласка , не публікуйте відповідь, яка складається лише з посилання . Включіть до своєї публікації важливі частини відповіді, щоб ваша публікація відповідала на питання. Надайте посилання як джерело та додаткову інформацію. Для отримання додаткової інформації, будь ласка, прочитайте наші вказівки щодо написання відповідей .
Жил 'ТАК - перестань бути злим'

Оновлено мою відповідь.
Swarnendu Biswas


1

Цей фрагмент у мене є .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))))))
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.