diff --git a/CONTRIBUTORS.svg b/CONTRIBUTORS.svg index ed3ad88..439d473 100644 --- a/CONTRIBUTORS.svg +++ b/CONTRIBUTORS.svg @@ -1,4 +1,4 @@ - + diff --git a/bin/purge.sh b/bin/purge.sh index 46b5748..9d73424 100755 --- a/bin/purge.sh +++ b/bin/purge.sh @@ -98,12 +98,7 @@ perform_purge() { # Function to truncate path in the middle truncate_path() { local path="$1" - local term_width=$(tput cols 2> /dev/null || echo 80) - # Reserve space: "| Scanning " = 12 chars, spinner = 2 chars, margins = 4 chars - local max_len=$((term_width - 18)) - - # Minimum length to avoid too short - [[ $max_len -lt 40 ]] && max_len=40 + local max_len=80 if [[ ${#path} -le $max_len ]]; then echo "$path" @@ -133,8 +128,7 @@ perform_purge() { local spin_char="${spinner_chars:$spinner_idx:1}" spinner_idx=$(((spinner_idx + 1) % ${#spinner_chars})) - # Clear previous output and redraw - # Important: Must move up THEN to start of line to avoid column offset + # Show title on first line, spinner and scanning info on second line if [[ -n "$display_path" ]]; then # Line 1: Move to start, clear, print title printf '\r\033[K%s\n' "${PURPLE_BOLD}Purge Project Artifacts${NC}" diff --git a/cmd/status/view.go b/cmd/status/view.go index 7ef56cd..ce2a174 100644 --- a/cmd/status/view.go +++ b/cmd/status/view.go @@ -203,7 +203,7 @@ func getScoreStyle(score int) lipgloss.Style { func buildCards(m MetricsSnapshot, _ int) []cardData { cards := []cardData{ - renderCPUCard(m.CPU), + renderCPUCard(m.CPU, m.Thermal), renderMemoryCard(m.Memory), renderDiskCard(m.Disks, m.DiskIO), renderBatteryCard(m.Batteries, m.Thermal), @@ -225,9 +225,18 @@ func hasSensorData(sensors []SensorReading) bool { return false } -func renderCPUCard(cpu CPUStatus) cardData { +func renderCPUCard(cpu CPUStatus, thermal ThermalStatus) cardData { var lines []string - lines = append(lines, fmt.Sprintf("Total %s %5.1f%%", progressBar(cpu.Usage), cpu.Usage)) + + // Line 1: Usage + Temp (Format: 15% @ 30.4°C) + usageBar := progressBar(cpu.Usage) + + headerText := fmt.Sprintf("%5.1f%%", cpu.Usage) + if thermal.CPUTemp > 0 { + headerText += fmt.Sprintf(" @ %s°C", colorizeTemp(thermal.CPUTemp)) + } + + lines = append(lines, fmt.Sprintf("Total %s %s", usageBar, headerText)) if cpu.PerCoreEstimated { lines = append(lines, subtleStyle.Render("Per-core data unavailable (using averaged load)")) @@ -527,12 +536,7 @@ func renderBatteryCard(batts []BatteryStatus, thermal ThermalStatus) cardData { } if thermal.CPUTemp > 0 { - tempText := fmt.Sprintf("%.0f°C", thermal.CPUTemp) - if thermal.CPUTemp > 80 { - tempText = dangerStyle.Render(tempText) - } else if thermal.CPUTemp > 60 { - tempText = warnStyle.Render(tempText) - } + tempText := colorizeTemp(thermal.CPUTemp) + "°C" // Reuse common color logic healthParts = append(healthParts, tempText) } @@ -641,12 +645,12 @@ func colorizeBattery(percent float64, s string) string { func colorizeTemp(t float64) string { switch { - case t >= 85: + case t >= 76: return dangerStyle.Render(fmt.Sprintf("%.1f", t)) - case t >= 70: + case t >= 56: return warnStyle.Render(fmt.Sprintf("%.1f", t)) default: - return subtleStyle.Render(fmt.Sprintf("%.1f", t)) + return okStyle.Render(fmt.Sprintf("%.1f", t)) } } diff --git a/lib/core/base.sh b/lib/core/base.sh index ce131ca..99139ee 100644 --- a/lib/core/base.sh +++ b/lib/core/base.sh @@ -260,11 +260,20 @@ get_user_home() { } get_invoking_user() { - if [[ -n "${SUDO_USER:-}" && "${SUDO_USER:-}" != "root" ]]; then - echo "$SUDO_USER" + if [[ -n "${_MOLE_INVOKING_USER_CACHE:-}" ]]; then + echo "$_MOLE_INVOKING_USER_CACHE" return 0 fi - echo "${USER:-}" + + local user + if [[ -n "${SUDO_USER:-}" && "${SUDO_USER:-}" != "root" ]]; then + user="$SUDO_USER" + else + user="${USER:-}" + fi + + export _MOLE_INVOKING_USER_CACHE="$user" + echo "$user" } get_invoking_uid() { diff --git a/tests/core_performance.bats b/tests/core_performance.bats index dfc4037..965ce48 100644 --- a/tests/core_performance.bats +++ b/tests/core_performance.bats @@ -117,7 +117,7 @@ setup() { elapsed=$(( (end - start) / 1000000 )) - [ "$elapsed" -lt 200 ] + [ "$elapsed" -lt 500 ] } @test "get_darwin_major caches correctly" {