]> git.lizzy.rs Git - micro.git/blobdiff - cmd/micro/bindings.go
Log erroneous keybindings
[micro.git] / cmd / micro / bindings.go
index 0506ab36dc9ab627f256dee590e015aa2c909738..b537a9e12e9241082c1005e2baf533b0c7e63d2e 100644 (file)
@@ -1,11 +1,11 @@
 package main
 
 import (
-       "encoding/json"
        "io/ioutil"
        "os"
        "strings"
 
+       "github.com/zyedidia/json5/encoding/json5"
        "github.com/zyedidia/tcell"
 )
 
@@ -52,8 +52,11 @@ var bindingActions = map[string]func(*View, bool) bool{
        "CutLine":             (*View).CutLine,
        "DuplicateLine":       (*View).DuplicateLine,
        "DeleteLine":          (*View).DeleteLine,
+       "MoveLinesUp":         (*View).MoveLinesUp,
+       "MoveLinesDown":       (*View).MoveLinesDown,
        "IndentSelection":     (*View).IndentSelection,
        "OutdentSelection":    (*View).OutdentSelection,
+       "OutdentLine":         (*View).OutdentLine,
        "Paste":               (*View).Paste,
        "PastePrimary":        (*View).PastePrimary,
        "SelectAll":           (*View).SelectAll,
@@ -72,6 +75,7 @@ var bindingActions = map[string]func(*View, bool) bool{
        "ClearStatus":         (*View).ClearStatus,
        "ShellMode":           (*View).ShellMode,
        "CommandMode":         (*View).CommandMode,
+       "Escape":              (*View).Escape,
        "Quit":                (*View).Quit,
        "QuitAll":             (*View).QuitAll,
        "AddTab":              (*View).AddTab,
@@ -79,6 +83,11 @@ var bindingActions = map[string]func(*View, bool) bool{
        "NextTab":             (*View).NextTab,
        "NextSplit":           (*View).NextSplit,
        "PreviousSplit":       (*View).PreviousSplit,
+       "Unsplit":             (*View).Unsplit,
+       "VSplit":              (*View).VSplitBinding,
+       "HSplit":              (*View).HSplitBinding,
+       "ToggleMacro":         (*View).ToggleMacro,
+       "PlayMacro":           (*View).PlayMacro,
 
        // This was changed to InsertNewline but I don't want to break backwards compatibility
        "InsertEnter": (*View).InsertNewline,
@@ -203,12 +212,11 @@ var bindingKeys = map[string]tcell.Key{
        "CtrlRightSq":    tcell.KeyCtrlRightSq,
        "CtrlCarat":      tcell.KeyCtrlCarat,
        "CtrlUnderscore": tcell.KeyCtrlUnderscore,
-       "Backspace":      tcell.KeyBackspace,
        "Tab":            tcell.KeyTab,
        "Esc":            tcell.KeyEsc,
        "Escape":         tcell.KeyEscape,
        "Enter":          tcell.KeyEnter,
-       "Backspace2":     tcell.KeyBackspace2,
+       "Backspace":      tcell.KeyBackspace2,
 
        // I renamed these keys to PageUp and PageDown but I don't want to break someone's keybindings
        "PgUp":   tcell.KeyPgUp,
@@ -237,7 +245,7 @@ func InitBindings() {
                        return
                }
 
-               err = json.Unmarshal(input, &parsed)
+               err = json5.Unmarshal(input, &parsed)
                if err != nil {
                        TermMessage("Error reading bindings.json:", err.Error())
                }
@@ -265,7 +273,8 @@ modSearch:
                case strings.HasPrefix(k, "-"):
                        // We optionally support dashes between modifiers
                        k = k[1:]
-               case strings.HasPrefix(k, "Ctrl"):
+               case strings.HasPrefix(k, "Ctrl") && k != "CtrlH":
+                       // CtrlH technically does not have a 'Ctrl' modifier because it is really backspace
                        k = k[4:]
                        modifiers |= tcell.ModCtrl
                case strings.HasPrefix(k, "Alt"):
@@ -331,6 +340,7 @@ func findAction(v string) (action func(*View, bool) bool) {
 func BindKey(k, v string) {
        key, ok := findKey(k)
        if !ok {
+               TermMessage("Unknown keybinding: " + k)
                return
        }
        if v == "ToggleHelp" {
@@ -359,6 +369,8 @@ func DefaultBindings() map[string]string {
                "ShiftRight":     "SelectRight",
                "AltLeft":        "WordLeft",
                "AltRight":       "WordRight",
+               "AltUp":          "MoveLinesUp",
+               "AltDown":        "MoveLinesDown",
                "AltShiftRight":  "SelectWordRight",
                "AltShiftLeft":   "SelectWordLeft",
                "CtrlLeft":       "StartOfLine",
@@ -370,13 +382,12 @@ func DefaultBindings() map[string]string {
                "CtrlShiftUp":    "SelectToStart",
                "CtrlShiftDown":  "SelectToEnd",
                "Enter":          "InsertNewline",
-               "Space":          "InsertSpace",
+               "CtrlH":          "Backspace",
                "Backspace":      "Backspace",
-               "Backspace2":     "Backspace",
+               "Alt-CtrlH":      "DeleteWordLeft",
                "Alt-Backspace":  "DeleteWordLeft",
-               "Alt-Backspace2": "DeleteWordLeft",
                "Tab":            "IndentSelection,InsertTab",
-               "Backtab":        "OutdentSelection",
+               "Backtab":        "OutdentSelection,OutdentLine",
                "CtrlO":          "OpenFile",
                "CtrlS":          "Save",
                "CtrlF":          "Find",
@@ -395,17 +406,20 @@ func DefaultBindings() map[string]string {
                "CtrlBackslash":  "NextTab",
                "Home":           "StartOfLine",
                "End":            "EndOfLine",
+               "CtrlHome":       "CursorStart",
+               "CtrlEnd":        "CursorEnd",
                "PageUp":         "CursorPageUp",
                "PageDown":       "CursorPageDown",
                "CtrlG":          "ToggleHelp",
                "CtrlR":          "ToggleRuler",
                "CtrlL":          "JumpLine",
                "Delete":         "Delete",
-               "Esc":            "ClearStatus",
                "CtrlB":          "ShellMode",
                "CtrlQ":          "Quit",
                "CtrlE":          "CommandMode",
                "CtrlW":          "NextSplit",
+               "CtrlU":          "ToggleMacro",
+               "CtrlJ":          "PlayMacro",
 
                // Emacs-style keybindings
                "Alt-f": "WordRight",
@@ -414,5 +428,13 @@ func DefaultBindings() map[string]string {
                "Alt-e": "EndOfLine",
                "Alt-p": "CursorUp",
                "Alt-n": "CursorDown",
+
+               // Integration with file managers
+               "F1":  "ToggleHelp",
+               "F2":  "Save",
+               "F4":  "Quit",
+               "F7":  "Find",
+               "F10": "Quit",
+               "Esc": "Escape",
        }
 }