* Re: [devel] Xterm #21731 -- ^H или ^?
2010-09-21 8:43 [devel] Xterm #21731 -- ^H или ^? George V. Kouryachy
@ 2010-09-21 7:54 ` REAL
2010-09-21 8:02 ` REAL
2010-09-21 14:19 ` Sergey Vlasov
2 siblings, 0 replies; 4+ messages in thread
From: REAL @ 2010-09-21 7:54 UTC (permalink / raw)
To: ALT Linux Team development discussions
George V. Kouryachy пишет:
> Обсуждение можно не читать, суть такая, что в Linux xterm почему-то
> обязан при нажатии клавиши BackSpace возвращать не символ BackSpace
> (^H), а Delete (^?).
>
> Это прописано в terminfo (см infocmp xterm): соответственно, экранные
> программы ожидают, что KBS будет ^?. Это устанавливается в терминальной
> линии (см. stty -a). Один только xterm не желает с этим считаться, и по
> умолчанию при нажатии на BaskSpace посылает BackSpace. Потому что так
> делается во всём цивилизованном мире :).
А мне нравится, что нажатие на BackSpace воспринимается как нажатие на
BackSpace. Может быть, не надо это менять? ;)
--
REAL aka Евгений Ростовцев, программист ЦНИТ КемГУ
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [devel] Xterm #21731 -- ^H или ^?
2010-09-21 8:43 [devel] Xterm #21731 -- ^H или ^? George V. Kouryachy
2010-09-21 7:54 ` REAL
2010-09-21 8:02 ` REAL
@ 2010-09-21 14:19 ` Sergey Vlasov
2 siblings, 0 replies; 4+ messages in thread
From: Sergey Vlasov @ 2010-09-21 14:19 UTC (permalink / raw)
To: devel
[-- 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 --]
^ permalink raw reply [flat|nested] 4+ messages in thread