답변:
다음 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➤ "
쉘을 시작할 때 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] ~➤
남은 것은 구문 분석을 개선하고 일반 숫자를 예쁜 유니 코드 동그라미 숫자로 대체하는 것입니다.하지만 그것은 또 다른 이야기입니다.