উত্তর:
বছর আগে #emacs আইআরসি চ্যানেলে আমি এই বিট কোডটি পেয়েছি আমি চিরকাল ব্যবহার করছি। "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!")))))
কোডটি (লাইব্রেরিতে 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
।
এই থ্রেডটিও প্রাসঙ্গিক, যদি কেউ আগ্রহী হয়:
/programming/11043004/emacs-compile-buffer-auto-close
কৃতিত্বটি মূল লেখক জপকোটার হাতে । এখানে তার উত্তর:
সংকলনের জন্য আমি নিম্নলিখিতটি ব্যবহার করি। সতর্কতা বা ত্রুটি থাকলে এটি সংকলন বাফার রাখে এবং অন্যথায় (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)
আমার এই স্নিপেটটি আমার .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))))))