tui: handle text wrapping ourselves, add ctrl+w wrap toggle
Gets rid of those pesky trailing characters
This commit is contained in:
parent
a8ffdc156a
commit
6f737ad19c
@ -23,6 +23,7 @@ import (
|
||||
"github.com/charmbracelet/bubbles/viewport"
|
||||
tea "github.com/charmbracelet/bubbletea"
|
||||
"github.com/charmbracelet/lipgloss"
|
||||
"github.com/muesli/reflow/wordwrap"
|
||||
)
|
||||
|
||||
type focusState int
|
||||
@ -59,6 +60,7 @@ type model struct {
|
||||
|
||||
// ui state
|
||||
focus focusState
|
||||
wrap bool // whether message content is wrapped to viewport width
|
||||
status string // a general status message
|
||||
highlightCache []string // a cache of syntax highlighted message content
|
||||
messageOffsets []int
|
||||
@ -156,6 +158,9 @@ func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
|
||||
}
|
||||
case "ctrl+p":
|
||||
m.persistence = !m.persistence
|
||||
case "ctrl+w":
|
||||
m.wrap = !m.wrap
|
||||
m.updateContent()
|
||||
case "q":
|
||||
if m.focus != focusInput {
|
||||
return m, tea.Quit
|
||||
@ -403,6 +408,7 @@ func initialModel(ctx *lmcli.Context, convShortname string) model {
|
||||
replyChan: make(chan models.Message),
|
||||
replyChunkChan: make(chan string),
|
||||
|
||||
wrap: true,
|
||||
selectedMessage: -1,
|
||||
}
|
||||
|
||||
@ -696,7 +702,7 @@ func (m *model) setMessageContents(i int, content string) {
|
||||
|
||||
func (m *model) updateContent() {
|
||||
atBottom := m.content.AtBottom()
|
||||
m.content.SetContent(conversationStyle.Render(m.conversationView()))
|
||||
m.content.SetContent(m.conversationView())
|
||||
if atBottom {
|
||||
// if we were at bottom before the update, scroll with the output
|
||||
m.content.GotoBottom()
|
||||
@ -757,8 +763,15 @@ func (m *model) conversationView() string {
|
||||
} else {
|
||||
highlighted = m.highlightCache[i]
|
||||
}
|
||||
contents := messageStyle.Width(m.content.Width).Render(highlighted)
|
||||
sb.WriteString(contents)
|
||||
var contents string
|
||||
if m.wrap {
|
||||
wrapWidth := m.content.Width - messageStyle.GetHorizontalPadding() - 2
|
||||
wrapped := wordwrap.String(highlighted, wrapWidth)
|
||||
contents = wrapped
|
||||
} else {
|
||||
contents = highlighted
|
||||
}
|
||||
sb.WriteString(messageStyle.Width(0).Render(contents))
|
||||
lineCnt += lipgloss.Height(contents)
|
||||
}
|
||||
|
||||
@ -767,7 +780,7 @@ func (m *model) conversationView() string {
|
||||
lineCnt += 1
|
||||
}
|
||||
}
|
||||
return sb.String()
|
||||
return conversationStyle.Render(sb.String())
|
||||
}
|
||||
|
||||
func Launch(ctx *lmcli.Context, convShortname string) error {
|
||||
|
Loading…
Reference in New Issue
Block a user