From: Alan Mackenzie <acm@muc.de>
To: Reuben Thomas <rrt@sc3d.org>
Cc: 17051@debbugs.gnu.org, Noam Postavsky <npostavs@users.sourceforge.net>
Subject: bug#17051: Order of evaluation in .dir-locals.el
Date: Tue, 7 Jun 2016 11:23:13 +0000 [thread overview]
Message-ID: <20160607112313.GA3681__39967.6928566352$1465299168$gmane$org@acm.fritz.box> (raw)
In-Reply-To: <CAOnWdogi4gQtDAY5imOsS1tHyhvsO5niztG687LyD2hwh4xMKw@mail.gmail.com>
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).
next prev parent reply other threads:[~2016-06-07 11:23 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-03-20 15:01 bug#17051: Order of evaluation in .dir-locals.el Reuben Thomas
2016-06-04 22:02 ` Noam Postavsky
2016-06-05 19:38 ` Reuben Thomas
2016-06-07 0:41 ` Noam Postavsky
2016-06-07 11:23 ` Alan Mackenzie [this message]
[not found] ` <20160607112313.GA3681@acm.fritz.box>
2016-06-07 12:53 ` Reuben Thomas
2021-12-04 3:19 ` Lars Ingebrigtsen
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.gnu.org/software/emacs/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to='20160607112313.GA3681__39967.6928566352$1465299168$gmane$org@acm.fritz.box' \
--to=acm@muc.de \
--cc=17051@debbugs.gnu.org \
--cc=npostavs@users.sourceforge.net \
--cc=rrt@sc3d.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).