启动make并通过Emacs中的快捷方式转到错误位置

启动make并通过Emacs中的快捷方式转到错误位置,emacs,makefile,Emacs,Makefile,我使用Emacs来编写代码。目前,要编译OCaml项目,我需要在终端中键入make。如果有错误,我必须返回Emacs,按照错误指示查找错误的文件和位置 现在,我想通过键盘快捷键在Emacs内部启动make,它会打开一个缓冲区来显示编译,然后 1) 如果没有错误,则自动关闭缓冲区 2) 如果有错误,另一个快捷方式将引导我找到Emacs中错误的文件和行 有人知道如何编写.emacs来启用此机制吗 附言:这是我目前的工作。 我已经发布了一个在Emacs中通过快捷方式(Ctrl+c+m+m)编译一个.t

我使用Emacs来编写代码。目前,要编译OCaml项目,我需要在终端中键入
make
。如果有错误,我必须返回Emacs,按照错误指示查找错误的文件和位置

现在,我想通过键盘快捷键在Emacs内部启动
make
,它会打开一个缓冲区来显示编译,然后

1) 如果没有错误,则自动关闭缓冲区

2) 如果有错误,另一个快捷方式将引导我找到Emacs中错误的文件和行

有人知道如何编写
.emacs
来启用此机制吗

附言:这是我目前的工作。
我已经发布了一个在Emacs中通过快捷方式(Ctrl+c+m+m)编译一个.tex文件的方法,这很有效。但如果出现错误,我不会要求它将我引向错误位置。

M-x compile RET

请参阅Emacs手册,节点。
有关如何访问错误发生的信息,请参见node。

几年前,我有一个相同的问题,这是我在#emacs irc频道上得到的答案

;; from enberg on #emacs
(setq compilation-finish-function
  (lambda (buf str)
(if (null (string-match ".*exited abnormally.*" str))
    ;;no errors, make the compilation window go away in a few seconds
    (progn
      (run-at-time
       "2 sec" nil 'delete-windows-on
       (get-buffer-create "*compilation*"))
      (message "No Compilation Errors!")))))
;; save the file when I press compile
(setq mode-compile-always-save-buffer-p t)

方法是M-x编译,在shell模式下也有这种实用程序:
M-x shell