【问题标题】:Emacs CEDET HookEmacs CEDET 钩子
【发布时间】:2014-03-10 04:15:30
【问题描述】:

我想将 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 文件中启用这种模式?

【问题讨论】:

    标签: emacs elisp cedet


    【解决方案1】:

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

    要启用语义,打开 `semantic-mode',一种全局次要模式(M-x 语义模式 RET,或“工具”菜单中的“源代码解析器”)。到 在启动时启用它,将 (semantic-mode 1) 放入您的 init 文件中。

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

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

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

    (add-to-list 'semantic-inhibit-functions
                     (lambda () (not (member major-mode '(java-mode c-mode c++-mode)))))
    

    【讨论】:

      【解决方案2】:

      我猜关键在于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))
      

      【讨论】:

      • 问题是当我这样做时出现错误:'error: Buffer scratch is not set up for parsing'
      • 这意味着您出于某种原因在lisp-interaction-mode-hook 中调用它。只需将my_cedet_load的内容放入钩子即可。
      • 感谢您的帮助!这是:(defun my-c-cedet-load () (interactive) (semantic-mode) (semantic-stickyfunc-mode) (semantic-idle-scheduler-mode) (semantic-idle-completions-mode) (semantic-highlight-edits-mode) )
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-11
      • 1970-01-01
      • 2023-03-30
      • 1970-01-01
      • 2013-02-24
      相关资源
      最近更新 更多