我正在嵌入式 Linux 设备上的 tty 上运行 tmux。(不是终端仿真器)因为屏幕相当小,我想在 tmux 状态栏中添加一些“图标”。为了实现这一点,我简单地创建了一个带有适当字形的字体,例如电池或 wifi。我可以加载字体,并使用转义线绘制字符的调用来显示字符,如下所示:
回显-e“ \ xe \ 234 \ xf”
\xe 使我进入画线字符模式,\234 是我创建的字符,而 \xf 使我返回到正常字符模式,因此我的终端不会变得愚蠢。
如果我在终端输入命令,无论 tmux 是否启动,这都可以完美运行。如果我尝试在状态栏的 ~/.tmux.conf 文件中使用它,就会出现问题。我目前有一行这样的代码:
设置 -g status-right "#(echo -e "\xe\234\xf") #(/script/to/output/powerlevel)
这只是输出
xe234xf 功率级别
如果我尝试使用 printf 而不是 echo,也会出现相同的结果。如果我在调用时没有将 -e 传递给 echo,或者没有用引号括起语句,那么这是我期望在终端上得到的输出。
然后我决定将对 echo 或 printf 的调用包装在 shell 脚本中。同样,从终端调用时脚本可以工作,但在 tmux 的状态栏中却不行。现在我得到的是不可打印的字符“�”而不是我的图标,如下所示:
� 功率等级
如果我没有使用上面提到的线条绘制转义,或者尝试使用 tmux 将字符复制并粘贴为文本,那么这就是我所期望的。此外,调用这些字符脚本会搞乱我的其余状态,因为时钟在调用时大约有 6 位分钟数(尽管它正确地只更新了其中的两位)。
我怎样才能让 tmux 尊重转义字符?
非常感谢任何帮助或见解。
答案1
好的,我终于找到了一种解决方法。而不是转义到备用字符集。我发现这些字符也只是有一个与它们相关联的十六进制值。如果我 printf 或 echo -e 该十六进制值,那么 tmux 将显示正确的字符。
但问题仍然存在,如果我将这些调用包装在 shell 脚本中,tmux 只会显示正确的字符,因为它仍然不遵循任何转义(例如十六进制的 \x)。如果有人能对此有所启发或提供见解,我将不胜感激。