• Neil Roberts's avatar
    Let dir locals for more specific modes override those from less · 02bee786
    Neil Roberts authored
    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.
    02bee786
files.el 311 KB