zsh의 여러 줄 RPROMPT

zsh의 여러 줄 RPROMPT

zsh에서 여러 줄 프롬프트를 정의할 수 있다는 것을 알고 있습니다.

PROMPT='
test
→ '

그런데 왜 여러 줄의 오른쪽 프롬프트를 정의할 수 없는지 궁금합니다. 나는 시도했다:

RPROMPT='
test
still test '

하지만 아무것도 나타나지 않습니다. 이것이 가능한가?

답변1

precmd프롬프트가 표시되기 전에 매번 실행되는 함수를 사용하여 프롬프트 위에 추가 줄을 인쇄하면 원하는(제 생각이 맞다면) 효과를 얻을 수 있습니다 .

예를 들어 다음 코드를 사용하십시오.

precmd() {
  LEFT="The time is"
  RIGHT="$(date) "
  RIGHTWIDTH=$(($COLUMNS-${#LEFT}))
  print $LEFT${(l:$RIGHTWIDTH::.:)RIGHT}
}
PS1="foo > "
RPS1="bar"

설명

  • $LEFT$RIGHT왼쪽과 오른쪽의 끈을 잡습니다 . 구문 과 함께 명령 출력을 사용할 수 있습니다 $(...).
  • $RIGHTWIDTH현재 터미널 너비의 차이입니다(다음으로 저장됨).zsh매개변수 에서 $COLUMNS) 및 왼쪽 문자열의 너비. $((...))수학적 표현을 위한 것입니다
  • ${(l:$RIGHTWIDTH::.:)RIGHT}매개변수가 의 길이만큼 점으로 $RIGHT왼쪽으로 채워지는( l)(공백을 원할 경우 마지막 생략 ) 마법이 제공됩니다 .:.:$RIGHTWIDTH
  • 추가 줄을 인쇄합니다. 더 많은 줄을 원하면 명령을 반복하십시오.
  • PS1및 에 RPS1대해서는 더 짧습니다 .PROMPTRPROMPT

데모

The time is............................................Fri, Sep 18, 2015  8:20:22 PM 
foo > _                                                                          bar

답변2

여러 줄의 올바른 프롬프트를 설정하는 것은 분명히 불가능하지 않습니다.이 하나그것을 관리합니다. 그러나 나는 다음과 같이 말하고 싶습니다.

 local top_left='%F{blue}%~%f'
  local top_right="%F{green}${git_branch}%f"
  local bottom_left='%B%F{%(?.green.red)}%#%f%b '
  local bottom_right='%F{yellow}%T%f'

  local REPLY
  fill-line "$top_left" "$top_right"
  PROMPT=$REPLY$'\n'$bottom_left
  RPROMPT=$bottom_right

PROMPT왼쪽 상단과 오른쪽 상단, 왼쪽 하단을 점유하고 RPROMPT가 오른쪽 하단을 점유 함으로써 가능합니다 . 그래도 RPROMPT 적절한 명령은 한 줄만 갖게 됩니다.

관련 정보