Câu hỏi Nhận số cửa sổ hiện tại cho lời nhắc bash


Tôi muốn thay thế thanh trạng thái bằng dấu nhắc 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ổ / cửa sổ, sau đó lấy dòng cuối cùng của tmux show-messages và phân tích nó. Tôi không muốn thông tin cửa sổ / cửa sổ nhấp nháy mỗi khi lời nhắc được hiển thị.


9
2018-02-03 06:18


gốc




Các câu trả lời:


Bạn có thể dùng display-message -p để gửi đầu ra tới stdout để 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 (bash cú pháp; 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 đẹp ở chỗ nó là ASCII tinh khiết; nếu bạn không nhớ 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ể thay thế dòng thứ hai (nó chắc chắn làm cho mục đích rõ ràng hơn, giả sử trình chỉnh sửa 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➤ "

12
2018-02-04 08:35





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

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 với các ký tự chữ số được khoanh tròn Unicode - nhưng đó là một câu chuyện khác.


3
2018-02-03 06:53