在 tmux 中显示转义字符

在 tmux 中显示转义字符

我的 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 正确显示转义字符?

答案1

这似乎没有记录 ,但、、和中的#()shell 命令输出也会被处理为颜色/属性序列。status-leftstatus-rightwindow-status-formatwindow-status-current-format#[]

因此,只需输出#[]序列而不是转义序列。

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

不为这些状态字符串解释完整的转义序列是有道理的:执行(例如)光标控制没有多大意义,因为它们总是被渲染成单行(的一部分)。


我浏览了源代码,发现严格在所有其他序列(包括)#[]之后进行解释。 自从引入以来,似乎一直都是这种情况。##()#[]

相关内容