diff --git a/internal/action/actions.go b/internal/action/actions.go index 94fe3cf7..0e17caf0 100644 --- a/internal/action/actions.go +++ b/internal/action/actions.go @@ -1438,12 +1438,13 @@ func (h *BufPane) Duplicate() bool { // DuplicateLine duplicates the current line. If there is a selection, DuplicateLine // duplicates all the lines that are (fully or partially) in the selection. func (h *BufPane) DuplicateLine() bool { - if h.Cursor.HasSelection() { - origLoc := h.Cursor.Loc - origLastVisualX := h.Cursor.LastVisualX - origLastWrappedVisualX := h.Cursor.LastWrappedVisualX - origSelection := h.Cursor.CurSelection + loc := h.Cursor.Loc + lastVisualX := h.Cursor.LastVisualX + lastWrappedVisualX := h.Cursor.LastWrappedVisualX + curSelection := h.Cursor.CurSelection + origSelection := h.Cursor.OrigSelection + if h.Cursor.HasSelection() { start := h.Cursor.CurSelection[0] end := h.Cursor.CurSelection[1] if start.GreaterThan(end) { @@ -1460,11 +1461,6 @@ func (h *BufPane) DuplicateLine() bool { h.Buf.Insert(h.Cursor.Loc, "\n"+string(h.Buf.LineBytes(y))) } - h.Cursor.Loc = origLoc - h.Cursor.LastVisualX = origLastVisualX - h.Cursor.LastWrappedVisualX = origLastWrappedVisualX - h.Cursor.CurSelection = origSelection - if start.Y < end.Y { InfoBar.Message(fmt.Sprintf("Duplicated %d lines", end.Y-start.Y+1)) } else { @@ -1475,6 +1471,13 @@ func (h *BufPane) DuplicateLine() bool { h.Buf.Insert(h.Cursor.Loc, "\n"+string(h.Buf.LineBytes(h.Cursor.Y))) InfoBar.Message("Duplicated line") } + + h.Cursor.Loc = loc + h.Cursor.LastVisualX = lastVisualX + h.Cursor.LastWrappedVisualX = lastWrappedVisualX + h.Cursor.CurSelection = curSelection + h.Cursor.OrigSelection = origSelection + h.Relocate() return true }