Como visualizar diff quando o emacs sugere recuperar este arquivo?

51

Às vezes acontece: o emacs solicita que você recupere alterações não salvas em um arquivo, mas você não consegue se lembrar se deseja ou não essas alterações.

Começando no recover-this-filebuffer, existe uma maneira de visualizar um diff ou de outra forma ver diretamente as alterações?

Por exemplo, algo parecido com o que magit-modeé fornecido ao tabular um arquivo editado no buffer de status.

Sparx
fonte

Respostas:

51

Depois de executar recover-this-filee aceitar a versão de salvamento automático, você terá um buffer modificado contendo o conteúdo do salvamento automático. Neste ponto, você pode usar M-x diff-buffer-with-file RETpara ver as diferenças entre o buffer modificado e o arquivo salvo.

A chave que eu limitei para isso realmente executa uma função personalizada, a fim de produzir um diff unificado e ignorar o prompt do buffer (ele assume o buffer atual).

(defun my-diff-buffer-with-file ()
  "Compare the current modified buffer with the saved version."
  (interactive)
  (let ((diff-switches "-u")) ;; unified diff
    (diff-buffer-with-file (current-buffer))))

Há também um equivalente ediff (que geralmente prefiro, embora eu use os dois) disponível em M-x ediff-current-file RET

Se você deseja rejeitar as modificações depois de verificar o diff, você poderá simplesmente undorecuperar a recuperação. (Se você sempre pode usar revert-bufferou find-alternate-file.)

Como as combinações de teclas para os comandos diff geralmente envolvem =, acho o seguinte conveniente (nb, desvinculei a C-zligação padrão e a movi para C-z C-z, que se abre C-zcomo um prefixo para ligações personalizadas):

(global-set-key (kbd "C-z =") 'my-diff-buffer-with-file)
(global-set-key (kbd "C-z C-=") 'ediff-current-file)
phils
fonte