我能想到的最简单的方法是为这两个函数定义一个建议。这里是为了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)
也许您可以用其他方式而不是字符串名称来比较缓冲区,但这会起作用。先前缓冲区的代码几乎相同。我也不知道是否有一种方法可以调用原始函数而无需在通知本身内部触发通知,但同样,即使缓冲区的名称在之后测试,代码也会起作用(如果你只是有一个缓冲区,它是消息缓冲区;一些代码可以检查是否只有一个缓冲区并且不再调用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)