是否可以将“-yes”标志传递给emacs中的“重新编译”命令?
请原谅我完全缺乏(e)lisp专有技术。我厌倦了去Emacs以外编译我的乳胶代码,所以我在我的.emacs中添加了以下键绑定:
(global-set-key (kbd "<f12>") 'recompile);
是否可以对可能出现的以下提示自动回答“是”: “编译过程正在运行;杀了它?(是或否)。”
此外,是否可以使打开的窗口显示输出以自动滚动到底部。有趣的东西通常在那里。也许可以在重新编译后链接以下命令:“C-x o,缓冲结束”。
谢谢!
答案 0 :(得分:7)
这里有一些代码可以解决您的第一个问题(中断当前编译):
(defun interrupt-and-recompile ()
"Interrupt old compilation, if any, and recompile."
(interactive)
(ignore-errors (kill-compilation))
(recompile))
对于第二个问题(滚动编辑输出),只需自定义用户设置compilation-scroll-output
。
答案 1 :(得分:2)
我不知何故需要将kill-compilation置于与Emacs 23.2的ignore-errors中,以便在没有进程运行时使其工作。否则效果很好。
(defun interrupt-and-recompile ()
"Interrupt old compilation, if any, and recompile."
(interactive)
(ignore-errors
(kill-compilation))
(recompile)
)
答案 2 :(得分:2)
每当我尝试将kill-compilation
与latex / pdflatex一起使用时,它就无效了。我认为这是因为乳胶不响应SIGINT。
相反,我使用以下hack,它首先设置process-kill-without-query
缓冲区的compilation
位,然后关闭它(这会终止正在运行的进程)。
(defun interrupt-and-recompile ()
"Interrupt old compilation, if any, and recompile."
(interactive)
(ignore-errors
(process-kill-without-query
(get-buffer-process
(get-buffer "*compilation*"))))
(ignore-errors
(kill-buffer "*compilation*"))
(recompile)
)
答案 3 :(得分:2)
此行为由compilation-always-kill
全局变量控制。通过customize-variable
自定义并将其设置为t
。
不确定哪个版本的emacs首先具有此功能,但肯定是26及更高版本。
答案 4 :(得分:0)
由于与sfeuz相同的原因,其他解决方案对我不起作用,但我不喜欢按名称杀死硬编码缓冲区的核选项。
这是一个简短的解决方案,通过建议yes-or-no-p自动回答该特定问题:
ftp://download.tuxfamily.org/user42/compilation-always-kill.el