ALT Linux Community general discussions
 help / color / mirror / Atom feed
From: Sergey Vlasov <vsu@altlinux.ru>
To: community@lists.altlinux.org
Subject: Re: [Comm] zsh и артифакт konsole
Date: Sat, 12 Apr 2008 20:23:51 +0400
Message-ID: <20080412162351.GB4710@atlas.home> (raw)
In-Reply-To: <20080412194005.586416d5@greg.dobroe.net>

[-- Attachment #1: Type: text/plain, Size: 2567 bytes --]

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.

[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 189 bytes --]

  parent reply	other threads:[~2008-04-12 16:23 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-04-12 15:11 ` Andrey Rahmatullin
2008-04-12 15:40   ` Grigory Fateyev
2008-04-12 15:46     ` Andrey Rahmatullin
2008-04-12 16:10       ` Grigory Fateyev
2008-04-12 16:23     ` Sergey Vlasov [this message]
2008-04-12 17:19       ` Grigory Fateyev

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20080412162351.GB4710@atlas.home \
    --to=vsu@altlinux.ru \
    --cc=community@lists.altlinux.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

ALT Linux Community general discussions

This inbox may be cloned and mirrored by anyone:

	git clone --mirror http://lore.altlinux.org/community/0 community/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 community community/ http://lore.altlinux.org/community \
		mandrake-russian@linuxteam.iplabs.ru community@lists.altlinux.org community@lists.altlinux.ru community@lists.altlinux.com
	public-inbox-index community

Example config snippet for mirrors.
Newsgroup available over NNTP:
	nntp://lore.altlinux.org/org.altlinux.lists.community


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git