ทำให้ `ก่อนหน้าบัฟเฟอร์ 'และ' ถัดไปบัฟเฟอร์ 'เพื่อละเว้นบัฟเฟอร์บางอย่าง


10

ใน Helm ฉันไม่สนใจบัฟเฟอร์บางอย่างจากการแสดงเมื่อใช้C-x bฉันกำลังมองหาวิธีที่จะทำให้คำสั่งprevious-bufferและnext-bufferทำงานแบบเดียวกันโดยไม่สนใจบัฟเฟอร์บางตัว

คำตอบ:


8

นี่คือสองวิธี:

  1. ถ้าคุณดูที่ความหมายของฟังก์ชั่นswitch-to-next-buffer(ในห้องสมุดwindow.el) คุณจะเห็นว่ามันกรองบัฟเฟอร์โดยสรุป (ถ้ามี) buffer-predicateที่มีค่าของพารามิเตอร์กรอบ next-bufferฟังก์ชั่นที่ใช้งานโดย

    คุณสามารถตั้งค่าพารามิเตอร์เฟรมให้เป็นเพรดิเคตที่กรองตามที่คุณต้องการ

  2. คุณสามารถแนะนำฟังก์ชั่นswitch-to-next-bufferเพื่อกรองตามที่คุณต้องการ คุณจะเข้ามาแทนที่นิยามของมันเกือบจะเป็นคำจำกัดความเดียวกัน แต่กรองตามที่คุณต้องการ

switch-to-previous-bufferในทำนองเดียวกันสำหรับ


7
(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)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.