Как отправить информацию о времени для работы в теме zsh? - PullRequest
0 голосов
/ 17 июня 2020

Я зеленая рука на zsh. Но я хочу настроить zsh -тему для себя.

Я хочу спросить, как отправлять информацию о времени моей функции.

Это примерно выглядит так:

function custom() {
    TIME_INFO=`date +%H%M`
    if [ $TIME_INFO -ge 700 ] && [ $TIME_INFO -le 2330 ]; then
        echo -n "%F{green}[$(date +%H:%M:%S)]%f"
    else
        echo -n "%F{yellow}[$(date +%H:%M:%S)]%f"
    fi
}

...
PROMPT+="$(custom)"
...

, но этот код не может работать правильно.

Я видел, что PROMPT может использовать %* %D %T и так далее, чтобы отображать информацию о времени.

, но возник другой вопрос. ..

этот формат не может быть отправлен моей функции. например:

function custom() {
    TIME_DATA=$1
    TIME_SPLT=(${TIME_DATA//:/})
    if [ $TIME_SPLT -ge 700 ] && [ $TIME_SPLT -le 2330 ]; then
        echo -n "%{$F[green]%}[%*]%f"
    else
        echo -n "%{$F[yellow]%}[%*]%f"
    fi
}

...
PROMPT+="%{$(custom %*)%}"
...

Затем произошла ошибка: no matches found: %*

Итак, я хочу знать, как изменить мой код, чтобы моя идея работала. QwQ

1 Ответ

0 голосов
/ 17 июня 2020

Вы можете поместить последовательности подсказок прямо в переменную, а затем использовать флаг расширения параметра (%), чтобы развернуть их, и вы можете выполнить расширение сразу после назначения параметра. Вы также можете использовать print для расширения последовательностей приглашений.

custom() {
    TIME_INFO=${(%):-%D{%H%M}}
    if [ "${TIME_INFO}" -ge 700 ] && [ "${TIME_INFO}" -le 2330 ]; then
        print -l '%F{green}[%D{%T}]%f'
    else
        print -l '%F{yellow}[%D{%T}]%f'
    fi
}

Наконец, я бы пропустил использование подстановки команд для установки PROMPT и использовал бы precmd для переопределения PROMPT по запросу.

precmd () {
  TIME_INFO=${(%):-%D{%H%M}}
  if [ "${(%)TIME_INFO}" -ge 700 ] && [ "${(%)TIME_INFO}" -le 2330 ]; then
    PROMPT='%F{green}'
  else
    PROMPT='%F{yellow}'
  fi
  PROMPT+='[%D{%T}]%f'
}

(Обратите внимание, что есть крошечное условие гонки, хотя, вероятно, не о нем стоит беспокоиться. Возможно, что TIME_INFO будет установлен на 6:59:59, что сделает ваше приглашение желтым, но назначение до PROMPT происходит в 7:00:00. Точно так же вы можете установить TIME_INFO на 23:30:59, но PROMPT на 23:31:00, в результате чего время будет отображаться желтым цветом и зеленым.)

...