Selfish manta ray

This commit is contained in:
2026-02-01 21:31:25 +02:00
parent f283c5e99e
commit b8506eb929
3 changed files with 33 additions and 29 deletions

View File

@@ -10,7 +10,6 @@ import (
tea "github.com/charmbracelet/bubbletea" tea "github.com/charmbracelet/bubbletea"
"github.com/charmbracelet/lipgloss" "github.com/charmbracelet/lipgloss"
"github.com/mattn/go-runewidth"
) )
// View modes // View modes
@@ -299,19 +298,13 @@ func (m Model) View() string {
} }
const ( const (
alarmColPrefix = 6 // "▸ ● " = 4 display cols + 2 padding
alarmColTrigger = 18 // enough for cron like "30 7 * * 1-5" alarmColTrigger = 18 // enough for cron like "30 7 * * 1-5"
alarmColName = 22 alarmColName = 22
alarmColDesc = 30
) )
// padRight pads s to exactly width display columns using runewidth. // Total row width: 6 (prefix) + 18 (trigger) + 22 (name) + 30 (desc) = 76
func padRight(s string, width int) string { const alarmRowWidth = 6 + alarmColTrigger + alarmColName + alarmColDesc
w := runewidth.StringWidth(s)
if w >= width {
return runewidth.Truncate(s, width, "…")
}
return s + strings.Repeat(" ", width-w)
}
func (m Model) renderAlarmList() string { func (m Model) renderAlarmList() string {
if len(m.alarms) == 0 { if len(m.alarms) == 0 {
@@ -320,28 +313,24 @@ func (m Model) renderAlarmList() string {
title := TitleStyle.Render("Alarms") title := TitleStyle.Render("Alarms")
// Header — prefix padded to same display width as row prefixes header := fmt.Sprintf(" %-*s %-*s %-*s",
header := padRight("", alarmColPrefix) + alarmColTrigger, "Time/Trigger",
padRight("Time/Trigger", alarmColTrigger) + alarmColName, "Name",
padRight("Name", alarmColName) + alarmColDesc, "Description")
"Description"
var lines []string var lines []string
lines = append(lines, title, "") lines = append(lines, fmt.Sprintf("%-*s", alarmRowWidth, title), "")
lines = append(lines, DividerStyle.Render(header)) lines = append(lines, ColumnHeaderStyle.Render(fmt.Sprintf("%-*s", alarmRowWidth, header)))
for i, a := range m.alarms { for i, a := range m.alarms {
var prefix string cursor := " "
if i == m.cursor { if i == m.cursor {
prefix = "▸ " cursor = "▸ "
} else {
prefix = " "
} }
if a.Enabled { status := " ● "
prefix += "● " if !a.Enabled {
} else { status = " ○ "
prefix += "○ "
} }
var style lipgloss.Style var style lipgloss.Style
@@ -358,10 +347,22 @@ func (m Model) renderAlarmList() string {
trigger = a.Trigger trigger = a.Trigger
} }
line := padRight(prefix, alarmColPrefix) + name := a.Name
padRight(trigger, alarmColTrigger) + if len(name) > alarmColName-1 {
padRight(a.Name, alarmColName) + name = name[:alarmColName-2] + "~"
a.Description }
desc := a.Description
if len(desc) > alarmColDesc-1 {
desc = desc[:alarmColDesc-2] + "~"
}
// Build line and pad to fixed total width so centering treats all rows equally
raw := fmt.Sprintf("%s%s %-*s %-*s %-*s",
cursor, status,
alarmColTrigger, trigger,
alarmColName, name,
alarmColDesc, desc)
line := fmt.Sprintf("%-*s", alarmRowWidth, raw)
lines = append(lines, style.Render(line)) lines = append(lines, style.Render(line))
} }

View File

@@ -54,4 +54,7 @@ var (
DividerStyle = lipgloss.NewStyle(). DividerStyle = lipgloss.NewStyle().
Foreground(lipgloss.Color("#333333")) Foreground(lipgloss.Color("#333333"))
ColumnHeaderStyle = lipgloss.NewStyle().
Foreground(lipgloss.Color("#555555"))
) )

BIN
woke

Binary file not shown.