Comment afficher les diff quand emacs suggère de récupérer ce fichier?

51

Cela se produit parfois: emacs vous invite à récupérer les modifications non enregistrées dans un fichier, mais vous ne pouvez pas vous souvenir si vous souhaitez ou non ces modifications.

À partir de la recover-this-filemémoire tampon, existe-t-il un moyen d'afficher un diff ou de voir directement les modifications?

Par exemple, quelque chose comme ce magit-modequi se passe quand on tabule sur un fichier édité dans le tampon d'état.

Sparx
la source

Réponses:

51

Après avoir exécuté recover-this-fileet accepté la version avec sauvegarde automatique, vous disposez d'un tampon modifié contenant le contenu de la sauvegarde automatique. À ce stade, vous pouvez utiliser M-x diff-buffer-with-file RETpour voir les différences entre le tampon modifié et le fichier enregistré.

La clé à laquelle je me suis adressé exécute en fait une fonction personnalisée afin de produire un diff unifié et d'ignorer l'invite du tampon (elle suppose le tampon actuel).

(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))))

Il existe également un équivalent ediff (que je préfère généralement, bien que j’utilise les deux), qui est disponible à l’adresse suivante: M-x ediff-current-file RET

Si vous souhaitez rejeter les modifications après avoir vérifié le diff, vous devriez pouvoir simplement undorécupérer. (A défaut, vous pouvez toujours utiliser revert-bufferou find-alternate-file.)

Comme les raccourcis clavier pour les commandes diff impliquent souvent =, je trouve la solution suivante pratique (nb, j'ai dissocié la C-zliaison par défaut et je l'ai déplacée à la place C-z C-z, qui s'ouvre C-zcomme préfixe pour les liaisons personnalisées):

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