Send commands up to the top-level aerc widget
This commit is contained in:
parent
d35213eaab
commit
8492a21a51
2 changed files with 26 additions and 14 deletions
|
@ -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() {
|
||||
|
|
|
@ -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)
|
||||
|
||||
for _, acct := range conf.Accounts {
|
||||
view := NewAccountView(&acct, logger)
|
||||
accts[acct.Name] = view
|
||||
tabs.Add(view, acct.Name)
|
||||
}
|
||||
|
||||
return &Aerc{
|
||||
accounts: accts,
|
||||
aerc := &Aerc{
|
||||
accounts: make(map[string]*AccountView),
|
||||
grid: mainGrid,
|
||||
tabs: tabs,
|
||||
}
|
||||
|
||||
for _, acct := range conf.Accounts {
|
||||
view := NewAccountView(&acct, logger, aerc.RunCommand)
|
||||
aerc.accounts[acct.Name] = view
|
||||
tabs.Add(view, acct.Name)
|
||||
}
|
||||
|
||||
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)
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue