]> git.lizzy.rs Git - micro.git/commitdiff
Enable registering raw events
authorZachary Yedidia <zyedidia@gmail.com>
Tue, 11 Aug 2020 18:36:58 +0000 (14:36 -0400)
committerZachary Yedidia <zyedidia@gmail.com>
Tue, 11 Aug 2020 18:36:58 +0000 (14:36 -0400)
Fixes #1821

internal/action/bindings.go
internal/action/keytree.go
internal/config/globals.go

index bae80f6360ca11f161793dbd1d918488942f8a7f..b3976c79fb48d8171f2d4ee3831d83d124b81c4d 100644 (file)
@@ -30,8 +30,6 @@ func createBindingsIfNotExist(fname string) {
 
 // InitBindings intializes the bindings map by reading from bindings.json
 func InitBindings() {
-       config.Bindings = DefaultBindings("buffer")
-
        var parsed map[string]interface{}
 
        filename := filepath.Join(config.ConfigDir, "bindings.json")
@@ -50,6 +48,14 @@ func InitBindings() {
                }
        }
 
+       for p, bind := range Binder {
+               defaults := DefaultBindings(p)
+
+               for k, v := range defaults {
+                       BindKey(k, v, bind)
+               }
+       }
+
        for k, v := range parsed {
                switch val := v.(type) {
                case string:
@@ -68,22 +74,17 @@ func InitBindings() {
                        screen.TermMessage("Error reading bindings.json: non-string and non-map entry", k)
                }
        }
-
-       for p, bind := range Binder {
-               defaults := DefaultBindings(p)
-
-               for k, v := range defaults {
-                       BindKey(k, v, bind)
-               }
-       }
 }
 
 func BindKey(k, v string, bind func(e Event, a string)) {
        event, err := findEvent(k)
        if err != nil {
                screen.TermMessage(err)
+               return
        }
 
+       config.Bindings[event.Name()] = v
+
        bind(event, v)
 
        // switch e := event.(type) {
index 32a86072437d5050d4f23cff63982f52fe565747..5b19640ebf741bedf34dc01bd2ff5f6b82c39a82 100644 (file)
@@ -141,13 +141,14 @@ func (k *KeyTree) RegisterMouseBinding(e Event, a PaneMouseAction) {
 
 func (k *KeyTree) registerBinding(e Event, a TreeAction) {
        switch ev := e.(type) {
-       case KeyEvent, MouseEvent:
+       case KeyEvent, MouseEvent, RawEvent:
                newNode, ok := k.root.children[e]
                if !ok {
                        newNode = NewKeyTreeNode()
                        k.root.children[e] = newNode
                }
-               newNode.actions = append(newNode.actions, a)
+               // newNode.actions = append(newNode.actions, a)
+               newNode.actions = []TreeAction{a}
        case KeySequenceEvent:
                n := k.root
                for _, key := range ev.keys {
@@ -159,7 +160,8 @@ func (k *KeyTree) registerBinding(e Event, a TreeAction) {
 
                        n = newNode
                }
-               n.actions = append(n.actions, a)
+               // n.actions = append(n.actions, a)
+               n.actions = []TreeAction{a}
        }
 }
 
index b1dacd2c91e21c11d28a6abf084cc438cd25f2d0..f473393a5b700c04e06863d8243964cc8b833127 100644 (file)
@@ -5,3 +5,7 @@ const (
 )
 
 var Bindings map[string]string
+
+func init() {
+       Bindings = make(map[string]string)
+}