프롬프트의 길이가 n보다 작으면 프롬프트를 점으로 채웁니다.

프롬프트의 길이가 n보다 작으면 프롬프트를 점으로 채웁니다.

감사해요클라에스 멜번내 현재 프롬프트는 다음과 같습니다

# this variable can be changed later to change the fraction of the line 
export PROMPT_PERCENT_OF_LINE=40

# make a function, so that it can be evaluated repeatedly
function myPromptWidth() { 
  echo $(( ${COLUMNS:-80} * PROMPT_PERCENT_OF_LINE / 100 )) 
}

# for some reason you can't put a function right in PROMPT, so make an
# intermediary variable
width_part='$(myPromptWidth)'

# if myPromptWidth is less than current prompt ... pad with dots

PS1="%F{013}%${width_part}<...<%d%f%F{012}\${__git_ps1_foo}%f%F{011}%(1j.jobs%j.)%f%(?.%F{004}.%F{001}✕%?)%<<%# %f"

그래서 출력은 다음과 같습니다

/media/blueray/WDPurple/_DataBackup/_Work/_NotesFilteredADOC% cd ~
/home/blueray%

하지만 모든 프롬프트의 길이가 같기를 바랍니다. 프롬프트 길이가 이보다 작으면 myPromptWidth점으로 채워야 합니다.

그래서 내 예상 결과는 다음과 같습니다.

/media/blueray/WDPurple/_DataBackup/_Work/_NotesFilteredADOC% cd ~
.............................................../home/blueray%

어떻게 해야 하나요?

업데이트 1

나는 계속 노력하고 있습니다 %${width_part}(l.true-text.false-text). 작동하는지 모르므로 문제를 해결하십시오.

답변1

width_part='$((${COLUMNS:-80} * PROMPT_PERCENT_OF_LINE / 100))'
PS1="%F{013}%$width_part<<\${(l[$width_part][.])}%~%F{012}\${__git_ps1_foo}%F{011}%(1j.jobs%j.)%(?.%F{004}.%F{001}✕%?)%<<%# %f"

즉, %<width><<truncated-part%<<빈 대체 문자열(the 가 ...사라졌음)을 사용하더라도 여전히 을 자르고 대신 <width>매개변수의 시작 부분에 값을 삽입합니다..truncated-part${(l[<width>][.])}

당신은 모든 것이 있다는 것을 알게 될 것입니다더블- 따옴표, 일부 $는 이스케이프되고 일부는 이스케이프되지 않습니다. ( )에 속하지 않는 것들은 $width_part할당 시 확장되고, ( )에 속하는 것들은 문자 그대로 삽입되므로 $PS1각 힌트가 평가될 때 확장됩니다. 이 변수의 실제 값은 다음과 같습니다 $PS1.

%F{013}%$((${COLUMNS:-80} * PROMPT_PERCENT_OF_LINE / 100))<<${(l[$((${COLUMNS:-80} * PROMPT_PERCENT_OF_LINE / 100))][.])}%~%F{012}${__git_ps1_foo}%F{011}%(1j.jobs%j.)%(?.%F{004}.%F{001}✕%?)%<<%# %f

답변2

myPromptWidth다음과 같은 것은 함수를 사용하여 적절한 수의 포인트에 힌트를 채웁니다.

width="$(myPromptWidth)"
print -v dots -f '%*s' $width .
dots=${dots// /.} 
PS1="%$width<...<$dots %/%% "

결과는 다음과 같습니다.

......................./tmp% 

dots충분한 수의 포인트가 포함되어야 하며, 위의 내용은 이를 구성하는 한 가지 방법일 수 있습니다.

이것은 내가 글을 쓸 때 Stéphane이 언급한 내용과 거의 같습니다. 프롬프트를 점으로 채우고 쉘이 길이에 맞게 자르도록 합니다.

이보다 길면 프롬프트의 실제 유용한 부분도 잘립니다 $width.

관련 정보