From: Chong Yidong Date: Thu, 31 Jul 2008 01:37:35 +0000 (+0000) Subject: (c-before-hack-hook): New function X-Git-Tag: emacs-pretest-23.0.90~3771 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=a36abf0ef31eb9d684cb18b475d40be9122dc0f5;p=emacs.git (c-before-hack-hook): New function (Top Level): Install c-before-hack-hook on before-hack-local-variables-hook, rather than c-postprocess-file-styles on hack-local-variables-hook. --- diff --git a/lisp/progmodes/cc-mode.el b/lisp/progmodes/cc-mode.el index 06f94bde94a..044d8542bfe 100644 --- a/lisp/progmodes/cc-mode.el +++ b/lisp/progmodes/cc-mode.el @@ -657,6 +657,26 @@ compatible with old code; callers should always specify it." (and (cdr rfn) (setq require-final-newline mode-require-final-newline))))) +(defun c-before-hack-hook () + "Set the CC Mode style and \"offsets\" when in the buffer's local variables. +They are set only when, respectively, the pseudo variables +`c-file-style' and `c-file-offsets' are present in the list. + +This function is called from the hook `before-hack-local-variables-hook'." + (when c-buffer-is-cc-mode + (let ((stile (cdr (assq 'c-file-style file-local-variables-alist))) + (offsets (cdr (assq 'c-file-offsets file-local-variables-alist)))) + (when stile + (or (stringp stile) (error "c-file-style is not a string")) + (c-set-style stile)) + (when offsets + (mapc + (lambda (langentry) + (let ((langelem (car langentry)) + (offset (cdr langentry))) + (c-set-offset langelem offset))) + offsets))))) + (defun c-remove-any-local-eval-or-mode-variables () ;; If the buffer specifies `mode' or `eval' in its File Local Variable list ;; or on the first line, remove all occurrences. See @@ -748,7 +768,9 @@ Note that the style variables are always made local to the buffer." (hack-local-variables)) nil)))) -(add-hook 'hack-local-variables-hook 'c-postprocess-file-styles) +(if (boundp 'before-hack-local-variables-hook) + (add-hook 'before-hack-local-variables-hook 'c-before-hack-hook) + (add-hook 'hack-local-variables-hook 'c-postprocess-file-styles)) (defmacro c-run-mode-hooks (&rest hooks) ;; Emacs 21.1 has introduced a system with delayed mode hooks that