2

У меня есть скрипт на моем Mac, который отображает уровень заряда батареи с некоторым цветом на выходе. Цвет основан на уровне батареи. Когда уровень падает до нуля, цвет меняется с зеленого на красный:

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

Я поместил это в мой конфиг tmux как:

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

Тем не менее, он отображается в моем терминале как:

У меня вопрос, как я могу заставить tmux правильно отображать escape-символ?

1 ответ1

3

Кажется, это не задокументировано , но вывод команд оболочки #() в status-left , status-right , window-status-format и window-status-current-format также обрабатывается для цвета #[] / атрибут последовательности.

Итак, просто выведите последовательности #[] вместо 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%"

Имеет смысл, что полные escape-последовательности не интерпретируются для этих строк состояния: нет особого смысла делать (например) управление курсором, так как они всегда отображаются в (часть) в одной строке.


† В итоге я просмотрел исходный код и обнаружил, что #[] интерпретируется строго после всех других # последовательностей (включая #()). Похоже, что так было всегда с тех пор, как #[] был представлен.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .