看起来你可以通过暂时禁用 cross 来实现你想要display-buffer
的compilation-start
。
这是 sds 所说的内容和评论@此处发布的内容的组合
那里的评论有一个令人讨厌的问题,即在原始源缓冲区中的点跳转,我似乎已经通过阻塞set-window-point
和goto-char
. 感觉就像一个肮脏的黑客,但到目前为止工作。YMMV!
(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)
现在您应该看到所有编译缓冲区只有在outstr
没有返回成功完成状态或调用的命令以“find”或“grep”开头时才会显示。