외부 명령 없이 Zsh 프롬프트 구성/사용자 정의 문자 삽입

외부 명령 없이 Zsh 프롬프트 구성/사용자 정의 문자 삽입

나는 나만의 프롬프트를 만드는 것을 좋아합니다. 또한 나는 그것들이 단순하고 $PS1 및 $PS2 변수에만 기록되기를 원합니다. 나는 그것들이 별도의 파일이나 전체 스크립트 또는 프로그램이 되는 것을 원하지 않으며 가능한 한 적은 수의 외부 프로그램을 실행하기를 원합니다. 그래서 이것이 제가 게시한 이유입니다.

현재 프롬프트를 구성하는 방법은 다음과 같습니다.

function setPromptTheme()
{
    if [ $UID = 0 ]
      then _promptColorUID=yellow
      else _promptColorUID=blue
    fi # Checks if the user is root and colors some parts of the prompt accordingly

    if [ -z $SSH_CONNECTION ]
      then _promptColorSSH=white
      else _promptColorSSH=yellow
    fi # Checks if the session is running through SSH and colors some parts of the prompt accordingly

    export PS1="%(?.%K{green}%F{black} √ %F{green}%K{black}$(printf '\ue0b0')%f%k.%K{red}%F{black} × %F{red}%K{black}$(printf '\ue0b0')%f%k)%K{black} %F{$_promptColorSSH}%n@%M %F{black}%K{$_promptColorUID}$(printf '\ue0b0')%k%K{$_promptColorUID}%F{black} > %k%F{$_promptColorUID}$(printf '\ue0b0')%f%k "
    export RPS1="%F{$_promptColorUID}$(printf '\ue0b2')%K{$_promptColorUID}%F{black} 

답변1

여기에서 사용할 수 있습니다 $'\uxxxx' or $'\Uxxxxxxxx'( $'...'인용문은 ksh93에서 따왔으나, \u/에 대한 해석은 실제로 일부 변경에도 불구하고 다른 쉘에 의해 도입되었으며 그 이후로 복사되었습니다).\Uzsh

그래서:

PS1="...."$'\ue0b2'"...."

또는:

myChar=$'\ue0b2'
PS1="...$myChar..."

또는

typeset -A powerline=(
  branch        $'\uE0A0'
  ln            $'\uE0A1'
  padlock       $'\uE0A2'
  'solid right' $'\uE0B0'
  right         $'\uE0B1'
  'solid left'  $'\uE0B2'
  left          $'\uE0B3'
)

예를 들어 사용하십시오 $poweline[solid right].

\[그리고 \]세게 때리다너비가 0인 데이터에 대한 구문을 소개합니다.

이에 상응하는 것은 zsh이지만 %{...%}여기서는 문자의 너비가 1열이므로아니요그것을 사용하고 싶습니다. 내 시스템에는 최소한 다음 문자가 있습니다.개인 사용 영역(여기서는 전력선에서 사용됨) 너비는 1로 설정되었습니다( wcwidth()문자 너비는 zsh가 사용하는 것에 따라 다름). wcwidth()이들이 0을 반환하는 경우 언제든지 a를 삽입하여 %Gzsh에 너비가 1임을 알릴 수 있습니다.

관련 정보