Qual é uma boa maneira de ter um gancho que seja executado para cada arquivo em um determinado diretório?


7

Qual é uma boa maneira de atribuir uma função a ser executada quando abro qualquer arquivo em um diretório especificado? Assim como um gancho, mas com base na localização de um arquivo, e não no modo principal.

Seria bom se eu pudesse habilitar isso tendo um arquivo especial no diretório, mas adicionar o gancho no meu arquivo de configuração central também seria bom.

Respostas:


7

find-file-hook, e na sua função de gancho, verifique se o arquivo candidato está no diretório especificado.


Sim, parece que vai funcionar. Eu simplesmente não consegui encontrar esse gancho específico via Google.
Tikhon Jelvis

2
Pergunte ao Emacs , não ao Google. M-x apropos-variable RET file hook.
Tirou

6

Isso soa para o que servem as variáveis locais do diretório . Basta criar um .dir-locals.elarquivo no diretório com as configurações desejadas e todos os arquivos herdarão essas configurações.


Essa opção tem a vantagem de não codificar as configurações e os diretórios relevantes no arquivo de configuração principal.
27515 Tom T. Verron

1
;;; .dir-locals.el

((nil
  (eval add-hook 'find-file-hook (lambda ()
                                   (message "my find-file hook called...")) nil t)))

Os nilmeios que isso se aplica a todos os arquivos nos diretórios abaixo .dir-locals.el.

O tpassado para add-hooktorna o find-file-hookbuffer local. Portanto, o gancho é executado apenas para este arquivo.

dir-localsé executado antes find-file-hook, então tudo funciona.


2
Bem-vindo ao mx.sx! A idéia é boa, e acho que a resposta de @erikstokes se beneficiaria de um exemplo, mas parece que seu exemplo está incorreto: depois que um arquivo é aberto no diretório, a função será adicionada find-file-hooke executada para todos os arquivos que são abertos depois, não é?
27515 Tom T. Verron

Por que não executar o código diretamente?
politza 27/06
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.