目前我正在努力为我正在开发的项目创建新的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中的监视表达式?
答案 0 :(得分:0)
我认为你所描述的内容没有机制。
我原则上你可以在defadvice
上使用setq
,但手册advises against建议原语,同时指出它不是100%有效:
除非你知道自己在做什么,否则不要建议原语(见 什么是功能)。建议机制使用一些原语; 建议他们可以导致无限递归。还有很多原始人 直接从C代码调用。从Lisp代码调用原语 将注意到这些建议,但来自C代码的调用将忽略该建议 建议。
setq
实际上使用了defadvice
。
换句话说,变量赋值太低而无法用普通方式挂钩( viz ,elisp)。