गंदगी को साफ करने के लिए आपको दो कमांड क्रम की आवश्यकता है:
पहले इसे गार्बल्ड विंडो में चलाएं (जब आप इसमें हों तब भी यह काम करता है 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 -echoIMHO को उत्तेजित नहीं कर सकते , लेकिन इंटरेक्टिव कमांड जैसे कि 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
पुनश्च: सभी को धन्यवाद जिन्होंने इस समाधान को इकट्ठा करने में मदद की।