Como definir o modo principal para um arquivo em .dir-locals.el?

7

Eu gostaria de definir o modo principal de um arquivo como você usaria variáveis ​​locais do arquivo

Local Variables:
mode: text
End:

mas .dir-locals.elpara não "poluir" o arquivo em questão. Isso é possível?

xebtl
fonte
Isso é apenas para uso pessoal ou é algo que você deseja compartilhar? Existem várias maneiras de resolver isso no elisp, em vez de recorrer a variáveis ​​de diretório local.
Phs #
@phils Seria bom ter uma solução compartilhável, razão pela qual pensei em dir-locais. Mas, na prática, é mais ou menos pessoal. (É improvável que seja compartilhado com muitas pessoas e quem sabe se usa emacs e / ou se importa).
Xbtl
Está bem. Eu acho que utilizar a evalpseudo-variável é a única maneira de lidar com isso em um .dir-locals.elarquivo. Para elisp customizado, você pode usar apenas auto-mode-alistpara corresponder ao nome do arquivo regexp (você pode usar regexp-quotepara criar padrões para valores de sequência literal, se necessário).
Phillip # php #

Respostas:

4

É possível especificar uma string em vez de um modo, mas isso funciona apenas para subdiretórios. Então, em nilvez disso, usarei para combinar todos os modos e, em seguida, a evaltecla para alterar o modo principal condicionalmente:

((nil
  (eval
   (lambda ()
     (when (string= (file-name-nondirectory buffer-file-name)
                    "file-name.extension")
       (my-mode))))))

Uma desvantagem dessa abordagem é que a evalchave é insegura; portanto, você precisará confirmar permanentemente a variável para que isso tenha efeito.

wasamasa
fonte
Obrigado, isso funciona. Alguém poderia explicar a diferença com o seguinte formulário? `` `` ((nil. ((eval. (lambda () (when (string = (nome-do-arquivo-não-diretório) (nome-do-buffer)) "nome do arquivo") (meu modo))))))) `` ``
Swarnendu Biswas
2

A seguir, .dir-locals.elfunciona muito bem para eu definir o modo principal de todos os arquivos em um diretório para shell-script-mode:

((nil . ((mode . shell-script))))

A desvantagem óbvia é que você não pode especificar o modo principal apenas para um determinado subconjunto de arquivos no diretório.

Adendo: Divertidamente, ele também tem o efeito colateral de definir o modo principal de .dir-locals.elsi mesmo shell-script-mode.

Adendo 2: De maneira mais divertida, ele também tem o efeito colateral de definir o modo principal de buffers Dired shell-script-mode, tornando impossível abrir qualquer (como um erro é gerado durante a inicialização).

Radon Rosborough
fonte