summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorDrew DeVault <sir@cmpwn.com>2019-05-13 16:04:01 -0400
committerDrew DeVault <sir@cmpwn.com>2019-05-13 16:04:01 -0400
commit17bd2dc4dbb3b43b1917c942100834c1341f2194 (patch)
tree59b3c0cc12eb387975451fc6dd5d24d60cc9154a
parentbda74452a81963d20c099a1252caadde7049de10 (diff)
downloadaerc-17bd2dc4dbb3b43b1917c942100834c1341f2194.tar.gz
Populate "From" header from config for new emails
-rw-r--r--commands/account/compose.go4
-rw-r--r--config/accounts.conf2
-rw-r--r--config/config.go3
-rw-r--r--widgets/account.go4
-rw-r--r--widgets/compose.go32
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 <joe@example.org>
 #
 # [Work]
 # source=imaps://username[:password]@hostname[:port]
 # outgoing=/usr/bin/sendmail
+# from=Jane Plain <jane@example.org>
 # 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},
 	}
 }