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 {
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}

View File

@ -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")
}

View File

@ -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