странность автоматического заполнения в результате ужасного взлома для подсказки zsh

Я почти не ответил, потому что последующий пост выглядел как сообщение «Bump».

Вы можете получить рекламные пароли без присоединения к домену через пакет PAM_SMB. Это только делает проверку паролем и не проверяет группы, GPOS, ничего. Мы использовали его в прошлом, и он сосуществуют с другими методами аутентификации хорошо, и даже аутентифицируется над VPN (например, VTUN) на дальнюю удаленную рекламу.

-2
20.04.2015, 01:57
2 ответа

Zsh необходимо знать, насколько широка подсказка, чтобы получить правильную позицию курсора. Если он предполагает неправильное значение ширины строки, то при перерисовке командной строки он будет писать текст не в том месте. Вот что происходит после того, как zsh переходит в следующую строку для отображения возможных завершений: он перерисовывает команду, которая должна быть завершена в том месте, где, по его мнению, она должна появиться.

Ваша подсказка содержит экранирующие последовательности, которые имеют ширину нуля: их действие заключается в изменении внешнего вида следующего текста. Zsh этого не знает: предполагается, что каждый символ имеет ширину 1, если не указано иное. Чтобы сказать zsh, что часть подсказки имеет ширину нуля, окружите ее %{...%}.

PROMPT=%{$(printf "\e[38;5;6m")%}%m%{$(printf "\e[m")%}%d-%h:" "

Вы можете упростить это: нет необходимости вызывать printf, вы можете использовать синтаксис $'...' для включения экранирования обратного слеша.

PROMPT=$'%{\e[38;5;6m%}%m%{\e[m%}%d-%h: '

Не экспортируйте PROMPT: это внутренняя переменная оболочки, а не переменная окружения, которую должны видеть другие приложения.

Zsh имеет быстрые экранирующие последовательности для изменения внешнего вида текста простыми способами. Я не уверен, что вы задумали с 38;5;6. Жирным синим цветом будет 34;1, или с экранированиями zsh prompt,

PROMPT='%F{blue}%B%m%b%f%d-%h: '
2
28.01.2020, 05:15

Вы полностью опровергли представление zsh о том, что было напечатано и что нужно стереть / перезаписать, поскольку он отображает завершение меню и позволяет редактировать командную строку. Это потому, что вы слишком усложнили эту подсказку.

  • Не используйте printf , чтобы просто вставить строковый литерал внутри слова.
  • Не используйте зашитые управляющие последовательности CSI для изменения цвета.

Как я уже говорил на https://superuser.com/a/695350/38062 , Z Shell знает, что такие вещи, как % F {зеленый} , не печатают последовательности , не говоря уже об этом; а также вырабатывает правильные escape-последовательности из terminfo , не запрограммировав их.

PROMPT="%B%F{blue}%m%f%b%d-%h: "

Дополнительная литература

2
28.01.2020, 05:15

Теги

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