आइए मेरा संकेत इस तरह दिखता है (_ मेरे कर्सर का प्रतिनिधित्व करता है)
~ % _
वहाँ किसी भी तरह से मैं इसे इस तरह लग सकता है
~ % _
[some status]
सवाल मूल रूप से zsh के बारे में था, लेकिन अब अन्य उत्तर हैं।
आइए मेरा संकेत इस तरह दिखता है (_ मेरे कर्सर का प्रतिनिधित्व करता है)
~ % _
वहाँ किसी भी तरह से मैं इसे इस तरह लग सकता है
~ % _
[some status]
सवाल मूल रूप से zsh के बारे में था, लेकिन अब अन्य उत्तर हैं।
जवाबों:
निम्नलिखित सेटिंग्स काम करने लगती हैं। दूसरी पंक्ति पर पाठ गायब हो जाता है यदि कमांड लाइन पहली पंक्ति को ओवरफ्लो करती है। preexec
समारोह कमांड चलाने से पहले दूसरी पंक्ति मिटा देता है; यदि आप इसे रखना चाहते हैं, तो बदल दें preexec () { echo; }
।
terminfo_down_sc=$terminfo[cud1]$terminfo[cuu1]$terminfo[sc]$terminfo[cud1]
PS1_2='[some status]'
PS1="%{$terminfo_down_sc$PS1_2$terminfo[rc]%}%~ %# "
preexec () { print -rn -- $terminfo[el]; }
%
बच निकलने का दस्तावेज zsh मैनुअल ( man zshmisc
) में दिया गया है।
Terminfo एक टर्मिनल एक्सेस एपीआई है। Zsh के पास एक terminfo
मॉड्यूल है जो टर्मिनल विवरण डेटाबेस तक पहुंच देता है: $terminfo[$cap]
टर्मिनल की क्षमता का अभ्यास करने के लिए भेजने के लिए वर्णों का अनुक्रम है $cap
, अर्थात, इसकी $cap
कमांड चलाने के लिए । man 5 terminfo
अधिक जानकारी के लिए देखें (लिनक्स पर, अनुभाग संख्या अन्य यूनियनों पर भिन्न हो सकती है)।
क्रियाओं का क्रम है: कर्सर को एक रेखा से नीचे ले जाएँ ( cud1
), फिर बैक अप ( cuu1
); कर्सर स्थिति को बचाएं ( sc
); कर्सर को एक रेखा से नीचे ले जाएं; प्रिंट [some status]
; कर्सर की स्थिति को पुनर्स्थापित करें। स्क्रीन के नीचे लाइन पर प्रॉम्प्ट होने की स्थिति में शुरुआत में डाउन-एंड-बिट केवल आवश्यक है। Preexec लाइन दूसरी पंक्ति ( el
) को मिटा देती है ताकि यह कमांड से आउटपुट के साथ मिश्रित न हो।
यदि दूसरी पंक्ति का टेक्स्ट टर्मिनल से अधिक चौड़ा है, तो डिस्प्ले को आड़ा-तिरछा किया जा सकता है। का प्रयोग करें Ctrl+ Lमरम्मत करने के लिए एक चुटकी में।
यहाँ bash
गिल्स के zsh घोल के बराबर है। बैश में एक देशी टर्मोफ़ मॉड्यूल नहीं है, लेकिन tput
कमांड (बंडल के साथ terminfo
) एक ही काम करता है।
PS1_line1='\w \$ '
PS1_line2='[some status]'
if (tput cuu1 && tput sc && tput rc && tput el) >/dev/null 2>&1
then
PS1="
\[$(tput cuu1; tput sc)\]
\[${PS1_line2}$(tput rc)\]${PS1_line1}"
PS2="\[$(tput el)\]> "
trap 'tput el' DEBUG
else
PS1="$PS1_line2 :: $PS1_line1"
fi
यदि टर्मिनल क्षमताओं में से किसी एक का समर्थन नहीं करता है, तो यह एक-पंक्ति प्रॉम्प्ट पर वापस आ जाएगा।
trap
लाइन का अनुकरण zsh के लिए एक hacky तरीका है preexec
समारोह। अधिक जानकारी के लिए /superuser/175799/ देखें ।
EDIT : गाइल्स की टिप्पणियों के आधार पर बेहतर स्क्रिप्ट।