Eu gosto da ideia de .dir-locals.el
. Eu tenho meu próprio .dir-locals.el
arquivo no meu diretório pessoal que deve definir todas as variáveis para os diretórios / arquivos que abro, a menos que exista .dir-locals.el
mais perto do diretório em que abro o arquivo. No entanto, mesmo que o arquivo seja reconhecido, as variáveis de diretório para subdiretórios não são aplicado aos arquivos abertos.
Este é o meu ~/.dir-locals.el
:
(("dev/school" .
((indent-tabs-mode . nil)
(c-basic-offset . 4)))
("dev/test" .
((indent-tabs-mode . nil)
(c-basic-offset . 4)))
(c-mode .
((c-file-style . "linux")
(c-basic-offset . 8))))
Quando abro o arquivo, ~/dev/test/test.c
a variável indent-tabs-mode
é definida como t
e c-basic-offset
é 8
.
(describe-variable 'c-basic-offset)
nesse arquivo diz que está definido para 8
from ~/.dir-locals.el
.
(describe-variable 'indent-tabs-mode)
nesse arquivo diz que seu valor ( t
) está no estado padrão.
Posso de alguma forma alcançar o comportamento desejado? O que estou fazendo de errado? Como os caminhos de arquivo são mapeados para os subdiretórios ~/.dir-locals.el
?
Editar:
Como Jonathan sugeriu , eu também tentei:
(;; dev/school subdir
("dev/school" .
;; dev/school specification for all modes
(nil . ((indent-tabs-mode . nil)
(c-basic-offset . 4)))))
e até o que add-dir-local-variable
acrescentou:
(("dev/school"
(indent-tabs-mode)
(c-basic-offset . 4)))
Infelizmente, nenhum deles funciona.
add-dir-local-variable
e foi adicionado a~/.dir-locals.el
com a sintaxe ainda mais curto do que eu costumava na questão:("dev/test" (indent-tabs-mode))
. Ainda não funciona, no entanto.("dev/test" . ((spec1 ...) (spec2 ...) ...))
((org-mode . ((org-indent-mode . t))) ("subdir" . ((nil . ((org-indent-mode . nil))))
e funcionou corretamente (solicitado a definir var local como nulo). Talvez tente colocar as raízes acima das especificações do subdiretório na lista, é possível que ele defina o último valor encontrado.