fix(logging): fix CR-collapse and script header filtering in AUR log post-processing

col -bp is designed for backspace-overstriking (man pages), not ANSI
terminal animations; it mangled escape sequences and garbled overprinted
progress bar text. Replace with a perl -ne one-liner that:
  1. Skips Script started/done header lines (next if matches, with -ne
     so next truly suppresses print, unlike -pe which still auto-prints)
  2. Strips trailing \r from PTY \r\n line endings
  3. Collapses CR-redrawn progress bar frames to their final state
  4. Preserves all ANSI color codes so ov renders them correctly
Bump wrapper version to 4 to force regeneration.
This commit is contained in:
2026-06-11 22:23:38 -04:00
parent fc63b4f1b0
commit bd0eac8413
2 changed files with 6 additions and 14 deletions
+3 -7
View File
@@ -20,7 +20,7 @@ end
set -l _paru_real /usr/bin/paru
set -l _paru_wrapper "$HOME/.local/bin/paru"
set -l _paru_wrapper_version 3
set -l _paru_wrapper_version 4
# Skip entirely if the real paru binary isn't present
test -x $_paru_real; or return
@@ -54,12 +54,8 @@ printf '%s\n' \
'script -q -e -c "$cmd_str" "$log_file"' \
'exit_code=$?' \
'' \
'# col -bp collapses CR-redrawn progress bar frames; sed strips ANSI codes and script(1) headers.' \
'if col -bp < "$log_file" | sed '"'"'s/\x1b\[[0-9;?]*[a-zA-Z]//g; /^Script \(started\|done\)/d'"'"' > "${log_file}.tmp" 2>/dev/null; then' \
' mv "${log_file}.tmp" "$log_file"' \
'else' \
' rm -f "${log_file}.tmp"' \
'fi' \
'# Collapse CR-redrawn frames; keep ANSI codes for ov rendering; strip script(1) headers.' \
'perl -ne '"'"'next if /^Script (started|done)/; s/\r$//; s/.*\r([^\r]+)$/$1/; print'"'"' < "$log_file" > "${log_file}.tmp" 2>/dev/null && mv "${log_file}.tmp" "$log_file" || rm -f "${log_file}.tmp"' \
'' \
'max_files="${SCROLLBACK_HISTORY_MAX_FILES:-100}"' \
'mapfile -t logs < <(ls -1t "$log_dir"/paru_*.log 2>/dev/null)' \
+3 -7
View File
@@ -20,7 +20,7 @@ end
set -l _yay_real /usr/bin/yay
set -l _yay_wrapper "$HOME/.local/bin/yay"
set -l _yay_wrapper_version 3
set -l _yay_wrapper_version 4
# Skip entirely if the real yay binary isn't present
test -x $_yay_real; or return
@@ -54,12 +54,8 @@ printf '%s\n' \
'script -q -e -c "$cmd_str" "$log_file"' \
'exit_code=$?' \
'' \
'# col -bp collapses CR-redrawn progress bar frames; sed strips ANSI codes and script(1) headers.' \
'if col -bp < "$log_file" | sed '"'"'s/\x1b\[[0-9;?]*[a-zA-Z]//g; /^Script \(started\|done\)/d'"'"' > "${log_file}.tmp" 2>/dev/null; then' \
' mv "${log_file}.tmp" "$log_file"' \
'else' \
' rm -f "${log_file}.tmp"' \
'fi' \
'# Collapse CR-redrawn frames; keep ANSI codes for ov rendering; strip script(1) headers.' \
'perl -ne '"'"'next if /^Script (started|done)/; s/\r$//; s/.*\r([^\r]+)$/$1/; print'"'"' < "$log_file" > "${log_file}.tmp" 2>/dev/null && mv "${log_file}.tmp" "$log_file" || rm -f "${log_file}.tmp"' \
'' \
'max_files="${SCROLLBACK_HISTORY_MAX_FILES:-100}"' \
'mapfile -t logs < <(ls -1t "$log_dir"/yay_*.log 2>/dev/null)' \