From 89ac5d7de22ad3f578af51805612f623901b9a6d Mon Sep 17 00:00:00 2001 From: 0xdbeef Date: Sat, 16 Nov 2019 15:27:57 +0100 Subject: [PATCH] SpawnMultiCursorDown / SpawnMultiCursorUp --- cmd/micro/actions.go | 64 +++++++++++++++++++++++++++++++++++++++++++ cmd/micro/bindings.go | 5 ++++ 2 files changed, 69 insertions(+) diff --git a/cmd/micro/actions.go b/cmd/micro/actions.go index 83eec144..85181091 100644 --- a/cmd/micro/actions.go +++ b/cmd/micro/actions.go @@ -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 { diff --git a/cmd/micro/bindings.go b/cmd/micro/bindings.go index e3a02841..6a54203a 100644 --- a/cmd/micro/bindings.go +++ b/cmd/micro/bindings.go @@ -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", -- 2.44.0