about summary refs log tree commit diff stats
path: root/widgets
diff options
context:
space:
mode:
Diffstat (limited to 'widgets')
-rw-r--r--widgets/aerc.go3
-rw-r--r--widgets/status.go15
2 files changed, 17 insertions, 1 deletions
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