Subject: Re: bug#3808: 23.1.50; CC-mode: Impossible to set c-cleanup-list

From: Jan Djärv <[email-masked]>
Date: Sun, 12 Jul 2009 12:33:01 +0200

Alan Mackenzie skrev:
> Hi, Jan!
> 
> On Fri, Jul 10, 2009 at 01:14:45PM +0200, Jan D. wrote:
>> I customize c-cleanup-list.  This is then the full contents of my
>> .emacs:
>> (custom-set-variables
>>   ;; custom-set-variables was added by Custom.
>>   ;; If you edit it by hand, you could mess it up, so be careful.
>>   ;; Your init file should contain only one such instance.
>>   ;; If there is more than one, they won't work right.
>>  '(c-cleanup-list (quote (scope-operator space-before-funcall))))
>> (custom-set-faces
>>   ;; custom-set-faces was added by Custom.
>>   ;; If you edit it by hand, you could mess it up, so be careful.
>>   ;; Your init file should contain only one such instance.
>>   ;; If there is more than one, they won't work right.
>>  )
> 
>> I start emacs with --no-site-file, open a .c-file.
> 
> Just done this, in a new userid, having copied your .emacs.  To be sure,
> I tried on a freshly updated CVS Emacs.
> 
>> Check the value of c-cleanup-list:
> 
>> c-cleanup-list is a variable defined in `cc-vars.el'.
>> Its value is (scope-operator)
> 
> I can't reproduce the problem; I get:
> 
>     Its value is
>     (scope-operator space-before-funcall)
> 
> , just as desired.
> 
>> Local in buffer xftfont.c; global value is 
>> (scope-operator space-before-funcall)
> 
> Well, that looks OK.  :-)
> 
> Might it be that there's a local variables section at the end of
> xftfont.c which is overriding c-cleanup-list?
> 

No, but since this is in the emacs source tree, there is a .dir-locals.el
at the root of the source tree, and that comes in effect.  So it is not that 
it doesn't work, it is just this situation (setting c-file-style as a file 
local variable has the same effect).

So what happens is:
c-mode sets style to GNU.
My customization is applied.
.dir-locals.el sets style to GNU, thus erasing my customization.

>> And indeed, space-before-funcall is not in effect.  It seems impossible to
>> set this variable.  I also tried setting c-old-style-variable-behavior to t,
>> but it made no difference.
> 
>> The manual needs to explain how to set variables in a manner that works,
>> an example with lisp to add to .emacs would be nice also.
> 
> "The manual" being the CC Mode manual, of course.  In the appendix
> "Sample .emacs File", there's an example of c-cleanup-list being set in a
> style.  The instructions on how to set "style variables" in general (of
> which c-cleanup-list is one) are on the page "Configuration Basics" and
> its sup-page "Style Variables".
> 
> So I think the information is there, but perhaps it's not easy enough to
> find.  Could you, perhaps, reconstruct how you went about looking for the
> info?  Maybe the manual needs an extra hint or two somewhere.  Thanks!
> 

The situation above, i.e. how to preserve my customization when .dir-locals.el 
or file variables are in effect is not described.

I tried the mode hook, it didn't work either.  Is there a c-set-style hook?

	Jan D.