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.