summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--widgets/account.go14
-rw-r--r--widgets/aerc.go22
2 files changed, 24 insertions, 12 deletions
diff --git a/widgets/account.go b/widgets/account.go
index 8662c0c..54eb9e9 100644
--- 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
index cd4b773..9444c9f 100644
--- 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)
+}