Qual é a maneira mais rápida de recarregar meu arquivo .emacs quando faço alterações, para que todos os meus buffers afetados as capturem?

27

Estou ciente de C-x C-equal é eval-last-sexpe M-x eval-buffer, mas nem sempre são suficientes para captar todas as alterações. Às vezes, você precisa fechar os buffers que estão nos modos que tiveram suas configurações alteradas e outras vezes, você precisa reiniciar o emacs completamente. Existe uma maneira mais geral de lidar com esse problema? Como alternativa, existe uma maneira de reiniciar o emacs sem perder os buffers abertos existentes e o histórico interativo?

b4hand
fonte
Como @ b4hand inicialmente previsto este é essencialmente uma pergunta com base em uma das questões propostas: area51.stackexchange.com/proposals/76571/emacs/76588#76588
tarsius

Respostas:

16

Não, não é possível recarregar a configuração modificada e fazer com que o Emacs se comporte como se essas modificações já estivessem em vigor quando o Emacs foi carregado. Em resumo, os pacotes Emacs têm muita liberdade para que isso seja viável.

Você menciona que alguns dos principais modos não captam alterações na configuração. Uma razão provável para isso é que a ativação do modo define algumas variáveis ​​locais do buffer com base nos valores atuais de certas opções. Sem reativar esse modo em cada buffer que o utiliza, nem todas as alterações serão captadas. E mesmo assim é bem possível que algumas coisas permaneçam inalteradas. As chances desse trabalho são maiores quando as opções são personalizadas usando um custom-set-variablesformulário, mas isso deve ser implementado explicitamente para cada opção. E até agora só falamos sobre os principais modos e suas opções ...

Você pode tentar implementar um comando para reativar o modo principal de cada buffer. Mas é improvável que habilite totalmente todas as alterações e, pior ainda, desabilite todos os modos menores que você ativou manualmente e perca todos os tipos de outros estados.

Por esse motivo, eu até recomendaria não eval-bufferincluir seu arquivo init para pegar o maior número possível de alterações. Avalie as configurações alteradas individualmente usando eval-last-sexpe, se isso não funcionar, bem, você precisará reiniciar o Emacs.

Como o estado pode ser preservado quando o Emacs é fechado é uma pergunta diferente que deve ser feita separadamente.

tarso
fonte
Eu fiz a pergunta de reinicialização aqui: emacs.stackexchange.com/questions/639/…
b4hand
3

Às vezes, você precisa realmente fechar buffers que estão nos modos que tiveram suas configurações alteradas

A chamada normal-modeé uma maneira útil de reativar todos os modos de um determinado buffer, se você tiver feito alterações nesses ganchos ou nos ganchos associados.

Você também pode usar revert-buffer(quais chamadas normal-mode), que é como recarregar o arquivo sem descartar o histórico de desfazer.

(Você também pode recarregar um arquivo com C-xC-v, mas isso vai descartar o seu histórico de desfazer.)

Ao M-x ibufferdigitar em maiúsculas, Vreverte todos os buffers marcados, enquanto em maiúsculas Ee Wpermite avaliar o elisp arbitrário para todos os buffers marcados.

phils
fonte