আমাদের প্রম্পটটি দেখতে এরকম দেখতে দিন (_ _ আমার কার্সারকে উপস্থাপন করে)
~ % _
এটির মতো দেখতে কোনও উপায় আছে কি?
~ % _
[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
মডিউল রয়েছে যা টার্মিনাল বিবরণ ডেটাবেসটিতে অ্যাক্সেস দেয়: $terminfo[$cap]
টার্মিনালের সক্ষমতার অনুশীলন করতে পাঠানোর জন্য অক্ষরের অনুক্রম $cap
, অর্থাৎ $cap
কমান্ড চালানোর জন্য । man 5 terminfo
আরও তথ্যের জন্য দেখুন (লিনাক্সে, বিভাগের নম্বরটি অন্যান্য সংযুক্তিতে পৃথক হতে পারে)।
ক্রমের ক্রম হ'ল: কার্সারটিকে এক লাইনের ( cud1
) নীচে সরান , তারপরে ব্যাক আপ ( cuu1
); কার্সার অবস্থান সংরক্ষণ করুন ( sc
); কার্সারটিকে এক লাইনের নিচে সরান; মুদ্রণ [some status]
; কার্সার অবস্থান পুনরুদ্ধার করুন। প্রম্পটটি যদি স্ক্রিনের নীচের লাইনে থাকে তবে শুরুতে ডাউন এবং আপ বিটটি কেবল প্রয়োজনীয়। প্রিক্সেক লাইনটি দ্বিতীয় লাইনটি মুছে ফেলে ( el
) যাতে এটি কমান্ড থেকে আউটপুট মিশে না যায়।
যদি দ্বিতীয় লাইনের পাঠ্যটি টার্মিনালের চেয়ে আরও বৃহত্তর হয় তবে ডিসপ্লেটি গার্ফ হতে পারে। মেরামত করতে Ctrl+ Lএকটি চিমটি মধ্যে ব্যবহার করুন ।
এখানে bash
গিলসের জেডশ সমাধানের সমতুল্য। বাশের কোনও নেটিভ টার্মিনো মডিউল নেই, তবে 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/ দেখুন ।
সম্পাদনা : গিলসের মন্তব্যের ভিত্তিতে উন্নত স্ক্রিপ্ট।