From 17bd2dc4dbb3b43b1917c942100834c1341f2194 Mon Sep 17 00:00:00 2001 From: Drew DeVault Date: Mon, 13 May 2019 16:04:01 -0400 Subject: [PATCH] Populate "From" header from config for new emails --- commands/account/compose.go | 4 ++-- config/accounts.conf | 2 ++ config/config.go | 3 +++ widgets/account.go | 4 ++++ widgets/compose.go | 32 ++++++++++++++++++++------------ 5 files changed, 31 insertions(+), 14 deletions(-) diff --git a/commands/account/compose.go b/commands/account/compose.go index 15fc354..c9be17a 100644 --- a/commands/account/compose.go +++ b/commands/account/compose.go @@ -17,8 +17,8 @@ func Compose(aerc *widgets.Aerc, args []string) error { if len(args) != 1 { return errors.New("Usage: compose") } - // TODO: Pass along the sender info - composer := widgets.NewComposer() + acct := aerc.SelectedAccount() + composer := widgets.NewComposer(acct.AccountConfig()) // TODO: Change tab name when message subject changes aerc.NewTab(composer, runewidth.Truncate( "New email", 32, "…")) diff --git a/config/accounts.conf b/config/accounts.conf index 03846db..96c5e2b 100644 --- a/config/accounts.conf +++ b/config/accounts.conf @@ -8,10 +8,12 @@ # [Personal] # source=imaps://username[:password]@hostname[:port] # outgoing=smtps+plain://username[:password]@hostname[:port] +# from=Joe Bloe # # [Work] # source=imaps://username[:password]@hostname[:port] # outgoing=/usr/bin/sendmail +# from=Jane Plain # folders=INBOX,Sent,Archives # default=Archives # diff --git a/config/config.go b/config/config.go index 88986e3..79d1810 100644 --- a/config/config.go +++ b/config/config.go @@ -30,6 +30,7 @@ const ( type AccountConfig struct { Default string + From string Name string Source string Folders []string @@ -108,6 +109,8 @@ func loadAccountConfig(path string) ([]AccountConfig, error) { account.Folders = strings.Split(val, ",") } else if key == "outgoing" { account.Outgoing = val + } else if key == "from" { + account.From = val } else if key != "name" { account.Params[key] = val } diff --git a/widgets/account.go b/widgets/account.go index a8cd9ad..c01b15f 100644 --- a/widgets/account.go +++ b/widgets/account.go @@ -80,6 +80,10 @@ func NewAccountView(conf *config.AercConfig, acct *config.AccountConfig, return view } +func (acct *AccountView) AccountConfig() *config.AccountConfig { + return acct.acct +} + func (acct *AccountView) Name() string { return acct.acct.Name } diff --git a/widgets/compose.go b/widgets/compose.go index f07e3ee..3d74301 100644 --- a/widgets/compose.go +++ b/widgets/compose.go @@ -1,11 +1,14 @@ package widgets import ( + "io/ioutil" + "os" "os/exec" "github.com/gdamore/tcell" "github.com/mattn/go-runewidth" + "git.sr.ht/~sircmpwn/aerc2/config" "git.sr.ht/~sircmpwn/aerc2/lib/ui" ) @@ -21,7 +24,10 @@ type Composer struct { to *headerEditor } + config *config.AccountConfig + editor *Terminal + email *os.File grid *ui.Grid focusable []ui.DrawableInteractive @@ -29,7 +35,7 @@ type Composer struct { } // TODO: Let caller configure headers, initial body (for replies), etc -func NewComposer() *Composer { +func NewComposer(conf *config.AccountConfig) *Composer { grid := ui.NewGrid().Rows([]ui.GridSpec{ {ui.SIZE_EXACT, 3}, {ui.SIZE_WEIGHT, 1}, @@ -48,32 +54,34 @@ func NewComposer() *Composer { }) to := newHeaderEditor("To", "") - from := newHeaderEditor("From", "") + from := newHeaderEditor("From", conf.From) subject := newHeaderEditor("Subject", "") headers.AddChild(to).At(0, 0) headers.AddChild(from).At(0, 1) headers.AddChild(subject).At(1, 0).Span(1, 2) headers.AddChild(ui.NewFill(' ')).At(2, 0).Span(1, 2) + email, err := ioutil.TempFile("", "aerc-compose-*.eml") + if err != nil { + // TODO: handle this better + return nil + } + // TODO: built-in config option, $EDITOR, then vi, in that order - // TODO: temp file - editor := exec.Command("vim") + editor := exec.Command("vim", email.Name()) term, _ := NewTerminal(editor) grid.AddChild(headers).At(0, 0) grid.AddChild(term).At(1, 0) return &Composer{ - grid: grid, + config: conf, editor: term, + email: email, + grid: grid, // You have to backtab to get to "From", since you usually don't edit it - focused: 1, - focusable: []ui.DrawableInteractive{ - from, - to, - subject, - term, - }, + focused: 1, + focusable: []ui.DrawableInteractive{from, to, subject, term}, } }