O save-some-buffers
comando solicita salvar ou ignorar cada arquivo modificado e também fornece uma opção para diferenciar o arquivo modificado no arquivo que está visitando.
Eu gostaria do mesmo comportamento de kill-buffer
ou kill-this-buffer
. Se o buffer for modificado, já existe um prompt de sim / não, mas eu também gostaria da opção de ver as diferenças.
Existe uma maneira interna de fazer isso ou um ponto de extensão apropriado? Ou devo apenas ligar meu próprio comando kill-buffer?
buffers
kill-buffer
glucas
fonte
fonte
defadvice
. Isso permitirá que você estenda facilmente o built-inkill-buffer
.buffer-modified-p
e chamar o originalkill-buffer
para continuar matando sem outro aviso. Gostaria de saber se existe uma maneira melhor, mas pode dar uma chance.save-some-buffers
há alguns anos e nunca soube que tem umdiff
recurso ... Obrigado!Respostas:
A grande questão é se você deseja esse comportamento por
kill-buffer
si só, o que significa não apenas quando você o chama de maneira interativa, mas para todo uso no código Lisp existente, ou se você deseja apenas para uso interativo.Eu vou assumir o último. Nesse caso, deixe em
kill-buffer
paz, defina seu próprio comando que faça o que você deseja e remapeie as chaves que normalmente estão vinculadaskill-buffer
ao seu comando:Para seu
my-kill-buffer
comando, basta verificar desde o início se o buffer foi modificado e, em caso afirmativo, inicieediff
-o.Para verificar se foi modificado, use
buffer-modified-p
.Para
ediff
você, você provavelmente desejaria pegar o arquivo (ou seja, o buffer como salvo) e diferenciá-lo do atual buffer modificado. Você pode precisar mexer um pouco para fazer isso - não conheço umediff
comando existente que faça isso.Mas talvez tudo o que você realmente precise seja algo parecido
highlight-changes-mode
. Veja o manual do Emacs, nóHighlight Interactively
. Em outras palavras, talvez tudo o que você precise é invocarhighlight-changes-mode
se o buffer foi modificado.fonte
diff-buffer-with-file
para produzir as diferenças. Também parece que eu preciso ligarset-buffer-modified-p
se quiser continuar e matar sem ser solicitado novamente a partir da implementação nativa.Com base nas outras respostas e comentários, aqui está um comando kill personalizado que fornece a opção de diferenciar um buffer modificado com o arquivo que ele está visitando. Eu mapeei isso para,
C-x C-k
mas também poderia remapearkill-buffer
como sugerido na resposta de @ Drew.Usando a mesma implementação básica, você também pode aconselhar
kill-buffer
. Com essa abordagem, você tem a opção de ver diferenças em qualquer lugar quekill-buffer
seja chamado - por exemplo, ao eliminar buffers marcados do Ibuffer.fonte