mirror of
https://github.com/zoriya/bubbles.git
synced 2026-08-16 01:43:21 +00:00
feat(textarea): dynamically determine line number integer padding
This commit is contained in:
+24
-18
@@ -266,9 +266,6 @@ type Model struct {
|
|||||||
// vertically such that we can maintain the same navigating position.
|
// vertically such that we can maintain the same navigating position.
|
||||||
lastCharOffset int
|
lastCharOffset int
|
||||||
|
|
||||||
// lineNumberFormat is the format string used to display line numbers.
|
|
||||||
lineNumberFormat string
|
|
||||||
|
|
||||||
// viewport is the vertically-scrollable viewport of the multi-line text
|
// viewport is the vertically-scrollable viewport of the multi-line text
|
||||||
// input.
|
// input.
|
||||||
viewport *viewport.Model
|
viewport *viewport.Model
|
||||||
@@ -299,11 +296,10 @@ func New() Model {
|
|||||||
Cursor: cur,
|
Cursor: cur,
|
||||||
KeyMap: DefaultKeyMap,
|
KeyMap: DefaultKeyMap,
|
||||||
|
|
||||||
value: make([][]rune, minHeight, defaultMaxHeight),
|
value: make([][]rune, minHeight, defaultMaxHeight),
|
||||||
focus: false,
|
focus: false,
|
||||||
col: 0,
|
col: 0,
|
||||||
row: 0,
|
row: 0,
|
||||||
lineNumberFormat: "%3v ",
|
|
||||||
|
|
||||||
viewport: &vp,
|
viewport: &vp,
|
||||||
}
|
}
|
||||||
@@ -1101,11 +1097,12 @@ func (m Model) View() string {
|
|||||||
}
|
}
|
||||||
m.Cursor.TextStyle = m.style.computedCursorLine()
|
m.Cursor.TextStyle = m.style.computedCursorLine()
|
||||||
|
|
||||||
var s strings.Builder
|
var (
|
||||||
var style lipgloss.Style
|
s strings.Builder
|
||||||
lineInfo := m.LineInfo()
|
style lipgloss.Style
|
||||||
|
newLines int
|
||||||
var newLines int
|
lineInfo = m.LineInfo()
|
||||||
|
)
|
||||||
|
|
||||||
displayLine := 0
|
displayLine := 0
|
||||||
for l, line := range m.value {
|
for l, line := range m.value {
|
||||||
@@ -1126,15 +1123,15 @@ func (m Model) View() string {
|
|||||||
if m.ShowLineNumbers {
|
if m.ShowLineNumbers {
|
||||||
if wl == 0 {
|
if wl == 0 {
|
||||||
if m.row == l {
|
if m.row == l {
|
||||||
s.WriteString(style.Render(m.style.computedCursorLineNumber().Render(fmt.Sprintf(m.lineNumberFormat, l+1))))
|
s.WriteString(style.Render(m.style.computedCursorLineNumber().Render(m.formatLineNumber(l + 1))))
|
||||||
} else {
|
} else {
|
||||||
s.WriteString(style.Render(m.style.computedLineNumber().Render(fmt.Sprintf(m.lineNumberFormat, l+1))))
|
s.WriteString(style.Render(m.style.computedLineNumber().Render(m.formatLineNumber(l + 1))))
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if m.row == l {
|
if m.row == l {
|
||||||
s.WriteString(style.Render(m.style.computedCursorLineNumber().Render(fmt.Sprintf(m.lineNumberFormat, " "))))
|
s.WriteString(style.Render(m.style.computedCursorLineNumber().Render(m.formatLineNumber(" "))))
|
||||||
} else {
|
} else {
|
||||||
s.WriteString(style.Render(m.style.computedLineNumber().Render(fmt.Sprintf(m.lineNumberFormat, " "))))
|
s.WriteString(style.Render(m.style.computedLineNumber().Render(m.formatLineNumber(" "))))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1187,6 +1184,15 @@ func (m Model) View() string {
|
|||||||
return m.style.Base.Render(m.viewport.View())
|
return m.style.Base.Render(m.viewport.View())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// formatLineNumber formats the line number for display dynamically based on
|
||||||
|
// the maximum number of lines
|
||||||
|
func (m Model) formatLineNumber(x any) string {
|
||||||
|
// XXX: ultimately we should use a max buffer height, which has yet to be
|
||||||
|
// implemented.
|
||||||
|
digits := len(strconv.Itoa(m.MaxHeight))
|
||||||
|
return fmt.Sprintf(" %*v ", digits, x)
|
||||||
|
}
|
||||||
|
|
||||||
func (m Model) getPromptString(displayLine int) (prompt string) {
|
func (m Model) getPromptString(displayLine int) (prompt string) {
|
||||||
prompt = m.Prompt
|
prompt = m.Prompt
|
||||||
if m.promptFunc == nil {
|
if m.promptFunc == nil {
|
||||||
@@ -1240,7 +1246,7 @@ func (m Model) placeholderView() string {
|
|||||||
ln = strconv.Itoa(i + 1)
|
ln = strconv.Itoa(i + 1)
|
||||||
fallthrough
|
fallthrough
|
||||||
case len(plines) > i:
|
case len(plines) > i:
|
||||||
s.WriteString(lineStyle.Render(lineNumberStyle.Render(fmt.Sprintf(m.lineNumberFormat, ln))))
|
s.WriteString(lineStyle.Render(lineNumberStyle.Render(m.formatLineNumber(ln))))
|
||||||
default:
|
default:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user