Merge pull request #3540 from JoeKar/fix/cursor-down

actions: Perform `Cursor(Page)Down` with selection like GUI editors do
This commit is contained in:
Jöran Karl
2024-12-04 21:23:40 +01:00
committed by GitHub
3 changed files with 15 additions and 4 deletions

View File

@@ -262,8 +262,13 @@ func (h *BufPane) CursorUp() bool {
// CursorDown moves the cursor down
func (h *BufPane) CursorDown() bool {
selectionEndNewline := h.Cursor.HasSelection() && h.Cursor.CurSelection[1].X == 0
h.Cursor.Deselect(false)
h.MoveCursorDown(1)
if selectionEndNewline {
h.Cursor.Start()
} else {
h.MoveCursorDown(1)
}
h.Relocate()
return true
}
@@ -297,7 +302,6 @@ func (h *BufPane) CursorLeft() bool {
func (h *BufPane) CursorRight() bool {
if h.Cursor.HasSelection() {
h.Cursor.Deselect(false)
h.Cursor.Right()
} else {
tabstospaces := h.Buf.Settings["tabstospaces"].(bool)
tabmovement := h.Buf.Settings["tabmovement"].(bool)
@@ -1740,14 +1744,21 @@ func (h *BufPane) CursorPageUp() bool {
// CursorPageDown places the cursor a page down,
// moving the view to keep cursor at the same relative position in the view
func (h *BufPane) CursorPageDown() bool {
selectionEndNewline := h.Cursor.HasSelection() && h.Cursor.CurSelection[1].X == 0
h.Cursor.Deselect(false)
pageOverlap := int(h.Buf.Settings["pageoverlap"].(float64))
scrollAmount := h.BufView().Height - pageOverlap
if selectionEndNewline {
scrollAmount--
}
h.MoveCursorDown(scrollAmount)
if h.Cursor.Num == 0 && !h.ScrollReachedEnd() {
h.ScrollDown(scrollAmount)
h.ScrollAdjust()
}
if selectionEndNewline {
h.Cursor.Start()
}
h.Relocate()
return true
}

View File

@@ -193,7 +193,7 @@ func (c *Cursor) Deselect(start bool) {
if start {
c.Loc = c.CurSelection[0]
} else {
c.Loc = c.CurSelection[1].Move(-1, c.buf)
c.Loc = c.CurSelection[1]
}
c.ResetSelection()
c.StoreVisualX()

View File

@@ -449,7 +449,7 @@ func (w *BufWindow) displayBuffer() {
currentLine := false
for _, c := range cursors {
if bloc.Y == c.Y && w.active {
if !c.HasSelection() && bloc.Y == c.Y && w.active {
currentLine = true
break
}