AUCTeX 上的反向搜索在新 Emacs 窗口而不是主 Emacs 窗口中打开文件 - 如何避免这种情况?

AUCTeX 上的反向搜索在新 Emacs 窗口而不是主 Emacs 窗口中打开文件 - 如何避免这种情况?

我在 Debian 上使用 Emacs+auctex+evince。假设我有一个main.tex包含的latex 文档。当使用内部sections/sec1.tex编译并在第 1 节中使用向后搜索时,Emacs 打开C-c C-amain.texsections/sec1.tex在新的 Emacs 窗口 (Ew) 中打开(但在窗口管理器意义上的同一窗口中,也称为 Emacs 中的框架,请参阅https://emacs.stackexchange.com/questions/13583/whats-the-difference-between-a-buffer-a-file-a-window-and-a-frame)。也就是说,显示的 Ewmain.tex大小减半,在空闲空间中创建一个新的 Ew,并且我看到main.texsec1.tex

我想避免这种情况,而是在main.tex之前显示的 Ew 中打开文件。

我在 Debian 稳定版上使用 Emacs:

GNU Emacs 26.1 (build 2, x86_64-pc-linux-gnu, GTK+ Version 3.24.5)
 of 2019-09-22, modified by Debian 

不良行为是在原始配置下显示的,因此似乎不是由我使用的任何定制引起的。

答案1

正如评论中指出的那样,答案

(setq same-window-regexps '("\\.tex$"))

会产生破坏 AucTeX 命令C-c C-l和的意外后果C-c C-`。解决此问题的一种方法是将 的新值限制为same-window-regexpsTeX 模式缓冲区,即将上面的行替换为

(add-hook 'LaTeX-mode-hook
           '(lambda () (set (make-local-variable 'same-window-regexps) '("\\.tex$"))))

然而,这限制了它作为原始问题的解决方案,因此它仅在 Emacs 当前正在查看时才有效一些TeX 文件;如果当前缓冲区是不同的模式,则反向搜索会在单独的 Emacs 窗口中打开。

在所有情况下似乎都有效的另一种解决方案是保留原始的全局变量(setq same-window-regexps '("\\.tex$")),但要巧妙地C-c C-l告诉C-c C-`TeX-pop-to-buffer始终在另一个窗口中打开:

(defun TeX-force-pop-to-buffer-other-window (orig-fun buffer &optional other-window norecord)
  (funcall orig-fun buffer t norecord))
(defun TeX-force-pop-in-other-window (orig-fun &rest rest)
  "Don't depend on `pop-to-buffer' using a different window."
  (advice-add 'TeX-pop-to-buffer :around 'TeX-force-pop-to-buffer-other-window)
  (apply orig-fun rest)
  (advice-remove 'TeX-pop-to-buffer 'TeX-force-pop-to-buffer-other-window))  
(advice-add 'TeX-help-error :around 'TeX-force-pop-in-other-window)
(advice-add 'TeX-recenter-output-buffer :around 'TeX-force-pop-in-other-window)

答案2

Mike Shulman 提供了此问题的解决方案,即使用

(setq same-window-regexps '("\\.tex$"))

相关内容