summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authoradamdottv <[email protected]>2025-06-20 07:42:04 -0500
committeradamdottv <[email protected]>2025-06-20 07:42:04 -0500
commit40b1dd7ef27880950b21bee802f987bc603e6b01 (patch)
tree2194700501b38cf086ad93ce79070579918a407b
parent261e76e0a3e3996a22817f5be9bebc949d673346 (diff)
downloadopencode-40b1dd7ef27880950b21bee802f987bc603e6b01.tar.gz
opencode-40b1dd7ef27880950b21bee802f987bc603e6b01.zip
fix(tui): insert newline correctly positioned
-rw-r--r--packages/tui/internal/components/chat/editor.go3
-rw-r--r--packages/tui/internal/components/textarea/textarea.go14
2 files changed, 10 insertions, 7 deletions
diff --git a/packages/tui/internal/components/chat/editor.go b/packages/tui/internal/components/chat/editor.go
index 7fb034b19..6c8b5f834 100644
--- a/packages/tui/internal/components/chat/editor.go
+++ b/packages/tui/internal/components/chat/editor.go
@@ -214,8 +214,7 @@ func (m *editorComponent) Paste() (tea.Model, tea.Cmd) {
}
func (m *editorComponent) Newline() (tea.Model, tea.Cmd) {
- value := m.textarea.Value()
- m.textarea.SetValue(value + "\n")
+ m.textarea.Newline()
return m, nil
}
diff --git a/packages/tui/internal/components/textarea/textarea.go b/packages/tui/internal/components/textarea/textarea.go
index 6646d2a97..2ca08bb83 100644
--- a/packages/tui/internal/components/textarea/textarea.go
+++ b/packages/tui/internal/components/textarea/textarea.go
@@ -553,6 +553,14 @@ func (m Model) Line() int {
return m.row
}
+func (m *Model) Newline() {
+ if m.MaxHeight > 0 && len(m.value) >= m.MaxHeight {
+ return
+ }
+ m.col = clamp(m.col, 0, len(m.value[m.row]))
+ m.splitLine(m.row, m.col)
+}
+
// CursorDown moves the cursor down by one line.
// Returns whether or not the cursor blink should be reset.
func (m *Model) CursorDown() {
@@ -1113,11 +1121,7 @@ func (m Model) Update(msg tea.Msg) (Model, tea.Cmd) {
}
m.deleteWordRight()
case key.Matches(msg, m.KeyMap.InsertNewline):
- if m.MaxHeight > 0 && len(m.value) >= m.MaxHeight {
- return m, nil
- }
- m.col = clamp(m.col, 0, len(m.value[m.row]))
- m.splitLine(m.row, m.col)
+ m.Newline()
case key.Matches(msg, m.KeyMap.LineEnd):
m.CursorEnd()
case key.Matches(msg, m.KeyMap.LineStart):