fix(tui): center rows per-line, fix footers per-context

This commit is contained in:
swanadiva
2026-06-23 18:04:11 +07:00
parent e5d32bd22e
commit 9b27388455
7 changed files with 14 additions and 20 deletions
+1 -1
View File
@@ -351,7 +351,7 @@ func (t *HostFormTab) View() string {
inner.WriteString("\n") inner.WriteString("\n")
inner.WriteString(lipgloss.PlaceHorizontal(contentW, lipgloss.Center, inner.WriteString(lipgloss.PlaceHorizontal(contentW, lipgloss.Center,
SubtitleStyle.Render("Ctrl+Tab:switch Ctrl+Q:close ↑↓:nav Enter:SSH Ctrl+N:add Ctrl+F:SFTP Ctrl+K:keys Ctrl+P:snippets q:quit"))) SubtitleStyle.Render("Ctrl+Tab:switch Ctrl+Q:close Tab:next Enter:next Ctrl+S:save Esc:cancel")))
box := BorderStyle.Render(inner.String()) box := BorderStyle.Render(inner.String())
var b strings.Builder var b strings.Builder
+2 -6
View File
@@ -192,19 +192,15 @@ func (t *HostListTab) View() string {
const sidePad = 6 const sidePad = 6
targetW := contentW + sidePad*2 targetW := contentW + sidePad*2
// Uniform left shift for the row block
rowShift := (targetW - widestRow) / 2
var content strings.Builder var content strings.Builder
// Centered title // Centered title
content.WriteString(lipgloss.PlaceHorizontal(targetW, lipgloss.Center, title)) content.WriteString(lipgloss.PlaceHorizontal(targetW, lipgloss.Center, title))
content.WriteString("\n\n") content.WriteString("\n\n")
// Centered rows // Center each row independently within the box
shift := strings.Repeat(" ", rowShift)
for _, r := range rows[:len(rows)-1] { // exclude footer, added below for _, r := range rows[:len(rows)-1] { // exclude footer, added below
line := lipgloss.PlaceHorizontal(targetW, lipgloss.Left, shift+r.text) line := lipgloss.PlaceHorizontal(targetW, lipgloss.Center, r.text)
content.WriteString(line) content.WriteString(line)
content.WriteString("\n") content.WriteString("\n")
} }
+1 -1
View File
@@ -231,7 +231,7 @@ func (t *KeyFormTab) View() string {
inner.WriteString("\n") inner.WriteString("\n")
inner.WriteString(lipgloss.PlaceHorizontal(contentW, lipgloss.Center, inner.WriteString(lipgloss.PlaceHorizontal(contentW, lipgloss.Center,
SubtitleStyle.Render("Ctrl+Tab:switch Ctrl+Q:close ↑↓:nav Enter:SSH Ctrl+N:add Ctrl+F:SFTP Ctrl+K:keys Ctrl+P:snippets q:quit"))) SubtitleStyle.Render("Ctrl+Tab:switch Ctrl+Q:close Tab:next Enter:next Ctrl+S:save Esc:cancel")))
box := BorderStyle.Render(inner.String()) box := BorderStyle.Render(inner.String())
var b strings.Builder var b strings.Builder
+4 -5
View File
@@ -190,7 +190,7 @@ func (t *KeyListTab) View() string {
} }
} }
footerPlain := "Ctrl+Tab:switch Ctrl+Q:close ↑↓:nav Enter:SSH Ctrl+N:add Ctrl+F:SFTP Ctrl+K:keys Ctrl+P:snippets q:quit" footerPlain := "Ctrl+Tab:switch Ctrl+Q:close ↑↓:nav Ctrl+N:add Ctrl+E:edit D:delete Esc:back"
footer := styledRow{text: SubtitleStyle.Render(footerPlain), plain: footerPlain} footer := styledRow{text: SubtitleStyle.Render(footerPlain), plain: footerPlain}
widestRow := lipgloss.Width(titlePlain) widestRow := lipgloss.Width(titlePlain)
@@ -205,7 +205,6 @@ func (t *KeyListTab) View() string {
const sidePad = 6 const sidePad = 6
targetW := widestRow + sidePad*2 targetW := widestRow + sidePad*2
rowShift := (targetW - widestRow) / 2
var inner strings.Builder var inner strings.Builder
@@ -213,9 +212,9 @@ func (t *KeyListTab) View() string {
inner.WriteString(lipgloss.PlaceHorizontal(targetW, lipgloss.Center, titleStyled)) inner.WriteString(lipgloss.PlaceHorizontal(targetW, lipgloss.Center, titleStyled))
inner.WriteString("\n\n") inner.WriteString("\n\n")
shift := strings.Repeat(" ", rowShift) // Render rows, excluding the footer (last element)
for _, r := range rows { for _, r := range rows[:len(rows)-1] {
line := lipgloss.PlaceHorizontal(targetW, lipgloss.Left, shift+r.text) line := lipgloss.PlaceHorizontal(targetW, lipgloss.Center, r.text)
inner.WriteString(line) inner.WriteString(line)
inner.WriteString("\n") inner.WriteString("\n")
} }
+1 -1
View File
@@ -567,7 +567,7 @@ func (t *SFTPBrowserTab) View() string {
} }
b.WriteString("\n" + lipgloss.PlaceHorizontal(t.width, lipgloss.Center, b.WriteString("\n" + lipgloss.PlaceHorizontal(t.width, lipgloss.Center,
SubtitleStyle.Render("Ctrl+Tab:switch Ctrl+Q:close ↑↓:nav Enter:SSH Ctrl+N:add Ctrl+F:SFTP Ctrl+K:keys Ctrl+P:snippets q:quit"))) SubtitleStyle.Render("Ctrl+Tab:switch Ctrl+Q:close Tab:pane ↑↓:nav /:filter C:copy D:delete N:mkdir R:refresh Esc:close")))
return b.String() return b.String()
} }
+1 -1
View File
@@ -239,7 +239,7 @@ func (t *SnippetFormTab) View() string {
inner.WriteString("\n") inner.WriteString("\n")
inner.WriteString(lipgloss.PlaceHorizontal(contentW, lipgloss.Center, inner.WriteString(lipgloss.PlaceHorizontal(contentW, lipgloss.Center,
SubtitleStyle.Render("Ctrl+Tab:switch Ctrl+Q:close ↑↓:nav Enter:SSH Ctrl+N:add Ctrl+F:SFTP Ctrl+K:keys Ctrl+P:snippets q:quit"))) SubtitleStyle.Render("Ctrl+Tab:switch Ctrl+Q:close Tab:next Enter:next Ctrl+S:save Esc:cancel")))
box := BorderStyle.Render(inner.String()) box := BorderStyle.Render(inner.String())
var b strings.Builder var b strings.Builder
+4 -5
View File
@@ -190,7 +190,7 @@ func (t *SnippetListTab) View() string {
} }
} }
footerPlain := "Ctrl+Tab:switch Ctrl+Q:close ↑↓:nav Enter:SSH Ctrl+N:add Ctrl+F:SFTP Ctrl+K:keys Ctrl+P:snippets q:quit" footerPlain := "Ctrl+Tab:switch Ctrl+Q:close ↑↓:nav Ctrl+N:add Ctrl+E:edit D:delete Esc:back"
footer := styledRow{text: SubtitleStyle.Render(footerPlain), plain: footerPlain} footer := styledRow{text: SubtitleStyle.Render(footerPlain), plain: footerPlain}
widestRow := lipgloss.Width(titlePlain) widestRow := lipgloss.Width(titlePlain)
@@ -205,7 +205,6 @@ func (t *SnippetListTab) View() string {
const sidePad = 6 const sidePad = 6
targetW := widestRow + sidePad*2 targetW := widestRow + sidePad*2
rowShift := (targetW - widestRow) / 2
var inner strings.Builder var inner strings.Builder
@@ -213,9 +212,9 @@ func (t *SnippetListTab) View() string {
inner.WriteString(lipgloss.PlaceHorizontal(targetW, lipgloss.Center, titleStyled)) inner.WriteString(lipgloss.PlaceHorizontal(targetW, lipgloss.Center, titleStyled))
inner.WriteString("\n\n") inner.WriteString("\n\n")
shift := strings.Repeat(" ", rowShift) // Render rows, excluding the footer (last element)
for _, r := range rows { for _, r := range rows[:len(rows)-1] {
line := lipgloss.PlaceHorizontal(targetW, lipgloss.Left, shift+r.text) line := lipgloss.PlaceHorizontal(targetW, lipgloss.Center, r.text)
inner.WriteString(line) inner.WriteString(line)
inner.WriteString("\n") inner.WriteString("\n")
} }