我的~/.emacs.d/init.el中有以下几行

(custom-set-variables
  '(flymake-allowed-file-name-masks
    (quote
      (
        ("\\.cc\\'" flymake-simple-make-init)
        ("\\.cpp\\'" flymake-simple-make-init)))))
(add-hook 'find-file-hook 'flymake-find-file-hook)

当我打开在同一文件夹中具有正确Makefile的C++文件时,我会即时进行编译和错误报告(Flymake将检查语法,并在代码编辑期间报告错误和警告)。

Makefile具有check-syntax目标:

.PHONY: check-syntax
check-syntax:
 $(CXX) -Wall -Wextra -pedantic -fsyntax-only $(CHK_SOURCES)

问题是,当我打开一个没有相应Makefile的.cc文件时,我得到一个令人讨厌的对话框,警告我有关flymake被禁用的信息。

因此,如果我在包含20个C++文件的文件夹中启动emacs *.cc,则会得到20个模态对话框,提示类似[找不到构建文件]。 Flymake将被关闭。

我可以使用一些挂钩来禁用该警告吗?您能否提供示例elisp代码以及有关如何找到正确钩子(Hook)的说明?

最佳答案

仍然可以接收到消息的最简单方法是将自定义变量设置为true,然后重新定义flymake-display-warning功能。

;; Overwrite flymake-display-warning so that no annoying dialog box is
;; used.

;; This version uses lwarn instead of message-box in the original version.
;; lwarn will open another window, and display the warning in there.
(defun flymake-display-warning (warning)
  "Display a warning to the user, using lwarn"
  (lwarn 'flymake :warning warning))

;; Using lwarn might be kind of annoying on its own, popping up windows and
;; what not. If you prefer to recieve the warnings in the mini-buffer, use:
(defun flymake-display-warning (warning)
  "Display a warning to the user, using lwarn"
  (message warning))

10-01 12:50