Exibir caracteres de escape no tmux

2

Eu tenho um script no meu Mac que exibe o nível da bateria com alguma saída de cor. A cor é baseada no leve da bateria. Quando o nível vai para zero, a cor vai do verde para o vermelho:

#!/bin/bash

percent='ioreg -l | grep -i capacity | tr '\n' ' | ' | awk '{printf("%d", $10/$5 * 100)}''
if [ $percent -gt 80 ] ; then
  echo -n $'\e[32m'"${percent}%"
elif [ $percent -gt 65 ] ; then
  echo -n $'\e[1;33m'"${precent}%"
elif [ $percent -gt 40 ] ; then
  echo -n $'\e[1;31m'"${percent}%"
else
  echo -n $'\e[31m'"${percent}%"
fi

Eu coloquei isso na minha configuração do tmux como:

# status right options
set -g status-right '#[fg=green][#[fg=blue]%Y-%m-%d #[fg=white]%H:%M#[default]  #($HOME/bin/battery)#[fg=green]]'

No entanto, aparece no meu terminal como:

A minha pergunta é, como posso obter o tmux para exibir o caractere de escape corretamente?

    
por John 14.03.2012 / 14:46

1 resposta

3

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.

    
por 15.03.2012 / 12:50