一个简短的问题,以防有人之前做过:
我正试图阻止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的经验(我自己没有使用过它),所以我无法理解如何编写更高级的东西。
答案 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\\/\\'" ))
起到了作用。