ALT Linux Team development discussions
 help / color / mirror / Atom feed
From: Sergey Vlasov <vsu@altlinux.ru>
To: devel@lists.altlinux.org
Subject: Re: [devel] Xterm #21731 -- ^H или ^?
Date: Tue, 21 Sep 2010 18:19:29 +0400
Message-ID: <20100921141929.GC31473@newmaster.mivlgu.local> (raw)
In-Reply-To: <20100921084316.GA20379@imap.altlinux.org>

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

On Tue, Sep 21, 2010 at 12:43:16PM +0400, George V. Kouryachy wrote:
> Разгребая баги (да-да, меня не было в этой реальности quite a lot)
> наткнулся вот на такую, доставшуюся мне по наследству вместе с XTerm.
> 
> https://bugzilla.altlinux.org/show_bug.cgi?id=21731
> 
> Обсуждение можно не читать, суть такая, что в Linux xterm почему-то
> обязан при нажатии клавиши BackSpace возвращать не символ BackSpace
> (^H), а Delete (^?).
> 
> Это прописано в terminfo (см infocmp xterm): соответственно, экранные
> программы ожидают, что KBS будет ^?. Это устанавливается в терминальной
> линии (см. stty -a). Один только xterm не желает с этим считаться, и по
> умолчанию при нажатии на BaskSpace посылает BackSpace. Потому что так
> делается во всём цивилизованном мире :).
> 
> Способы лечения.
> 1. Нажимать вместо BaskSpace Ctrl+BaskSpace :)
> 2. stty erase=^H
> 3. Ctrl+левая кнопка мыши -> BackArrow key (BS/DEL)
> 4. Перебить системный ресурс backArrowKey, чтобы всегда был ^?
>    Потеряется совместимость с другими системами
> 5. Перебить системный ресурс backarrowKeyIsErase, чтобы при старте
>    XTerm-а backarrow принимала значение, равное stty-му erase.

На самом деле поведение ещё зависит от ресурса ptyInitialErase: если
там false (как стоит по умолчанию), xterm читает данные terminfo для
указанного типа терминала и выполняет stty erase в соответствии с
прочитанным значением; если же поставить ptyInitialErase: true, xterm
читает настройки псевдотерминала в момент запуска и (при включении ещё
и backarrowKeyIsErase) устанавливает в соответствии с прочитанным
значением поведение клавиши BackSpace.

В Debian по каким-то причинам ставят оба ресурса:

http://patch-tracker.debian.org/patch/series/view/xterm/261-1/900_debian_xterm.diff

+! Debian package customizations follow.
+*backarrowKeyIsErase: true
+*ptyInitialErase: true

Однако, на мой взгляд, более правильное поведение - установка только
backarrowKeyIsErase: true, и оставление ptyInitialErase: false
(значение по умолчанию).  В этом случае xterm выполняет stty erase ^H,
если такое значение указано в данных terminfo для выбранного типа
терминала; в результате, например, в xterm -tn xterm-color -e sh
клавиша BackSpace работает ожидаемым образом, как и при использовании
обычного типа терминала xterm, несмотря на разные значения kbs для
этих типов.  (При использовании zsh у меня где-то принудительно
выставляется stty erase ^? даже для xterm-color, в результате
BackSpace ломается, но со стандартным типом xterm всё работает
правильно.)

>    Потеряется совместимость с другими системами, появится момент
>    неопределённости

Непонятно, с какими системами в данном случае нужно поддерживать
совместимость.  Вроде бы большинство реализаций эмуляторов терминала в
настоящее время по умолчанию используют вариант BackSpace = ^?; а вот
многие коммутаторы при управлении через telnet/ssh хотят ^H.

> Лично я за последний вариант. Мало ли что. А если кому-то хочется, чтобы
> Erase был всё-таки ^H, используйте xterm -tn xterm-color, для него в
> terminfo kbs=^H. А stty делайте сами :).

Если не трогать ptyInitialErase, и нет особо умных программ, даже stty
делать не понадобится - т.е., xterm -tn xterm-color -e <prog> для
запуска программы, требующей kbs=^H, будет сразу работать правильно.

> У меня стоит в .zshrc: stty erase `echotc kb`
> 
> Если никто не против, я попатчу app-defaults/XTerm.

Поддерживаю (а в крайнем случае ~/.Xresources никто не отменял).

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

      parent reply	other threads:[~2010-09-21 14:19 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-09-21  8:43 George V. Kouryachy
2010-09-21  7:54 ` REAL
2010-09-21  8:02 ` REAL
2010-09-21 14:19 ` Sergey Vlasov [this message]

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=20100921141929.GC31473@newmaster.mivlgu.local \
    --to=vsu@altlinux.ru \
    --cc=devel@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 Team development discussions

This inbox may be cloned and mirrored by anyone:

	git clone --mirror http://lore.altlinux.org/devel/0 devel/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 devel devel/ http://lore.altlinux.org/devel \
		devel@altlinux.org devel@altlinux.ru devel@lists.altlinux.org devel@lists.altlinux.ru devel@linux.iplabs.ru mandrake-russian@linuxteam.iplabs.ru sisyphus@linuxteam.iplabs.ru
	public-inbox-index devel

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


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