ограничить поиск .dir-locals.el в подкаталогах - PullRequest
0 голосов
/ 22 января 2019

быстрый вопрос на тот случай, если кто-то сделал это раньше:

Я пытаюсь помешать Emacs попытаться рекурсивно открыть .dir-locals.el во всех родительских подкаталогах при открытии файла.Я нашел, как полностью остановить его (принудительно заставив все файлы быть удаленными - противоположность этому: В Emacs, как использовать локальные переменные каталога для удаленных проектов? ), но я хотел бы разрешить доступпо крайней мере, .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 голосов
/ 24 января 2019

Ответ действительно добавляет регулярное выражение в locate-dominating-stop-dir-regexp.Я не предоставлял правильный формат для регулярного выражения в Emacs.

Добавление следующего в файл .el в /usr/share/emacs/site-lisp/site-start.d/:

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

помогает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...