diff --git a/widgets/aerc.go b/widgets/aerc.go index 4cd96a8..7209b2d 100644 --- a/widgets/aerc.go +++ b/widgets/aerc.go @@ -274,6 +274,12 @@ func (aerc *Aerc) simulate(strokes []config.KeyStroke) { aerc.Event(simulated) } aerc.simulating -= 1 + // If we are still focused on the exline, turn on tab complete + if exline, ok := aerc.focused.(*ExLine); ok { + exline.TabComplete(func(cmd string) ([]string, string) { + return aerc.complete(cmd), "" + }) + } } func (aerc *Aerc) Event(event tcell.Event) bool { @@ -571,6 +577,15 @@ func (aerc *Aerc) focus(item ui.Interactive) { func (aerc *Aerc) BeginExCommand(cmd string) { previous := aerc.focused + var tabComplete func(string) ([]string, string) + if aerc.simulating != 0 { + // Don't try to draw completions for simulated events + tabComplete = nil + } else { + tabComplete = func(cmd string) ([]string, string) { + return aerc.complete(cmd), "" + } + } exline := NewExLine(aerc.conf, cmd, func(cmd string) { parts, err := shlex.Split(cmd) if err != nil { @@ -588,9 +603,7 @@ func (aerc *Aerc) BeginExCommand(cmd string) { }, func() { aerc.statusbar.Pop() aerc.focus(previous) - }, func(cmd string) ([]string, string) { - return aerc.complete(cmd), "" - }, aerc.cmdHistory) + }, tabComplete, aerc.cmdHistory) aerc.statusbar.Push(exline) aerc.focus(exline) } diff --git a/widgets/exline.go b/widgets/exline.go index d43bdec..8d3c7ca 100644 --- a/widgets/exline.go +++ b/widgets/exline.go @@ -40,6 +40,10 @@ func NewExLine(conf *config.AercConfig, cmd string, commit func(cmd string), fin return exline } +func (x *ExLine) TabComplete(tabComplete func(string) ([]string, string)) { + x.input.TabComplete(tabComplete, x.conf.Ui.CompletionDelay) +} + func NewPrompt(conf *config.AercConfig, prompt string, commit func(text string), tabcomplete func(cmd string) ([]string, string), ) *ExLine {