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


11

상태 표시 줄을 ①과 같은 창 번호를 표시하는 bash 프롬프트로 바꾸고 싶습니다. 쉘에서 현재 창 번호를 얻는 방법은 무엇입니까?

TMUX_PANE env 변수가 있지만 불행히도 TMUX_WINDOW는 없습니다.

내가 얻은 가장 가까운 것은 tmux display-message창 / 창 정보를 플래시 한 다음 마지막 줄을 가져 와서 tmux show-messages구문 분석하는 것입니다. 프롬프트가 표시 될 때마다 창 / 창 정보가 깜박이기를 원하지 않습니다.

답변:


14

다음 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가 아닌 문자를 사용하는 것이 마음에 들지 않으면 대신 두 번째 줄로 갈 수 있습니다 (편집기와 쉘이 파일의 인코딩을 올바르게 처리 할 수 ​​있다고 가정하면 분명히 의도가 더 분명해집니다).

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

PS1="$(tmux_winidx_circled) \W➤ "

3

쉘을 시작할 때 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] ~➤  

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.