尝试使用前奏设置ggtags和flycheck时,错误的emacs配置

时间:2013-10-17 17:13:55

标签: c++ emacs elisp flycheck

我正在尝试微调包含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文件时,没有错误。

任何人都可以帮我正确配置这两种小模式吗?对我而言,这似乎是正确的方法,但显然我错过了一些东西。

1 个答案:

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