fix(tui): center rows per-line, fix footers per-context
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -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")
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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")
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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")
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user