[Comm] zsh и артифакт konsole
Sergey Vlasov
=?iso-8859-1?q?vsu_=CE=C1_altlinux=2Eru?=
Сб Апр 12 20:23:51 MSD 2008
On Sat, Apr 12, 2008 at 07:40:05PM +0400, Grigory Fateyev wrote:
> Hello Andrey Rahmatullin!
> On Sat, 12 Apr 2008 21:11:24 +0600 you wrote:
>
> > On Sat, Apr 12, 2008 at 07:07:57PM +0400, Grigory Fateyev wrote:
> > > Откуда может взяться странный артифак в виде подсвеченного знака
> > > процента между строками? (см. screenshot)
> > man zshoptions, PROMPT_SP, PROMPT_CR
> >
> Спасибо за наводку, это помогло:
>
> setopt no_prompt_sp
>
> preexec()
> {
> setopt prompt_sp
> }
На самом деле эта комбинация настроек решает другую проблему - убирает
мусор, появляющийся, если начать набирать первую команду после
открытия нового терминала, не дожидаясь завершения запуска zsh и
выдачи промпта. Т.е., изначально опция prompt_sp отключается, и
набранные символы просто затираются первым промптом, а перед
выполнением первой команды опция prompt_sp включается (и далее
остаётся в таком состоянии), чтобы вывод команд, забывающих добавить
\n в конце, не пропадал.
То, что в данном случае такая настройка помогла, означает, что команда
setopt prompt_sp, добавленная в preexec(), так и не выполнилась -
очевидно, это определение было вставлено раньше уже имеющихся в .zshrc
команд:
case $TERM in
xterm*|rxvt*|aterm*)
precmd () {
print -Pn "\e]0;TERM %n@%m: %~\t$1\a"
}
preexec () {
print -Pn "\e]0;TERM <%n@%m> $1\a"
}
;;
esac
В результате новое определение preexec() перекрывает старое, и zsh
просто продолжает работать в режиме no_prompt_sp - в комбинации с
установленным по умолчанию prompt_cr это означает, что выдаваемые
запущенными командами строки, не имеющие в конце символа новой строки,
будут затираться промптом zsh.
Настоящая проблема находится в precmd() - команда print в этой функции
пытается вставить в заголовок окна терминала символ табуляции; при
использовании xterm это не вызывает проблем в самом терминале (хотя в
заголовок попадает "?"), а вот konsole, похоже, интерпретирует любые
управляющие символы в параметре "\e]0;" как признак конца строки, и
весь последующий вывод (включая сам символ табуляции) попадает в
терминал в виде обычного текста. Нужно заменить "\t", например, на
пробел (всё равно табуляция в заголовке окна в общем случае не будет
отображаться правильно).
А setopt prompt_sp, если это необходимо, придётся добавлять во все
варианты определений preexec(), имеющиеся в .zshrc.
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя : =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Тип : application/pgp-signature
Размер : 189 байтов
Описание: Digital signature
Url : <http://lists.altlinux.org/pipermail/community/attachments/20080412/72efdf13/attachment-0002.bin>
Подробная информация о списке рассылки community