Bash istemi için geçerli pencere numarasını al


11

Durum çubuğunu prompt gibi bir pencere numarası gösteren bash istemiyle değiştirmek istiyorum. Geçerli pencere numarasını kabukta nasıl alabilirim?

TMUX_PANE env değişkeni var, ne yazık ki TMUX_WINDOW.

En yakınım: tmux display-messagepencere / pencere bilgilerini yanıp sönmek, son satırını almak tmux show-messagesve ayrıştırmak. Bilgi istemi her görüntülendiğinde pencere / bölme bilgisinin yanıp sönmesini istemiyorum.

Yanıtlar:


14

display-message -pÇıktıdan çıkarmak zorunda kalmamak için çıktıyı stdout'a göndermek için kullanabilirsiniz show-messages:

tmux display-message -p '#I'

Bunun gibi daire içine alınmış sayılara dönüştürebilirsiniz ( bash sözdizimi; 3.2.48 ve 4.2.20 sürümleriyle test edilmiştir):

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
}

İlk satır saf ASCII olduğu için güzel; Konfigürasyon dosyanızda ASCII olmayan karakterlerin bulunmasına aldırış etmiyorsanız, bunun yerine ikinci satırla devam edebilirsiniz (editörünüzün ve kabuğun dosyanın kodlamasını doğru şekilde idare edebileceğini varsaymak niyetini daha belirgin kılar).

O zaman bu şekilde kullanabilirsin:

PS1="$(tmux_winidx_circled) \W➤ "

3

İhtiyacım olan tek şey, mermi başlatırken sakla ve sakla. D-ah!

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➤ "

Şimdi benim istemi gibi görünüyor:

[2] ~➤  

ve geriye kalan, oldukça Unicode daire içindeki rakam karakterleriyle ayrıştırma ve normal rakamların yerini almaktır - ama bu başka bir hikaye.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.