tạo `trước-đệm` và` next-đệm` để bỏ qua một số bộ đệm


10

trong Helm tôi bỏ qua một số bộ đệm hiển thị khi sử dụng C-x b, tôi đang tìm cách để thực hiện các lệnh previous-buffernext-bufferhành xử tương tự bỏ qua một số bộ đệm.

Câu trả lời:


8

Đây là hai cách:

  1. 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.

  2. 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.


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)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.