Posso definir um arquivo específico para aceitar alterações automática e silenciosamente?

9

Ou seja, posso especificar para um arquivo específico que não quero que o Emacs me notifique que o arquivo foi alterado no disco e me pergunte se quero aceitar alterações ou não? Não quero fazer isso globalmente, apenas para arquivos que eu sei que serão alterados frequentemente fora do Emacs (em particular, arquivos Org relacionados ao calendário).

emacsomancer
fonte

Respostas:

8

Você pode fazer isso para um buffer específico com M-x auto-revert-mode( manual ). Para buffers de arquivo, isso verifica a cada auto-revert-intervalsegundo (o padrão é 5) para alterações e atualiza o buffer do disco automaticamente.

Seu título diz "um arquivo específico", enquanto o corpo da sua pergunta menciona um tipo de arquivo (arquivos organizacionais). Dependendo das circunstâncias, aqui estão algumas maneiras de definir esse modo para obter o efeito desejado de maneira persistente. Os métodos anteriores são sem dúvida mais limpos e mais eficientes se eles se aplicam ao seu caso de uso específico.

Se você sabe que deseja isso para todos os arquivos de um determinado tipo, considere adicionar um gancho de modo à sua configuração init.

(add-hook 'org-mode-hook (lambda () (auto-revert-mode 1)))

Se você sabe que deseja tudo em um determinado diretório, considere configurá-lo em .dir-locals.el no local relevante, certificando-se de que VCS ignora o arquivo de configurações locais, se apropriado. Este exemplo será aplicado a todos os buffers do modo organizacional para arquivos no mesmo diretório (e subdiretórios). Você também pode executar M-x add-dir-local-variablepara que o Emacs gere e salve isso automaticamente.

(
  (org-mode . ((auto-revert-mode . 1)))
 )

Se nenhuma das duas abordagens acima funcionar bem para você, considere uma variável local do arquivo definida em cada arquivo. A maneira mais curta e geral de definir uma delas é incluir o seguinte na primeira linha do arquivo de destino:

-*- eval: (auto-revert-mode 1); -*-

Nos arquivos de origem, o texto pode seguir um delimitador de comentário (//, #, etc). Você pode executar M-x add-file-local-variable-proplinepara que o Emacs gere isso automaticamente, ou M-x add-file-local-variablepara um formato que use a parte inferior do arquivo em vez da parte superior.

Use esse método apenas se você não estiver compartilhando o arquivo com mais ninguém. No manual GNU :

Muitas vezes, é um erro especificar modos menores dessa maneira. Os modos secundários representam preferências individuais do usuário e pode ser inapropriado impor suas preferências a outro usuário que possa editar o arquivo. Se você deseja ativar ou desativar automaticamente um modo menor de uma maneira dependente da situação, geralmente é melhor fazê-lo em um gancho de modo principal.

Mian
fonte
2
Não é (auto-revert-mode 1)uma maneira canônica de ativar um modo menor em vez de setq?
mbork
11
Sim, você está certo. Limpando esse exemplo em um segundo. Obrigado.
Mian
11
De nada. (Dito isto, AFAIU, as variáveis locais de arquivo são os mais adequados para o caso de uso do OP.)
mbork
11
Tu podes estar certo. OMI depende dos detalhes de sua organização de arquivos. Se os arquivos que eles sabem que serão alterados frequentemente fora do emacs são todos arquivos organizacionais ou estão no mesmo local (por exemplo, um diretório do Dropbox), uma abordagem baseada em modo ou em diretório pode ser mais fácil e limpa, evitando bagunçando seus arquivos como um bônus.
Mian
2
Para interagir com esses dois métodos, existem add-file-local-variablee add-dir-local-variable.
Sean Allred
3

Sim. Coloque isso no final do seu arquivo.

* COMMENT Config
Local Variables:
eval: (auto-revert-mode 1)
End:

Isso pressupõe o modo Org. Para outros modos, use comentários no idioma usado, conforme explicado no link fornecido abaixo.

Nota: consulte Variáveis ​​locais em arquivos no manual para obter informações detalhadas, de segurança e uma ressalva de que isso nem sempre é uma boa ideia. Além disso, a seção sobre reversão diz, por exemplo, como alterar o intervalo padrão de 5 segundos para a reversão automática.

mbork
fonte
Isso absolutamente precisa estar no final? Eu tenho um script que está gerando .org arquivos e eu tive que colocá-lo em perto do início - o que não parece trabalho ....
emacsomancer
11
Sim, veja o link. E veja outras respostas para uma solução de primeira linha.
mbork