如何在emacs中使用eval-after-load进行c / c ++模式设置?

时间:2013-04-30 02:48:20

标签: emacs elisp

我希望在c-mode / c ++模式下向ffap-c-path添加其他路径,我更喜欢延迟加载机制。我有两种选择:

  • add-hook / c-mode-hook
  • 使用c++-mode-hook
  • eval-after-load

但正如@sanityinc在this page中所说,似乎后者更好。所以我添加如下代码:

(eval-after-load 'cc-mode
'(progn
  (require 'ffap)
  (setq fap-c-path (append ffap-c-path '("/usr/lib/llvm-3.1/include")))
  )
)

然而,当我后来打开一个c源文件并发现fap-c-path仍然是旧值时。根据文档,如果eval-after-load 'cc-mode是图书馆/功能,我可以使用eval-after-load "cc-mode"cc-mode;但这里都不起作用。我看一下定义了cc-mode的源代码,发现它使用的是cc-provide,它是根本原因吗?

顺便说一句:我也试过add-hook方法;要添加新路径,但每次打开另一个c / c ++文件时,代码都会执行一次,最后ffap-c-path包含许多重复路径。

2 个答案:

答案 0 :(得分:1)

您可能希望改为使用add-to-list

(eval-after-load 'cc-mode
  '(progn
     (require 'ffap)
     (add-to-list 'ffap-c-path "/usr/lib/llvm-3.1/include")))

这样,您可以保证不插入重复值。

答案 1 :(得分:0)

您错误拼写ffap-c-pathfap-c-path

您最好使用add-to-list,它实际上处理重复的条目,只添加一个新的列表项(如果它尚未存在)。