Ẩn * biên dịch * cửa sổ


20

Thật khó chịu khi thấy cửa sổ biên dịch xuất hiện khi nó thành công. Làm thế nào để loại bỏ nó tự động?

Tôi muốn nhìn thấy nó mặc dù nếu nó không thành công.

Câu trả lời:


11

Cách đây nhiều năm trên kênh IRC #emacs tôi đã nhận được đoạn mã này tôi đã sử dụng mãi mãi. Giá trị "2 giây" đặt lượng thời gian cửa sổ biên dịch thành công vẫn hiển thị.

; 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

Nhìn nhanh vào mã (trong thư viện compile.el), bạn sẽ có thể chỉ cần giết hoặc ẩn bộ đệm được hiển thị bằng cách sử dụng một hàm trên hook compilation-finish-functions. Để làm điều đó, sử dụng một cái gì đó như thế này:

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

Nếu bạn không muốn giết bộ đệm, thì hãy sử dụng cái gì đó như thế này:

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

Nói chung, bạn có thể tưởng tượng rằng đối với một cái gì đó như thế này có thể có một cái móc đã được cung cấp, vì vậy bạn có thể dễ dàng đính kèm mã tại một vị trí quan trọng như vậy trong quá trình xử lý. Một chút duyệt mã hoặc sử dụng M-x aproposthường sẽ nhanh chóng cho bạn biết. Tên của móc thường kết thúc bằng -hookhoặc -functions.


2

Chủ đề này cũng có liên quan, trong trường hợp một số người quan tâm:

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

Các khoản tín dụng cho tác giả ban đầu jpkotta . Đây là câu trả lời của anh ấy:

Tôi sử dụng sau đây để biên dịch. Nó giữ bộ đệm biên dịch nếu có cảnh báo hoặc lỗi và chôn nó nếu không (sau 1 giây).

(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
Xin vui lòng không gửi một câu trả lời chỉ bao gồm một liên kết . Bao gồm các phần thiết yếu của câu trả lời trong bài viết của bạn, để bài đăng của bạn trả lời câu hỏi. Cung cấp các liên kết như là một nguồn và để biết thêm thông tin. Để biết thêm thông tin, xin vui lòng đọc hướng dẫn của chúng tôi về viết câu trả lời .
Gilles 'SO- ngừng trở nên xấu xa'

Cập nhật câu trả lời của tôi.
Swarnendu Biswas


1

Tôi có đoạn trích này trong .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))))))
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.