faire `previous-buffer` et` next-buffer` pour ignorer certains tampons


10

dans Helm, j'ignore certains tampons de l'affichage lors de l'utilisation C-x b, je cherche un moyen de créer les commandes previous-bufferet de me next-buffercomporter de la même manière en ignorant certains tampons.

Réponses:


8

Voici deux façons:

  1. Si vous regardez la définition de la fonction switch-to-next-buffer(dans la bibliothèque window.el), vous verrez qu'elle filtre les tampons par le prédicat (le cas échéant) qui est la valeur du paramètre de trame buffer-predicate. Cette fonction est utilisée par next-buffer.

    Vous pouvez définir ce paramètre de cadre sur un prédicat qui filtre comme vous le souhaitez.

  2. Vous pouvez simplement conseiller la fonction switch-to-next-bufferde filtrer comme vous le souhaitez. Vous allez essentiellement remplacer sa définition par presque la même définition, mais filtrer en plus comme vous le souhaitez.

De même pour 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)
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.