[英]Emacs CEDET Hook
我想将CEDET模式挂钩到c ++模式。 我在.emacs文件中使用以下脚本:
(add-hook 'c++-mode-hook
(lambda ()
...
(my_cedet_load)
)
)
哪里
(defun my_cedet_load ()
(interactive)
(semantic-mode)
(global-semantic-stickyfunc-mode t)
(global-semantic-idle-scheduler-mode t)
(global-semantic-idle-completions-mode t)
(global-semantic-highlight-edits-mode t)
)
现在,问题是,一旦我打开.cpp文件,就会在所有缓冲区中启用语义模式。 我如何仅在.cpp文件中启用此类模式?
语义是一种全局次要模式。 来自semantic.el
要启用Semantic,请启用“语义模式”,全局次模式(Mx语义模式RET或“工具”菜单中的“源代码分析器”)。 要在启动时启用它,请将(语义模式1)放在init文件中。
因此,当您执行semantic-mode
它将在所有缓冲区中启用。 您可以使用semantic-inhibit-functions
来限制激活semantic
的缓冲区。 从文档中
在设置Semantic之前调用没有参数的函数列表。 如果这些函数中的任何一个返回非nil,则当前缓冲区不会设置为使用Semantic。
以下是使用此变量的示例。 它将指示只在c-mode
, cc-mode
和java-mode
缓冲区中激活semantic
(add-to-list 'semantic-inhibit-functions
(lambda () (not (member major-mode '(java-mode c-mode c++-mode)))))
我猜测关键在于global
一词。 所以使用semantic-stickyfunc-mode
而不是global-semantic-stickyfunc-mode
等。
尝试这个:
(add-hook 'c++-mode-hook 'my-c++-hook)
(defun my-c++-hook ()
(semantic-mode 1)
(semantic-stickyfunc-mode 1)
(semantic-idle-scheduler-mode 1)
(semantic-idle-completions-mode 1)
(semantic-highlight-edits-mode 1))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.