Wyświetl znaki ucieczki w tmux

2

Mam na moim skrypcie skrypt, który wyświetla poziom naładowania baterii przy niektórych wydrukach kolorowych. Kolor zależy od poziomu naładowania akumulatora. Gdy poziom spada do zera, kolor zmienia się z zielonego na czerwony:

#!/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

Umieściłem to w mojej konfiguracji tmux jako:

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

Jednak pojawia się w moim terminalu jako:

enter image description here

Moje pytanie brzmi: jak mogę uzyskać tmux, aby poprawnie wyświetlał znak ucieczki?

John
źródło

Odpowiedzi:

3

To nie wydaje się być udokumentowane , ale wyjście #() polecenia powłoki w status-left, status-right, window-status-format, i window-status-current-format jest również przetwarzany #[] sekwencje kolorów / atrybutów.

Więc po prostu wypisz #[] sekwencje zamiast sekwencji ucieczki.

#!/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%"

Sensowne jest, aby pełne sekwencje ucieczki nie były interpretowane dla tych ciągów statusu: nie ma sensu robić (np.) Sterowania kursorem, ponieważ są one zawsze renderowane w (część) pojedynczej linii.


Skończyłem przeglądając kod źródłowy, aby go znaleźć #[] jest interpretowany ściśle po wszystkich innych # sekwencje (w tym #() ). Wygląda na to, że tak było zawsze #[] został wprowadzony.

Chris Johnsen
źródło