diff --git a/internal/action/bindings.go b/internal/action/bindings.go index 0b940ebf..01ea7845 100644 --- a/internal/action/bindings.go +++ b/internal/action/bindings.go @@ -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 } diff --git a/internal/action/bufpane.go b/internal/action/bufpane.go index 7b348b79..369749f5 100644 --- a/internal/action/bufpane.go +++ b/internal/action/bufpane.go @@ -472,7 +472,9 @@ func (h *BufPane) HandleEvent(event tcell.Event) { ke := KeyEvent{ code: e.Key(), mod: metaToAlt(e.Modifiers()), - r: e.Rune(), + } + if e.Key() == tcell.KeyRune { + ke.r = e.Rune() } done := h.DoKeyEvent(ke) diff --git a/internal/action/events.go b/internal/action/events.go index 4addf1b5..c0d5b7be 100644 --- a/internal/action/events.go +++ b/internal/action/events.go @@ -68,7 +68,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 +155,14 @@ func (m MouseEvent) Name() string { func ConstructEvent(event tcell.Event) (Event, error) { switch e := event.(type) { case *tcell.EventKey: - return KeyEvent{ + ke := KeyEvent{ code: e.Key(), mod: metaToAlt(e.Modifiers()), - r: e.Rune(), - }, nil + } + if e.Key() == tcell.KeyRune { + ke.r = e.Rune() + } + return ke, nil case *tcell.EventRaw: return RawEvent{ esc: e.EscSeq(), diff --git a/internal/action/infopane.go b/internal/action/infopane.go index d3f30fd4..8f13c184 100644 --- a/internal/action/infopane.go +++ b/internal/action/infopane.go @@ -89,7 +89,9 @@ func (h *InfoPane) HandleEvent(event tcell.Event) { ke := KeyEvent{ code: e.Key(), mod: metaToAlt(e.Modifiers()), - r: e.Rune(), + } + if e.Key() == tcell.KeyRune { + ke.r = e.Rune() } done := h.DoKeyEvent(ke) diff --git a/internal/action/termpane.go b/internal/action/termpane.go index f440f0cd..0cb50706 100644 --- a/internal/action/termpane.go +++ b/internal/action/termpane.go @@ -128,7 +128,9 @@ func (t *TermPane) HandleEvent(event tcell.Event) { ke := KeyEvent{ code: e.Key(), mod: metaToAlt(e.Modifiers()), - r: e.Rune(), + } + if e.Key() == tcell.KeyRune { + ke.r = e.Rune() } action, more := TermBindings.NextEvent(ke, nil)