Câu trả lời:
Đây là hai cách:
Nếu bạn xem định nghĩa của hàm switch-to-next-buffer
(trong thư viện window.el
), bạn sẽ thấy rằng nó lọc các bộ đệm theo vị từ (nếu có) là giá trị của tham số khung buffer-predicate
. Chức năng đó được sử dụng bởi next-buffer
.
Bạn có thể đặt tham số khung đó thành một vị từ lọc theo cách bạn muốn.
Bạn chỉ có thể tư vấn chức năng switch-to-next-buffer
để lọc theo cách bạn muốn. Về cơ bản, bạn sẽ thay thế định nghĩa của nó bằng định nghĩa gần như giống nhau, nhưng lọc thêm theo cách bạn muốn.
Tương tự cho 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)