summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--commands/compose/send.go (renamed from commands/compose/send-message.go)2
-rw-r--r--config/bindings.go2
-rw-r--r--config/binds.conf13
-rw-r--r--config/config.go27
-rw-r--r--widgets/aerc.go11
-rw-r--r--widgets/compose.go10
6 files changed, 51 insertions, 14 deletions
diff --git a/commands/compose/send-message.go b/commands/compose/send.go
index 9b59e5e..ed3bd43 100644
--- a/commands/compose/send-message.go
+++ b/commands/compose/send.go
@@ -17,7 +17,7 @@ import (
 )
 
 func init() {
-	register("send-message", SendMessage)
+	register("send", SendMessage)
 }
 
 func SendMessage(aerc *widgets.Aerc, args []string) error {
diff --git a/config/bindings.go b/config/bindings.go
index 4cb4805..a9a57c5 100644
--- a/config/bindings.go
+++ b/config/bindings.go
@@ -283,7 +283,7 @@ func init() {
 	keyNames["ACK"] = KeyStroke{tcell.KeyACK, 0}
 	keyNames["BEL"] = KeyStroke{tcell.KeyBEL, 0}
 	keyNames["BS"] = KeyStroke{tcell.KeyBS, 0}
-	keyNames["TAB"] = KeyStroke{tcell.KeyTAB, 0}
+	keyNames["tab"] = KeyStroke{tcell.KeyTAB, 0}
 	keyNames["LF"] = KeyStroke{tcell.KeyLF, 0}
 	keyNames["VT"] = KeyStroke{tcell.KeyVT, 0}
 	keyNames["FF"] = KeyStroke{tcell.KeyFF, 0}
diff --git a/config/binds.conf b/config/binds.conf
index 1102c21..62004a9 100644
--- a/config/binds.conf
+++ b/config/binds.conf
@@ -40,6 +40,14 @@ a = :reply -a<Enter>
 f = :forward<Enter>
 
 [compose]
+# Keybindings used when the embedded terminal is not selected in the compose
+# view
+<C-k> = :prev-field<Enter>
+<C-j> = :next-field<Enter>
+<tab> = :next-field<Enter>
+
+[compose::editor]
+# Keybindings used when the embedded terminal is selected in the compose view
 $noinherit = true
 $ex = <semicolon>
 <C-k> = :prev-field<Enter>
@@ -47,6 +55,11 @@ $ex = <semicolon>
 <C-p> = :prev-tab<Enter>
 <C-n> = :next-tab<Enter>
 
+[compose::review]
+# Keybindings used when reviewing a message to be sent
+y = :send<Enter>
+n = :abort<Enter>
+
 [terminal]
 $noinherit = true
 $ex = <semicolon>
diff --git a/config/config.go b/config/config.go
index 79d1810..5c5094a 100644
--- a/config/config.go
+++ b/config/config.go
@@ -39,11 +39,13 @@ type AccountConfig struct {
 }
 
 type BindingConfig struct {
-	Global      *KeyBindings
-	Compose     *KeyBindings
-	MessageList *KeyBindings
-	MessageView *KeyBindings
-	Terminal    *KeyBindings
+	Global        *KeyBindings
+	Compose       *KeyBindings
+	ComposeEditor *KeyBindings
+	ComposeReview *KeyBindings
+	MessageList   *KeyBindings
+	MessageView   *KeyBindings
+	Terminal      *KeyBindings
 }
 
 type FilterConfig struct {
@@ -139,11 +141,13 @@ func LoadConfig(root *string) (*AercConfig, error) {
 	file.NameMapper = mapName
 	config := &AercConfig{
 		Bindings: BindingConfig{
-			Global:      NewKeyBindings(),
-			Compose:     NewKeyBindings(),
-			MessageList: NewKeyBindings(),
-			MessageView: NewKeyBindings(),
-			Terminal:    NewKeyBindings(),
+			Global:        NewKeyBindings(),
+			Compose:       NewKeyBindings(),
+			ComposeEditor: NewKeyBindings(),
+			ComposeReview: NewKeyBindings(),
+			MessageList:   NewKeyBindings(),
+			MessageView:   NewKeyBindings(),
+			Terminal:      NewKeyBindings(),
 		},
 		Ini: file,
 
@@ -223,6 +227,9 @@ func LoadConfig(root *string) (*AercConfig, error) {
 		"messages": &config.Bindings.MessageList,
 		"terminal": &config.Bindings.Terminal,
 		"view":     &config.Bindings.MessageView,
+
+		"compose::editor": &config.Bindings.ComposeEditor,
+		"compose::review": &config.Bindings.ComposeReview,
 	}
 	for _, name := range binds.SectionStrings() {
 		sec, err := binds.GetSection(name)
diff --git a/widgets/aerc.go b/widgets/aerc.go
index fb109d4..61d4645 100644
--- a/widgets/aerc.go
+++ b/widgets/aerc.go
@@ -88,11 +88,18 @@ func (aerc *Aerc) Draw(ctx *libui.Context) {
 }
 
 func (aerc *Aerc) getBindings() *config.KeyBindings {
-	switch aerc.SelectedTab().(type) {
+	switch view := aerc.SelectedTab().(type) {
 	case *AccountView:
 		return aerc.conf.Bindings.MessageList
 	case *Composer:
-		return aerc.conf.Bindings.Compose
+		switch view.Bindings() {
+		case "compose::editor":
+			return aerc.conf.Bindings.ComposeEditor
+		case "compose::review":
+			return aerc.conf.Bindings.ComposeReview
+		default:
+			return aerc.conf.Bindings.Compose
+		}
 	case *MessageViewer:
 		return aerc.conf.Bindings.MessageView
 	case *Terminal:
diff --git a/widgets/compose.go b/widgets/compose.go
index 38c33fc..2daa29c 100644
--- a/widgets/compose.go
+++ b/widgets/compose.go
@@ -120,6 +120,16 @@ func (c *Composer) Close() {
 	}
 }
 
+func (c *Composer) Bindings() string {
+	if c.editor == nil {
+		return "compose::review"
+	} else if c.editor == c.focusable[c.focused] {
+		return "compose::editor"
+	} else {
+		return "compose"
+	}
+}
+
 func (c *Composer) Event(event tcell.Event) bool {
 	return c.focusable[c.focused].Event(event)
 }