Sembunyikan * jendela kompilasi *

20

Sangat menjengkelkan melihat jendela kompilasi muncul ketika berhasil. Bagaimana cara menghapusnya secara otomatis?

Saya ingin melihatnya jika tidak berhasil.

Husain
sumber

Jawaban:

11

tahun lalu di saluran IRC #emacs saya mendapatkan sedikit kode yang telah saya gunakan selamanya. Nilai "2 detik" menetapkan jumlah waktu jendela kompilasi yang berhasil tetap terlihat.

; 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!")))))
Shapr
sumber
14

Melihat cepat pada kode (di pustaka compile.el), Anda seharusnya bisa membunuh atau menyembunyikan buffer yang ditampilkan dengan menggunakan fungsi pada hook compilation-finish-functions. Untuk melakukannya, gunakan sesuatu seperti ini:

 (add-hook 'compilation-finish-functions (lambda (buf strg) (kill-buffer buf))

Jika Anda tidak ingin membunuh buffer, gunakan sesuatu seperti ini:

 (add-hook 'compilation-finish-functions
           (lambda (buf strg)
             (let ((win  (get-buffer-window buf 'visible)))
               (when win (delete-window win)))))

Secara umum, Anda dapat membayangkan bahwa untuk sesuatu seperti ini mungkin ada pengait yang sudah disediakan, sehingga Anda dapat dengan mudah melampirkan kode di tempat yang signifikan dalam pemrosesan. Penjelajahan kecil kode atau penggunaan M-x aproposbiasanya akan memberi tahu Anda dengan cepat. Nama kait biasanya diakhiri dengan -hookatau -functions.

Drew
sumber
2

Utas ini juga relevan, jika seseorang tertarik:

/programming/11043004/emacs-compile-buffer-auto-close

Penghargaan jatuh ke jpkotta penulis asli . Ini jawabannya:

Saya menggunakan yang berikut ini untuk kompilasi. Itu membuat buffer kompilasi jika ada peringatan atau kesalahan, dan menguburnya jika tidak (setelah 1 detik).

(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)
Swarnendu Biswas
sumber
1
Tolong jangan memposting jawaban yang hanya terdiri dari tautan . Masukkan bagian-bagian penting dari jawaban dalam posting Anda, sehingga posting Anda menjawab pertanyaan. Berikan tautan sebagai sumber dan untuk informasi lebih lanjut. Untuk informasi lebih lanjut, silakan baca panduan kami tentang menulis jawaban .
Gilles 'SO- stop being evil'
Memperbarui jawaban saya.
Swarnendu Biswas
Perhatikan bahwa tidak apa-apa mengutip jawaban orang lain dari Stack Exchange , tetapi Anda harus memberikan atribusi yang tepat , termasuk nama penulis.
Gilles 'SO- stop being evil'
1

Saya memiliki cuplikan ini di .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))))))
politza
sumber