ใน Helm ฉันไม่สนใจบัฟเฟอร์บางอย่างจากการแสดงเมื่อใช้C-x b
ฉันกำลังมองหาวิธีที่จะทำให้คำสั่งprevious-buffer
และnext-buffer
ทำงานแบบเดียวกันโดยไม่สนใจบัฟเฟอร์บางตัว
ใน Helm ฉันไม่สนใจบัฟเฟอร์บางอย่างจากการแสดงเมื่อใช้C-x b
ฉันกำลังมองหาวิธีที่จะทำให้คำสั่งprevious-buffer
และnext-buffer
ทำงานแบบเดียวกันโดยไม่สนใจบัฟเฟอร์บางตัว
คำตอบ:
นี่คือสองวิธี:
ถ้าคุณดูที่ความหมายของฟังก์ชั่น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)