diff --git a/README.md b/README.md index 414354d..36e083a 100644 --- a/README.md +++ b/README.md @@ -39,6 +39,8 @@ discarded. Menus use cyan for the selection and task prompts, muted context and navigation help, and text labels alongside success, warning, and error colors. A `>` on the right of an item marks a submenu. Extra context appears below the selected item. +Menus and disk reports share a 75-column maximum and wrap on narrower terminals. +CPU and ISO detail views wrap full values instead of truncating them. The header stacks host details on narrow terminals and separates update status from menu actions. Task output replaces the choices while retaining the header. diff --git a/defaults.inc b/defaults.inc index 6bc9ba6..23b005e 100755 --- a/defaults.inc +++ b/defaults.inc @@ -3,7 +3,7 @@ action="${1:-}" FOLDER='/opt/idssys/ta-proxmenu' -VERS='2026.9.22-17' +VERS='2026.9.22-18' noupdate=' ' diff --git a/inc/orphan-disks.py b/inc/orphan-disks.py index 5e90047..dc10bc9 100755 --- a/inc/orphan-disks.py +++ b/inc/orphan-disks.py @@ -185,7 +185,7 @@ class ReportDisplay: self.stream = stream if stream is not None else sys.stdout self.color = (self.stream.isatty() and os.environ.get('TERM', 'dumb') != 'dumb' and 'NO_COLOR' not in os.environ) - self.width = max(20, min(100, shutil.get_terminal_size((80, 24)).columns)) + self.width = max(20, min(75, shutil.get_terminal_size((80, 24)).columns)) def line(self, text='', style='', indent=0): codes = {'bold': '1', 'muted': '90', 'accent': '96', diff --git a/inc/ui.inc b/inc/ui.inc index 84654a7..87fa5b5 100644 --- a/inc/ui.inc +++ b/inc/ui.inc @@ -15,7 +15,7 @@ TAPM_UI_INIT() { TAPM_UI_WIDTH="$(tput cols 2>/dev/null)" || TAPM_UI_WIDTH="${COLUMNS:-80}" fi [[ "$TAPM_UI_WIDTH" =~ ^[0-9]+$ ]] || TAPM_UI_WIDTH=80 - (( TAPM_UI_WIDTH > 100 )) && TAPM_UI_WIDTH=100 + (( TAPM_UI_WIDTH > 75 )) && TAPM_UI_WIDTH=75 (( TAPM_UI_WIDTH < 20 )) && TAPM_UI_WIDTH=20 return 0 } diff --git a/proxmenu-scripts.sh b/proxmenu-scripts.sh index 65a22e7..1488d77 100755 --- a/proxmenu-scripts.sh +++ b/proxmenu-scripts.sh @@ -1004,14 +1004,14 @@ SHOW_LOCAL_VIRTIO_ISOS() { echo if TAPM_REFRESH_ISO_STORAGES; then for index in "${!VIRTIO_STORAGE_IDS[@]}"; do - echo -e " ${idsCL[LightCyan]}${VIRTIO_STORAGE_IDS[$index]}${idsCL[Default]} (${VIRTIO_STORAGE_TYPES[$index]})" - echo " ${VIRTIO_STORAGE_DIRS[$index]}" + TAPM_UI_TEXT "$TAPM_UI_ACCENT" "${VIRTIO_STORAGE_IDS[$index]} (${VIRTIO_STORAGE_TYPES[$index]})" + TAPM_UI_TEXT "$TAPM_UI_MUTED" "${VIRTIO_STORAGE_DIRS[$index]}" while IFS= read -r -d '' file; do found=1 - printf ' %-42s %10s %s\n' \ - "${file##*/}" \ - "$(numfmt --to=iec-i --suffix=B "$(stat -c '%s' "$file")")" \ - "$(date --date="@$(stat -c '%Y' "$file")" '+%F %R')" + TAPM_UI_TEXT "$TAPM_UI_BOLD" "${file##*/}" + TAPM_UI_TEXT '' " Size: $(numfmt --to=iec-i --suffix=B "$(stat -c '%s' "$file")")" + TAPM_UI_TEXT "$TAPM_UI_MUTED" " Modified: $(date --date="@$(stat -c '%Y' "$file")" '+%F %R')" + done < <( find "${VIRTIO_STORAGE_DIRS[$index]}" -maxdepth 1 -type f \ -name 'virtio-win*.iso' -print0 2>/dev/null | sort -z @@ -1262,6 +1262,7 @@ print(" ".join(model.split())) } TAPM_SHOW_CLUSTER_CPU_TABLE() { + TAPM_UI_INIT local proxclmc_output local host_rows local node @@ -1280,11 +1281,6 @@ TAPM_SHOW_CLUSTER_CPU_TABLE() { return 0 fi - printf ' %-16s %-42s %-34s %-14s\n' \ - 'HOST' 'PHYSICAL CPU' 'GENERATION / FAMILY' 'BEST VM MODEL' - printf ' %-16s %-42s %-34s %-14s\n' \ - '----------------' '------------------------------------------' \ - '----------------------------------' '--------------' while IFS=$'\034' read -r node address host_max; do [[ -n "$node" ]] || continue @@ -1297,12 +1293,16 @@ TAPM_SHOW_CLUSTER_CPU_TABLE() { generation='Unavailable' fi - printf ' %-16.16s %-42.42s %-34.34s %-14s\n' \ - "$node" "$cpu_name" "$generation" "$host_max" + TAPM_UI_TEXT "$TAPM_UI_BOLD" "$node" + TAPM_UI_TEXT '' " Physical CPU: $cpu_name" + TAPM_UI_TEXT '' " Generation / family: $generation" + TAPM_UI_TEXT '' " Best VM model: $host_max" + echo done <<< "$host_rows" } DETECT_CPU() { + TAPM_UI_INIT local answer local cpu_model local current_cpu @@ -1379,15 +1379,15 @@ DETECT_CPU() { return fi - printf '\n%-7s %-28s %-20s %-10s %-24s %s\n' \ - 'VMID' 'NAME' 'NODE' 'TEMPLATE' 'CURRENT CPU' 'PROPOSED CPU' - printf '%-7s %-28s %-20s %-10s %-24s %s\n' \ - '-------' '----------------------------' '--------------------' \ - '----------' '------------------------' '----------------' + echo + TAPM_UI_TEXT "$TAPM_UI_BOLD" 'Proposed CPU changes' for guest in "${changes[@]}"; do IFS=$'\x1f' read -r vmid name node template current_cpu <<< "$guest" - printf '%-7s %-28.28s %-20.20s %-10s %-24.24s %s\n' \ - "$vmid" "${name:-unnamed}" "$node" "$template" "$current_cpu" "$cpu_model" + TAPM_UI_TEXT "$TAPM_UI_BOLD" "${name:-unnamed} (VM $vmid)" + TAPM_UI_TEXT '' " Node: $node Template: $template" + TAPM_UI_TEXT '' " Current CPU: $current_cpu" + TAPM_UI_TEXT '' " Proposed CPU: $cpu_model" + echo done echo -en "\n${idsCL[LightCyan]}Apply cluster-wide baseline ${cpu_model} to ${#changes[@]} VM(s) and template(s) (y/N)?${idsCL[Default]} " @@ -1766,9 +1766,6 @@ MENU_HEADER() { local version="${VERS}" spacing host host="$(hostname -s)" TAPM_UI_INIT - # Keep the header compact without changing the menu's available width. - local TAPM_UI_WIDTH="$TAPM_UI_WIDTH" - (( TAPM_UI_WIDTH > 75 )) && TAPM_UI_WIDTH=75 TAPM_LOAD_HEADER_INFO if [[ "$UPDATE_STATUS" == unknown || "$UPDATE_STATUS" == checking ]]; then LOAD_UPDATE_STATUS