[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#17051: Order of evaluation in .dir-locals.el
From: |
Alan Mackenzie |
Subject: |
bug#17051: Order of evaluation in .dir-locals.el |
Date: |
Tue, 7 Jun 2016 11:23:13 +0000 |
User-agent: |
Mutt/1.5.24 (2015-08-30) |
Hello, Reuben.
On Thu, Mar 20, 2014 at 03:01:12PM +0000, Reuben Thomas wrote:
> I have the following .dir-locals.el for a project:
> ((nil . ((show-trailing-whitespace . nil)
> (eval . (c-add-style "fontforge"
> '("stroustrup"
> (indent-tabs-mode . t)
> (tab-width . 8)
> (c-offsets-alist
> (case-label . *)))))))
> (c-mode . ((c-file-style . "fontforge"))))
> The idea is to define a new c-style and apply it to all files in that
> project.
Why are you defining the new style "fontforge" every time a file gets
visited? Couldn't you simply define it once, directly in your .emacs,
before any C files are loaded (e.g., via desktop-save-mode)?
> When I first visit a file under that project, I get the error: "Undefined
> style: fontforge"
I don't think the order of evaluation of variables in .dir-locals.el is
defined. The code (in .../lisp/files.el) is not easy to understand. It
could well be that, for that first file, the c-file-style is being
applied before it has been defined.
> When I examine c-style-alist, "fontforge" is the first entry, and when I
> look at c-file-style for that buffer, its value is "fontforge". However, as
> the error implies, the style has not been applied to that buffer: if I
> check the value of indent-tabs-mode, which I have configured globally to
> "nil", it is still nil.
> If I then run M-x c-set-style RET fontforge RET, the style is applied as
> expected.
> Hence, it appears my error has to do with the order of evaluation. I tried
> putting the "eval" sexp under the "c-mode" section of the .dir-locals.el,
> but that still gives the same error, even when I put it before the
> c-file-style sexp.
Again, I'm not aware of any definition of the order of evaluation.
> I can't find anything about this in the manual, or online (i.e. examples
> where the result of an "eval" entry are relied on by another entry). In
> hack-local-variables-apply files.el I found this bit of code:
> ;; Any 'evals must run in the Right sequence.
> (setq file-local-variables-alist
> (nreverse file-local-variables-alist))
> so I tried putting the "eval" part at the end of c-mode's list, but that
> didn't help either. (I checked file-local-variables-alist in each case to
> make sure that in one the eval was before c-file-style, and in the other,
> after).
> Can someone please set me straight?
Would you please try defining your CC Mode style outside of
.dir-locals.el, as suggested above.
It could well be that we need to polish the documentation of this topic a
little.
> --
> http://rrt.sc3d.org
--
Alan Mackenzie (Nuremberg, Germany).