From f8e6478d461c8f8224c49b4186cedd1566b72144 Mon Sep 17 00:00:00 2001 From: Tim Culverhouse Date: Sat, 23 Jul 2022 21:03:42 -0500 Subject: [PATCH] store: fix Select behavior Fix the behavior of the Select(index int) method to select the last message if an index > len(list) or select from bottom of list for negative indexes. Thanks: akspecs Signed-off-by: Tim Culverhouse Acked-by: Robin Jarry --- lib/msgstore.go | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/lib/msgstore.go b/lib/msgstore.go index 52cd739..42795af 100644 --- a/lib/msgstore.go +++ b/lib/msgstore.go @@ -503,12 +503,19 @@ func (store *MessageStore) SelectedIndex() int { } func (store *MessageStore) Select(index int) { - uids := store.Uids() - store.selected = index - if store.selected < 0 { - store.selected = len(uids) - 1 - } else if store.selected > len(uids) { - store.selected = len(uids) + l := len(store.Uids()) + switch { + case l+index < 0: + // negative index overruns length of list + store.selected = 0 + case index < 0: + // negative index, select from bottom + store.selected = l + index + case index >= l: + // index greater than length, select last + store.selected = l - 1 + default: + store.selected = index } store.updateVisual() }