* 컴파일 * 창 숨기기


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.elhook 함수를 사용하여 표시된 버퍼를 죽이거나 숨길 수 있습니다 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
제발 그냥 링크로 구성되어 답변을 게시하지 않습니다 . 게시물에 질문에 대한 답변이 포함되도록 게시물에 답변의 필수 부분을 포함 시키십시오. 링크를 소스로 제공하고 추가 정보를 제공하십시오. 자세한 내용은 답변 작성 지침을 참조하십시오 .
Gilles 'SO- 악마 그만해'

내 답변을 업데이트했습니다.
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))))))
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.