我正在尝试微调包含emacs prelude的emacs的设置。
我想将flycheck作为默认检查工具cppcheck
,并默认为ggtags激活GNU Global。我主要编码c ++。以前它曾用于ggtags-mode
变量,但现在似乎不再起作用了。
(load "/home/user/.emacs.d/init.el")
(defun my-c-mode-common-hook ()
"Hook for all c derived modes."
(c-add-style "my-style"
'("stroustrup"
(c-offsets-alist
(innamespace . [0])
(inline-open . 0)
(inher-cont . c-lineup-multi-inher)
(arglist-cont-nonempty . +)
(template-args-cont . +))))
(setq c-default-style "my-style")
(when (derived-mode-p 'c-mode 'c++-mode)
(ggtags-mode 1)
(flycheck-select-checker "c/c++-cppcheck"))
)
(add-hook 'c-mode-common-hook
(my-c-mode-common-hook))
我发出警告说the following functions are not known to be defined: ggtags-mode, flycheck-select-checker
。但是加载.emacs文件时,没有错误。
任何人都可以帮我正确配置这两种小模式吗?对我而言,这似乎是正确的方法,但显然我错过了一些东西。
答案 0 :(得分:1)
您错误地使用add-hook
:它将函数作为第二个参数,但您在那里调用函数,因此将(flycheck-select-checker ..)
的值作为函数传递。您可能会在C(C / Java / C ++ / AWK / ...)模式中看到错误。
您需要做的是(add-hook 'c-mode-common-hook 'my-c-mode-common-hook)
。
此代码也永远不会被执行:
(when (derived-mode-p 'c-mode 'c++-mode)
(ggtags-mode 1)
(flycheck-select-checker "c/c++-cppcheck"))
因为'c-mode
不是'c++-mode
的派生,我想你想检查当前的主模式是否来自c++-mode
:
(when (derived-mode-p major-mode 'c++-mode)
(ggtags-mode 1)
(flycheck-select-checker "c/c++-cppcheck"))