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>
This commit is contained in:
Robin Jarry 2021-10-25 15:20:34 +02:00
parent 7a6c808c04
commit 1a75906bcb
3 changed files with 40 additions and 4 deletions

View file

@ -12,8 +12,8 @@ import (
type KeyStroke struct { type KeyStroke struct {
Modifiers tcell.ModMask Modifiers tcell.ModMask
Key tcell.Key Key tcell.Key
Rune rune Rune rune
} }
type Binding struct { type Binding struct {
@ -133,8 +133,8 @@ func ParseKeyStrokes(keystrokes string) ([]KeyStroke, error) {
default: default:
strokes = append(strokes, KeyStroke{ strokes = append(strokes, KeyStroke{
Modifiers: tcell.ModNone, Modifiers: tcell.ModNone,
Key: tcell.KeyRune, Key: tcell.KeyRune,
Rune: tok, Rune: tok,
}) })
} }
} }
@ -161,17 +161,24 @@ func init() {
keyNames["space"] = KeyStroke{tcell.ModNone, tcell.KeyRune, ' '} keyNames["space"] = KeyStroke{tcell.ModNone, tcell.KeyRune, ' '}
keyNames["semicolon"] = KeyStroke{tcell.ModNone, tcell.KeyRune, ';'} keyNames["semicolon"] = KeyStroke{tcell.ModNone, tcell.KeyRune, ';'}
keyNames["enter"] = KeyStroke{tcell.ModNone, tcell.KeyEnter, 0} 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["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["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["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["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["upleft"] = KeyStroke{tcell.ModNone, tcell.KeyUpLeft, 0}
keyNames["upright"] = KeyStroke{tcell.ModNone, tcell.KeyUpRight, 0} keyNames["upright"] = KeyStroke{tcell.ModNone, tcell.KeyUpRight, 0}
keyNames["downleft"] = KeyStroke{tcell.ModNone, tcell.KeyDownLeft, 0} keyNames["downleft"] = KeyStroke{tcell.ModNone, tcell.KeyDownLeft, 0}
keyNames["downright"] = KeyStroke{tcell.ModNone, tcell.KeyDownRight, 0} keyNames["downright"] = KeyStroke{tcell.ModNone, tcell.KeyDownRight, 0}
keyNames["center"] = KeyStroke{tcell.ModNone, tcell.KeyCenter, 0} keyNames["center"] = KeyStroke{tcell.ModNone, tcell.KeyCenter, 0}
keyNames["pgup"] = KeyStroke{tcell.ModNone, tcell.KeyPgUp, 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["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["home"] = KeyStroke{tcell.ModNone, tcell.KeyHome, 0}
keyNames["end"] = KeyStroke{tcell.ModNone, tcell.KeyEnd, 0} keyNames["end"] = KeyStroke{tcell.ModNone, tcell.KeyEnd, 0}
keyNames["insert"] = KeyStroke{tcell.ModNone, tcell.KeyInsert, 0} keyNames["insert"] = KeyStroke{tcell.ModNone, tcell.KeyInsert, 0}

View file

@ -55,7 +55,22 @@ func TestGetBinding(t *testing.T) {
}, BINDING_NOT_FOUND, "") }, BINDING_NOT_FOUND, "")
add("<C-a>", "c-a") add("<C-a>", "c-a")
add("<C-Down>", ":next")
add("<C-PgUp>", ":prev")
add("<C-Enter>", ":open")
test([]KeyStroke{ test([]KeyStroke{
{tcell.ModCtrl, tcell.KeyCtrlA, 0}, {tcell.ModCtrl, tcell.KeyCtrlA, 0},
}, BINDING_FOUND, "c-a") }, 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")
} }

View file

@ -522,20 +522,34 @@ following special keys are supported:
: ; : ;
| tab | tab
: :
| s-tab
: Shift+Tab
| enter | enter
: :
| up | up
: :
| c-up
: Ctrl+Up
| down | down
: :
| c-down
: Ctrl+Down
| right | right
: :
| c-right
: Ctrl+Right
| left | left
: :
| c-left
: Ctrl+Left
| pgup | pgup
: :
| c-pgup
: Ctrl+PageUp
| pgdn | pgdn
: :
| c-pgdn
: Ctrl+PageUp
| home | home
: :
| end | end