如何检查emacs的哪个部分覆盖变量

时间:2014-03-25 14:06:18

标签: debugging emacs

目前我正在努力为我正在开发的项目创建新的C缩进样式。我这样做了:

(c-add-style "ck-style"
             '("bsd"
               (c-auto-align-backslashes . nil)
               (c-basic-offset . 4)
               (c-offsets-alist . ((case-label . +)
                                   (label . -)
                                   (statement-case-open . +)))
               (fill-column . 78)
               (indent-tabs-mode . t)
               (tab-width . 4)))

(defun ck-init-c ()
  (if (string-match "/project/" buffer-file-name)
        (c-set-style "ck-style")
      (c-set-style "bsd")))

(add-hook 'c-mode-hook 'ck-init-c)

我还在显示(message)值的钩子中添加了调试c-indentation-style调用,并且在钩子中它肯定具有正确的值。但是当我签入缓冲区时,c-indentation-style的值将重新设置为"bsd"。有没有办法检查初始化的哪个部分导致了这个?像GDB中的监视表达式?

1 个答案:

答案 0 :(得分:0)

我认为你所描述的内容没有机制。

我原则上你可以在defadvice上使用setq,但手册advises against建议原语,同时指出它不是100%有效:

  

除非你知道自己在做什么,否则不要建议原语(见   什么是功能)。建议机制使用一些原语;   建议他们可以导致无限递归。还有很多原始人   直接从C代码调用。从Lisp代码调用原语   将注意到这些建议,但来自C代码的调用将忽​​略该建议   建议。

setq实际上使用了defadvice

换句话说,变量赋值太低而无法用普通方式挂钩( viz ,elisp)。