Isso não parece ser documentado † , mas a saída de #()
shell-commands em status-left
, status-right
, window-status-format
e window-status-current-format
também é processada para #[]
color / attribute sequences.
Portanto, apenas imprima as sequências #[]
em vez das sequências de escape.
#!/bin/bash
percent=$(ioreg …)
if (( percent > 80 )); then color='#[nobright fg=green]'
elif (( percent > 65 )); then color='#[bright fg=yellow]'
elif (( percent > 40 )); then color='#[bright red]'
else color='#[nobright red]'
fi
echo "$color$percent%"
Faz sentido que sequências de escape completas não sejam interpretadas para essas strings de status: não há muito sentido em fazer (por exemplo) controle de cursor, uma vez que elas são sempre renderizadas em (parte de) uma única linha.
† Acabei navegando pelo código-fonte para descobrir que #[]
é interpretado estritamente após todas as outras sequências de #
(incluindo #()
). Parece que este sempre foi o caso desde que #[]
foi introduzido.