emacs(重新编译-y)

时间:2010-12-06 11:23:37

标签: emacs elisp

是否可以将“-yes”标志传递给emacs中的“重新编译”命令?

请原谅我完全缺乏(e)lisp专有技术。我厌倦了去Emacs以外编译我的乳胶代码,所以我在我的.emacs中添加了以下键绑定:

(global-set-key (kbd "<f12>") 'recompile);

是否可以对可能出现的以下提示自动回答“是”: “编译过程正在运行;杀了它?(是或否)。”

此外,是否可以使打开的窗口显示输出以自动滚动到底部。有趣的东西通常在那里。也许可以在重新编译后链接以下命令:“C-x o,缓冲结束”。

谢谢!

5 个答案:

答案 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

(来源:http://www.emacswiki.org/CompilationMode