mirror of
https://github.com/gdamore/tcell.git
synced 2025-04-27 13:48:50 +08:00
fixes #109 Support both meta and alt + arrow keys
This commit is contained in:
parent
9059a787e5
commit
f722733809
1
AUTHORS
1
AUTHORS
@ -1 +1,2 @@
|
|||||||
Garrett D'Amore <garrett@damore.org>
|
Garrett D'Amore <garrett@damore.org>
|
||||||
|
Zachary Yedidia <zyedidia@gmail.com>
|
||||||
|
108
database.go
108
database.go
@ -896,16 +896,22 @@ func init() {
|
|||||||
KeyCtrlRight: "\x1b[1;5C",
|
KeyCtrlRight: "\x1b[1;5C",
|
||||||
KeyCtrlUp: "\x1b[1;5A",
|
KeyCtrlUp: "\x1b[1;5A",
|
||||||
KeyCtrlDown: "\x1b[1;5B",
|
KeyCtrlDown: "\x1b[1;5B",
|
||||||
KeyAltLeft: "\x1b[1;9D",
|
KeyAltLeft: "\x1b[1;3D",
|
||||||
KeyAltRight: "\x1b[1;9C",
|
KeyAltRight: "\x1b[1;3C",
|
||||||
KeyAltUp: "\x1b[1;9A",
|
KeyAltUp: "\x1b[1;3A",
|
||||||
KeyAltDown: "\x1b[1;9B",
|
KeyAltDown: "\x1b[1;3B",
|
||||||
|
KeyMetaLeft: "\x1b[1;9D",
|
||||||
|
KeyMetaRight: "\x1b[1;9C",
|
||||||
|
KeyMetaUp: "\x1b[1;9A",
|
||||||
|
KeyMetaDown: "\x1b[1;9B",
|
||||||
KeyShfHome: "\x1b[1;2H",
|
KeyShfHome: "\x1b[1;2H",
|
||||||
KeyShfEnd: "\x1b[1;2F",
|
KeyShfEnd: "\x1b[1;2F",
|
||||||
KeyCtrlHome: "\x1b[1;5H",
|
KeyCtrlHome: "\x1b[1;5H",
|
||||||
KeyCtrlEnd: "\x1b[1;5F",
|
KeyCtrlEnd: "\x1b[1;5F",
|
||||||
KeyAltHome: "\x1b[1;9H",
|
KeyAltHome: "\x1b[1;3H",
|
||||||
KeyAltEnd: "\x1b[1;9F",
|
KeyAltEnd: "\x1b[1;3F",
|
||||||
|
KeyMetaHome: "\x1b[1;9H",
|
||||||
|
KeyMetaEnd: "\x1b[1;9F",
|
||||||
})
|
})
|
||||||
AddTerminfo(&Terminfo{
|
AddTerminfo(&Terminfo{
|
||||||
Name: "gnome-256color",
|
Name: "gnome-256color",
|
||||||
@ -1019,16 +1025,22 @@ func init() {
|
|||||||
KeyCtrlRight: "\x1b[1;5C",
|
KeyCtrlRight: "\x1b[1;5C",
|
||||||
KeyCtrlUp: "\x1b[1;5A",
|
KeyCtrlUp: "\x1b[1;5A",
|
||||||
KeyCtrlDown: "\x1b[1;5B",
|
KeyCtrlDown: "\x1b[1;5B",
|
||||||
KeyAltLeft: "\x1b[1;9D",
|
KeyAltLeft: "\x1b[1;3D",
|
||||||
KeyAltRight: "\x1b[1;9C",
|
KeyAltRight: "\x1b[1;3C",
|
||||||
KeyAltUp: "\x1b[1;9A",
|
KeyAltUp: "\x1b[1;3A",
|
||||||
KeyAltDown: "\x1b[1;9B",
|
KeyAltDown: "\x1b[1;3B",
|
||||||
|
KeyMetaLeft: "\x1b[1;9D",
|
||||||
|
KeyMetaRight: "\x1b[1;9C",
|
||||||
|
KeyMetaUp: "\x1b[1;9A",
|
||||||
|
KeyMetaDown: "\x1b[1;9B",
|
||||||
KeyShfHome: "\x1b[1;2H",
|
KeyShfHome: "\x1b[1;2H",
|
||||||
KeyShfEnd: "\x1b[1;2F",
|
KeyShfEnd: "\x1b[1;2F",
|
||||||
KeyCtrlHome: "\x1b[1;5H",
|
KeyCtrlHome: "\x1b[1;5H",
|
||||||
KeyCtrlEnd: "\x1b[1;5F",
|
KeyCtrlEnd: "\x1b[1;5F",
|
||||||
KeyAltHome: "\x1b[1;9H",
|
KeyAltHome: "\x1b[1;3H",
|
||||||
KeyAltEnd: "\x1b[1;9F",
|
KeyAltEnd: "\x1b[1;3F",
|
||||||
|
KeyMetaHome: "\x1b[1;9H",
|
||||||
|
KeyMetaEnd: "\x1b[1;9F",
|
||||||
})
|
})
|
||||||
AddTerminfo(&Terminfo{
|
AddTerminfo(&Terminfo{
|
||||||
Name: "hpterm",
|
Name: "hpterm",
|
||||||
@ -2598,16 +2610,22 @@ func init() {
|
|||||||
KeyCtrlRight: "\x1b[1;5C",
|
KeyCtrlRight: "\x1b[1;5C",
|
||||||
KeyCtrlUp: "\x1b[1;5A",
|
KeyCtrlUp: "\x1b[1;5A",
|
||||||
KeyCtrlDown: "\x1b[1;5B",
|
KeyCtrlDown: "\x1b[1;5B",
|
||||||
KeyAltLeft: "\x1b[1;9D",
|
KeyAltLeft: "\x1b[1;3D",
|
||||||
KeyAltRight: "\x1b[1;9C",
|
KeyAltRight: "\x1b[1;3C",
|
||||||
KeyAltUp: "\x1b[1;9A",
|
KeyAltUp: "\x1b[1;3A",
|
||||||
KeyAltDown: "\x1b[1;9B",
|
KeyAltDown: "\x1b[1;3B",
|
||||||
|
KeyMetaLeft: "\x1b[1;9D",
|
||||||
|
KeyMetaRight: "\x1b[1;9C",
|
||||||
|
KeyMetaUp: "\x1b[1;9A",
|
||||||
|
KeyMetaDown: "\x1b[1;9B",
|
||||||
KeyShfHome: "\x1b[1;2H",
|
KeyShfHome: "\x1b[1;2H",
|
||||||
KeyShfEnd: "\x1b[1;2F",
|
KeyShfEnd: "\x1b[1;2F",
|
||||||
KeyCtrlHome: "\x1b[1;5H",
|
KeyCtrlHome: "\x1b[1;5H",
|
||||||
KeyCtrlEnd: "\x1b[1;5F",
|
KeyCtrlEnd: "\x1b[1;5F",
|
||||||
KeyAltHome: "\x1b[1;9H",
|
KeyAltHome: "\x1b[1;3H",
|
||||||
KeyAltEnd: "\x1b[1;9F",
|
KeyAltEnd: "\x1b[1;3F",
|
||||||
|
KeyMetaHome: "\x1b[1;9H",
|
||||||
|
KeyMetaEnd: "\x1b[1;9F",
|
||||||
})
|
})
|
||||||
AddTerminfo(&Terminfo{
|
AddTerminfo(&Terminfo{
|
||||||
Name: "xnuppc",
|
Name: "xnuppc",
|
||||||
@ -2744,16 +2762,22 @@ func init() {
|
|||||||
KeyCtrlRight: "\x1b[1;5C",
|
KeyCtrlRight: "\x1b[1;5C",
|
||||||
KeyCtrlUp: "\x1b[1;5A",
|
KeyCtrlUp: "\x1b[1;5A",
|
||||||
KeyCtrlDown: "\x1b[1;5B",
|
KeyCtrlDown: "\x1b[1;5B",
|
||||||
KeyAltLeft: "\x1b[1;9D",
|
KeyAltLeft: "\x1b[1;3D",
|
||||||
KeyAltRight: "\x1b[1;9C",
|
KeyAltRight: "\x1b[1;3C",
|
||||||
KeyAltUp: "\x1b[1;9A",
|
KeyAltUp: "\x1b[1;3A",
|
||||||
KeyAltDown: "\x1b[1;9B",
|
KeyAltDown: "\x1b[1;3B",
|
||||||
|
KeyMetaLeft: "\x1b[1;9D",
|
||||||
|
KeyMetaRight: "\x1b[1;9C",
|
||||||
|
KeyMetaUp: "\x1b[1;9A",
|
||||||
|
KeyMetaDown: "\x1b[1;9B",
|
||||||
KeyShfHome: "\x1b[1;2H",
|
KeyShfHome: "\x1b[1;2H",
|
||||||
KeyShfEnd: "\x1b[1;2F",
|
KeyShfEnd: "\x1b[1;2F",
|
||||||
KeyCtrlHome: "\x1b[1;5H",
|
KeyCtrlHome: "\x1b[1;5H",
|
||||||
KeyCtrlEnd: "\x1b[1;5F",
|
KeyCtrlEnd: "\x1b[1;5F",
|
||||||
KeyAltHome: "\x1b[1;9H",
|
KeyAltHome: "\x1b[1;3H",
|
||||||
KeyAltEnd: "\x1b[1;9F",
|
KeyAltEnd: "\x1b[1;3F",
|
||||||
|
KeyMetaHome: "\x1b[1;9H",
|
||||||
|
KeyMetaEnd: "\x1b[1;9F",
|
||||||
})
|
})
|
||||||
AddTerminfo(&Terminfo{
|
AddTerminfo(&Terminfo{
|
||||||
Name: "xterm-256color",
|
Name: "xterm-256color",
|
||||||
@ -2866,16 +2890,22 @@ func init() {
|
|||||||
KeyCtrlRight: "\x1b[1;5C",
|
KeyCtrlRight: "\x1b[1;5C",
|
||||||
KeyCtrlUp: "\x1b[1;5A",
|
KeyCtrlUp: "\x1b[1;5A",
|
||||||
KeyCtrlDown: "\x1b[1;5B",
|
KeyCtrlDown: "\x1b[1;5B",
|
||||||
KeyAltLeft: "\x1b[1;9D",
|
KeyAltLeft: "\x1b[1;3D",
|
||||||
KeyAltRight: "\x1b[1;9C",
|
KeyAltRight: "\x1b[1;3C",
|
||||||
KeyAltUp: "\x1b[1;9A",
|
KeyAltUp: "\x1b[1;3A",
|
||||||
KeyAltDown: "\x1b[1;9B",
|
KeyAltDown: "\x1b[1;3B",
|
||||||
|
KeyMetaLeft: "\x1b[1;9D",
|
||||||
|
KeyMetaRight: "\x1b[1;9C",
|
||||||
|
KeyMetaUp: "\x1b[1;9A",
|
||||||
|
KeyMetaDown: "\x1b[1;9B",
|
||||||
KeyShfHome: "\x1b[1;2H",
|
KeyShfHome: "\x1b[1;2H",
|
||||||
KeyShfEnd: "\x1b[1;2F",
|
KeyShfEnd: "\x1b[1;2F",
|
||||||
KeyCtrlHome: "\x1b[1;5H",
|
KeyCtrlHome: "\x1b[1;5H",
|
||||||
KeyCtrlEnd: "\x1b[1;5F",
|
KeyCtrlEnd: "\x1b[1;5F",
|
||||||
KeyAltHome: "\x1b[1;9H",
|
KeyAltHome: "\x1b[1;3H",
|
||||||
KeyAltEnd: "\x1b[1;9F",
|
KeyAltEnd: "\x1b[1;3F",
|
||||||
|
KeyMetaHome: "\x1b[1;9H",
|
||||||
|
KeyMetaEnd: "\x1b[1;9F",
|
||||||
})
|
})
|
||||||
AddTerminfo(&Terminfo{
|
AddTerminfo(&Terminfo{
|
||||||
Name: "xterm-truecolor",
|
Name: "xterm-truecolor",
|
||||||
@ -2990,15 +3020,21 @@ func init() {
|
|||||||
KeyCtrlRight: "\x1b[1;5C",
|
KeyCtrlRight: "\x1b[1;5C",
|
||||||
KeyCtrlUp: "\x1b[1;5A",
|
KeyCtrlUp: "\x1b[1;5A",
|
||||||
KeyCtrlDown: "\x1b[1;5B",
|
KeyCtrlDown: "\x1b[1;5B",
|
||||||
KeyAltLeft: "\x1b[1;9D",
|
KeyAltLeft: "\x1b[1;3D",
|
||||||
KeyAltRight: "\x1b[1;9C",
|
KeyAltRight: "\x1b[1;3C",
|
||||||
KeyAltUp: "\x1b[1;9A",
|
KeyAltUp: "\x1b[1;3A",
|
||||||
KeyAltDown: "\x1b[1;9B",
|
KeyAltDown: "\x1b[1;3B",
|
||||||
|
KeyMetaLeft: "\x1b[1;9D",
|
||||||
|
KeyMetaRight: "\x1b[1;9C",
|
||||||
|
KeyMetaUp: "\x1b[1;9A",
|
||||||
|
KeyMetaDown: "\x1b[1;9B",
|
||||||
KeyShfHome: "\x1b[1;2H",
|
KeyShfHome: "\x1b[1;2H",
|
||||||
KeyShfEnd: "\x1b[1;2F",
|
KeyShfEnd: "\x1b[1;2F",
|
||||||
KeyCtrlHome: "\x1b[1;5H",
|
KeyCtrlHome: "\x1b[1;5H",
|
||||||
KeyCtrlEnd: "\x1b[1;5F",
|
KeyCtrlEnd: "\x1b[1;5F",
|
||||||
KeyAltHome: "\x1b[1;9H",
|
KeyAltHome: "\x1b[1;3H",
|
||||||
KeyAltEnd: "\x1b[1;9F",
|
KeyAltEnd: "\x1b[1;3F",
|
||||||
|
KeyMetaHome: "\x1b[1;9H",
|
||||||
|
KeyMetaEnd: "\x1b[1;9F",
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
20
mkinfo.go
20
mkinfo.go
@ -1,6 +1,6 @@
|
|||||||
// +build ignore
|
// +build ignore
|
||||||
|
|
||||||
// Copyright 2015 The TCell Authors
|
// Copyright 2016 The TCell Authors
|
||||||
//
|
//
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
// you may not use file except in compliance with the License.
|
// you may not use file except in compliance with the License.
|
||||||
@ -246,10 +246,14 @@ func getinfo(name string) (*tcell.Terminfo, error) {
|
|||||||
if t.KeyShfRight == "\x1b[1;2C" && t.KeyShfLeft == "\x1b[1;2D" {
|
if t.KeyShfRight == "\x1b[1;2C" && t.KeyShfLeft == "\x1b[1;2D" {
|
||||||
t.KeyShfUp = "\x1b[1;2A"
|
t.KeyShfUp = "\x1b[1;2A"
|
||||||
t.KeyShfDown = "\x1b[1;2B"
|
t.KeyShfDown = "\x1b[1;2B"
|
||||||
t.KeyAltUp = "\x1b[1;9A"
|
t.KeyMetaUp = "\x1b[1;9A"
|
||||||
t.KeyAltDown = "\x1b[1;9B"
|
t.KeyMetaDown = "\x1b[1;9B"
|
||||||
t.KeyAltRight = "\x1b[1;9C"
|
t.KeyMetaRight = "\x1b[1;9C"
|
||||||
t.KeyAltLeft = "\x1b[1;9D"
|
t.KeyMetaLeft = "\x1b[1;9D"
|
||||||
|
t.KeyAltUp = "\x1b[1;3A"
|
||||||
|
t.KeyAltDown = "\x1b[1;3B"
|
||||||
|
t.KeyAltRight = "\x1b[1;3C"
|
||||||
|
t.KeyAltLeft = "\x1b[1;3D"
|
||||||
t.KeyCtrlUp = "\x1b[1;5A"
|
t.KeyCtrlUp = "\x1b[1;5A"
|
||||||
t.KeyCtrlDown = "\x1b[1;5B"
|
t.KeyCtrlDown = "\x1b[1;5B"
|
||||||
t.KeyCtrlRight = "\x1b[1;5C"
|
t.KeyCtrlRight = "\x1b[1;5C"
|
||||||
@ -496,6 +500,10 @@ func dotGoInfo(w io.Writer, t *tcell.Terminfo) {
|
|||||||
dotGoAddStr(w, "KeyCtrlRight", t.KeyCtrlRight)
|
dotGoAddStr(w, "KeyCtrlRight", t.KeyCtrlRight)
|
||||||
dotGoAddStr(w, "KeyCtrlUp", t.KeyCtrlUp)
|
dotGoAddStr(w, "KeyCtrlUp", t.KeyCtrlUp)
|
||||||
dotGoAddStr(w, "KeyCtrlDown", t.KeyCtrlDown)
|
dotGoAddStr(w, "KeyCtrlDown", t.KeyCtrlDown)
|
||||||
|
dotGoAddStr(w, "KeyMetaLeft", t.KeyMetaLeft)
|
||||||
|
dotGoAddStr(w, "KeyMetaRight", t.KeyMetaRight)
|
||||||
|
dotGoAddStr(w, "KeyMetaUp", t.KeyMetaUp)
|
||||||
|
dotGoAddStr(w, "KeyMetaDown", t.KeyMetaDown)
|
||||||
dotGoAddStr(w, "KeyAltLeft", t.KeyAltLeft)
|
dotGoAddStr(w, "KeyAltLeft", t.KeyAltLeft)
|
||||||
dotGoAddStr(w, "KeyAltRight", t.KeyAltRight)
|
dotGoAddStr(w, "KeyAltRight", t.KeyAltRight)
|
||||||
dotGoAddStr(w, "KeyAltUp", t.KeyAltUp)
|
dotGoAddStr(w, "KeyAltUp", t.KeyAltUp)
|
||||||
@ -504,6 +512,8 @@ func dotGoInfo(w io.Writer, t *tcell.Terminfo) {
|
|||||||
dotGoAddStr(w, "KeyShfEnd", t.KeyShfEnd)
|
dotGoAddStr(w, "KeyShfEnd", t.KeyShfEnd)
|
||||||
dotGoAddStr(w, "KeyCtrlHome", t.KeyCtrlHome)
|
dotGoAddStr(w, "KeyCtrlHome", t.KeyCtrlHome)
|
||||||
dotGoAddStr(w, "KeyCtrlEnd", t.KeyCtrlEnd)
|
dotGoAddStr(w, "KeyCtrlEnd", t.KeyCtrlEnd)
|
||||||
|
dotGoAddStr(w, "KeyMetaHome", t.KeyMetaHome)
|
||||||
|
dotGoAddStr(w, "KeyMetaEnd", t.KeyMetaEnd)
|
||||||
dotGoAddStr(w, "KeyAltHome", t.KeyAltHome)
|
dotGoAddStr(w, "KeyAltHome", t.KeyAltHome)
|
||||||
dotGoAddStr(w, "KeyAltEnd", t.KeyAltEnd)
|
dotGoAddStr(w, "KeyAltEnd", t.KeyAltEnd)
|
||||||
fmt.Fprintln(w, " })")
|
fmt.Fprintln(w, " })")
|
||||||
|
10
terminfo.go
10
terminfo.go
@ -1,4 +1,4 @@
|
|||||||
// Copyright 2015 The TCell Authors
|
// Copyright 2016 The TCell Authors
|
||||||
//
|
//
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
// you may not use file except in compliance with the License.
|
// you may not use file except in compliance with the License.
|
||||||
@ -156,17 +156,23 @@ type Terminfo struct {
|
|||||||
SetFgRGB string `json:"_setfrgb,omitempty"` // setfrgb
|
SetFgRGB string `json:"_setfrgb,omitempty"` // setfrgb
|
||||||
SetBgRGB string `json:"_setbrgb,omitempty"` // setbrgb
|
SetBgRGB string `json:"_setbrgb,omitempty"` // setbrgb
|
||||||
KeyShfUp string `json:"_kscu1,omitempty"` // shift-up
|
KeyShfUp string `json:"_kscu1,omitempty"` // shift-up
|
||||||
KeyShfDown string `json:"_kscud1,omitempty"` // shift-left
|
KeyShfDown string `json:"_kscud1,omitempty"` // shift-down
|
||||||
KeyCtrlUp string `json:"_kccu1,omitempty"` // ctrl-up
|
KeyCtrlUp string `json:"_kccu1,omitempty"` // ctrl-up
|
||||||
KeyCtrlDown string `json:"_kccud1,omitempty"` // ctrl-left
|
KeyCtrlDown string `json:"_kccud1,omitempty"` // ctrl-left
|
||||||
KeyCtrlRight string `json:"_kccuf1,omitempty"` // ctrl-right
|
KeyCtrlRight string `json:"_kccuf1,omitempty"` // ctrl-right
|
||||||
KeyCtrlLeft string `json:"_kccub1,omitempty"` // ctrl-left
|
KeyCtrlLeft string `json:"_kccub1,omitempty"` // ctrl-left
|
||||||
|
KeyMetaUp string `json:"_kmcu1,omitempty"` // meta-up
|
||||||
|
KeyMetaDown string `json:"_kmcud1,omitempty"` // meta-left
|
||||||
|
KeyMetaRight string `json:"_kmcuf1,omitempty"` // meta-right
|
||||||
|
KeyMetaLeft string `json:"_kmcub1,omitempty"` // meta-left
|
||||||
KeyAltUp string `json:"_kacu1,omitempty"` // alt-up
|
KeyAltUp string `json:"_kacu1,omitempty"` // alt-up
|
||||||
KeyAltDown string `json:"_kacud1,omitempty"` // alt-left
|
KeyAltDown string `json:"_kacud1,omitempty"` // alt-left
|
||||||
KeyAltRight string `json:"_kacuf1,omitempty"` // alt-right
|
KeyAltRight string `json:"_kacuf1,omitempty"` // alt-right
|
||||||
KeyAltLeft string `json:"_kacub1,omitempty"` // alt-left
|
KeyAltLeft string `json:"_kacub1,omitempty"` // alt-left
|
||||||
KeyCtrlHome string `json:"_kchome,omitempty"`
|
KeyCtrlHome string `json:"_kchome,omitempty"`
|
||||||
KeyCtrlEnd string `json:"_kcend,omitempty"`
|
KeyCtrlEnd string `json:"_kcend,omitempty"`
|
||||||
|
KeyMetaHome string `json:"_kmhome,omitempty"`
|
||||||
|
KeyMetaEnd string `json:"_kmend,omitempty"`
|
||||||
KeyAltHome string `json:"_kahome,omitempty"`
|
KeyAltHome string `json:"_kahome,omitempty"`
|
||||||
KeyAltEnd string `json:"_kaend,omitempty"`
|
KeyAltEnd string `json:"_kaend,omitempty"`
|
||||||
}
|
}
|
||||||
|
@ -287,6 +287,13 @@ func (t *tScreen) prepareKeys() {
|
|||||||
t.prepareKeyMod(KeyHome, ModAlt, ti.KeyAltHome)
|
t.prepareKeyMod(KeyHome, ModAlt, ti.KeyAltHome)
|
||||||
t.prepareKeyMod(KeyEnd, ModAlt, ti.KeyAltEnd)
|
t.prepareKeyMod(KeyEnd, ModAlt, ti.KeyAltEnd)
|
||||||
|
|
||||||
|
t.prepareKeyMod(KeyRight, ModMeta, ti.KeyMetaRight)
|
||||||
|
t.prepareKeyMod(KeyLeft, ModMeta, ti.KeyMetaLeft)
|
||||||
|
t.prepareKeyMod(KeyUp, ModMeta, ti.KeyMetaUp)
|
||||||
|
t.prepareKeyMod(KeyDown, ModMeta, ti.KeyMetaDown)
|
||||||
|
t.prepareKeyMod(KeyHome, ModMeta, ti.KeyMetaHome)
|
||||||
|
t.prepareKeyMod(KeyEnd, ModMeta, ti.KeyMetaEnd)
|
||||||
|
|
||||||
// Sadly, xterm handling of keycodes is somewhat erratic. In
|
// Sadly, xterm handling of keycodes is somewhat erratic. In
|
||||||
// particular, different codes are sent depending on application
|
// particular, different codes are sent depending on application
|
||||||
// mode is in use or not, and the entries for many of these are
|
// mode is in use or not, and the entries for many of these are
|
||||||
|
Loading…
x
Reference in New Issue
Block a user