Mercurial > emacs
changeset 109461:d898f8a84d48
Enhance `c-file-style' in file/directory local variables.
cc-mode.el (c-count-cfss): New function.
(c-before-hack-hook): Call `c-set-style' differently according to whether
c-file-style was set in file or directory local variables.
author | Alan Mackenzie <acm@muc.de> |
---|---|
date | Sun, 18 Jul 2010 20:28:00 +0000 |
parents | 597339bd6bef |
children | a150e8a14679 4e2dbc291dc0 af1c1a57ee7f |
files | lisp/ChangeLog lisp/progmodes/cc-mode.el |
diffstat | 2 files changed, 28 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/lisp/ChangeLog Sun Jul 18 14:44:32 2010 -0400 +++ b/lisp/ChangeLog Sun Jul 18 20:28:00 2010 +0000 @@ -1,3 +1,11 @@ +2010-07-18 Alan Mackenzie <acm@muc.de> + + Enhance `c-file-style' in file/directory local variables. + * cc-mode.el (c-count-cfss): New function. + (c-before-hack-hook): Call `c-set-style' differently according to + whether c-file-style was set in file or directory local + variables. + 2010-07-18 Michael R. Mauger <mmaug@yahoo.com> * progmodes/sql.el: Version 2.2.
--- a/lisp/progmodes/cc-mode.el Sun Jul 18 14:44:32 2010 -0400 +++ b/lisp/progmodes/cc-mode.el Sun Jul 18 20:28:00 2010 +0000 @@ -662,6 +662,17 @@ (and (cdr rfn) (setq require-final-newline mode-require-final-newline))))) +(defun c-count-cfss (lv-alist) + ;; LV-ALIST is an alist like `file-local-variables-alist'. Count how many + ;; elements with the key `c-file-style' there are in it. + (let ((elt-ptr lv-alist) elt (cownt 0)) + (while elt-ptr + (setq elt (car elt-ptr) + elt-ptr (cdr elt-ptr)) + (when (eq (car elt) 'c-file-style) + (setq cownt (1+ cownt)))) + cownt)) + (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 @@ -678,7 +689,15 @@ (delq mode-cons file-local-variables-alist))) (when stile (or (stringp stile) (error "c-file-style is not a string")) - (c-set-style stile)) + (if (boundp 'dir-local-variables-alist) + ;; Determine whether `c-file-style' was set in the file's local + ;; variables or in a .dir-locals.el (a directory setting). + (let ((cfs-in-file-and-dir-count + (c-count-cfss file-local-variables-alist)) + (cfs-in-dir-count (c-count-cfss dir-local-variables-alist))) + (c-set-style stile + (= cfs-in-file-and-dir-count cfs-in-dir-count))) + (c-set-style stile))) (when offsets (mapc (lambda (langentry)