Цифровой садик - приветственная

Цифровой садик - приветственная | Полный список всего, что тут есть | RSS | Подписаться через follow.it

19.09.2022

dir-locals

Название файла: .dir-locals.el

The following therefore displays a message when you visit any file (under the directory in question):

((nil . ((eval . (message "hello")))))

The car of each list in the dir-locals form is generally a major mode symbol, or nil (as in the above example) in which case the settings apply in any major mode.

The car can also specify a sub-directory string, in which case the cdr is another dir-locals form with settings applicable to that sub-dir.

https://stackoverflow.com/questions/7334565/how-can-i-move-php-mode-settings-from-emacs-to-dir-locals-el/7340962#7340962 Directory local variables are just that – variables; not elisp forms to be evaluated. Fortunately, that is provided for via the eval pseudo-variable:

((php-mode
  (indent-tabs-mode . t)
  (c-basic-offset . 4)
  (tab-width . 4)
  (eval . (progn
            (c-set-style "bsd")
            (c-set-offset 'arglist-close 'c-lineup-arglist-operators)
            (c-set-offset 'arglist-intro 'c-basic-offset)
            (c-set-offset 'arglist-cont-nonempty 'c-lineup-math)
            (c-set-offset 'case-label '+)))))

Emacs will ask you to confirm that the code is safe when it encounters it, and will save it to the safe-local-variable-values list in the custom-set-variables sections of your init file if you wish.

If you are setting variables in an eval form, take care that you are setting buffer-local values (as a general rule, just use setq-local instead of setq in these cases).

M-: (info "(emacs)Directory Variables")

https://stackoverflow.com/questions/33457580/evaluate-values-in-dir-locals

projectile dir-locals

Настройки могут отличаться от проекта к проекту, даже если это один язык. На этот случай есть .dir-locals.el, чтоб устанавливать настройки конкретно для каталога (и подкаталогов) проекта. В projectile можно открыть так: C-c p E (M-x projectile-edit-dir-locals RET).

В файле может быть что-то такое:

((nil . ((secret-ftp-password . "secret")
         (compile-command . "make target-x")
         (eval . (progn
                   (defun my-project-specific-function ()
                     ;; ...
                     ))))
 (c-mode . (c-file-style . "BSD")))

Скобочки надо ещё пересчитать, что-то я в них не уверена.

Projectile предлагает много настроек через defcustom. Эти же настройки для отдельного проекта пишутся в dir-locals.el.

Так можно включить кэширование только для отдельного проекта:

((nil . ((projectile-enable-caching . t))))

Так добавить игнорируемый файл:

((nil . ((projectile-globally-ignored-files . '("MyBinaryFile")))))

Так поменять название проекта в modeline. И именно этим я пользуюсь!

((nil . ((projectile-project-name . "your-project-name-here"))))

Преднастроить типовые команды

There are a few variables that are intended to be customized via .dir-locals.el.

for configuration projectile-project-configure-cmd C-c p C
for compilation projectile-project-compilation-cmd C-c p c
for testing projectile-project-test-cmd C-c p P
for installation projectile-project-install-cmd C-c p L
for packaging projectile-project-package-cmd C-c p K
for running projectile-project-run-cmd C-c p u

Если там nil, их значение по умолчанию, то projectile будет предлагать соответствующую команду по умолчанию для этого типа проектов.

Если указать строку, emacs будет предлагать запустить её как внешнюю команду. Что удобно. Либо можно указать елисповую функцию:

(setq projectile-test-cmd #'custom-test-function)

или, скажем,

(setq projectile-test-cmd "make tests")

Запускается это в буфере компиляции. Если там не надо никакого интерактива, то оставить как есть. И скажем, мочь попросить рестартнуть процесс кнопочкой g. Если надо, можно сделать projectile-<cmd>-use-comint-mode (где <cmd> — configure, compile, test, install, package или run) t. Тогда соответствующая команда будет запускаться в comint, и можно будет с ней как-то общаться по идее. :)

Или указать сразу для всех:

(setq projectile-comint-mode t)

Если у вас есть мысли, комментарии, предложения или отклики по поводу этой страницы или этого цифрового сада в целом, напишите мне сообщение на agnessa@agnessa.pp.ru. Мне ооочень интересно!

Задонатить.


An IndieWeb Webring 🕸💍