Merge pull request #3337 from dmaluka/keyrune-usage-fix

Fix usage of tcell's `Rune()`
This commit is contained in:
Jöran Karl
2024-06-10 21:01:27 +02:00
committed by GitHub
5 changed files with 16 additions and 34 deletions

View File

@@ -176,31 +176,18 @@ modSearch:
// see if the key is in bindingKeys with the Ctrl prefix.
k = string(unicode.ToUpper(rune(k[0]))) + k[1:]
if code, ok := keyEvents["Ctrl"+k]; ok {
var r tcell.Key
// Special case for escape, for some reason tcell doesn't send it with the esc character
if code < 256 && code != 27 {
r = code
}
// It is, we're done.
return KeyEvent{
code: code,
mod: modifiers,
r: rune(r),
}, true
}
}
// See if we can find the key in bindingKeys
if code, ok := keyEvents[k]; ok {
var r tcell.Key
// Special case for escape, for some reason tcell doesn't send it with the esc character
if code < 256 && code != 27 {
r = code
}
return KeyEvent{
code: code,
mod: modifiers,
r: rune(r),
}, true
}

View File

@@ -469,11 +469,7 @@ func (h *BufPane) HandleEvent(event tcell.Event) {
h.paste(e.Text())
h.Relocate()
case *tcell.EventKey:
ke := KeyEvent{
code: e.Key(),
mod: metaToAlt(e.Modifiers()),
r: e.Rune(),
}
ke := keyEvent(e)
done := h.DoKeyEvent(ke)
if !done && e.Key() == tcell.KeyRune {

View File

@@ -44,6 +44,17 @@ func metaToAlt(mod tcell.ModMask) tcell.ModMask {
return mod
}
func keyEvent(e *tcell.EventKey) KeyEvent {
ke := KeyEvent{
code: e.Key(),
mod: metaToAlt(e.Modifiers()),
}
if e.Key() == tcell.KeyRune {
ke.r = e.Rune()
}
return ke
}
func (k KeyEvent) Name() string {
if k.any {
return "<any>"
@@ -68,7 +79,7 @@ func (k KeyEvent) Name() string {
if k.code == tcell.KeyRune {
s = string(k.r)
} else {
s = fmt.Sprintf("Key[%d,%d]", k.code, int(k.r))
s = fmt.Sprintf("Key[%d]", k.code)
}
}
if len(m) != 0 {
@@ -155,11 +166,7 @@ func (m MouseEvent) Name() string {
func ConstructEvent(event tcell.Event) (Event, error) {
switch e := event.(type) {
case *tcell.EventKey:
return KeyEvent{
code: e.Key(),
mod: metaToAlt(e.Modifiers()),
r: e.Rune(),
}, nil
return keyEvent(e), nil
case *tcell.EventRaw:
return RawEvent{
esc: e.EscSeq(),

View File

@@ -86,11 +86,7 @@ func (h *InfoPane) HandleEvent(event tcell.Event) {
case *tcell.EventResize:
// TODO
case *tcell.EventKey:
ke := KeyEvent{
code: e.Key(),
mod: metaToAlt(e.Modifiers()),
r: e.Rune(),
}
ke := keyEvent(e)
done := h.DoKeyEvent(ke)
hasYN := h.HasYN

View File

@@ -125,11 +125,7 @@ func (t *TermPane) Unsplit() {
// copy-paste
func (t *TermPane) HandleEvent(event tcell.Event) {
if e, ok := event.(*tcell.EventKey); ok {
ke := KeyEvent{
code: e.Key(),
mod: metaToAlt(e.Modifiers()),
r: e.Rune(),
}
ke := keyEvent(e)
action, more := TermBindings.NextEvent(ke, nil)
if !more {