2012-09-24 40 views
5

मैं बड़ी संख्या में यूनिक्स-जैसी सर्वरों को बनाए रखने में मदद करता हूं, और इसलिए tmux-rebuild नामक एक स्क्रिप्ट रखें जिसे मैं प्रत्येक सर्वर के लिए एसएसएच लिंक के साथ सभी tmux सत्रों और विंडोज़ के पुनर्निर्माण के लिए उपयोग करता हूं।सभी tmux विंडोज़ से घंटी स्थिति को साफ़ करने के लिए कैसे करें

मेरे पास उस विंडो में टर्मिनल घंटी वर्ण मुद्रित होने पर विंडो स्टेटस को अपने स्टेटस बार में विस्मयादिबोधक चिह्न के साथ लाल रंग में दिखाने के लिए कॉन्फ़िगर किया गया है। यह irssi जैसे प्रोग्रामों के लिए बहुत आसान है जब मुझे दूसरी विंडो में संदेश होते हैं।

मेरे पास प्रत्येक प्रॉम्प्ट के अंत में टर्मिनल घंटी मुद्रित करने के लिए प्रत्येक सर्वर पर स्थापित $PS1 भी है। यह उपयोगी है क्योंकि यदि मैं एक खिड़की में एक लंबी नौकरी चलाता हूं और दूसरे पर स्विच करता हूं, तो मैं तुरंत यह देख सकता हूं कि यह कब समाप्त हो गया है क्योंकि जब काम पूरा होने के बाद स्क्रीन पर मेरा प्रॉम्प्ट लिखा जाता है, तो टीएमक्स खिड़की का नाम लाल रंग में आता है एक विस्मयादिबोधक चिह्न। यह मेरे वर्कफ़्लो के लिए बहुत अच्छा है।

हालांकि यह उपरोक्त वर्णित पुनर्निर्माण स्क्रिप्ट के साथ थोड़ी सी समस्या का कारण बनता है, क्योंकि जब मैं इसे चलाने के बाद tmux शुरू करता हूं, तो प्रत्येक सत्र में प्रत्येक विंडो को लाल रंग में चिह्नित किया जाता है, क्योंकि स्क्रीन पर मुद्रित होने वाले पहले संकेत के कारण। इससे फीचर बेकार हो जाती है जब तक कि मैं हर खिड़की पर नहीं जाता, और उनमें से 40-50 की तरह कुछ होता है।

क्या मैं अपनी स्क्रिप्ट में कुछ जोड़ सकता हूं जो सत्रों और खिड़कियों से बनाए जाने के बाद सभी अलर्ट साफ़ कर देगा? यदि आवश्यक हो तो मुझे एक क्लज का उपयोग करने में कोई फर्क नहीं पड़ता।

उत्तर

5

एक स्वीकार्य कामकाज का पता लगाया; मैं अगले/पिछले बाइंडिंग नए सिरे से परिभाषित अनुमति देने के लिए दोहराता:

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

यह मैं जल्दी अलर्ट सभी खिड़कियों के लिए एक सत्र में मेरी उपसर्ग कुंजी दबाकर और दोहन से स्वीप करने के लिए अनुमति देता है "n" जब तक वे सब स्पष्ट कर रहे हैं, और मैं अपनी मूल खिड़की में वापस आ गया हूँ।

+0

बहुत अच्छा कामकाज! आपको इसे एक उत्तर के रूप में स्वीकार करना चाहिए। – haridsv

+1

बीटीडब्लू, आपको शायद '200 एमएमएस' से कुछ छोटे से 'दोहराना-समय' को कम करने की आवश्यकता होगी, जैसे '200ms' या इससे आपके बाद के टाइपिंग में हस्तक्षेप हो सकता है। – haridsv

4

साथ tmux 1.6 (और बाद में), list-windows अनुकूलन उत्पादन उत्पन्न कर सकते हैं, तो यह उत्पादन लाइनों पढ़ सकते हैं और एक पाश है कि प्रत्येक विंडो के लिए select-window से चलाने के लिए काफी सरल है।

list-session (पाश करने के लिए सभी सत्रों में, वैकल्पिक) जोड़ें, और display-message (सत्र विनिर्देशक पार्स करने के लिए है, और वर्तमान/"पिछले" खिड़कियों तो वे ठीक से बहाल किया जा सकता रिकॉर्ड करने के लिए), और आप की तरह कुछ के साथ खत्म हो सकता है इस:

#!/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

tmux आदमी पेज, विशेष रूप से पिछले यहाँ की सजा से:

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. 

तो, बस:

kill-session -C 
+0

मैं tmux-resurrect के साथ सत्रों को सहेजने के बाद इसका उपयोग करता हूं (जो घंटी प्राप्त करते हैं क्योंकि वे सभी इतिहास को सहेजते हैं): 'बाध्य एक्स रन' tmux सूची-सत्र -F "## एस" | xargs -n1 tmux kill-session -C -t ' ' – unhammer