diff --git a/cmd/micro/bindings.go b/cmd/micro/bindings.go index c6b1a866..16f02299 100644 --- a/cmd/micro/bindings.go +++ b/cmd/micro/bindings.go @@ -293,14 +293,20 @@ func DefaultBindings() map[string]string { // CursorUp moves the cursor up func (v *View) CursorUp() bool { - v.cursor.ResetSelection() + if v.cursor.HasSelection() { + v.cursor.SetLoc(v.cursor.curSelection[0]) + v.cursor.ResetSelection() + } v.cursor.Up() return true } // CursorDown moves the cursor down func (v *View) CursorDown() bool { - v.cursor.ResetSelection() + if v.cursor.HasSelection() { + v.cursor.SetLoc(v.cursor.curSelection[1]) + v.cursor.ResetSelection() + } v.cursor.Down() return true } diff --git a/cmd/micro/cursor.go b/cmd/micro/cursor.go index 4dc3320d..f4ba3da0 100644 --- a/cmd/micro/cursor.go +++ b/cmd/micro/cursor.go @@ -170,6 +170,7 @@ func (c *Cursor) SelectWord() { c.curSelection[1] = ToCharPos(forward, c.y, c.v.buf) + 1 c.origSelection[1] = c.curSelection[1] + c.SetLoc(c.curSelection[1]) } // AddWordToSelection adds the word the cursor is currently on to the selection @@ -202,6 +203,8 @@ func (c *Cursor) AddWordToSelection() { c.curSelection[1] = ToCharPos(forward, c.y, c.v.buf) + 1 c.curSelection[0] = c.origSelection[0] } + + c.SetLoc(c.curSelection[1]) } // SelectTo selects from the current cursor location to the given location diff --git a/cmd/micro/view.go b/cmd/micro/view.go index 25323bd5..ffb6016d 100644 --- a/cmd/micro/view.go +++ b/cmd/micro/view.go @@ -307,6 +307,7 @@ func (v *View) HandleEvent(event tcell.Event) { v.lastClickTime = time.Now() loc := v.cursor.Loc() + v.cursor.origSelection[0] = loc v.cursor.curSelection[0] = loc v.cursor.curSelection[1] = loc }