我目前正在编辑阿格诺斯特主题来自哦我的zsh根据我的喜好,想知道是否有某种方法可以根据深度为状态栏中的目录名称着色。就像是...
~(red)/.config(orange)/oh-my-zsh(yellow)
我最初使用的是电源线从 ubuntu repo 中下载包,但发现它很慢,所以我切换到桀骜主题。使用时电源线我能够做我想做的事,但只能更改当前工作目录的颜色。我的配置是这样的...
"cwd": {"fg": 'color', "bg": 'color', "attrs": []}
"cwd:current_folder": {"fg": 'color', "bg": 'color', "attrs": []}
任何帮助创造这个彩虹怪物的帮助都将不胜感激。我在 Ubuntu 16.04 上使用终结者(如果有的话)。
答案1
您可以创建一个函数来执行此操作。它并不完美,绝对不便携,但似乎可以用。要在中使用它,$PS1
您只需更改$fg_
and $bg_
(使用%F
/%B
或$fg
/ $bg
,我不记得了)以及 setup 和 precmd hook ( add-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
该代码远非完美,但它可以工作。