ซ่อนหน้าต่างการรวบรวม *


20

มันน่ารำคาญที่เห็นหน้าต่างการคอมไพล์ปรากฏขึ้นเมื่อมันสำเร็จ วิธีลบโดยอัตโนมัติ

ฉันต้องการเห็นมันแม้ว่าจะไม่ประสบความสำเร็จ

คำตอบ:


11

หลายปีที่ผ่านมาใน #emacs IRC channel ฉันได้รับรหัสนี้มาตลอด ค่า "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
กรุณาอย่าโพสต์คำตอบที่ประกอบด้วยการเชื่อมโยงเพียงหนึ่ง รวมส่วนสำคัญของคำตอบในโพสต์ของคุณเพื่อให้โพสต์ตอบคำถาม ระบุลิงก์เป็นแหล่งข้อมูลและสำหรับข้อมูลเพิ่มเติม สำหรับข้อมูลเพิ่มเติมโปรดอ่านคำแนะนำเกี่ยวกับการเขียนคำตอบ
Gilles 'หยุดชั่วร้าย'

อัปเดตคำตอบของฉัน
Swarnendu Biswas

โปรดทราบว่าคุณสามารถอ้างคำตอบของคนอื่นจากกองแลกเปลี่ยนแต่คุณต้องระบุที่มาที่เหมาะสมรวมถึงชื่อของผู้เขียนด้วย
Gilles 'หยุดชั่วร้าย'

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.