Merge pull request #2959 from JoeKar/fix/raw-esc-sequence

bindings: Allow raw escape sequence to be bound with `bind`
This commit is contained in:
Dmytro Maluka
2024-03-14 04:38:05 +01:00
committed by GitHub
2 changed files with 16 additions and 4 deletions

View File

@@ -88,6 +88,10 @@ func BindKey(k, v string, bind func(e Event, a string)) {
return
}
if strings.HasPrefix(k, "\x1b") {
screen.Screen.RegisterRawSeq(k)
}
bind(event, v)
// switch e := event.(type) {
@@ -153,7 +157,6 @@ modSearch:
k = k[5:]
modifiers |= tcell.ModShift
case strings.HasPrefix(k, "\x1b"):
screen.Screen.RegisterRawSeq(k)
return RawEvent{
esc: k,
}, true
@@ -331,6 +334,10 @@ func UnbindKey(k string) error {
}
}
if strings.HasPrefix(k, "\x1b") {
screen.Screen.UnregisterRawSeq(k)
}
defaults := DefaultBindings("buffer")
if a, ok := defaults[k]; ok {
BindKey(k, a, Binder["buffer"])

View File

@@ -638,6 +638,11 @@ func (h *BufPane) ShowCmd(args []string) {
InfoBar.Message(option)
}
func parseKeyArg(arg string) string {
// If this is a raw escape sequence, convert it to its raw byte form
return strings.ReplaceAll(arg, "\\x1b", "\x1b")
}
// ShowKeyCmd displays the action that a key is bound to
func (h *BufPane) ShowKeyCmd(args []string) {
if len(args) < 1 {
@@ -645,7 +650,7 @@ func (h *BufPane) ShowKeyCmd(args []string) {
return
}
event, err := findEvent(args[0])
event, err := findEvent(parseKeyArg(args[0]))
if err != nil {
InfoBar.Error(err)
return
@@ -664,7 +669,7 @@ func (h *BufPane) BindCmd(args []string) {
return
}
_, err := TryBindKey(args[0], args[1], true)
_, err := TryBindKey(parseKeyArg(args[0]), args[1], true)
if err != nil {
InfoBar.Error(err)
}
@@ -677,7 +682,7 @@ func (h *BufPane) UnbindCmd(args []string) {
return
}
err := UnbindKey(args[0])
err := UnbindKey(parseKeyArg(args[0]))
if err != nil {
InfoBar.Error(err)
}