2012-09-24 43 views
5

Tôi giúp duy trì một số lượng lớn các máy chủ giống Unix và vì vậy hãy giữ tập lệnh có tên tmux-rebuild mà tôi sử dụng để xây dựng lại tất cả các phiên tmux và cửa sổ có liên kết SSH tới mỗi máy chủ.Làm thế nào để xóa trạng thái chuông từ tất cả các cửa sổ tmux

Tôi đã định cấu hình tmux để hiển thị tên cửa sổ bằng màu đỏ với dấu chấm than trên thanh trạng thái khi ký tự chuông đầu cuối được in trong cửa sổ đó. Điều này rất tiện lợi cho các chương trình như irssi cảnh báo tôi khi tôi có thư trong cửa sổ khác.

Tôi cũng có thiết lập $PS1 trên mỗi máy chủ để in chuông đầu cuối ở cuối mọi lời nhắc. Điều này rất hữu ích bởi vì nếu tôi chạy một công việc dài trong một cửa sổ và chuyển sang một cửa sổ khác, tôi có thể thấy ngay khi nó kết thúc vì khi lời nhắc được ghi vào màn hình sau khi hoàn thành công việc, tmux làm cho tên cửa sổ xuất hiện màu đỏ với dấu chấm than. Điều này là rất tốt cho công việc của tôi.

Tuy nhiên nó gây ra một vấn đề nhỏ với kịch bản xây dựng lại được đề cập ở trên, bởi vì khi tôi khởi động tmux sau khi chạy nó, mỗi cửa sổ trong mỗi phiên được gắn cờ màu đỏ, do dấu nhắc đầu tiên được in lên màn hình. Điều này làm cho các tính năng vô ích cho đến khi tôi ghé thăm mỗi cửa sổ, và có một cái gì đó giống như 40-50 trong số họ.

Có điều gì tôi có thể thêm vào tập lệnh của mình sẽ xóa tất cả cảnh báo khỏi phiên và cửa sổ sau khi chúng được tạo không? Tôi không ngại sử dụng một kludge nếu cần thiết.

Trả lời

5

Đã tìm ra cách giải quyết có thể chấp nhận được; Tôi xác định lại các cam kết ràng buộc tiếp theo/trước để cho phép lặp lại:

# Allow repeats for next/prev window 
bind-key -r n next-window 
bind-key -r p previous-window 

này cho phép tôi để nhanh chóng quét lên các cảnh báo cho tất cả các cửa sổ trong một phiên bằng cách nhấn phím prefix của tôi và khai thác "n" cho đến khi tất cả họ đều rõ ràng, và tôi trở lại cửa sổ ban đầu.

+0

Giải pháp rất tốt! Bạn nên chấp nhận điều này như một câu trả lời. – haridsv

+1

BTW, rất có thể bạn sẽ cần phải giảm 'thời gian lặp lại' từ' 500ms' mặc định thành thứ gì đó nhỏ hơn, như '200ms' hoặc nó có thể ảnh hưởng đến lần gõ tiếp theo của bạn. – haridsv

4

Với tmux 1.6 (và mới hơn), list-windows có thể tạo ra sản lượng tùy biến, vì vậy nó là khá đơn giản để đọc những dòng đầu ra và thực hiện một vòng lặp chạy select-window cho mỗi cửa sổ.

Thêm list-session (để lặp qua tất cả các phiên, tùy chọn) và display-message (để phân tích cú pháp phiên làm việc và ghi lại hiện tại/cửa sổ "cuối cùng" để chúng có thể được khôi phục chính xác) và bạn có thể kết thúc bằng này:

#!/bin/sh 

# usage: tmux-select-each [session [...]] 
# 
# Select every window in specified session(s). If no sessions are 
# specified, process all windows in all sessions. 
# 
# This can be handy for clearing the activity flags of windows in 
# freshly spawned sessions. 

if test $# -gt 0; then 
    for session; do 
     tmux display-message -p -t "$session:" '#S' 
    done 
else 
    tmux list-sessions -F '#{session_name}' 
fi | 
while read -r session; do 
    active_window=$(tmux display-message -p -t "$session:" '#S:#I') 
    last_window=$(tmux display-message -p -t "$session:"\! '#S:#I' 2>/dev/null) 
    tmux list-windows -t "$session" -F '#{session_name}:#{window_index}' | 
    while read -r window; do 
     if test "$window" = "$active_window" || 
      test "$window" = "$last_window"; then 
      continue 
     fi 
     tmux select-window -t "$window" 
    done 
    if [ -n "$last_window" ]; then 
     tmux select-window -t "$last_window" 
    fi 
    tmux select-window -t "$active_window" 
done 
1

Từ trang tmux người đàn ông, đặc biệt là câu cuối cùng ở đây:

kill-session [-aC] [-t target-session] 
      Destroy the given session, closing any windows linked to it 
      and no other sessions, and detaching all clients attached 
      to it. If -a is given, all sessions but the specified one is 
      killed. The -C flag clears alerts (bell, activity, or 
      silence) in all windows linked to the session. 

Vì vậy, chỉ cần:

kill-session -C 
+0

Tôi sử dụng điều này sau khi lưu các phiên với tmux-resurrect (nhận được chuông vì tất cả đều lưu lịch sử): 'bind X run 'tmux list-sessions -F" ## S "| xargs -n1 tmux kill-session -C -t '' – unhammer

Các vấn đề liên quan