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.
This commit is contained in:
Visuwesh 2023-12-06 13:45:03 +05:30 committed by Eli Zaretskii
parent 51a296014b
commit c4541a3577
3 changed files with 18 additions and 1 deletions

View file

@ -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

View file

@ -258,6 +258,11 @@ called in the '--eval' expression, which is useful when those
arguments contain arbitrary characters that otherwise might require
elaborate and error-prone escaping (to protect them from the shell).
+++
** '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

View file

@ -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