summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKyren223 <Kyren223@proton.me>2024-12-16 17:08:27 +0200
committerKyren223 <Kyren223@proton.me>2024-12-16 17:08:27 +0200
commit2ca354c92ce61260b498c819864ac98a278835eb (patch)
treeace686bc526f9838174f923fc65960206cf8d7b9
parentb0bb27ca25e70fca520cff5603bf13877eb5cb45 (diff)
Finished implementing pasting in normal mode
-rw-r--r--internal/client/ui/viminput/viminput.go17
1 files changed, 16 insertions, 1 deletions
diff --git a/internal/client/ui/viminput/viminput.go b/internal/client/ui/viminput/viminput.go
index 87bb577..8a5ebd8 100644
--- a/internal/client/ui/viminput/viminput.go
+++ b/internal/client/ui/viminput/viminput.go
@@ -448,6 +448,7 @@ func (m *Model) handleNormalModeKeys(key tea.KeyMsg) {
runeLines = append(runeLines, []rune(line))
}
+ // Note: caps to line length, needed for len=0 col=0
splittingCol := min(m.cursorColumn+1, len(line))
line := m.lines[m.cursorLine]
after := line[splittingCol:]
@@ -482,7 +483,21 @@ func (m *Model) handleNormalModeKeys(key tea.KeyMsg) {
_, col := m.Motion("_")
m.SetCursorColumn(col)
} else {
- // TODO:
+ var runeLines [][]rune
+ for _, line := range lines {
+ runeLines = append(runeLines, []rune(line))
+ }
+
+ splittingCol := m.cursorColumn
+ line := m.lines[m.cursorLine]
+ after := line[splittingCol:]
+ lastLine := len(runeLines) - 1
+ runeLines[lastLine] = append(runeLines[lastLine], after...)
+
+ m.lines[m.cursorLine] = append(line[:splittingCol], runeLines[0]...)
+ m.lines = slices.Insert(m.lines, m.cursorLine+1, runeLines[1:]...)
+
+ m.SetCursorColumn(min(splittingCol, len(m.lines[m.cursorLine])-1))
}
}
}