获取当前 bash 提示符的窗口号

获取当前 bash 提示符的窗口号

我想用显示窗口编号的 bash 提示符替换状态栏,如 ①。如何获取 shell 中的当前窗口编号?

有 TMUX_PANE 环境变量,但不幸的是没有 TMUX_WINDOW。

我得到的最接近的答案是: tmux display-message闪现窗口/窗格信息,然后取出最后一行tmux show-messages并解析它。我不希望每次显示提示时窗口/窗格信息都闪现。

答案1

您可以使用display-message -p将输出发送到 stdout 以避免从输出中提取它show-messages

tmux display-message -p '#I'

您可以像这样转换为带圆圈的数字(狂欢语法;已使用版本 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➤ "

答案2

我所需要的只是在启动 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 圆圈数字字符替换常规数字 - 但那是另一个故事。

相关内容