답변:
두 가지 방법이 있습니다.
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)