From 9bfcec56600a20f3e84404e4ddba7d0a5ceecbd9 Mon Sep 17 00:00:00 2001
From: Tim Culverhouse <tim@timculverhouse.com>
Date: Sat, 23 Jul 2022 21:03:46 -0500
Subject: [PATCH] delete: select new last message if last message was deleted

If the last message is deleted, the new selection should be the last
message instead of the first message.

Fixes: https://todo.sr.ht/~rjarry/aerc/59
Reported-by: Sebastien Binet <s@sbinet.org>
Signed-off-by: Tim Culverhouse <tim@timculverhouse.com>
Acked-by: Robin Jarry <robin@jarry.cc>
---
 commands/msg/delete.go | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/commands/msg/delete.go b/commands/msg/delete.go
index 7b56a55..2d7ad0f 100644
--- a/commands/msg/delete.go
+++ b/commands/msg/delete.go
@@ -56,6 +56,7 @@ func (Delete) Execute(aerc *widgets.Aerc, args []string) error {
 					// no more messages in the list
 					if next == nil {
 						aerc.RemoveTab(h.msgProvider)
+						store.Select(len(store.Uids()))
 						acct.Messages().Invalidate()
 						return
 					}
@@ -69,6 +70,12 @@ func (Delete) Execute(aerc *widgets.Aerc, args []string) error {
 							aerc.ReplaceTab(mv, nextMv, next.Envelope.Subject)
 						})
 				}
+			} else {
+				if next == nil {
+					// We deleted the last message, select the new last message
+					// instead of the first message
+					store.Select(len(store.Uids()))
+				}
 			}
 			acct.Messages().Invalidate()
 		case *types.Error: