summaryrefslogtreecommitdiff
path: root/internal/client/ui/viminput
diff options
context:
space:
mode:
authorKyren223 <Kyren223@proton.me>2024-12-09 17:47:18 +0200
committerKyren223 <Kyren223@proton.me>2024-12-09 17:47:18 +0200
commita4e069b3309e576ce5f8df085f375c2dd7839c3d (patch)
treefbac8d35fa8ee5fb5ad87c1b75d434bdac7e2985 /internal/client/ui/viminput
parentf9971074a689987ae4eb477aa49afb341778f3c8 (diff)
Implemented dd, cc, yy in viminput
Diffstat (limited to 'internal/client/ui/viminput')
-rw-r--r--internal/client/ui/viminput/viminput.go32
1 files changed, 32 insertions, 0 deletions
diff --git a/internal/client/ui/viminput/viminput.go b/internal/client/ui/viminput/viminput.go
index 41d8875..36846eb 100644
--- a/internal/client/ui/viminput/viminput.go
+++ b/internal/client/ui/viminput/viminput.go
@@ -411,6 +411,11 @@ func (m Model) Motion(motion string) (line, col int) {
}
func (m *Model) handleOpendingModeKeys(key tea.KeyMsg) {
+ if key.Type == tea.KeyEscape {
+ m.ResetOpending()
+ return
+ }
+
lnum, col := m.Motion(key.String())
if lnum != Unchanged || col != Unchanged {
if lnum == Unchanged {
@@ -436,6 +441,33 @@ func (m *Model) handleOpendingModeKeys(key tea.KeyMsg) {
// TODO: multiline
}
+ m.ResetOpending()
+ if m.pending == 'c' {
+ m.mode = InsertMode
+ }
+ return
+ }
+
+ switch key.String() {
+ case "c":
+ m.lines[m.cursorLine] = []rune("")
+ m.SetCursorColumn(0)
+
+ case "d":
+ m.Yank("\n" + string(m.lines[m.cursorLine]))
+ if len(m.lines) == 1 {
+ m.lines[0] = []rune("")
+ m.SetCursorColumn(0)
+ } else {
+ m.lines = slices.Delete(m.lines, m.cursorLine, m.cursorLine+1)
+ m.SetCursorLine(m.cursorLine)
+ m.SetCursorColumn(m.cursorColumn)
+ }
+
+ case "y":
+ // TODO: Needs to make sure this works fine with multiline-pasting
+ // MULTILINE PASTING IS NOT IMPLEMENTED YET!!!!!!
+ m.Yank("\n" + string(m.lines[m.cursorLine]))
}
m.ResetOpending()