限制.dir-locals.el搜索遍历子目录

时间:2019-01-22 00:22:39

标签: emacs

一个简短的问题,以防有人之前做过:

我正试图阻止Emacs在打开文件时尝试在所有父子目录下递归打开.dir-locals.el。我已经找到了如何完全停止它(通过强制所有文件为远程文件-相反:In Emacs, how do I use directory local variables for remote projects?),但我想允许至少访问当前目录中的.dir-locals.el。文件Emacs正在编辑或对GIT_CEILING_DIRECTORIES变量实施类似的解决方案(其中git在到达此变量中定义的特定目录后停止寻找.git)。

很不幸,我没有使用Emacs的经验。

编辑:当我在strace中运行emacs testfile时,来自/tmp/test/a/b/c/d的示例。

stat("/tmp/test/a/b/c/d/.dir-locals.el", 0x7ffe15dd1ee0) = -1 ENOENT (No such file or directory) 
stat("/tmp/test/a/b/c/.dir-locals.el", 0x7ffe15dd1ee0) = -1 ENOENT (No such file or directory) 
stat("/tmp/test/a/b/.dir-locals.el", 0x7ffe15dd1ee0) = -1 ENOENT (No such file or directory) 
stat("/tmp/test/a/.dir-locals.el", 0x7ffe15dd1ee0) = -1 ENOENT (No such file or directory) 
stat("/tmp/test/.dir-locals.el", 0x7ffe15dd1ee0) = -1 ENOENT (No such file or directory)  
stat("/tmp/.dir-locals.el", 0x7ffe15dd1ee0) = -1 ENOENT (No such file or directory)  
stat("/.dir-locals.el", 0x7ffe15dd1ee0) = -1 ENOENT (No such file or directory)

例如在/home/user/a/b/c/d中不会发生这种情况,并且到达/home/user时它会停止寻找。

EDIT2:有关为什么我正在寻找解决方案的更多信息:
目录/mnt/groups/是自动挂载目录,例如/mnt/groups/project1/mnt/groups/workA/mnt/groups/final_presentation,允许用户在其中工作。当用户在内部启动Emacs时/mnt/groups/project1/documentation,Emacs通过每个父子目录搜索.dir-locals.el.bzr.git_MTN等,直到到达/。我使用vc-ignore-dir-regexp(在site-start.d中的文件中,因此会全局应用)来阻止它在/mnt/groups之后寻找与版本控制相关的目录,但是我无法阻止它执行.dir-locals.el也是一样。虽然我在自动挂载程序中将.dir-locals.el列入了黑名单(所以对于我的问题,部分解决方案已经存在),但我还是希望完全停止Emacs遍历所有父子目录。我尝试设置locate-dominating-stop-dir-regexp,但似乎并没有影响寻找.dir-locals.el,除非它与vc-ignore-dir-regexp发生冲突。不幸的是,正如我提到的那样,我没有使用Emacs的经验(我自己没有使用过它),所以我无法理解如何编写更高级的东西。

1 个答案:

答案 0 :(得分:0)

答案确实是在locate-dominating-stop-dir-regexp中添加了一个正则表达式。我没有为Emacs中的regexp提供正确的格式。

/usr/share/emacs/site-lisp/site-start.d/中的.el文件中添加以下内容:

(setq locate-dominating-stop-dir-regexp (concat locate-dominating-stop-dir-regexp "\\|\\`/mnt\\/groups\\/\\'" ))

起到了作用。