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(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())
var b strings.Builder
+2 -6
View File
@@ -192,19 +192,15 @@ func (t *HostListTab) View() string {
const sidePad = 6
targetW := contentW + sidePad*2
// Uniform left shift for the row block
rowShift := (targetW - widestRow) / 2
var content strings.Builder
// Centered title
content.WriteString(lipgloss.PlaceHorizontal(targetW, lipgloss.Center, title))
content.WriteString("\n\n")
// Centered rows
shift := strings.Repeat(" ", rowShift)
// Center each row independently within the box
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("\n")
}
+1 -1
View File
@@ -231,7 +231,7 @@ func (t *KeyFormTab) View() string {
inner.WriteString("\n")
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())
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}
widestRow := lipgloss.Width(titlePlain)
@@ -205,7 +205,6 @@ func (t *KeyListTab) View() string {
const sidePad = 6
targetW := widestRow + sidePad*2
rowShift := (targetW - widestRow) / 2
var inner strings.Builder
@@ -213,9 +212,9 @@ func (t *KeyListTab) View() string {
inner.WriteString(lipgloss.PlaceHorizontal(targetW, lipgloss.Center, titleStyled))
inner.WriteString("\n\n")
shift := strings.Repeat(" ", rowShift)
for _, r := range rows {
line := lipgloss.PlaceHorizontal(targetW, lipgloss.Left, shift+r.text)
// Render rows, excluding the footer (last element)
for _, r := range rows[:len(rows)-1] {
line := lipgloss.PlaceHorizontal(targetW, lipgloss.Center, r.text)
inner.WriteString(line)
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,
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()
}
+1 -1
View File
@@ -239,7 +239,7 @@ func (t *SnippetFormTab) View() string {
inner.WriteString("\n")
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())
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}
widestRow := lipgloss.Width(titlePlain)
@@ -205,7 +205,6 @@ func (t *SnippetListTab) View() string {
const sidePad = 6
targetW := widestRow + sidePad*2
rowShift := (targetW - widestRow) / 2
var inner strings.Builder
@@ -213,9 +212,9 @@ func (t *SnippetListTab) View() string {
inner.WriteString(lipgloss.PlaceHorizontal(targetW, lipgloss.Center, titleStyled))
inner.WriteString("\n\n")
shift := strings.Repeat(" ", rowShift)
for _, r := range rows {
line := lipgloss.PlaceHorizontal(targetW, lipgloss.Left, shift+r.text)
// Render rows, excluding the footer (last element)
for _, r := range rows[:len(rows)-1] {
line := lipgloss.PlaceHorizontal(targetW, lipgloss.Center, r.text)
inner.WriteString(line)
inner.WriteString("\n")
}