Я почти не ответил, потому что последующий пост выглядел как сообщение «Bump».
Вы можете получить рекламные пароли без присоединения к домену через пакет PAM_SMB. Это только делает проверку паролем и не проверяет группы, GPOS, ничего. Мы использовали его в прошлом, и он сосуществуют с другими методами аутентификации хорошо, и даже аутентифицируется над VPN (например, VTUN) на дальнюю удаленную рекламу.
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: '
Вы полностью опровергли представление zsh о том, что было напечатано и что нужно стереть / перезаписать, поскольку он отображает завершение меню и позволяет редактировать командную строку. Это потому, что вы слишком усложнили эту подсказку.
printf
, чтобы просто вставить строковый литерал внутри слова. Как я уже говорил на https://superuser.com/a/695350/38062 , Z Shell знает, что такие вещи, как % F {зеленый}
, не печатают последовательности , не говоря уже об этом; а также вырабатывает правильные escape-последовательности из terminfo
, не запрограммировав их.
PROMPT="%B%F{blue}%m%f%b%d-%h: "