いくつかのバッファを無視するために `previous-buffer`と` next-buffer`を作成します


10

ヘルムに私が使用している場合を示すから、いくつかのバッファを無視しC-x b、私はコマンドを作るための方法を探していますprevious-bufferし、next-bufferいくつかのバッファを無視して同じように動作します。

回答:


8

2つの方法があります。

  1. switch-to-next-buffer(ライブラリ内のwindow.el)関数の定義を見ると、フレームパラメータの値である述語(存在する場合)によってバッファをフィルタリングしていることがわかりますbuffer-predicate。その関数はによって使用されnext-bufferます。

    そのフレームパラメータを、希望する方法でフィルタリングする述語に設定できます。

  2. あなたは単にあなたがswitch-to-next-buffer望む方法でフィルタリングするように関数にアドバイスすることができます。基本的にその定義をほぼ同じ定義で置き換えますが、必要に応じてさらにフィルターをかけます。

同様に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)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.