From e3e50dd6f6184ce9935aa9827c33af3ef1b685ad Mon Sep 17 00:00:00 2001 From: Zachary Yedidia Date: Sun, 29 May 2016 19:09:27 -0400 Subject: [PATCH] Add DeleteWordRight and DeleteWordLeft bindings --- cmd/micro/bindings.go | 40 ++++++++++++++++++++++++++++++++++++++-- 1 file changed, 38 insertions(+), 2 deletions(-) diff --git a/cmd/micro/bindings.go b/cmd/micro/bindings.go index 3749343f..4d7a1b32 100644 --- a/cmd/micro/bindings.go +++ b/cmd/micro/bindings.go @@ -44,6 +44,8 @@ func InitBindings() { "WordLeft": (*View).WordLeft, "SelectWordRight": (*View).SelectWordRight, "SelectWordLeft": (*View).SelectWordLeft, + "DeleteWordRight": (*View).DeleteWordRight, + "DeleteWordLeft": (*View).DeleteWordLeft, "SelectToStartOfLine": (*View).SelectToStartOfLine, "SelectToEndOfLine": (*View).SelectToEndOfLine, "InsertEnter": (*View).InsertEnter, @@ -247,7 +249,13 @@ func InitBindings() { for k, v := range defaults { if strings.Contains(k, "Alt-") { - key := Key{tcell.KeyRune, tcell.ModAlt, rune(k[len(k)-1])} + split := strings.Split(k, "-") + var key Key + if len(split[1]) > 1 { + key = Key{keys[split[1]].keyCode, keys[k].modifiers | tcell.ModAlt, 0} + } else { + key = Key{tcell.KeyRune, tcell.ModAlt, rune(k[len(k)-1])} + } bindings[key] = actions[v] } else { bindings[keys[k]] = actions[v] @@ -258,7 +266,13 @@ func InitBindings() { } for k, v := range parsed { if strings.Contains(k, "Alt-") { - key := Key{tcell.KeyRune, tcell.ModAlt, rune(k[len(k)-1])} + split := strings.Split(k, "-") + var key Key + if len(split[1]) > 1 { + key = Key{keys[split[1]].keyCode, keys[k].modifiers | tcell.ModAlt, 0} + } else { + key = Key{tcell.KeyRune, tcell.ModAlt, rune(k[len(k)-1])} + } bindings[key] = actions[v] } else { bindings[keys[k]] = actions[v] @@ -296,6 +310,8 @@ func DefaultBindings() map[string]string { "Space": "InsertSpace", "Backspace": "Backspace", "Backspace2": "Backspace", + "Alt-Backspace": "DeleteWordLeft", + "Alt-Backspace2": "DeleteWordLeft", "Tab": "InsertTab", "CtrlO": "OpenFile", "CtrlS": "Save", @@ -601,6 +617,26 @@ func (v *View) Backspace() bool { return true } +// DeleteWordRight deletes the word to the right of the cursor +func (v *View) DeleteWordRight() bool { + v.SelectWordRight() + if v.Cursor.HasSelection() { + v.Cursor.DeleteSelection() + v.Cursor.ResetSelection() + } + return true +} + +// DeleteWordLeft deletes the word to the left of the cursor +func (v *View) DeleteWordLeft() bool { + v.SelectWordLeft() + if v.Cursor.HasSelection() { + v.Cursor.DeleteSelection() + v.Cursor.ResetSelection() + } + return true +} + // Delete deletes the next character func (v *View) Delete() bool { if v.Cursor.HasSelection() {