diff options
| author | Kyren223 <Kyren223@proton.me> | 2024-12-08 14:23:51 +0200 |
|---|---|---|
| committer | Kyren223 <Kyren223@proton.me> | 2024-12-08 14:23:51 +0200 |
| commit | 8430f3f0f91ae6ad5f0746bfbd83b6ba156f54e0 (patch) | |
| tree | d4b76375febd1861e90cf337b8110d51e79e22fe /internal | |
| parent | 09ddfe2bbd7d99b33227a1261897f70433c27d40 (diff) | |
Added o and O and D
Diffstat (limited to 'internal')
| -rw-r--r-- | internal/client/ui/viminput/helpers.go | 20 | ||||
| -rw-r--r-- | internal/client/ui/viminput/viminput.go | 57 |
2 files changed, 71 insertions, 6 deletions
diff --git a/internal/client/ui/viminput/helpers.go b/internal/client/ui/viminput/helpers.go new file mode 100644 index 0000000..c3dcdb1 --- /dev/null +++ b/internal/client/ui/viminput/helpers.go @@ -0,0 +1,20 @@ +package viminput + +import "unicode" + +func IsKeyword(r rune) bool { + alphaLower := 'a' <= r && r <= 'z' + alphaUpper := 'A' <= r && r <= 'Z' + numeric := '0' <= r && r <= '9' + return alphaLower || alphaUpper || numeric || r == '_' +} + +func IsGrouped(r1, r2 rune) bool { + if IsKeyword(r1) { + return IsKeyword(r2) + } + if unicode.IsSpace(r1) { + return unicode.IsSpace(r2) + } + return !IsKeyword(r2) && !unicode.IsSpace(r2) +} diff --git a/internal/client/ui/viminput/viminput.go b/internal/client/ui/viminput/viminput.go index 3f733b6..7bba0a4 100644 --- a/internal/client/ui/viminput/viminput.go +++ b/internal/client/ui/viminput/viminput.go @@ -146,7 +146,11 @@ func (m *Model) Line(lnum int) []rune { } func (m *Model) SetCursorColumn(col int) { - m.cursorColumn = max(col, 0) + if len(m.lines[m.CursorLine()]) == 0 { + m.cursorColumn = 0 + } else { + m.cursorColumn = max(col, 0) + } m.goalColumn = -1 } @@ -195,9 +199,7 @@ func (m *Model) handleNormalModeKeys(key tea.KeyMsg) tea.Cmd { m.mode = InsertMode case "a": m.mode = InsertMode - if len(m.lines[m.CursorLine()]) != 0 { - m.SetCursorColumn(m.CursorColumn() + 1) - } + m.SetCursorColumn(m.CursorColumn() + 1) case "I": m.SetCursorColumn(0) m.mode = InsertMode @@ -233,14 +235,53 @@ func (m *Model) handleNormalModeKeys(key tea.KeyMsg) tea.Cmd { } case "x": line := m.lines[m.CursorLine()] - end := len(line) - 1 - if end+1 != 0 { + if len(line) != 0 { + end := len(line) - 1 copy(line[m.CursorColumn():], line[m.CursorColumn()+1:]) m.lines[m.CursorLine()] = line[:end] if m.CursorColumn() == end { m.SetCursorColumn(m.CursorColumn() - 1) } } + case "D": + line := m.lines[m.CursorLine()] + if len(line) != 0 { + m.lines[m.CursorLine()] = line[:m.CursorColumn()] + m.SetCursorColumn(m.CursorColumn() - 1) + } + case "o": + m.lines = slices.Insert(m.lines, m.CursorLine()+1, []rune("")) + m.SetCursorLine(m.CursorLine() + 1) + m.SetCursorColumn(0) + m.mode = InsertMode + case "O": + m.lines = slices.Insert(m.lines, m.CursorLine(), []rune("")) + m.SetCursorColumn(0) + m.mode = InsertMode + case "E": + // for { + // line := m.lines[m.CursorLine()] + // m.SetCursorColumn(m.CursorColumn() + 1) + // for m.CursorColumn() == len(line) { + // cursorLine := m.CursorLine() + 1 + // m.SetCursorLine(cursorLine) + // m.SetCursorColumn(0) + // if cursorLine == len(m.lines) { + // return nil + // } + // } + // if !unicode.IsSpace(m.RuneAtCursor()) { + // break + // } + // } + // for !unicode.IsSpace(m.RuneAtCursor()) { + // line := m.lines[m.CursorLine()] + // m.SetCursorColumn(m.CursorColumn() + 1) + // if m.CursorColumn() == len(line) { + // break + // } + // } + // m.SetCursorColumn(m.CursorColumn() - 1) } return nil } @@ -262,3 +303,7 @@ func (m *Model) handleInsertModeKeys(key tea.KeyMsg) tea.Cmd { return nil } + +func (m *Model) RuneAtCursor() rune { + return m.lines[m.CursorLine()][m.CursorColumn()] +} |
