जहाँ तक मैं बता सकता हूँ, tmux के पास न्यूनतम मान तक चौड़ाई तय करने के लिए कोई सेटिंग नहीं है, केवल एक अधिकतम मूल्य के लिए। ऐसा इसलिए है क्योंकि टर्मिनल विंडो को tmux के न्यूनतम मान से छोटा किया जा सकता है और tmux के पास इसे संभालने का उपयुक्त तरीका नहीं हो सकता है।
कहा जा रहा है, यदि आपके पास अन्य tmux पैन खुले हैं, तो आप PS1 ( PS1='$(resizePane $id)other-stuff'
) या PROMPT_COMMAND में एक छोटी सी स्क्रिप्ट जोड़ सकते हैं ताकि आप उस सूचना-फलक का लगातार आकार बदल सकें जिसे आप 20c चौड़ाई पर रखना चाहते हैं क्योंकि आप tmux के भीतर अन्य पैन हैं। अनिवार्य रूप से, 1) आप प्रोग्राम खोल सकते हैं, 2) टर्मिनल का आकार बदल सकते हैं, 3) दूसरे फलक में स्थानांतरित करें, 4) प्रकार Enter
और ब्लाम, फलक का आकार परिवर्तन होता है।
आप के लिए आदमी पृष्ठों को देखना चाहिए
resize-pane [-DLRU] [-t target-pane] [adjustment]
यदि आप वांछित फलक में हैं, तो बस इतना करना चाहिए कि बाईं ओर से चौड़ाई को छोटा करना है -L से या दाएं -R से x वर्णों को 20 पर पहुंचने के लिए आवश्यक है। अनिवार्य रूप से, यदि फलक एक दीवार से लंबा है। फलक की तुलना में, यह सिकुड़ने के लिए दिशा और विस्तार के लिए विपरीत का उपयोग करें। यदि मेरा फलक दाईं दीवार के बगल में है, तो चौड़ाई को कम करने के लिए -R का उपयोग करें और इसे बड़ा करने के लिए -L करें।
सही मात्रा में वर्ण प्राप्त करने के लिए, आपको फलक की वर्तमान चौड़ाई जानने की आवश्यकता है, जो यदि आप टाइप करते हैं, तो फलक के साथ पाया जा सकता है
tmux list-panes
मुझे अभी तक यह बताने का कोई तरीका नहीं है कि आप वर्तमान में कौन से फलक नंबर को छोड़कर Prefix+q
या टाइप कर रहे हैं
tmux display-panes
यह हमें वर्तमान विंडो में सभी पैन की आईडी नंबर देगा। यदि हम आईडी # ($ आईडी) जानते हैं कि यह सही दीवार के खिलाफ है, तो हम फलक को 20 वर्णों तक विस्तृत कर सकते हैं:
paneWidths=$(tmux list-panes | awk '{print $2}' | cut -c 2- | cut -f 1 -d'x')
currentWidth=$(echo $paneWidths | sed $id'q;d')
resizeNum=$(expr $currentWidth - 20)
tmux resize-pane -R -t $id $resizeNum
ध्यान दें कि resizeNum ऋणात्मक नहीं हो सकता है। यदि यह ऋणात्मक है, तो आकार बदलने के लिए दूसरे पक्ष का उपयोग करें (यह स्वचालित हो सकता है, लेकिन मैं आपको छोड़ दूंगा)। इसके अलावा, यदि आप इसे अपने प्रोग्राम के कोड में शामिल करते हैं, तो आप "-t $ id" भाग की उपेक्षा कर सकते हैं, लेकिन मुझे आपके प्रोग्राम के भीतर से $ id खोजने का कोई तरीका नहीं पता है।
यह आपके लिए देखने के लिए भी उपयोग किया जा सकता है tmux setw main-pane-width
tmux setw other-pane-width
, जो एक नया टाइल प्रारूप फिर से लोड करने पर विशिष्ट फलक की चौड़ाई निर्धारित करेगा। प्रारूपों का उपयोग करने के लिएPrefix+space
उम्मीद है की यह मदद करेगा!
--- स्वचालन पर अधिक जानकारी जोड़ने के लिए संपादित ---
मेरा पिछला विचार, आप के लिए एक नया फलक पर जाने और चलाने के लिए था PS1="$(resizePane $id)${PS1}"
और फिर ENTER
दूसरे फलक के भीतर मारा ताकि आप नए आकार के फलक में काम करना जारी रख सकें, लेकिन मैंने एक नया विकल्प माना है जो आपके लिए काम कर सकता है ...
मैंने मूल रूप से पोस्ट करने के बाद से इस विचार पर पुनर्विचार किया है और मुझे लगता है कि अगर प्रोग्राम चल रहा है तो यह स्वचालित रूप से स्वचालित हो सकता है जिसमें शेल कमांड भेज सकते हैं। ऐसा इसलिए है क्योंकि हम विंडो को अनिवार्य रूप से विभाजित करके प्रोग्राम चला सकते हैं। यहाँ एक उदाहरण है कि मेरा क्या मतलब है। निम्नलिखित कोड
- उपयोगकर्ता चलाता है
runCodeSplit.sh
, जो
- अंतिम फलक और रन के दाईं ओर एक नया फलक क्षैतिज (20c चौड़ाई) विभाजित करता है
test.sh
- लूप दर्ज करें
- वर्तमान फलक आकार की जाँच करता है और आकार बदलने का प्रयास करता है
- 10 सेकंड के लिए सोता है (लेकिन आप इसे बदल सकते हैं जो आप चाहते हैं)
- 3 और 4 10 बार दोहराता है, फिर बाहर निकलता है
runCodeSplit.sh:
#!/bin/bash
# runCodeSplit.sh
paneID=$(tmux list-panes | wc -l)
echo "pane: $paneID"
echo $(expr $paneID - 1)
# now, open a new pane and run the func
tmux split-window -h -l 20 -t $(expr $paneID - 1 ) "~/test.sh $paneID"
test.sh:
#!/bin/bash
# test.sh
if [[ $# -lt 1 ]] ; then
echo "please provide the pane-number"
exit
fi
paneID=$1
i=0
while [[ i -lt 10 ]] ; do
# find the current width and resize it at every loop
width=$(tmux list-panes | awk '{print $2}' | cut -c 2- | cut -f 1 -d'x' | sed $(expr $paneID + 1)'q;d')
resizeNum=$(expr $width - 20)
echo "$paneID : w $width r $resizeNum"
if [[ $resizeNum -gt 0 ]] ; then
tmux resize-pane -R -t $paneID $resizeNum
elif [[ $resizeNum -lt 0 ]] ; then
tmux resize-pane -L -t $paneID $(expr 0 - $resizeNum)
fi
#now, we can do stuff ...
let i++
echo "i= $i / 10"
sleep 10
done
read -p "Press any key to close this pane ... " -n1 -s
नोट: दुर्भाग्य से, जिस तरह से मैंने इसे ऊपर लागू किया है, आपको वास्तव में इसे केवल एक बार tmux विंडो के अनुसार चलाना चाहिए। समस्या यह है कि हर बार जब आप इसे चलाते हैं, तो वे एक-दूसरे के बगल में झुकेंगे, जो बदले में उन्हें अंतरिक्ष के लिए प्रतिस्पर्धा करेगा (एक दूसरे को विस्तार करने और इसके विपरीत करने के लिए सिकुड़ जाएगा)। आप इस समस्या के आसपास काम करने में सक्षम हो सकते हैं, लेकिन मैं इसका पता लगाने के लिए आपको छोड़ देता हूं।