আমি বাশ প্রম্পটটিকে (PROMPT_FUNCTION ব্যবহার করে) এর মতো সংজ্ঞায়িত করেছি:
function get_hg_prompt_prefix() {
local APPLIED_COLOR=$1; shift
local UNAPPLIED_COLOR=$1; shift
local ALERT_COLOUR=$1; shift
local TEXTCOLOR=$1; shift
local mercurial_prompt_line="{{patches|join(:)|pre_applied(${APPLIED_COLOR})|post_applied(${TEXTCOLOR})|pre_unapplied(${UNAPPLIED_COLOR})|post_unapplied(${TEXTCOLOR})}\n\r}"
local mercurial_status_prompt="{ ${ALERT_COLOUR}{status}${TEXTCOLOR}}"
echo "$(hg prompt "${mercurial_prompt_line}" 2>/dev/null)$(hg prompt "${mercurial_status_prompt}" 2>/dev/null)"
}
function set_prompt() {
bright='\[[01m\]'
colors_reset='\[[00m\]'
HOSTCOLOR=${colors_reset}='\[[34m\]'
USERCOLOR=${colors_reset}='\[[01m\]'
TEXTCOLOR=${colors_reset}='\[[32m\]'
APPLIED_COLOR=${colors_reset}='\[[32m\]'
UNAPPLIED_COLOR=${colors_reset}='\[[37m\]'
ALERT_COLOUR=${colors_reset}='\[[31m\]'
hg_status="$(get_hg_prompt_prefix $APPLIED_COLOR $UNAPPLIED_COLOR $ALERT_COLOUR $TEXTCOLOR)"
ps1_prefix="${hg_status}$colors_reset($bright$(basename $VIRTUAL_ENV)$colors_reset) "
PROMPTEND='$'
PS1="${ps1_prefix}${USERCOLOR}\u${colors_reset}${TEXTCOLOR}@${colors_reset}${HOSTCOLOR}\h${colors_reset}${TEXTCOLOR} (\W) ${PROMPTEND}${colors_reset} "
}
PROMPT_COMMAND=set_prompt
সাধারণভাবে, এটি আমাকে একটি বহু-লাইন প্রম্পট দেয় যা কিছু এইচজি স্থিতির তথ্য পাশাপাশি আমার বর্তমান ভার্চুয়ালেনভ প্রদর্শন করে (বর্ণ ছাড়াই) দেখায়:
buggy-wins.patch
! (saas) user@computer (~) $
সমস্যাটি হ'ল, এটি প্রম্পটের দৈর্ঘ্যের গণনার সাথে স্ক্রু করছে (আমি মনে করি!) এবং অদ্ভুত টার্মিনাল মোড়ানোর সমস্যা এবং কার্সার প্লেসমেন্টের কারণ ঘটায়। উদাহরণস্বরূপ, একটি 80-চর টার্মিনালে, আমি এখানে প্রম্পটটি দেখছি (** - চারপাশের চরিত্রটি কার্সারের অবস্থান):
~) $ **a**nis) crose@chris-rose (~
প্রম্পটটি প্রদর্শনের জন্য পর্যাপ্ত প্রশস্ত টার্মিনালগুলিতে, লাইন মোড়কটি এটির চেয়ে অনেক আগে ঘটে; 108-চর-প্রশস্ত টার্মিনাল উইন্ডোতে প্রম্পটের প্রথম লাইনে আমি ফিট করতে সবচেয়ে সর্বাধিক পাঠ্যটি এখানে (আবার, ** আমার কার্সারের অবস্থান চিহ্নিত করে):
**(**advanis) crose@chris-rose (~) $ sdkfjlskdjflksdjff
যখন লাইনটি মোড়বে, এটি প্রম্পটে ওভাররাইট করে। ইনপুটটির দ্বিতীয় লাইনটি টার্মিনালের ঠিক প্রান্তে চলে, এবং তারপরে সঠিকভাবে মোড়ানো হয়।
সুতরাং, স্পষ্টতই কিছু প্রম্পটের প্রস্থের সাথে বিশৃঙ্খলা করছে। আমি কীভাবে বাশকে পিএস 1 স্ট্রিংয়ের দৈর্ঘ্য এএনএসআই এর অব্যাহতি কোড অনুসারে নয়, প্রম্পটের প্রকৃত প্রদর্শিত দৈর্ঘ্য অনুসারে নির্ধারণ করতে পারি?