summaryrefslogtreecommitdiff
path: root/internal/viinput/model.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/viinput/model.go')
-rw-r--r--internal/viinput/model.go53
1 files changed, 41 insertions, 12 deletions
diff --git a/internal/viinput/model.go b/internal/viinput/model.go
index 6fd895a..c0c80ac 100644
--- a/internal/viinput/model.go
+++ b/internal/viinput/model.go
@@ -80,19 +80,9 @@ func (m Model) Update(msg tea.Msg) (Model, tea.Cmd) {
}
if m.mode == ModeNormal && m.pending != 0 {
- if m.pending == 'g' {
- switch keyMsg.String() {
- case "g", "h":
- m.cursor = 0
- m.pending = 0
- return m, nil
- case "l":
- m.cursor = len(m.runes)
- m.pending = 0
- return m, nil
- }
- }
+ m.handlePendingNormal(keyMsg)
m.pending = 0
+ return m, nil
}
switch m.mode {
@@ -169,6 +159,8 @@ func (m Model) updateNormalMode(keyMsg tea.KeyPressMsg) (Model, tea.Cmd) {
m.cursor = len(m.runes)
case "g":
m.pending = 'g'
+ case "d":
+ m.pending = 'd'
case "i":
m.mode = ModeInsert
case "a":
@@ -180,6 +172,16 @@ func (m Model) updateNormalMode(keyMsg tea.KeyPressMsg) (Model, tea.Cmd) {
case "A":
m.cursor = len(m.runes)
m.mode = ModeInsert
+ case "x":
+ m.deleteAtCursor()
+ case "X":
+ m.deleteBeforeCursor()
+ case "D":
+ m.deleteToLineEnd()
+ case "C":
+ m.changeToLineEnd()
+ case "u":
+ m.undo()
default:
m.pending = 0
}
@@ -187,6 +189,33 @@ func (m Model) updateNormalMode(keyMsg tea.KeyPressMsg) (Model, tea.Cmd) {
return m, nil
}
+func (m *Model) handlePendingNormal(keyMsg tea.KeyPressMsg) {
+ switch m.pending {
+ case 'g':
+ switch keyMsg.String() {
+ case "g", "h":
+ m.cursor = 0
+ case "l":
+ m.cursor = len(m.runes)
+ }
+ case 'd':
+ switch keyMsg.String() {
+ case "d":
+ m.deleteLine()
+ case "w":
+ m.deleteWordForward()
+ case "e":
+ m.deleteWordEnd()
+ case "b":
+ m.deleteWordBackward()
+ case "0":
+ m.deleteFromLineStart()
+ case "$":
+ m.deleteToLineEnd()
+ }
+ }
+}
+
func insertedText(keyMsg tea.KeyPressMsg) (string, bool) {
text := keyMsg.Text
if text != "" {