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:
parent
7a6c808c04
commit
1a75906bcb
3 changed files with 40 additions and 4 deletions
|
@ -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}
|
||||||
|
|
|
@ -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")
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in a new issue