如何在Emacs中自动切换到发生缓冲区?

如何在Emacs中自动切换到发生缓冲区?,emacs,elisp,Emacs,Elisp,在正则表达式上运行occure时,帧会分成两个窗口,occure缓冲区如下所示。但是,键盘焦点仍在原始缓冲区中。如何以编程方式更改此行为,使发生缓冲区成为当前缓冲区?我试过这个: (defun test-occur () (interactive) (occur "test") (switch-to-buffer "*Occur*")) 但是它不起作用。。(即:现在发生缓冲区同时显示在顶部和底部窗口中)尝试以下操作: (defun test-occur () (interact

在正则表达式上运行
occure
时,帧会分成两个窗口,
occure
缓冲区如下所示。但是,键盘焦点仍在原始缓冲区中。如何以编程方式更改此行为,使
发生
缓冲区成为当前缓冲区?我试过这个:

(defun test-occur ()
  (interactive)
  (occur "test")
  (switch-to-buffer "*Occur*"))
但是它不起作用。。(即:现在
发生
缓冲区同时显示在顶部和底部窗口中)

尝试以下操作:

(defun test-occur ()
  (interactive)
  (occur "test")
  (other-window 1))

您不必为此定义单独的函数。 只需添加一个钩子:

(add-hook 'occur-hook (lambda () (other-window 1)))
,而且可能更可靠:

(add-hook 'occur-hook (lambda () (switch-to-buffer-other-window "*Occur*")))

谢谢,这很有效。如果有两个以上的窗口怎么办。如何选择正确的一个?它选择最近的一个。发生应该是您案例中最新的一次。我对此方法有问题,需要按名称调用窗口:
(添加hook'occure hook'(lambda()(切换到缓冲区其他窗口“*occure*”))