faça `buffer anterior` e` próximo buffer 'para ignorar alguns buffers


10

no Helm, ignoro que alguns buffers sejam exibidos ao usar C-x b, estou procurando uma maneira de fazer os comandos previous-buffere next-bufferse comportar da mesma maneira ignorando alguns buffers.

Respostas:


8

Aqui estão duas maneiras:

  1. Se você der uma olhada na definição de função switch-to-next-buffer(na biblioteca window.el), verá que ela filtra os buffers pelo predicado (se houver) que é o valor do parâmetro frame buffer-predicate. Essa função é usada por next-buffer.

    Você pode definir esse parâmetro de quadro como um predicado que filtra da maneira que desejar.

  2. Você pode simplesmente aconselhar a função switch-to-next-buffera filtrar da maneira que desejar. Você essencialmente substituirá sua definição quase pela mesma definição, mas filtrará adicionalmente da maneira que desejar.

Da mesma forma para 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)
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.