6

Я знаю, что вы можете определить многострочные приглашения в Zsh:

PROMPT='
test
→ '

Но мне было интересно, почему вы не можете определить правильные многострочные подсказки? Я старался:

RPROMPT='
test
still test '

но ничего не появляется Это возможно?

1 ответ1

9

Вы можете получить желаемый (если я думаю правильно) эффект, используя функцию precmd , которая выполняется каждый раз перед отображением подсказки, чтобы напечатать дополнительные строки над подсказкой.

Используйте, например, этот код

precmd() {
  LEFT="The time is"
  RIGHT="$(date) "
  RIGHTWIDTH=$(($COLUMNS-${#LEFT}))
  print $LEFT${(l:$RIGHTWIDTH::.:)RIGHT}
}
PS1="foo > "
RPS1="bar"

объяснение

  • $LEFT и $RIGHT содержат строки для левой и правой стороны, соответственно. Вы можете использовать вывод команды с синтаксисом $(...) .
  • $RIGHTWIDTH - это разница текущей ширины терминала (хранится в zsh в параметре $COLUMNS) и ширины левой строки. $((...)) для математических выражений
  • Волшебство приходит с ${(l:$RIGHTWIDTH::.:)RIGHT} , где параметр $RIGHT дополняется слева (l) точками (пропустите последний :.: Если вам нужны пробелы) до длины $RIGHTWIDTH .
  • Распечатать дополнительную строку. Повторите команды, если вы хотите больше строк.
  • PS1 и RPS1 короче для PROMPT и RPROMPT .

демонстрация

The time is............................................Fri, Sep 18, 2015  8:20:22 PM 
foo > _                                                                          bar

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .