From 4cf680b854c1cfcddef8eb59bd83561661cbcbcc Mon Sep 17 00:00:00 2001 From: Pathfinder Date: Tue, 27 Oct 2026 19:42:30 +0100 Subject: [PATCH] ASCII-only spinner frames and output (VM locale rendered braille as garbage) The braille spinner frames and the em-dash separator are multibyte UTF-8; on the VM session they rendered as changing random letters, not a spinner. Frames are now the classic | / - \ cycle, the separator is ':', and the two user-facing info lines that carried em-dashes are ASCII too. Verified under LANG=C LC_ALL=C in a pty: zero non-ASCII bytes in the entire output. --- lib/common.sh | 7 +++++-- setup.sh | 4 ++-- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/lib/common.sh b/lib/common.sh index 554fac8..df27987 100644 --- a/lib/common.sh +++ b/lib/common.sh @@ -107,14 +107,17 @@ ui_quiet_run() { # animates independently of gum and shows real progress, not just motion. "$@" >>"$log" 2>&1 & local pid=$! - local frames=( '⠋' '⠙' '⠹' '⠸' '⠼' '⠴' '⠦' '⠧' '⠇' '⠏' ) + # ASCII frames ONLY: braille/em-dash are multibyte UTF-8 and rendered as + # garbage letters when the session locale is not UTF-8 (VM-proven: the + # spinner appeared as changing random chars, not as a spinner). + local frames=( '|' '/' '-' '\\' ) local f=0 cur while kill -0 "$pid" 2>/dev/null; do cur=$(sed -n "$((before+1)),\$p" "$log" 2>/dev/null \ | grep -E '^(Installing|Upgrading|Downgrading|Removing|Verifying|Preparing|Cleanup):' \ | tail -n 1 || true) if [[ -n "$cur" ]]; then - printf '\r %s %s — %s' "${frames[$f]}" "$msg" "$cur" >&2 + printf '\r %s %s: %s' "${frames[$f]}" "$msg" "$cur" >&2 else printf '\r %s %s' "${frames[$f]}" "$msg" >&2 fi diff --git a/setup.sh b/setup.sh index f55857c..d35e86f 100755 --- a/setup.sh +++ b/setup.sh @@ -220,7 +220,7 @@ if [[ -z "$SELINUX_OPT" ]]; then [[ "$choice" == "yes" ]] && SELINUX_DISABLED=true printf "\n" if findmnt -n -o FSTYPE / 2>/dev/null | grep -q btrfs; then - ok "Root filesystem is btrfs — snapshots + zstd compression will be set up." + ok "Root filesystem is btrfs: snapshots + zstd compression will be set up." BTRFS_SNAPPER=true else info "Root filesystem is not btrfs; skipping snapshot setup." @@ -259,7 +259,7 @@ pause_if_debug if [[ -z "$DE" ]]; then step "4 Desktop environment" rule - color_gray " Bare Fedora install — picking a DE is what gives you a graphical login." + color_gray "Bare Fedora install: picking a DE is what gives you a graphical login." choice=$(ui_choose "Desktop environment" "Select desktop environment:" \ "None (TWM only, SDDM via TWM module)" \ "GNOME (gdm)" "Plasma (sddm)" "XFCE (sddm)" "None (TWM only, SDDM via TWM module)")