>From 60d90c030a5b9a86a778df8650a597e922f2a907 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. --- doc/emacs/files.texi | 8 +++++--- etc/NEWS | 5 +++++ lisp/files.el | 10 +++++++++- 3 files changed, 19 insertions(+), 4 deletions(-) diff --git a/doc/emacs/files.texi b/doc/emacs/files.texi index 917e937d32d..c791a6f1c98 100644 --- a/doc/emacs/files.texi +++ b/doc/emacs/files.texi @@ -1325,9 +1325,11 @@ Recover @end example Before asking for confirmation, @kbd{M-x recover-file} displays a -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. +directory listing describing the specified file and the auto-save +file, so you can compare their sizes and dates. If you answer +@kbd{diff}, it shows the diff between @var{file} and its auto-save +file @file{#@var{file}#}. If the auto-save file is older, @kbd{M-x +recover-file} does not offer to read it. @findex recover-session If Emacs or the computer crashes, you can recover all the files you diff --git a/etc/NEWS b/etc/NEWS index 29f4e5c0b66..f69595ef188 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -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 diff between auto save file and current file. +When answering the prompt with "diff" or "=", it now shows the diff +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 1cdcec23b11..d70524e4775 100644 --- a/lisp/files.el +++ b/lisp/files.el @@ -7083,7 +7083,15 @@ recover-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" ?= "diff auto save file with 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.42.0