]> git.lizzy.rs Git - micro.git/commitdiff
Support multiactions
authorZachary Yedidia <zyedidia@gmail.com>
Sat, 17 Aug 2019 18:49:42 +0000 (11:49 -0700)
committerZachary Yedidia <zyedidia@gmail.com>
Wed, 25 Dec 2019 22:05:11 +0000 (17:05 -0500)
internal/action/bufpane.go

index 86fb7e424f2d54b61825ecb164ee61df940c51c0..4f4876047366ab7029c93dc6a0138d38dbd54851 100644 (file)
@@ -47,23 +47,34 @@ func LuaAction(fn string) func(*BufPane) bool {
 
 // BufMapKey maps a key event to an action
 func BufMapKey(k Event, action string) {
-       if strings.HasPrefix(action, "command:") {
-               action = strings.SplitN(action, ":", 2)[1]
-               BufKeyStrings[k] = action
-               BufKeyBindings[k] = CommandAction(action)
-       } else if strings.HasPrefix(action, "command-edit:") {
-               action = strings.SplitN(action, ":", 2)[1]
-               BufKeyStrings[k] = action
-               BufKeyBindings[k] = CommandEditAction(action)
-       } else if strings.HasPrefix(action, "lua:") {
-               action = strings.SplitN(action, ":", 2)[1]
-               BufKeyStrings[k] = action
-               BufKeyBindings[k] = LuaAction(action)
-       } else if f, ok := BufKeyActions[action]; ok {
-               BufKeyStrings[k] = action
-               BufKeyBindings[k] = f
-       } else {
-               screen.TermMessage("Error:", action, "does not exist")
+       actions := strings.SplitN(action, ",", -1)
+       BufKeyStrings[k] = action
+       actionfns := make([]func(*BufPane) bool, len(actions))
+       for i, a := range actions {
+               a = strings.TrimSpace(a)
+               var afn func(*BufPane) bool
+               if strings.HasPrefix(action, "command:") {
+                       a = strings.SplitN(a, ":", 2)[1]
+                       afn = CommandAction(a)
+               } else if strings.HasPrefix(a, "command-edit:") {
+                       a = strings.SplitN(a, ":", 2)[1]
+                       afn = CommandEditAction(a)
+               } else if strings.HasPrefix(a, "lua:") {
+                       a = strings.SplitN(a, ":", 2)[1]
+                       afn = LuaAction(a)
+               } else if f, ok := BufKeyActions[a]; ok {
+                       afn = f
+               } else {
+                       screen.TermMessage("Error:", action, "does not exist")
+               }
+               actionfns[i] = afn
+       }
+       BufKeyBindings[k] = func(h *BufPane) bool {
+               b := false
+               for _, a := range actionfns {
+                       b = a(h) || b
+               }
+               return b
        }
 }