refactor(helpers): optimize logging display with improved ANSI output handling
- commit
- b6aa4da6a21d602daaebc141f2dd3ecf0d12b0d2
- author
- bnema · · 2025-10-20 16:08 UTC
- parent
- 750c2c1
- signature
- unsigned
1 file · +5 -11
M install/helpers/logging.sh +5 -11
| @@ -9,43 +9,37 @@ monitor_pid="" | |||
| 9 | 9 | start_log_output() { | |
| 10 | 10 | local ANSI_SAVE_CURSOR="\033[s" | |
| 11 | 11 | local ANSI_RESTORE_CURSOR="\033[u" | |
| 12 | - | local ANSI_CLEAR_LINE="\033[2K" | |
| 12 | + | local ANSI_CLEAR_BELOW="\033[0J" | |
| 13 | 13 | local ANSI_HIDE_CURSOR="\033[?25l" | |
| 14 | 14 | local ANSI_RESET="\033[0m" | |
| 15 | 15 | local ANSI_GRAY="\033[90m" | |
| 16 | 16 | ||
| 17 | - | # Save cursor position and hide cursor | |
| 18 | 17 | printf $ANSI_SAVE_CURSOR | |
| 19 | 18 | printf $ANSI_HIDE_CURSOR | |
| 20 | 19 | ||
| 21 | - | # Start background monitor process | |
| 22 | 20 | ( | |
| 23 | 21 | local log_lines=20 | |
| 24 | 22 | local max_line_width=$((LOGO_WIDTH - 4)) | |
| 25 | 23 | ||
| 26 | 24 | while true; do | |
| 27 | - | # Read the last N lines into an array | |
| 28 | 25 | mapfile -t current_lines < <(tail -n $log_lines "$ARCHUP_INSTALL_LOG_FILE" 2>/dev/null) | |
| 29 | 26 | ||
| 30 | - | # Build complete output buffer with escape sequences | |
| 31 | - | output="" | |
| 27 | + | printf "${ANSI_RESTORE_CURSOR}${ANSI_CLEAR_BELOW}" | |
| 28 | + | ||
| 32 | 29 | for ((i = 0; i < log_lines; i++)); do | |
| 33 | 30 | line="${current_lines[i]:-}" | |
| 34 | 31 | ||
| 35 | - | # Truncate if needed | |
| 36 | 32 | if [ ${#line} -gt $max_line_width ]; then | |
| 37 | 33 | line="${line:0:$max_line_width}..." | |
| 38 | 34 | fi | |
| 39 | 35 | ||
| 40 | - | # Add formatted output for each line | |
| 41 | 36 | if [ -n "$line" ]; then | |
| 42 | - | output+="${ANSI_CLEAR_LINE}${ANSI_GRAY}${PADDING_LEFT_SPACES} → ${line}${ANSI_RESET}\n" | |
| 37 | + | printf "${ANSI_GRAY}${PADDING_LEFT_SPACES} → ${line}${ANSI_RESET}\n" | |
| 43 | 38 | else | |
| 44 | - | output+="${ANSI_CLEAR_LINE}${PADDING_LEFT_SPACES}\n" | |
| 39 | + | printf "${PADDING_LEFT_SPACES}\n" | |
| 45 | 40 | fi | |
| 46 | 41 | done | |
| 47 | 42 | ||
| 48 | - | printf "${ANSI_RESTORE_CURSOR}%b" "$output" | |
| 49 | 43 | sleep 0.1 | |
| 50 | 44 | done | |
| 51 | 45 | ) & | |
| @@ -9,43 +9,37 @@ monitor_pid="" | |||||
| 9 | start_log_output() { | 9 | start_log_output() { | ||
| 10 | local ANSI_SAVE_CURSOR="\033[s" | 10 | local ANSI_SAVE_CURSOR="\033[s" | ||
| 11 | local ANSI_RESTORE_CURSOR="\033[u" | 11 | local ANSI_RESTORE_CURSOR="\033[u" | ||
| 12 | - | local ANSI_CLEAR_LINE="\033[2K" | 12 | + | local ANSI_CLEAR_BELOW="\033[0J" |
| 13 | local ANSI_HIDE_CURSOR="\033[?25l" | 13 | local ANSI_HIDE_CURSOR="\033[?25l" | ||
| 14 | local ANSI_RESET="\033[0m" | 14 | local ANSI_RESET="\033[0m" | ||
| 15 | local ANSI_GRAY="\033[90m" | 15 | local ANSI_GRAY="\033[90m" | ||
| 16 | 16 | ||||
| 17 | - | # Save cursor position and hide cursor | |||
| 18 | printf $ANSI_SAVE_CURSOR | 17 | printf $ANSI_SAVE_CURSOR | ||
| 19 | printf $ANSI_HIDE_CURSOR | 18 | printf $ANSI_HIDE_CURSOR | ||
| 20 | 19 | ||||
| 21 | - | # Start background monitor process | |||
| 22 | ( | 20 | ( | ||
| 23 | local log_lines=20 | 21 | local log_lines=20 | ||
| 24 | local max_line_width=$((LOGO_WIDTH - 4)) | 22 | local max_line_width=$((LOGO_WIDTH - 4)) | ||
| 25 | 23 | ||||
| 26 | while true; do | 24 | while true; do | ||
| 27 | - | # Read the last N lines into an array | |||
| 28 | mapfile -t current_lines < <(tail -n $log_lines "$ARCHUP_INSTALL_LOG_FILE" 2>/dev/null) | 25 | mapfile -t current_lines < <(tail -n $log_lines "$ARCHUP_INSTALL_LOG_FILE" 2>/dev/null) | ||
| 29 | 26 | ||||
| 30 | - | # Build complete output buffer with escape sequences | 27 | + | printf "${ANSI_RESTORE_CURSOR}${ANSI_CLEAR_BELOW}" |
| 31 | - | output="" | 28 | + | |
| 32 | for ((i = 0; i < log_lines; i++)); do | 29 | for ((i = 0; i < log_lines; i++)); do | ||
| 33 | line="${current_lines[i]:-}" | 30 | line="${current_lines[i]:-}" | ||
| 34 | 31 | ||||
| 35 | - | # Truncate if needed | |||
| 36 | if [ ${#line} -gt $max_line_width ]; then | 32 | if [ ${#line} -gt $max_line_width ]; then | ||
| 37 | line="${line:0:$max_line_width}..." | 33 | line="${line:0:$max_line_width}..." | ||
| 38 | fi | 34 | fi | ||
| 39 | 35 | ||||
| 40 | - | # Add formatted output for each line | |||
| 41 | if [ -n "$line" ]; then | 36 | if [ -n "$line" ]; then | ||
| 42 | - | output+="${ANSI_CLEAR_LINE}${ANSI_GRAY}${PADDING_LEFT_SPACES} → ${line}${ANSI_RESET}\n" | 37 | + | printf "${ANSI_GRAY}${PADDING_LEFT_SPACES} → ${line}${ANSI_RESET}\n" |
| 43 | else | 38 | else | ||
| 44 | - | output+="${ANSI_CLEAR_LINE}${PADDING_LEFT_SPACES}\n" | 39 | + | printf "${PADDING_LEFT_SPACES}\n" |
| 45 | fi | 40 | fi | ||
| 46 | done | 41 | done | ||
| 47 | 42 | ||||
| 48 | - | printf "${ANSI_RESTORE_CURSOR}%b" "$output" | |||
| 49 | sleep 0.1 | 43 | sleep 0.1 | ||
| 50 | done | 44 | done | ||
| 51 | ) & | 45 | ) & | ||