जवाबों:
यहाँ दो तरीके हैं:
यदि आप फ़ंक्शन switch-to-next-buffer
(लाइब्रेरी में window.el
) की परिभाषा पर एक नज़र डालते हैं, तो आप देखेंगे कि यह बफ़र्स को विधेय (यदि कोई हो) द्वारा फ़िल्टर करता है जो फ्रेम पैरामीटर का मान है buffer-predicate
। उस फ़ंक्शन द्वारा उपयोग किया जाता है next-buffer
।
आप उस फ़्रेम पैरामीटर को एक विधेय पर सेट कर सकते हैं जो आपके इच्छित तरीके को फ़िल्टर करता है।
आप switch-to-next-buffer
जिस तरह से चाहते हैं उसे फिल्टर करने के लिए बस फंक्शन को सलाह दे सकते हैं। आप मूल रूप से इसकी परिभाषा को लगभग उसी परिभाषा से बदल देंगे, लेकिन इसके अतिरिक्त जिस तरह से आप चाहते हैं, उसे फ़िल्टर करें।
इसी तरह के लिए switch-to-previous-buffer
।
(defvar my-skippable-buffers '("*Messages*" "*scratch*" "*Help*")
"Buffer names ignored by `my-next-buffer' and `my-previous-buffer'.")
(defun my-change-buffer (change-buffer)
"Call CHANGE-BUFFER until current buffer is not in `my-skippable-buffers'."
(let ((initial (current-buffer)))
(funcall change-buffer)
(let ((first-change (current-buffer)))
(catch 'loop
(while (member (buffer-name) my-skippable-buffers)
(funcall change-buffer)
(when (eq (current-buffer) first-change)
(switch-to-buffer initial)
(throw 'loop t)))))))
(defun my-next-buffer ()
"Variant of `next-buffer' that skips `my-skippable-buffers'."
(interactive)
(my-change-buffer 'next-buffer))
(defun my-previous-buffer ()
"Variant of `previous-buffer' that skips `my-skippable-buffers'."
(interactive)
(my-change-buffer 'previous-buffer))
(global-set-key [remap next-buffer] 'my-next-buffer)
(global-set-key [remap previous-buffer] 'my-previous-buffer)