diff options
author | Drew DeVault <sir@cmpwn.com> | 2019-05-14 14:27:28 -0400 |
---|---|---|
committer | Drew DeVault <sir@cmpwn.com> | 2019-05-14 14:27:28 -0400 |
commit | f77d7c2c3d578ae5a724e1e8b91656304dde75d0 (patch) | |
tree | 77b4be714678ca6b1d25d94ba89215606c03d727 | |
parent | 928ac1bcd9f7e4a6f20ab23a9416180534417cff (diff) |
Add distinct keybindings for each compose view
-rw-r--r-- | commands/compose/send.go (renamed from commands/compose/send-message.go) | 2 | ||||
-rw-r--r-- | config/bindings.go | 2 | ||||
-rw-r--r-- | config/binds.conf | 13 | ||||
-rw-r--r-- | config/config.go | 27 | ||||
-rw-r--r-- | widgets/aerc.go | 11 | ||||
-rw-r--r-- | widgets/compose.go | 10 |
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) } |