aboutsummaryrefslogtreecommitdiffstats
path: root/doc
diff options
context:
space:
mode:
authorNeil Roberts2019-05-10 12:57:28 +0200
committerNoam Postavsky2019-05-12 09:59:55 -0400
commit02bee7860f7e650ef13e00fe1a7f9a362e3eb001 (patch)
tree33546f9e230f8906a26c8af65d692e9f701d9d16 /doc
parentb1235f9abd0f255ff65e13b18ef3ee4e19278484 (diff)
downloademacs-02bee7860f7e650ef13e00fe1a7f9a362e3eb001.tar.gz
emacs-02bee7860f7e650ef13e00fe1a7f9a362e3eb001.zip
Let dir locals for more specific modes override those from less
The list of dir local variables to apply is now sorted by the number of parent modes of the mode used as the key in the association list. That way when the variables are applied in order the variables from more specific modes will override those from less specific modes. If there are directory entries in the list then they are sorted in order of name length. The list of modes for that dir is then recursively sorted with the same mechanism. That way variables tied to a particular subdirectory override those in in a parent directory. Previously the behaviour didn’t seem to be well defined anyway and was dependent on the order they appeared in the file. However this order was changed in version 26.1 and it probably also depended on the number of dir-local files that are merged. Bug#33400 * lisp/files.el (dir-locals-get-sort-score, dir-locals-sort-variables) (dir-locals-read-from-dir): Sort the dir locals so that more precise modes and directory-specific entries have override lesser ones. * doc/emacs/custom.texi (Directory Variables): Document the priority.
Diffstat (limited to 'doc')
-rw-r--r--doc/emacs/custom.texi22
1 files changed, 22 insertions, 0 deletions
diff --git a/doc/emacs/custom.texi b/doc/emacs/custom.texi
index b07362f3cea..3fd655048b4 100644
--- a/doc/emacs/custom.texi
+++ b/doc/emacs/custom.texi
@@ -1375,6 +1375,28 @@ be applied in the current directory, not in any subdirectories.
1375Finally, it specifies a different @file{ChangeLog} file name for any 1375Finally, it specifies a different @file{ChangeLog} file name for any
1376file in the @file{src/imported} subdirectory. 1376file in the @file{src/imported} subdirectory.
1377 1377
1378If the @file{.dir-locals.el} file contains multiple different values
1379for a variable using different mode names or directories, the values
1380will be applied in an order such that the values for more specific
1381modes take priority over more generic modes. Values specified under a
1382directory have even more priority. For example:
1383
1384@example
1385((nil . ((fill-column . 40)))
1386 (c-mode . ((fill-column . 50)))
1387 (prog-mode . ((fill-column . 60)))
1388 ("narrow-files" . ((nil . ((fill-column . 20))))))
1389@end example
1390
1391Files that use @code{c-mode} also match @code{prog-mode} because the
1392former inherits from the latter. The value used for
1393@code{fill-column} in C files will however be @code{50} because the
1394mode name is more specific than @code{prog-mode}. Files using other
1395modes inheriting from @code{prog-mode} will use @code{60}. Any file
1396under the directory @file{narrow-files} will use the value @code{20}
1397even if they use @code{c-mode} because directory entries have priority
1398over mode entries.
1399
1378You can specify the variables @code{mode}, @code{eval}, and 1400You can specify the variables @code{mode}, @code{eval}, and
1379@code{unibyte} in your @file{.dir-locals.el}, and they have the same 1401@code{unibyte} in your @file{.dir-locals.el}, and they have the same
1380meanings as they would have in file local variables. @code{coding} 1402meanings as they would have in file local variables. @code{coding}