ZSH의 디렉터리 깊이 기반 색상 폴더

ZSH의 디렉터리 깊이 기반 색상 폴더

현재 편집 중이에요불가지론자주제:아 맙소사내 취향에 따라 상태 표시줄의 디렉터리 이름에 깊이에 따라 색상을 지정하는 방법이 있는지 궁금합니다. 그것은 마치 ...

~(red)/.config(orange)/oh-my-zsh(yellow)

나는 원래 사용했다전원 케이블우분투 저장소에서 패키지를 다운로드했지만 속도가 너무 느려서 다음으로 전환했습니다.다루기 힘든주제. 그것을 사용할 때전원 케이블내가 원하는 것을 할 수 있지만 현재 작업 디렉토리의 색상만 변경할 수 있습니다. 제 구성은 이렇습니다..

"cwd": {"fg": 'color', "bg": 'color', "attrs": []}

"cwd:current_folder": {"fg": 'color', "bg": 'color', "attrs": []}

이 무지개 괴물을 만드는 데 도움을 주시면 대단히 감사하겠습니다. Ubuntu 16.04에서 Terminator(사용 가능한 경우)를 사용하고 있습니다.

답변1

이를 수행하는 함수를 만들 수 있습니다. 완벽하지는 않고 확실히 이식성이 없지만 작동하는 것 같습니다. 에서 사용하려면 and ( / 또는 / 사용 , 기억이 안 나요), 설정 및 precmd 후크( ) 및 에서 사용된 변수를 수정하는 함수를 변경하면 $PS1됩니다 .$fg_$bg_%F%B$fg$bgadd-zsh-hook precmd function_precmd$PS1

사용자 정의 기능이 필요한 경우 PRE_ASSOC를 올바르게 설정하십시오.

function colorize_array () {
    local reset='\033[0m'

    for (( i = 1; i <= $# ; i++ )); do
        pre=""

        if (( $+PRE_ASSOC[$i] )); then
            pre=$PRE_ASSOC[$i]
        elif (( $+PRE_ASSOC[$(( $i - $# - 1 ))] )) ;then
            pre=$PRE_ASSOC[$(( $i - $# - 1 ))]
        else
            pre=$PRE_ASSOC[default]
        fi
        echo -n -e $pre$@[$i]$reset
    done
}

typeset -A fg_ bg_ 
typeset -A PRE_ASSOC

fg_=([black]="\033[30m" [white]="\033[37m" [red]="\033[31m" [yellow]="\033[33m" [cyan]="\033[36m")
bg_=([black]="\033[40m" [white]="\033[47m" [red]="\033[41m" [yellow]="\033[43m" [cyan]="\033[46m")

PRE_ASSOC=([default]="$fg_[cyan]/" [1]="$fg_[red]"  [-1]="$fg_[yellow]/")

local pwd="${PWD/#$HOME/~}"
pwd_list=(${(s:/:)pwd})

out=$(colorize_array $pwd_list)
echo $out

코드는 완벽하지는 않지만 작동합니다.

관련 정보