aerc

Working clone of aerc-mail.org
git clone git://git.danielmoch.com/aerc.git
Log | Files | Refs | README | LICENSE

commit 8492a21a51c107f743a32231746bf5d38e9b1ccd
parent d35213eaabeda8749cd0aab103e5895cfcd96e94
Author: Drew DeVault <sir@cmpwn.com>
Date:   Mon, 14 Jan 2019 08:14:03 -0500

Send commands up to the top-level aerc widget

Diffstat:
Mwidgets/account.go | 14++++++++++----
Mwidgets/aerc.go | 22++++++++++++++--------
2 files changed, 24 insertions(+), 12 deletions(-)

diff --git a/widgets/account.go b/widgets/account.go @@ -20,13 +20,14 @@ type AccountView struct { logger *log.Logger interactive ui.Interactive onInvalidate func(d ui.Drawable) + runCmd func(cmd string) error statusline *StatusLine statusbar *ui.Stack worker *types.Worker } -func NewAccountView( - conf *config.AccountConfig, logger *log.Logger) *AccountView { +func NewAccountView(conf *config.AccountConfig, + logger *log.Logger, runCmd func(cmd string) error) *AccountView { statusbar := ui.NewStack() statusline := NewStatusLine() @@ -63,6 +64,7 @@ func NewAccountView( dirlist: dirlist, grid: grid, logger: logger, + runCmd: runCmd, statusline: statusline, statusbar: statusbar, worker: worker, @@ -106,8 +108,12 @@ func (acct *AccountView) Event(event tcell.Event) bool { case *tcell.EventKey: if event.Rune() == ':' { exline := NewExLine(func(command string) { - acct.statusline.Push( - fmt.Sprintf("TODO: execute %s", command), 3*time.Second) + err := acct.runCmd(command) + if err != nil { + acct.statusline.Push( + fmt.Sprintf("Error: %v", err), 3*time.Second). + Color(tcell.ColorRed, tcell.ColorDefault) + } acct.statusbar.Pop() acct.interactive = nil }, func() { diff --git a/widgets/aerc.go b/widgets/aerc.go @@ -1,6 +1,7 @@ package widgets import ( + "fmt" "log" "github.com/gdamore/tcell" @@ -33,19 +34,19 @@ func NewAerc(conf *config.AercConfig, logger *log.Logger) *Aerc { mainGrid.AddChild(tabs.TabStrip).At(0, 1) mainGrid.AddChild(tabs.TabContent).At(1, 0).Span(1, 2) - accts := make(map[string]*AccountView) + aerc := &Aerc{ + accounts: make(map[string]*AccountView), + grid: mainGrid, + tabs: tabs, + } for _, acct := range conf.Accounts { - view := NewAccountView(&acct, logger) - accts[acct.Name] = view + view := NewAccountView(&acct, logger, aerc.RunCommand) + aerc.accounts[acct.Name] = view tabs.Add(view, acct.Name) } - return &Aerc{ - accounts: accts, - grid: mainGrid, - tabs: tabs, - } + return aerc } func (aerc *Aerc) OnInvalidate(onInvalidate func(d libui.Drawable)) { @@ -66,3 +67,8 @@ func (aerc *Aerc) Event(event tcell.Event) bool { acct, _ := aerc.tabs.Tabs[aerc.tabs.Selected].Content.(*AccountView) return acct.Event(event) } + +func (aerc *Aerc) RunCommand(cmd string) error { + // TODO + return fmt.Errorf("TODO: execute '%s'", cmd) +}