Hacer `anterior-buffer` y` siguiente-buffer` para ignorar algunos buffers

10

en Helm ignoro que aparezcan algunos buffers cuando los uso C-x b, estoy buscando una manera de hacer los comandos previous-buffery next-buffercomportarme de la misma manera ignorando algunos buffers.

Shackra
fuente

Respuestas:

8

Aquí hay dos formas:

  1. Si observa la definición de función switch-to-next-buffer(en la biblioteca window.el) verá que filtra los búferes por el predicado (si lo hay) que es el valor del parámetro de marco buffer-predicate. Esa función es utilizada por next-buffer.

    Puede establecer ese parámetro de marco en un predicado que filtre de la manera que desee.

  2. Simplemente puede aconsejar a la función switch-to-next-bufferque filtre de la manera que desee. Básicamente, reemplazará su definición por casi la misma definición, pero filtrará adicionalmente de la manera que desee.

Del mismo modo para switch-to-previous-buffer.

Dibujó
fuente
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)
phils
fuente