获取 bash 提示的当前窗口号

Woj*_*ski 11 bash prompt tmux

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

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

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

Chr*_*sen 15

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

tmux display-message -p '#I'
Run Code Online (Sandbox Code Playgroud)

您可以像这样转换为带圆圈的数字(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
}
Run Code Online (Sandbox Code Playgroud)

第一行很好,因为它是纯 ASCII;如果您不介意在配置文件中包含非 ASCII 字符,那么您可以改用第二行(这肯定会使意图更加明显,假设您的编辑器和 shell 可以正确处理文件的编码)。

然后你可以像这样使用它:

PS1="$(tmux_winidx_circled) \W? "
Run Code Online (Sandbox Code Playgroud)