From cb887a2d9d7d7cd5eb57d8849df40cecc3b90090 Mon Sep 17 00:00:00 2001 From: Koni Marti Date: Sat, 16 Apr 2022 00:22:20 +0200 Subject: store: keep current message selected Keep current message selected when clearing or changing filters and when toggling threads. Add -s flag to the clear command to also clear the selected message and set cursor to the top of the message list. Implements: https://todo.sr.ht/~rjarry/aerc/36 Signed-off-by: Koni Marti Acked-by: Robin Jarry --- commands/account/clear.go | 25 +++++++++++++++++++++++++ commands/msg/toggle-threads.go | 1 + 2 files changed, 26 insertions(+) (limited to 'commands') diff --git a/commands/account/clear.go b/commands/account/clear.go index 64e7012..69fac2d 100644 --- a/commands/account/clear.go +++ b/commands/account/clear.go @@ -5,6 +5,7 @@ import ( "git.sr.ht/~rjarry/aerc/lib/statusline" "git.sr.ht/~rjarry/aerc/widgets" + "git.sr.ht/~sircmpwn/getopt" ) type Clear struct{} @@ -30,6 +31,30 @@ func (Clear) Execute(aerc *widgets.Aerc, args []string) error { if store == nil { return errors.New("Cannot perform action. Messages still loading") } + + clearSelected := false + opts, optind, err := getopt.Getopts(args, "s") + if err != nil { + return err + } + + for _, opt := range opts { + switch opt.Option { + case 's': + clearSelected = true + } + } + + if len(args) != optind { + return errors.New("Usage: clear [-s]") + } + + if clearSelected { + defer store.Select(0) + } else { + defer store.Reselect(store.Selected()) + } + store.ApplyClear() acct.SetStatus(statusline.SearchFilterClear()) diff --git a/commands/msg/toggle-threads.go b/commands/msg/toggle-threads.go index 79d515c..ac4242b 100644 --- a/commands/msg/toggle-threads.go +++ b/commands/msg/toggle-threads.go @@ -34,6 +34,7 @@ func (ToggleThreads) Execute(aerc *widgets.Aerc, args []string) error { if err != nil { return err } + defer store.Reselect(store.Selected()) store.SetBuildThreads(!store.BuildThreads()) acct.SetStatus(statusline.Threading(store.BuildThreads())) acct.Messages().Invalidate() -- cgit v1.2.3