Просмотр исходного кода

fix(tui): insert newline correctly positioned

adamdottv 8 месяцев назад
Родитель
Сommit
40b1dd7ef2

+ 1 - 2
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
 }
 

+ 9 - 5
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):