From 773c54a40d08e969bf925d0d72c4005614d90783 Mon Sep 17 00:00:00 2001 From: Zachary Yedidia Date: Fri, 6 Oct 2017 14:03:35 -0400 Subject: [PATCH] Support binding raw escapes codes --- cmd/micro/bindings.go | 9 +++++++++ cmd/micro/vendor/github.com/zyedidia/tcell | 2 +- cmd/micro/view.go | 18 ++++++++++++++++++ 3 files changed, 28 insertions(+), 1 deletion(-) diff --git a/cmd/micro/bindings.go b/cmd/micro/bindings.go index 31e42ac0..fc0c2d3a 100644 --- a/cmd/micro/bindings.go +++ b/cmd/micro/bindings.go @@ -260,6 +260,7 @@ type Key struct { modifiers tcell.ModMask buttons tcell.ButtonMask r rune + escape string } // InitBindings initializes the keybindings for micro @@ -316,6 +317,14 @@ modSearch: case strings.HasPrefix(k, "Shift"): k = k[5:] modifiers |= tcell.ModShift + case strings.HasPrefix(k, "\x1b"): + return Key{ + keyCode: -1, + modifiers: modifiers, + buttons: -1, + r: 0, + escape: k, + }, true default: break modSearch } diff --git a/cmd/micro/vendor/github.com/zyedidia/tcell b/cmd/micro/vendor/github.com/zyedidia/tcell index c47e7556..c92e80b7 160000 --- a/cmd/micro/vendor/github.com/zyedidia/tcell +++ b/cmd/micro/vendor/github.com/zyedidia/tcell @@ -1 +1 @@ -Subproject commit c47e75564a5c5e7fb5c7e5ec5b341c7902d551bc +Subproject commit c92e80b717d7d911424a2c8394af863ceca4abf0 diff --git a/cmd/micro/view.go b/cmd/micro/view.go index e78284e2..72bc8466 100644 --- a/cmd/micro/view.go +++ b/cmd/micro/view.go @@ -497,6 +497,24 @@ func (v *View) HandleEvent(event tcell.Event) { v.Buf.CheckModTime() switch e := event.(type) { + case *tcell.EventRaw: + for key, actions := range bindings { + if key.keyCode == -1 { + if e.EscapeCode() == key.escape { + for _, c := range v.Buf.cursors { + ok := v.SetCursor(c) + if !ok { + break + } + relocate = false + relocate = v.ExecuteActions(actions) || relocate + } + v.SetCursor(&v.Buf.Cursor) + v.Buf.MergeCursors() + break + } + } + } case *tcell.EventKey: // Check first if input is a key binding, if it is we 'eat' the input and don't insert a rune isBinding := false