Загрузить определенный ZSH _База THEME в определенном каталоге содержит определенную строку

Единица пути Systemd с директивой DirectoryNotEmptyзапускает соответствующую службу только тогда, когда что-то изменяется в каталоге. Systemd внутри использует API inotifyдля отслеживания изменений в каталоге. Systemd не использует таймер для периодического запуска службы, независимо от того, пуст каталог или нет. Это означает, что служба не запускается снова, пока каталог не станет пустым. Вместо этого служба должна обрабатывать все файлы в каталоге, обычно обрабатывая файлы и удаляя или перемещая их в какой-либо другой каталог. Например, если служба обрабатывает только один файл, и после этого в каталоге ничего не происходит, то служба больше никогда не вызывается.

"DirectoryWentFromEmptyToNonEmpty", возможно, было бы более подходящим названием для директивы DirectoryNotEmpty, хотя мои тесты показывают, что служба запускается каждый раз, когда файл добавляется в каталог. (Это, в свою очередь, немного усложняет ситуацию, потому что, если процесс использования файла занимает много времени, у вас может быть несколько процессов, работающих параллельно, которые необходимо координировать.)

2
24.05.2021, 21:39
1 ответ

Если вы посмотрите на код oh -my -zsh , эта переменная ZSH_THEMEиспользуется кодом инициализации oh -my -zsh для получения исходного -файл темы.

Итак, если вы хотите, чтобы тема менялась всякий раз, когда текущий рабочий каталог попадает в какой-либо каталог, вам нужно:

  1. изменять эту переменную при каждом изменении текущего каталога
  2. воспроизводит тот же источник файлов темы при изменении переменной.

Что-то вроде:

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заключение переменных в регулярные выражения в кавычки не отключает в них операторы регулярных выражений.

1
28.07.2021, 11:29

Теги

Похожие вопросы