summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorRobin Jarry <robin@jarry.cc>2021-10-25 15:20:34 +0200
committerRobin Jarry <robin@jarry.cc>2021-10-28 16:22:28 +0200
commit1a75906bcbc1915a696259f20373a5a78d4ef8a3 (patch)
treefd674341c9c41ef20604acee89977f1d52e32c18
parent7a6c808c042bf6f662e6d6b6dba09829a1f9ed15 (diff)
downloadaerc-1a75906bcbc1915a696259f20373a5a78d4ef8a3.tar.gz
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 <robin@jarry.cc>
-rw-r--r--config/bindings.go15
-rw-r--r--config/bindings_test.go15
-rw-r--r--doc/aerc-config.5.scd14
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>", "c-a")
+	add("<C-Down>", ":next")
+	add("<C-PgUp>", ":prev")
+	add("<C-Enter>", ":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