From 065da5e37230976d85d163a6f682eddb9345aede Mon Sep 17 00:00:00 2001 From: Drew DeVault Date: Tue, 14 May 2019 15:25:30 -0400 Subject: [PATCH] Add $EDITOR, internal config for compose --- commands/account/compose.go | 2 +- config/aerc.conf | 7 +++++++ config/config.go | 10 ++++++++++ widgets/compose.go | 17 ++++++++++++----- 4 files changed, 30 insertions(+), 6 deletions(-) diff --git a/commands/account/compose.go b/commands/account/compose.go index c9be17a..10be9ae 100644 --- a/commands/account/compose.go +++ b/commands/account/compose.go @@ -18,7 +18,7 @@ func Compose(aerc *widgets.Aerc, args []string) error { return errors.New("Usage: compose") } acct := aerc.SelectedAccount() - composer := widgets.NewComposer(acct.AccountConfig()) + composer := widgets.NewComposer(aerc.Config(), acct.AccountConfig()) // TODO: Change tab name when message subject changes aerc.NewTab(composer, runewidth.Truncate( "New email", 32, "…")) diff --git a/config/aerc.conf b/config/aerc.conf index 8b3ac3a..1211764 100644 --- a/config/aerc.conf +++ b/config/aerc.conf @@ -57,6 +57,13 @@ pager=less -R # Default: text/plain,text/html alternatives=text/plain,text/html +[compose] +# +# Specifies the command to run the editor with. It will be shown in an embedded +# terminal, though it may also launch a graphical window if the environment +# supports it. Defaults to $EDITOR, or vi. +editor= + [filters] # # Filters allow you to pipe an email body through a shell command to render diff --git a/config/config.go b/config/config.go index 5c5094a..8926fcd 100644 --- a/config/config.go +++ b/config/config.go @@ -48,6 +48,10 @@ type BindingConfig struct { Terminal *KeyBindings } +type ComposeConfig struct { + Editor string `ini:"editor"` +} + type FilterConfig struct { FilterType int Filter string @@ -63,6 +67,7 @@ type ViewerConfig struct { type AercConfig struct { Bindings BindingConfig + Compose ComposeConfig Ini *ini.File `ini:"-"` Accounts []AccountConfig `ini:"-"` Filters []FilterConfig `ini:"-"` @@ -206,6 +211,11 @@ func LoadConfig(root *string) (*AercConfig, error) { } } } + if compose, err := file.GetSection("compose"); err == nil { + if err := compose.MapTo(&config.Compose); err != nil { + return nil, err + } + } if ui, err := file.GetSection("ui"); err == nil { if err := ui.MapTo(&config.Ui); err != nil { return nil, err diff --git a/widgets/compose.go b/widgets/compose.go index 2daa29c..9460397 100644 --- a/widgets/compose.go +++ b/widgets/compose.go @@ -36,7 +36,8 @@ type Composer struct { } // TODO: Let caller configure headers, initial body (for replies), etc -func NewComposer(conf *config.AccountConfig) *Composer { +func NewComposer(conf *config.AercConfig, + acct *config.AccountConfig) *Composer { grid := ui.NewGrid().Rows([]ui.GridSpec{ {ui.SIZE_EXACT, 3}, {ui.SIZE_WEIGHT, 1}, @@ -55,7 +56,7 @@ func NewComposer(conf *config.AccountConfig) *Composer { }) to := newHeaderEditor("To", "") - from := newHeaderEditor("From", conf.From) + from := newHeaderEditor("From", acct.From) subject := newHeaderEditor("Subject", "") headers.AddChild(to).At(0, 0) headers.AddChild(from).At(0, 1) @@ -68,15 +69,21 @@ func NewComposer(conf *config.AccountConfig) *Composer { return nil } - // TODO: built-in config option, $EDITOR, then vi, in that order - editor := exec.Command("vim", email.Name()) + editorName := conf.Compose.Editor + if editorName == "" { + editorName = os.Getenv("EDITOR") + } + if editorName == "" { + editorName = "vi" + } + editor := exec.Command(editorName, email.Name()) term, _ := NewTerminal(editor) grid.AddChild(headers).At(0, 0) grid.AddChild(term).At(1, 0) c := &Composer{ - config: conf, + config: acct, editor: term, email: email, grid: grid,