From 1a75906bcbc1915a696259f20373a5a78d4ef8a3 Mon Sep 17 00:00:00 2001 From: Robin Jarry Date: Mon, 25 Oct 2021 15:20:34 +0200 Subject: [PATCH] bindings: support more modified keys Add new supported keys: Ctrl+Enter Ctrl+Up Ctrl+Down Ctrl+Left Ctrl+Right Ctrl+PageUp Ctrl+PageDown Signed-off-by: Robin Jarry --- config/bindings.go | 15 +++++++++++---- config/bindings_test.go | 15 +++++++++++++++ doc/aerc-config.5.scd | 14 ++++++++++++++ 3 files changed, 40 insertions(+), 4 deletions(-) diff --git a/config/bindings.go b/config/bindings.go index f517c73..eff48a6 100644 --- a/config/bindings.go +++ b/config/bindings.go @@ -12,8 +12,8 @@ import ( type KeyStroke struct { Modifiers tcell.ModMask - Key tcell.Key - Rune rune + Key tcell.Key + Rune rune } type Binding struct { @@ -133,8 +133,8 @@ func ParseKeyStrokes(keystrokes string) ([]KeyStroke, error) { default: strokes = append(strokes, KeyStroke{ Modifiers: tcell.ModNone, - Key: tcell.KeyRune, - Rune: tok, + Key: tcell.KeyRune, + Rune: tok, }) } } @@ -161,17 +161,24 @@ func init() { keyNames["space"] = KeyStroke{tcell.ModNone, tcell.KeyRune, ' '} keyNames["semicolon"] = KeyStroke{tcell.ModNone, tcell.KeyRune, ';'} keyNames["enter"] = KeyStroke{tcell.ModNone, tcell.KeyEnter, 0} + keyNames["c-enter"] = KeyStroke{tcell.ModCtrl, tcell.KeyEnter, 0} keyNames["up"] = KeyStroke{tcell.ModNone, tcell.KeyUp, 0} + keyNames["c-up"] = KeyStroke{tcell.ModCtrl, tcell.KeyUp, 0} keyNames["down"] = KeyStroke{tcell.ModNone, tcell.KeyDown, 0} + keyNames["c-down"] = KeyStroke{tcell.ModCtrl, tcell.KeyDown, 0} keyNames["right"] = KeyStroke{tcell.ModNone, tcell.KeyRight, 0} + keyNames["c-right"] = KeyStroke{tcell.ModCtrl, tcell.KeyRight, 0} keyNames["left"] = KeyStroke{tcell.ModNone, tcell.KeyLeft, 0} + keyNames["c-left"] = KeyStroke{tcell.ModCtrl, tcell.KeyLeft, 0} keyNames["upleft"] = KeyStroke{tcell.ModNone, tcell.KeyUpLeft, 0} keyNames["upright"] = KeyStroke{tcell.ModNone, tcell.KeyUpRight, 0} keyNames["downleft"] = KeyStroke{tcell.ModNone, tcell.KeyDownLeft, 0} keyNames["downright"] = KeyStroke{tcell.ModNone, tcell.KeyDownRight, 0} keyNames["center"] = KeyStroke{tcell.ModNone, tcell.KeyCenter, 0} keyNames["pgup"] = KeyStroke{tcell.ModNone, tcell.KeyPgUp, 0} + keyNames["c-pgup"] = KeyStroke{tcell.ModCtrl, tcell.KeyPgUp, 0} keyNames["pgdn"] = KeyStroke{tcell.ModNone, tcell.KeyPgDn, 0} + keyNames["c-pgdn"] = KeyStroke{tcell.ModCtrl, tcell.KeyPgDn, 0} keyNames["home"] = KeyStroke{tcell.ModNone, tcell.KeyHome, 0} keyNames["end"] = KeyStroke{tcell.ModNone, tcell.KeyEnd, 0} keyNames["insert"] = KeyStroke{tcell.ModNone, tcell.KeyInsert, 0} diff --git a/config/bindings_test.go b/config/bindings_test.go index d07d65a..dab3b9f 100644 --- a/config/bindings_test.go +++ b/config/bindings_test.go @@ -55,7 +55,22 @@ func TestGetBinding(t *testing.T) { }, BINDING_NOT_FOUND, "") add("", "c-a") + add("", ":next") + add("", ":prev") + add("", ":open") test([]KeyStroke{ {tcell.ModCtrl, tcell.KeyCtrlA, 0}, }, BINDING_FOUND, "c-a") + test([]KeyStroke{ + {tcell.ModCtrl, tcell.KeyDown, 0}, + }, BINDING_FOUND, ":next") + test([]KeyStroke{ + {tcell.ModCtrl, tcell.KeyPgUp, 0}, + }, BINDING_FOUND, ":prev") + test([]KeyStroke{ + {tcell.ModCtrl, tcell.KeyPgDn, 0}, + }, BINDING_NOT_FOUND, "") + test([]KeyStroke{ + {tcell.ModCtrl, tcell.KeyEnter, 0}, + }, BINDING_FOUND, ":open") } diff --git a/doc/aerc-config.5.scd b/doc/aerc-config.5.scd index d4de883..46c4416 100644 --- a/doc/aerc-config.5.scd +++ b/doc/aerc-config.5.scd @@ -522,20 +522,34 @@ following special keys are supported: : ; | tab : +| s-tab +: Shift+Tab | enter : | up : +| c-up +: Ctrl+Up | down : +| c-down +: Ctrl+Down | right : +| c-right +: Ctrl+Right | left : +| c-left +: Ctrl+Left | pgup : +| c-pgup +: Ctrl+PageUp | pgdn : +| c-pgdn +: Ctrl+PageUp | home : | end