
я используюомыжш. Я пытаюсь загрузить разницу.темына основе текущего пути к каталогу ( pwd
)
Логики
Еслипвдв или содержат подстрочную /Sites/work/
нагрузку af-magic
, в противном случае нагрузку robbyrussell
.
.zshrc
я пробовал
STR=$(pwd)
SUB='/Users/john/Sites/work'
if [[ "$STR" =~ .*"$SUB".* ]]; then
echo "It's there."
ZSH_THEME="af-magic"
else
ZSH_THEME="robbyrussell"
fi
Результат
он продолжал загружатьсяrobbyrussell
Бывший.
решение1
Если вы посмотрите накод oh-my-zsh, эта ZSH_THEME
переменная используется кодом инициализации oh-my-zsh для получения файла для каждой темы.
Итак, если вы хотите, чтобы тема менялась всякий раз, когда текущий рабочий каталог попадает в какой-либо каталог, вам нужно:
- для изменения этой переменной при каждом изменении текущего каталога
- воспроизводить тот же источник файлов темы при изменении переменной.
Итак, что-то вроде:
load-omz-theme() {
# copied and improved from oh-my-zsh
if (( $# > 0 )) ZSH_THEME=$1
if [[ -n $ZSH_THEME ]]; then
if [[ -f $ZSH_CUSTOM/$ZSH_THEME.zsh-theme ]]; then
source "$ZSH_CUSTOM/$ZSH_THEME.zsh-theme"
elif [[ -f $ZSH_CUSTOM/themes/$ZSH_THEME.zsh-theme ]]; then
source "$ZSH_CUSTOM/themes/$ZSH_THEME.zsh-theme"
else
source "$ZSH/themes/$ZSH_THEME.zsh-theme"
fi
fi
}
adapt-theme() {
local previous_theme=$ZSH_THEME
case $PWD in
($SUB*) ZSH_THEME=af-magic;;
(*) ZSH_THEME=robbyrussell;;
esac
[[ $ZSH_THEME = $previous_theme ]] || load-omz-theme
}
chpwd_functions+=(adapt-theme)
Кстати, [[ "$STR" =~ .*"$SUB".* ]]
это синтаксис bash, а не zsh. В zsh
, заключение переменных в регулярные выражения в кавычки не отключает операторы регулярных выражений в нем.