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 de verde para 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:

insira a descrição da imagem aqui

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

Respostas:


3

Este não parece ser documentado † , mas a saída de #()shell-comandos status-left, status-right, window-status-format, e window-status-current-formattambém é processado por #[]cor / atribuir seqüências.

Então, apenas imprima as #[]seqüências em vez das seqüê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 achar que #[]é interpretado estritamente depois de todas as outras #seqüências (inclusive #()). Parece que este sempre foi o caso desde que #[]foi introduzido.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.