Nhận số cửa sổ hiện tại cho dấu nhắc bash


11

Tôi muốn thay thế thanh trạng thái bằng dấu nhắc bash hiển thị số cửa sổ như. Làm thế nào tôi có thể nhận được số cửa sổ hiện tại trong vỏ?

Có biến TMUX_Pane env, tiếc là không có TMUX_WINDOW.

Gần nhất tôi nhận được là: tmux display-messageđể flash thông tin cửa sổ / khung, sau đó lấy dòng cuối cùng tmux show-messagesvà phân tích nó. Tôi không muốn thông tin cửa sổ / khung sẽ nhấp nháy mỗi khi dấu nhắc được hiển thị.

Câu trả lời:


14

Bạn có thể sử dụng display-message -pđể gửi đầu ra tới thiết bị xuất chuẩn để tránh phải trích xuất nó từ đầu ra của show-messages:

tmux display-message -p '#I'

Bạn có thể chuyển đổi thành các số được khoanh tròn như thế này ( cú pháp bash ; được thử nghiệm với các phiên bản 3.2.48 và 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
}

Dòng đầu tiên là tốt ở chỗ nó là ASCII thuần túy; nếu bạn không phiền khi có các ký tự không phải ASCII trong tệp cấu hình của mình, thì bạn có thể đi với dòng thứ hai thay vào đó (nó chắc chắn làm cho ý định rõ ràng hơn, giả sử trình soạn thảo và trình bao của bạn có thể xử lý đúng cách mã hóa tệp).

Sau đó, bạn có thể sử dụng nó như thế này:

PS1="$(tmux_winidx_circled) \W➤ "

3

Tất cả những gì tôi cần là flash và trích xuất thông điệp tmux khi khởi động shell và lưu trữ cái này. Đ-ôi!

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

Bây giờ lời nhắc của tôi trông giống như:

[2] ~➤  

và những gì còn lại là cải thiện việc phân tích cú pháp và thay thế các chữ số thông thường bằng các ký tự chữ số được khoanh tròn Unicode - nhưng đó là một câu chuyện khác.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.