Получение текущего каталога в Emacs Lisp - PullRequest
3 голосов
/ 07 мая 2011

Я пытаюсь написать файл .dir-locals.el.Я хочу, чтобы динамически найти каталог, в котором находится файл, и объединить его с "TAGS".Это была моя первая попытка:

((nil . ((tags-file-name . (concat default-directory "TAGS")))))

Это не работает.Я не эксперт по Emacs Lisp.Что с ним не так?

Ответы [ 4 ]

2 голосов
/ 01 января 2017

В Linux, как насчет:

(getenv "PWD")
2 голосов
/ 31 июля 2011

Комбинируя решение sanityinc и какой-то другой фрагмент, который я нашел в другом месте, я получаю:

((nil . ((eval . (setq tags-file-name (concat (locate-dominating-file buffer-file-name ".dir-locals.el") "TAGS"))))))

Я думаю, что он делает то, что вы хотите (немного неэффективно, так как мы должны искать .dir-locals.el дважды).

1 голос
/ 07 мая 2011

Технически, вам нужно было бы сделать что-то подобное, чтобы получить формы кода для оценки внутри .dir-locals.el:

((nil . ((eval . (setq tags-file-name (concat default-directory "TAGS"))))))

Однако я попробовал это, и default-directory выглядит как nilв то время, когда код в dir-locals выполняется, поэтому кажется невозможным делать то, что вы пытаетесь.

Тем не менее, tags-file-name не похоже на то, что он должен быть установлен вручную.Скорее, он устанавливается кодом тегов при первом доступе к файлу тегов.

Так почему бы не оставить его неустановленным и просто использовать функции тегов?TAGS - это имя файла тега по умолчанию, в конце концов.

Редактировать : вы также можете рассмотреть возможность использования дополнительной библиотеки project-local-variables, которая использует аналогичный для каждого проекта .elфайл, но более гибок в отношении кода, который вы можете поместить в него.Вот как я бы лично решил вашу проблему.

0 голосов
/ 07 мая 2011

Мне не ясно, что вы хотите, но (concat default-directory "TAGS") выглядит правильно.

Если вы хотите установить переменную tags-file-name, вы можете сделать это следующим образом: (setq tags-file-name (concat default-directory "TAGS")).

...