我想用bash提示符替换状态栏,如窗口①所示。如何在外壳中获取当前窗口号?
没有TMUX_PANE环境变量,不幸的是没有TMUX_WINDOW。
我得到的最接近的是:
tmux display-message
刷新窗口/窗格信息,然后取其中的最后一行tmux show-messages
并进行解析。我不希望每次显示提示时窗口/窗格信息都会闪烁。
我想用bash提示符替换状态栏,如窗口①所示。如何在外壳中获取当前窗口号?
没有TMUX_PANE环境变量,不幸的是没有TMUX_WINDOW。
我得到的最接近的是:
tmux display-message
刷新窗口/窗格信息,然后取其中的最后一行tmux show-messages
并进行解析。我不希望每次显示提示时窗口/窗格信息都会闪烁。
Answers:
您可以使用display-message -p
将输出发送到stdout,而不必从以下输出中提取输出show-messages
:
tmux display-message -p '#I'
您可以这样转换为带圆圈的数字(bash语法;已在3.2.48和4.2.20版中进行测试):
circled_digits=$(printf %s \${$'\xEA',\`,{a..s}} | iconv -f UTF-16BE)
# circled_digits='⓪①②③④⑤⑥⑦⑧⑨⑩⑪⑫⑬⑭⑮⑯⑰⑱⑲⑳'
tmux_winidx_circled() {
local winidx=$(tmux display-message -p '#I')
if (( winidx > 20 )); then
echo "($winidx)"
else
echo "${circled_digits:$winidx:1}"
fi
}
第一行很不错,因为它是纯ASCII。如果您不介意配置文件中包含非ASCII字符,则可以改用第二行(假定您的编辑器和Shell可以正确处理文件的编码,这无疑会使意图更加明显)。
然后,您可以像这样使用它:
PS1="$(tmux_winidx_circled) \W➤ "
我需要做的只是在启动shell时刷新并提取tmux消息并将其存储。哦
tmux display-message
export TMUX_WINDOW=$(tmux show-messages | tail -1 | grep -o '\[[0-9]\] \([0-9]\)' | grep -o '[0-9]$')
PS1="$(echo $TMUX_WINDOW) \W➤ "
现在我的提示如下:
[2] ~➤
剩下的就是改进解析,并用漂亮的Unicode带圆圈数字字符替换常规数字-但这是另一回事了。