私が考えることができる最も簡単な方法は、両方の関数のアドバイスを定義することです。用next-buffer
です。同様にprevious-buffer
. 構成変数を定義して、動作を有効/無効にする (またはアドバイスを有効/無効にする) こともできます。
(defadvice next-buffer (after avoid-messages-buffer-in-next-buffer)
"Advice around `next-buffer' to avoid going into the *Messages* buffer."
(when (string= "*Messages*" (buffer-name))
(next-buffer)))
;; activate the advice
(ad-activate 'next-buffer)
文字列名の代わりに他の方法でバッファを比較できるかもしれませんが、それはうまくいきます。前のバッファのコードはほぼ同じです。アドバイス自体の内部で一度アドバイスをトリガーせずに元の関数を呼び出す方法があるかどうかもわかりませんが、後でバッファーの名前がテストされてもコードは機能します(単に1 つのバッファーであり、それがメッセージ バッファーです (一部のコードでは、バッファーが 1 つだけであるかどうかを確認して、next-buffer
再度呼び出さないようにすることができます)。
同じことを行うスタンドアロン関数を使用する場合:
(defun my-next-buffer ()
"next-buffer, only skip *Messages*"
(interactive)
(next-buffer)
(when (string= "*Messages*" (buffer-name))
(next-buffer)))
(global-set-key [remap next-buffer] 'my-next-buffer)
(global-set-key [remap previous-buffer] 'my-next-buffer)