From 8935c452939cd707d7bd060292da502157625fa4 Mon Sep 17 00:00:00 2001 From: Robin Jarry Date: Tue, 22 Feb 2022 20:10:54 +0100 Subject: [PATCH] search/filter: display in extra status Add an extra attribute to the status line. When non-empty, display it after the current status. Set that extra status after a successful :search or :filter. Remove it after :clear. Signed-off-by: Robin Jarry --- commands/account/clear.go | 4 ++-- commands/account/search.go | 9 ++++----- widgets/aerc.go | 8 ++++++++ widgets/status.go | 16 +++++++++++++++- 4 files changed, 29 insertions(+), 8 deletions(-) diff --git a/commands/account/clear.go b/commands/account/clear.go index 3fecc13..259a9de 100644 --- a/commands/account/clear.go +++ b/commands/account/clear.go @@ -2,8 +2,8 @@ package account import ( "errors" + "git.sr.ht/~rjarry/aerc/widgets" - "time" ) type Clear struct{} @@ -30,6 +30,6 @@ func (Clear) Execute(aerc *widgets.Aerc, args []string) error { return errors.New("Cannot perform action. Messages still loading") } store.ApplyClear() - aerc.PushStatus("Clear complete.", 10*time.Second) + aerc.ClearExtraStatus() return nil } diff --git a/commands/account/search.go b/commands/account/search.go index e12f972..86d9dea 100644 --- a/commands/account/search.go +++ b/commands/account/search.go @@ -3,7 +3,6 @@ package account import ( "errors" "fmt" - "time" "git.sr.ht/~rjarry/aerc/widgets" ) @@ -34,16 +33,16 @@ func (SearchFilter) Execute(aerc *widgets.Aerc, args []string) error { var cb func([]uint32) if args[0] == "filter" { - aerc.PushStatus("Filtering...", 10*time.Second) + aerc.SetExtraStatus("Filtering...") cb = func(uids []uint32) { - aerc.PushStatus(fmt.Sprintf("Filter complete %s", args), 20*time.Second) + aerc.SetExtraStatus(fmt.Sprintf("%s", args)) acct.Logger().Printf("Filter results: %v", uids) store.ApplyFilter(uids) } } else { - aerc.PushStatus("Searching...", 10*time.Second) + aerc.SetExtraStatus("Searching...") cb = func(uids []uint32) { - aerc.PushStatus(fmt.Sprintf("Search complete %s", args), 20*time.Second) + aerc.SetExtraStatus(fmt.Sprintf("%s", args)) acct.Logger().Printf("Search results: %v", uids) store.ApplySearch(uids) // TODO: Remove when stores have multiple OnUpdate handlers diff --git a/widgets/aerc.go b/widgets/aerc.go index e644f82..10e9924 100644 --- a/widgets/aerc.go +++ b/widgets/aerc.go @@ -392,6 +392,14 @@ func (aerc *Aerc) SetStatus(status string) *StatusMessage { return aerc.statusline.Set(status) } +func (aerc *Aerc) SetExtraStatus(status string) { + aerc.statusline.SetExtra(status) +} + +func (aerc *Aerc) ClearExtraStatus() { + aerc.statusline.ClearExtra() +} + func (aerc *Aerc) SetError(status string) *StatusMessage { return aerc.statusline.SetError(status) } diff --git a/widgets/status.go b/widgets/status.go index c70d215..960f244 100644 --- a/widgets/status.go +++ b/widgets/status.go @@ -14,6 +14,7 @@ type StatusLine struct { ui.Invalidatable stack []*StatusMessage fallback StatusMessage + extra string aerc *Aerc uiConfig config.UIConfig } @@ -29,6 +30,7 @@ func NewStatusLine(uiConfig config.UIConfig) *StatusLine { style: uiConfig.GetStyle(config.STYLE_STATUSLINE_DEFAULT), message: "Idle", }, + extra: "", uiConfig: uiConfig, } } @@ -49,7 +51,11 @@ func (status *StatusLine) Draw(ctx *ui.Context) { pendingKeys += string(pendingKey.Rune) } } - message := runewidth.FillRight(line.message, ctx.Width()-len(pendingKeys)-5) + text := line.message + if status.extra != "" { + text += " " + status.extra + } + message := runewidth.FillRight(text, ctx.Width()-len(pendingKeys)-5) ctx.Printf(0, 0, line.style, "%s%s", message, pendingKeys) } @@ -103,6 +109,14 @@ func (status *StatusLine) PushSuccess(text string) *StatusMessage { return msg } +func (status *StatusLine) SetExtra(text string) { + status.extra = text +} + +func (status *StatusLine) ClearExtra() { + status.extra = "" +} + func (status *StatusLine) Expire() { status.stack = nil }