Subject: Re: bug#32214: [PATCH] 'message-kill-buffer': fix backup delete question

From: Sven Willner <[email-masked]>
Date: Tue, 24 Jul 2018 16:40:03 +0200

hmm, having a second look into message-disassociate-draft, I am 
still not sure what is supposed to happen there.

anyway, my motivation for the patch was to eliminate a rather 
annoying (since unnecessary) question to remove a non-existing 
backup/auto save file. here is the minimal patch (without any 
further changes to the code) doing so.

I think, it makes sense to also check for the existing file-name 
to only remove a backup file if there is a properly saved message, 
too.

>From 754d5c02f6b8c47c59fdd88e3c71f1a74761591a Mon Sep 17 00:00:00 2001
From: Sven Willner <[email-masked]>
Date: Thu, 19 Jul 2018 13:20:26 +0200
Subject: [PATCH] 'message-kill-buffer': fix backup delete question

Before 'message-kill-buffer' would ask to delete backup file if draft has been
saved regardless if a backup file has actually been created. Now only ask if
a backup file exists.

Copyright-paperwork-exempt: yes
---
 etc/NEWS             |  3 +++
 lisp/gnus/message.el | 42 +++++++++++++++++++++---------------------
 2 files changed, 24 insertions(+), 21 deletions(-)

diff --git a/etc/NEWS b/etc/NEWS
index f30ab69823..55997b1bf2 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -562,6 +562,9 @@ GnuTLS manual) is recommended instead.
 
 ** Message
 
+---
+*** 'message-kill-buffer' asks to delete backup file only if one actually exists
+
 +++
 *** Messages can now be systematically encrypted
 when the PGP keyring contains a public key for every recipient.  To
diff --git a/lisp/gnus/message.el b/lisp/gnus/message.el
index dde9c28656..e830d7f239 100644
--- a/lisp/gnus/message.el
+++ b/lisp/gnus/message.el
@@ -4085,20 +4085,19 @@ Instead, just auto-save the buffer and then bury it."
 	  (modified (buffer-modified-p)))
       (setq buffer-file-name nil)
       (kill-buffer (current-buffer))
-      (when (and (or (and auto-save-file-name
-			  (file-exists-p auto-save-file-name))
-		     (and file-name
-			  (file-exists-p file-name)))
-		 (progn
-		   ;; If the message buffer has lived in a dedicated window,
-		   ;; `kill-buffer' has killed the frame.  Thus the
-		   ;; `yes-or-no-p' may show up in a lowered frame.  Make sure
-		   ;; that the user can see the question by raising the
-		   ;; current frame:
-		   (raise-frame)
-		   (yes-or-no-p (format "Remove the backup file%s? "
-					(if modified " too" "")))))
+      (when (and auto-save-file-name
+                 (file-exists-p auto-save-file-name)
+                 file-name
+                 (file-exists-p file-name)
+                 (progn
+                   ;; If the message buffer has lived in a dedicated window,
+                   ;; `kill-buffer' has killed the frame.  Thus the
+                   ;; `yes-or-no-p' may show up in a lowered frame.  Make sure
+                   ;; that the user can see the question by raising the
+                   ;; current frame:
+                   (raise-frame)
+                   (yes-or-no-p (format "Remove the backup file%s? "
+                                        (if modified " too" "")))))
 	(ignore-errors
 	  (delete-file auto-save-file-name))
 	(let ((message-draft-article draft-article))
--
2.18.0

Noam Postavsky <[email-masked]> writes:

> Sven Willner <[email-masked]> writes:
>
>> also, the 'when' part should only include the actual deletion 
>> of the
>> backup file
>>>     (ignore-errors
>>>       (delete-file auto-save-file-name))
>> rather than also draft diassociation
>>>     (let ((message-draft-article draft-article))
>>>       (message-disassociate-draft)))
>> also fixed in the updated patch.
>
>
>> Subject: [PATCH] 'message-kill-buffer': fix backup delete 
>> question
>>
>> Before 'message-kill-buffer' would ask to delete backup file if 
>> draft has been
>> saved regardless if a backup file has actually been created. 
>> Now only ask if
>> a backup file exists.
>
>> + (when (and auto-save-file-name
>> + (file-exists-p auto-save-file-name)
>> + file-name
>> + (file-exists-p file-name)
>
> Does it still make sense to check for file-name here? If we're 
> just
> deleting the auto save file, we should probably check for that 
> only (but
> see below, I'm not sure if this is actually correct).
>
>> + (progn
>> + ;; If the message buffer has lived in a dedicated window,
>> + ;; `kill-buffer' has killed the frame. Thus the
>> + ;; `yes-or-no-p' may show up in a lowered frame. Make sure
>> + ;; that the user can see the question by raising the
>> + ;; current frame:
>> + (raise-frame)
>> + (yes-or-no-p (format "Remove the backup file%s? "
>> + (if modified " too" "")))))
>
> I wonder if "backup" is meant to refer to the draft copy (as far 
> as I
> can tell (through the many layers of indirection), the draft
> "dissociation" is also some kind of deletion). If so, then I 
> think this
> change isn't a "fix" at all.
>
>> + (ignore-errors
>> + (delete-file auto-save-file-name)))
>> + (let ((message-draft-article draft-article))
>> + (message-disassociate-draft))
>>        (message-do-actions actions))))