我跟着另一个帖子设置一些命名命令,然后确保命令等。一切都很完美,除了当我输入时C-c C-c Nomenclature
,编译缓冲区会弹出并将原始缓冲区分成两部分,就好像我通过添加打开了编译缓冲区(setq TeX-show-compilation nil)
(但我没有)。如果我输入通常的内容,如C-c C-c latex
或C-c C-c biber
,一切都很正常,并且消息会保留在迷你缓冲区内而不会弹出,当然,除非有错误需要报告。
我尝试通过(delete-other-windows)
手动添加来解决此问题,如下所示,
(eval-after-load "tex"
'(add-to-list 'TeX-command-list
'("Nomenclature" "makeindex %s.nlo -s nomencl.ist -o %s.nls"
(lambda (name command file)
(TeX-run-compile name command file)
(TeX-process-set-variable file 'TeX-command-next TeX-command-default)
(delete-other-windows) %<-- manually delete other buffer
)
nil t :help "Create nomenclature file")))
确实可以工作,但看起来不自然而且很愚蠢。此外,有时这会盲目关闭另一个不是编译缓冲区的缓冲区,这很麻烦。
我的问题是,有没有正式的有什么办法可以解决这个问题?非常感谢!
更新
经过一番挖掘,我意识到这不是 AUCTeX 或一般 TeX 的问题,而是 emacs 编译问题。以下此篇文章来自 zdav,我设法(delete-other-windows)
用
(delete-window (get-buffer-window (get-buffer "*compilation*"))))
对我来说这似乎更有针对性。
如果我只是添加什么兹达夫提议的,它仍然有效,但我会看到窗口裂开,下部缓冲区被摧毁。这不是一个令人愉快的景象。
更新
经过进一步挖掘,我想我会坚持提供的解决方案堆栈溢出复制如下
(defun brian-compile-finish (buffer outstr)
(unless (string-match "finished" outstr)
(switch-to-buffer-other-window buffer))
t)
(setq compilation-finish-functions 'brian-compile-finish)
(require 'cl)
(defadvice compilation-start
(around inhibit-display
(command &optional mode name-function highlight-regexp))
(if (not (string-match "^\\(find\\|grep\\)" command))
(flet ((display-buffer)
(set-window-point)
(goto-char))
(fset 'display-buffer 'ignore)
(fset 'goto-char 'ignore)
(fset 'set-window-point 'ignore)
(save-window-excursion
ad-do-it))
ad-do-it))
(ad-activate 'compilation-start)