首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Emacs CEDET Hook

Emacs CEDET Hook
EN

Stack Overflow用户
提问于 2014-03-10 04:15:30
回答 2查看 190关注 0票数 1

我想将CEDET模式连接到c++模式。我在我的.emacs文件中使用了以下脚本:

代码语言:javascript
复制
(add-hook 'c++-mode-hook
      (lambda ()
        ...
        (my_cedet_load)
        )
      )

哪里

代码语言:javascript
复制
(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文件中启用这种模式?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-03-10 14:55:21

语义是一种全局次要模式。来自semantic.el

要启用语义,请打开“语义模式”,这是一种全局次要模式(M语义模式RET,或“Tools”菜单中的“源代码解析器”)。要在启动时启用它,请将(语义模式1)放在init文件中。

因此,当您执行semantic-mode时,在所有缓冲区中都启用了它。可以使用semantic-inhibit-functions限制激活semantic的缓冲区。从文件中

在设置语义之前不带参数调用的函数列表。如果这些函数中的任何一个返回非零,则不设置当前缓冲区以使用语义。

下面是使用此变量的示例。它将指示semantic仅在c-modecc-modejava-mode缓冲区中激活。

代码语言:javascript
复制
(add-to-list 'semantic-inhibit-functions
                 (lambda () (not (member major-mode '(java-mode c-mode c++-mode)))))
票数 2
EN

Stack Overflow用户

发布于 2014-03-10 07:48:20

我猜关键在于global这个词。所以使用semantic-stickyfunc-mode而不是global-semantic-stickyfunc-mode等等。

更新:

试试这个:

代码语言:javascript
复制
(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))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22291985

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档