]> git.lizzy.rs Git - micro.git/commitdiff
SpawnMultiCursorDown / SpawnMultiCursorUp
author0xdbeef <daniel.zalega@gmail.com>
Sat, 16 Nov 2019 14:27:57 +0000 (15:27 +0100)
committerdbeef <daniel.zalega@gmail.com>
Sun, 17 Nov 2019 10:22:25 +0000 (11:22 +0100)
cmd/micro/actions.go
cmd/micro/bindings.go

index 83eec1440d82768b809879d8db588f46a847c3e9..8518109107c05f21b75270b1c40856923f6cfd04 100644 (file)
@@ -2184,6 +2184,70 @@ func (v *View) SpawnMultiCursor(usePlugin bool) bool {
        return false
 }
 
+// SpawnMultiCursorUp creates additional cursor, at the same X (if possible), one Y less.
+func (v *View) SpawnMultiCursorUp(usePlugin bool) bool {
+
+       if usePlugin && !PreActionCall("SpawnMultiCursorUp", v) {
+               return false
+       }
+
+       if v.Cursor.Y == 0 {
+               return false
+       } else {
+               v.Cursor.GotoLoc(Loc{v.Cursor.X, v.Cursor.Y - 1})
+               v.Cursor.Relocate()
+       }
+
+       if v.mainCursor() {
+               c := &Cursor{
+                       buf: v.Buf,
+               }
+               c.GotoLoc(Loc{v.Cursor.X, v.Cursor.Y + 1})
+               v.Buf.cursors = append(v.Buf.cursors, c)
+       }
+
+       v.Buf.MergeCursors()
+       v.Buf.UpdateCursors()
+
+       if usePlugin {
+               PostActionCall("SpawnMultiCursorUp", v)
+       }
+
+       return false
+}
+
+// SpawnMultiCursorUp creates additional cursor, at the same X (if possible), one Y more.
+func (v *View) SpawnMultiCursorDown(usePlugin bool) bool {
+
+       if usePlugin && !PreActionCall("SpawnMultiCursorDown", v) {
+               return false
+       }
+
+       if v.Cursor.Y + 1 == v.Buf.LinesNum() {
+               return false
+       } else {
+               v.Cursor.GotoLoc(Loc{v.Cursor.X, v.Cursor.Y + 1})
+               v.Cursor.Relocate()
+       }
+
+       if v.mainCursor() {
+               c := &Cursor{
+                       buf: v.Buf,
+               }
+               c.GotoLoc(Loc{v.Cursor.X, v.Cursor.Y - 1})
+               v.Buf.cursors = append(v.Buf.cursors, c)
+       }
+
+       v.Buf.MergeCursors()
+       v.Buf.UpdateCursors()
+
+       if usePlugin {
+               PostActionCall("SpawnMultiCursorDown", v)
+       }
+
+       return false
+}
+
 // SpawnMultiCursorSelect adds a cursor at the beginning of each line of a selection
 func (v *View) SpawnMultiCursorSelect(usePlugin bool) bool {
        if v.Cursor == &v.Buf.Cursor {
index e3a02841718f97ab6cfd497607c1ea85436146c5..6a54203a6f84d9b551dc6da8555e2ea44fe357d5 100644 (file)
@@ -112,6 +112,8 @@ var bindingActions = map[string]func(*View, bool) bool{
        "ScrollDown":             (*View).ScrollDownAction,
        "SpawnMultiCursor":       (*View).SpawnMultiCursor,
        "SpawnMultiCursorSelect": (*View).SpawnMultiCursorSelect,
+       "SpawnMultiCursorUp": (*View).SpawnMultiCursorUp,
+       "SpawnMultiCursorDown": (*View).SpawnMultiCursorDown,
        "RemoveMultiCursor":      (*View).RemoveMultiCursor,
        "RemoveAllMultiCursors":  (*View).RemoveAllMultiCursors,
        "SkipMultiCursor":        (*View).SkipMultiCursor,
@@ -607,6 +609,9 @@ func DefaultBindings() map[string]string {
                "MouseMiddle":    "PastePrimary",
                "Ctrl-MouseLeft": "MouseMultiCursor",
 
+               "AltShiftUp": "SpawnMultiCursorUp",
+               "AltShiftDown": "SpawnMultiCursorDown",
+
                "Alt-n": "SpawnMultiCursor",
                "Alt-m": "SpawnMultiCursorSelect",
                "Alt-p": "RemoveMultiCursor",