From 2db68d0a2714e360720e390acebcbf465117a746 Mon Sep 17 00:00:00 2001 From: Visuwesh Date: Wed, 6 Dec 2023 13:45:03 +0530 Subject: [PATCH] Offer to show diff against auto-save in recover-file * lisp/files.el (recover-file): Show diff against the selected auto save file. (Bug#52242) * doc/emacs/files.texi (Recover): Document the new feature. * etc/NEWS: Announce the new feature. (cherry picked from commit c4541a35770fe7925f733fcdaa9e4e3348a3c85c) --- doc/emacs/files.texi | 4 ++++ etc/NEWS | 6 ++++++ lisp/files.el | 10 +++++++++- 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/doc/emacs/files.texi b/doc/emacs/files.texi index 917e937d32d..832c189ce49 100644 --- a/doc/emacs/files.texi +++ b/doc/emacs/files.texi @@ -1329,6 +1329,10 @@ directory listing describing the specified file and the auto-save file, so you can compare their sizes and dates. If the auto-save file is older, @kbd{M-x recover-file} does not offer to read it. +When @kbd{M-x recover-file} asks for confirmation, if you answer with +@kbd{diff} or @kbd{=}, it shows the diffs between @var{file} and its +auto-save file @file{#@var{file}#} and reprompts you for confirmation. + @findex recover-session If Emacs or the computer crashes, you can recover all the files you were editing from their auto save files with the command @kbd{M-x diff --git a/etc/NEWS b/etc/NEWS index 7edcd6c9dd8..a56dab1b58c 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -271,6 +271,12 @@ customize this option to nil. For example, 'jump-to-register' now only shows registers that you can actually jump to in the *Register Preview* buffer. ++++ +** 'recover-file' can show diffs between auto save file and current file. +When answering the prompt with "diff" or "=", it now shows the diffs +between the auto save file and the current file. + + * Editing Changes in Emacs 30.1 diff --git a/lisp/files.el b/lisp/files.el index f87e7807301..21f3376016c 100644 --- a/lisp/files.el +++ b/lisp/files.el @@ -7083,7 +7083,15 @@ auto-save file, if that is more recent than the visited file." #'(lambda (window _value) (with-selected-window window (unwind-protect - (yes-or-no-p (format "Recover auto save file %s? " file-name)) + (let ((prompt (format "Recover auto save file %s? " file-name)) + (choices + '(("yes" ?y "recover auto save file") + ("no" ?n "don't recover auto save file") + ("diff" ?= "show changes between auto save file and current file"))) + ans) + (while (equal "diff" (setq ans (read-answer prompt choices))) + (diff file file-name)) + (equal ans "yes")) (when (window-live-p window) (quit-restore-window window 'kill))))) (with-current-buffer standard-output -- 2.39.5