Machen Sie "Vorheriger-Puffer" und "Nächster-Puffer", um einige Puffer zu ignorieren


10

In Helm ignoriere ich einige Puffer, die bei der Verwendung nicht angezeigt werden C-x b. Ich suche nach einer Möglichkeit, die Befehle zu erstellen previous-bufferund mich gleich zu next-bufferverhalten , wobei ich einige Puffer ignoriere.

Antworten:


8

Hier sind zwei Möglichkeiten:

  1. Wenn Sie sich die Definition der Funktion switch-to-next-buffer(in der Bibliothek window.el) ansehen, werden Sie feststellen, dass sie die Puffer nach dem Prädikat (falls vorhanden) filtert, das der Wert des Rahmenparameters ist buffer-predicate. Diese Funktion wird von verwendet next-buffer.

    Sie können diesen Frame-Parameter auf ein Prädikat setzen, das nach Ihren Wünschen filtert.

  2. Sie können einfach eine Funktion empfehlen, um switch-to-next-buffernach Ihren Wünschen zu filtern. Sie werden die Definition im Wesentlichen durch fast dieselbe Definition ersetzen, aber zusätzlich nach Ihren Wünschen filtern.

Ähnliches gilt für 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)
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.