diff --git a/widgets/aerc.go b/widgets/aerc.go index e113830..a73caec 100644 --- a/widgets/aerc.go +++ b/widgets/aerc.go @@ -58,6 +58,8 @@ func NewAerc(conf *config.AercConfig, logger *log.Logger, tabs: tabs, } + statusline.SetAerc(aerc) + for i, acct := range conf.Accounts { view := NewAccountView(conf, &conf.Accounts[i], logger, aerc) aerc.accounts[acct.Name] = view @@ -150,6 +152,7 @@ func (aerc *Aerc) Event(event tcell.Event) bool { Key: event.Key(), Rune: event.Rune(), }) + aerc.statusline.Invalidate() bindings := aerc.getBindings() incomplete := false result, strokes := bindings.GetBinding(aerc.pendingKeys) diff --git a/widgets/status.go b/widgets/status.go index c7764f8..8d0a1ae 100644 --- a/widgets/status.go +++ b/widgets/status.go @@ -4,6 +4,7 @@ import ( "time" "github.com/gdamore/tcell" + "github.com/mattn/go-runewidth" "git.sr.ht/~sircmpwn/aerc/lib/ui" ) @@ -12,6 +13,7 @@ type StatusLine struct { ui.Invalidatable stack []*StatusMessage fallback StatusMessage + aerc *Aerc } type StatusMessage struct { @@ -42,7 +44,14 @@ func (status *StatusLine) Draw(ctx *ui.Context) { style := tcell.StyleDefault. Background(line.bg).Foreground(line.fg).Reverse(true) ctx.Fill(0, 0, ctx.Width(), ctx.Height(), ' ', style) - ctx.Printf(0, 0, style, "%s", line.message) + pendingKeys := "" + if status.aerc != nil { + for _, pendingKey := range status.aerc.pendingKeys { + pendingKeys += string(pendingKey.Rune) + } + } + message := runewidth.FillRight(line.message, ctx.Width()-len(pendingKeys)-5) + ctx.Printf(0, 0, style, "%s%s", message, pendingKeys) } func (status *StatusLine) Set(text string) *StatusMessage { @@ -79,6 +88,10 @@ func (status *StatusLine) Expire() { status.stack = nil } +func (status *StatusLine) SetAerc(aerc *Aerc) { + status.aerc = aerc +} + func (msg *StatusMessage) Color(bg tcell.Color, fg tcell.Color) { msg.bg = bg msg.fg = fg