Emacs: раздражающее диалоговое окно Flymake
У меня есть следующие строки в ~/.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 в той же папке, я получаю компиляцию и сообщение об ошибках "на лету" (Flymake проверяет синтаксис и сообщает об ошибках и предупреждениях во время редактирования кода).
В файле Makefile есть цель check-syntax
:
.PHONY: check-syntax
check-syntax:
$(CXX) -Wall -Wextra -pedantic -fsyntax-only $(CHK_SOURCES)
Проблема в том, что когда я открываю файл .cc, у которого нет соответствующего Makefile, я получаю раздражающее диалоговое окно, которое предупреждает меня об отключении flymake.
Итак, если я запустил emacs *.cc
в папку с 20 файлами С++, я получаю 20 modal диалоговых окон, в которых говорится о том, что No buildfile найдено для [...]. Flymake будет отключен.
Есть ли какой-нибудь крючок, который я могу использовать, чтобы отключить это предупреждение? Можете ли вы предоставить образец кода elisp и объяснение того, как вы нашли правильный крюк?
Ответы
Ответ 1
Самый простой способ сделать это и получать сообщения - оставить переменную настройки равной true и переопределить функцию предупреждения flymake-display.
;; 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))
Ответ 2
Существует переменная, которая может быть настроена и что я забыл.
flymake-gui-warnings-enabled
Это отключит любое сообщение GUI, но я буду в порядке с ним, если никто не опубликует лучший ответ.