गंदगी को साफ करने के लिए आपको दो कमांड क्रम की आवश्यकता है:
पहले इसे गार्बल्ड विंडो में चलाएं (जब आप इसमें हों तब भी यह काम करता है ssh
):
stty sane; printf '\033k%s\033\\\033]2;%s\007' "`basename "$SHELL"`" "`uname -n`"; tput reset; tmux refresh
फिर tmux
इसे कंप्यूटर पर चलाएं जो चलता है (यह अंदर और बाहर काम करता है tmux
):
निम्न आदेश सभी tmux
उदाहरणों को प्रभावित करता है , जो वर्तमान विंडो से अधिक की बाईं स्थिति को बदल सकता है। यदि आपको उस सुविधा की आवश्यकता नहीं है, तो उसे छोड़ दें।
tmux list-windows -a | while IFS=: read -r a b c; do tmux set-window-option -t "$a:$b" automatic-rename on; done
विस्तार से बताया
यह अन्य उत्तरों और टिप्पणियों में पाए गए सभी बिट्स को संबोधित करने के लिए इकट्ठा किया गया था। वर्तमान में लगता है कि केवल दूसरी कमान के साथ एक मामूली सा बचा है। (नीचे "लापता बिट" में देखें)।
यह कैसे काम करता समझने के लिए, हमें पहले की स्थिति की लाइन को मार देना tmux
और tty
। बाद में हम इसे फिर से सही करते हैं, एक विधि का उपयोग करके जो हमेशा उपलब्ध होनी चाहिए (कमांड के विपरीत reset
)।
कैसे एक tmux
टर्मिनल (मान लिया UTF-8
) बेकार है
stty -echo; printf '\016\033k%2000s\\\033\033]2;\355\007' $'\302\217'
चेतावनी: कमान के ऊपर चलने के बाद, खोल अंधा और बहरा दिखता है और केवल कुछ अज्ञात विदेशी भाषा में बकवास करने के लिए लगता है। इसे कैसे ठीक करें, नीचे देखें।
व्याख्या की:
stty -echo
टर्मिनल प्रकार की प्रतिक्रिया को मारता है
printf '\016'
एक करता है SO
, तो आप वैकल्पिक चरित्र सेट पर हैं
printf '\033]2;%s\007' 'right status text'
सही स्थिति सेट करता है, इस मामले में $'\355
', जो एक प्रस्तुति बग को उजागर करता है
printf '\033k%2000s\033\\' $'\302\217'
विंडो शीर्षक नाम सेट करता है
यह वह कॉम्बिनेशन हो सकता है जिसे आप टर्मिनल पर देख सकते हैं कुछ इंटरेक्टिव कमांड क्रैश होने और वापस शेल में गिरने के बाद। ( /bin/cat
आप stty -echo
IMHO को उत्तेजित नहीं कर सकते , लेकिन इंटरेक्टिव कमांड जैसे कि vim
आमतौर पर इसे सेट करते हैं।)
अब इस गंदगी को साफ करें
stty sane; printf '\033k%s\033\\\033]2;%s\007' "$(basename "$SHELL")" "$(uname -n)"; tput reset; tmux refresh
नोट: यदि आप कॉपी और पेस्ट का उपयोग करते हैं (आपको पेस्ट Shift
करते समय संभवतः नीचे रखने की आवश्यकता होती है ), तो आप अपने पेस्ट को नहीं देख सकते हैं यदि आपने उपरोक्त कमांड का उपयोग अपने साथ गड़बड़ करने के लिए किया है tty
। इसलिए, इसको पेस्ट करने के बाद बस एंटर करें।
व्याख्या की:
stty sane
टर्मिनल मापदंडों को "समझदार" सेट करता है, ताकि आप टाइप करते समय अपनी गूंज वापस पा सकें
printf '\033k%s\033\\' "$(basename "$SHELL")"
खिड़की का शीर्षक वापस सामान्य पर सेट करता है। आप tmux rename-window "$(basename "$SHELL")"
वैकल्पिक रूप से उपयोग कर सकते हैं , हालांकि tmux rename-window
यह सीमित है tmux
जहां भागने का क्रम हमेशा काम करता है।
printf '\033]2;%s\007' "$(uname -n)"
डिफ़ॉल्ट के रूप में दिखाए जाने के लिए स्थिति-अधिकार को रीसेट करता है। (ध्यान दें कि आपको उपयोग नहीं करना चाहिए tmux set status-right "something"
, क्योंकि यह केवल आउटपुट करता है pane title
जो भ्रष्ट हो गया है, इसलिए status-right
बस कुछ प्रस्तुति बग को उजागर करता है। यह भी ध्यान दें, कि मुझे tmux
सीधे फलक शीर्षक सेट करने के लिए कोई आदेश नहीं मिला ।)
tput reset
टर्मिनल को रीसेट करता है, बस अगर इसमें गड़बड़ की गई है
tmux refresh
अन्य मलबे से छुटकारा पाने के लिए स्क्रीन को ताज़ा करता है जो शायद दिखाई दे
गुम सा
printf '\033k%s\033\\' "$(basename "$SHELL")"
के मानक क्षमता खो देता है tmux
बाईं स्थिति क्षेत्र में वर्तमान आदेश पेश करने के लिए। printf '\033k%s\033\\' "something"
निष्पादित होने के बाद यह क्षमता खो गई है और मुझे एक अच्छा तरीका नहीं मिला, फिर भी, इसे वापस कैसे लाया जाए जैसा कि पहले था।
लेकिन, जैसा कि नीचे टिप्पणी में कहा गया है, आप tmux
निम्नलिखित tmux
सेटिंग के साथ प्रतिस्थापन के रूप में एक समान सुविधा को सक्रिय कर सकते हैं :
set-window-option automatic-rename on
या तो tmux
कमांड लाइन में ऐसा करें , जो "एस्केप" :
(जहां "एस्केप" आपकी tmux
कमांड कुंजी है) के साथ वर्तमान विंडो में पहुंचा जा सकता है और फिर कमांड दर्ज करें।
या excute tmux set-window-option automatic-rename on
अपने वर्तमान टर्मिनल में, लेकिन इस मामले तुम सही खोल स्तर पर सीधे नहीं हैं में विफल रहता है, उदाहरण के लिए यह भीतर काम नहीं करता sudo
या ssh
।
या वर्तमान tmux
सत्र में एक और विंडो खोलें और निम्नलिखित कमांड निष्पादित करें:
for a in `tmux list-windows | sed 's/:.*//'; do tmux set-window-option -t "$a" automatic-rename on; done`
या जो tmux
कमांड चल रहा है और इसे निष्पादित करने वाले कंप्यूटर पर एक और शेल खोलें (यह tmux के बाहर है):
tmux list-windows -a | while IFS=: read -r a b c; do tmux set-window-option -t "$a:$b" automatic-rename on; done
पुनश्च: सभी को धन्यवाद जिन्होंने इस समाधान को इकट्ठा करने में मदद की।