Bash 프롬프트의 현재 창 번호 가져오기

Bash 프롬프트의 현재 창 번호 가져오기

상태 표시줄을 ①과 같은 창 번호를 표시하는 bash 프롬프트로 바꾸고 싶습니다. 쉘에서 현재 창 번호를 어떻게 얻을 수 있습니까?

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가 아닌 문자가 있어도 괜찮다면 대신 두 번째 줄을 사용하면 됩니다. (편집기와 셸이 파일의 인코딩을 적절하게 처리할 수 있다고 가정하면 확실히 의도가 더욱 분명해집니다.)

그러면 다음과 같이 사용할 수 있습니다.

PS1="$(tmux_winidx_circled) \W➤ "

답변2

나에게 필요한 것은 쉘을 시작할 때 tmux 메시지를 플래시하고 추출하여 저장하는 것뿐이었습니다. D-오!

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] ~➤  

남은 것은 구문 분석을 개선하고 일반 숫자를 예쁜 유니코드 원 숫자 문자로 대체하는 것입니다. 그러나 그것은 또 다른 이야기입니다.

관련 정보