Bug 13462 - wrong keybinding
Summary: wrong keybinding
Status: CLOSED NOTABUG
Alias: None
Product: Branch 4.0
Classification: Distributions
Component: xterm (show other bugs)
Version: 4.0
Hardware: all Linux
: P2 normal
Assignee: Dmitry V. Levin
QA Contact: Q.A. 4.0
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2007-11-18 11:40 MSK by Yura Kalinichenko
Modified: 2008-01-28 10:42 MSK (History)
4 users (show)

See Also:


Attachments
patch to /etc/X11/app-defaults/XTerm (571 bytes, patch)
2007-11-18 11:44 MSK, Yura Kalinichenko
no flags Details | Diff
Keyboard test (4.05 KB, application/x-gzip)
2008-01-23 22:37 MSK, Yura Kalinichenko
no flags Details

Note You need to log in before you can comment on or make changes to this bug.
Description Yura Kalinichenko 2007-11-18 11:40:02 MSK
Не все Control-комбинации в xterm работают традиционным образом, например, Ctrl-
и  Delete.
Steps to Reproduce:
1.В окне xterm вызываем cat | less
2.Нажимаем Ctrl/- Enter
3.
Actual Results:  
Пустая строка

Expected Results:  
^_
Comment 1 Yura Kalinichenko 2007-11-18 11:44:42 MSK
Created attachment 2281 [details]
patch to /etc/X11/app-defaults/XTerm

Добавляет некоторые недостающие keybindings для xterm
Comment 2 Yura Kalinichenko 2007-11-19 14:17:36 MSK
(In reply to comment #0)
> Не все Control-комбинации в xterm работают традиционным образом, например, Ctrl-
> и  Delete.
Кроме того, предлагаемый патч решает еще одну проблему: желательно, чтобы
комбинация клавиш Alt+буква генерировала последовательность "ESC буква". Это
возможность очень активно используется, например, в mc.
Comment 3 Dmitry V. Levin 2008-01-21 23:49:56 MSK
Please have a look.
Comment 4 Slava Semushin 2008-01-22 11:51:13 MSK
(In reply to comment #2)
> (In reply to comment #0)
> > Не все Control-комбинации в xterm работают традиционным образом, например, Ctrl-
> > и  Delete.

Можно привести примеры для воспроизведения ситуации? К примеру, у меня сейчас
(на Сизифе) клавиша Delete работает как и ожидается -- удаляет последующий
символ. Про Ctr- не понял -- что оно должно делать?

> Кроме того, предлагаемый патч решает еще одну проблему: желательно, чтобы
> комбинация клавиш Alt+буква генерировала последовательность "ESC буква". Это
> возможность очень активно используется, например, в mc.

Эта проблема уже решена (начиная с версии 228-alt2). См. bug #595 и
xterm-alt-metaSendsEscape.patch

P.S. Вы не указали версию xterm.
Comment 5 Yura Kalinichenko 2008-01-23 22:37:12 MSK
Created attachment 2391 [details]
Keyboard test

Программа принимает клавиатурный ввод и показывает что было введено в
нескольких форматах.
Comment 6 Yura Kalinichenko 2008-01-23 23:38:59 MSK
(In reply to comment #4)
> (In reply to comment #2)
> > (In reply to comment #0)
> > > Не все Control-комбинации в xterm работают традиционным образом, например,
Ctrl-
> > > и  Delete.
> 
> Можно привести примеры для воспроизведения ситуации? К примеру, у меня сейчас
> (на Сизифе) клавиша Delete работает как и ожидается -- удаляет последующий
> символ. Про Ctr- не понял -- что оно должно делать?

Ладно, пойдем последовательно по патчу. В разборках поможет выложенная выше
программка getchar.

+!Make Delete key work on my XFree terminal
+*VT100.Translations:   #override \
+       Ctrl<Key>minus: string("\037") \n\
  Комбинация клавиш Ctrl и "минус" испокон веков на всех ANSI-терминалах
генерирует управляющий код 037 (Ctrl_). Это такая же аксиома, как и то, что, к
примеру, Ctrl  и "C" генерирует управляющий код 003. Почему в текущей сборке
xterm эта комбинация генерирует символ "-" ?

+       <Key>BackSpace: string("\177") \n\
  Ну это вечная болезнь использовавшихся в Unix терминалов. На некоторых клавиша
BackSpace генерит код 010, на некоторых - 0177. Чтобы не зависеть от сборки - я
стараюсь приводить все рабочие терминалы ко второму варианту.

+       Shift<Key>Delete:       string("\177") \n\
+       Ctrl<Key>Delete:        string("\010") \n\
  Ммм... Не помню уже из каких соображений я это написал. Возможно ошибся, и
здесь следует вместо Delete использовать BackSpace. В общем, не настаиваю.

+       <Key>Home:      string("\033[1~") \n\
+       <Key>End:       string("\033[4~") \n\
  А вот это крайне неприятно. В бранчевом xterm клавиши Home и End генерят
\033[H и \033[F соответственно, что 
1) отличается от поведения этих клавиш в большинстве терминалов, включая xterm
из ALT Master 2.4
2) абсолютно нелогично, если посмотреть, что генерят остальные клавиши этого блока.
В результате теперь, зайдя из xterm под ALT Linux 4 на удаленный сервер под
управлением ALT Linux 2.4 - получаем неработающие Home и End. Несколько странно
получать такие результаты на системах одной марки.
Внесение предложенного изменения также приведет к необходимости внесения
изменений в базу terminfo, но как для меня - это единственно приемлемое решение.

> 
> > Кроме того, предлагаемый патч решает еще одну проблему: желательно, чтобы
> > комбинация клавиш Alt+буква генерировала последовательность "ESC буква". Это
> > возможность очень активно используется, например, в mc.
> 
> Эта проблема уже решена (начиная с версии 228-alt2). См. bug #595 и
> xterm-alt-metaSendsEscape.patch

В Сизифе. А бранч что - засохла ветка ?

> 
> P.S. Вы не указали версию xterm.

xterm-224-alt2.1

Но вряд ли это имеет значение.

Comment 7 Dmitry V. Levin 2008-01-23 23:50:01 MSK
(In reply to comment #6)
> Ладно, пойдем последовательно по патчу. В разборках поможет выложенная выше
> программка getchar.

Прежде чем патчить xterm, проверьте, пожалуйста, не переопределены ли
какие-нибудь последовательности ресурсами пакета app-defaults.

> Внесение предложенного изменения также приведет к необходимости внесения
> изменений в базу terminfo, но как для меня - это единственно приемлемое решение.

Я думаю, что такие изменения в базе terminfo нежелательны, поскольку снизят
обратную совместимость.  Нужно всё тщательно взвесить, прежде чем менять
/lib/terminfo/x/xterm.
Comment 8 Yura Kalinichenko 2008-01-24 00:14:16 MSK
(In reply to comment #7)
> (In reply to comment #6)
> Прежде чем патчить xterm, проверьте, пожалуйста, не переопределены ли
> какие-нибудь последовательности ресурсами пакета app-defaults.

Расширенный ответ:

[yuk@yuk ~]$ rpm -ql app-defaults | grep -i xterm
[yuk@yuk ~]$ grep -i "xterm" `rpm -ql app-defaults`
/etc/X11/Xresources:! xterm (and friends)
/etc/X11/Xresources:! If "true", xterm highlights only the positions that
contain text that
/etc/X11/Xresources:! Second part of hack for kbs vs. Emacs: xterm will use
escape sequence from terminfo database
/etc/X11/Xresources.be_BY.CP1251:! xterm (and friends)
/etc/X11/Xresources.be_BY.CP1251:XTerm*VT100*font:
-misc-fixed-medium-r-normal--15-*-*-*-*-*-microsoft-cp1251
/etc/X11/Xresources.ru_RU.CP1251:! xterm (and friends)
/etc/X11/Xresources.ru_RU.CP1251:XTerm*VT100*font:
-misc-fixed-medium-r-normal--15-*-*-*-*-*-microsoft-cp1251
/etc/X11/Xresources.ru_RU.KOI8-R:! xterm (and friends)
/etc/X11/Xresources.ru_RU.KOI8-R:XTerm*VT100*font:
-misc-fixed-medium-r-normal--15-*-*-*-*-*-koi8-r
/etc/X11/Xresources.uk_UA.CP1251:! xterm (and friends)
/etc/X11/Xresources.uk_UA.CP1251:XTerm*VT100*font:
-misc-fixed-medium-r-normal--15-*-*-*-*-*-microsoft-cp1251
/etc/X11/Xresources.uk_UA.KOI8-U:! xterm (and friends)
/etc/X11/Xresources.uk_UA.KOI8-U:XTerm*VT100*font:
-misc-fixed-medium-r-normal--15-*-*-*-*-*-koi8-u

Короткий ответ: НЕТ

> 
> > Внесение предложенного изменения также приведет к необходимости внесения
> > изменений в базу terminfo, но как для меня - это единственно приемлемое решение.
> 
> Я думаю, что такие изменения в базе terminfo нежелательны, поскольку снизят
> обратную совместимость.

Извините, обратную совместимость - с чем? Ведь именно текущая сборка (я об этом
писал выше) ломает обратную совместимость с ALT Master 2.4


Comment 9 Dmitry V. Levin 2008-01-24 00:29:47 MSK
(In reply to comment #8)
> (In reply to comment #7)
> > (In reply to comment #6)
> > Прежде чем патчить xterm, проверьте, пожалуйста, не переопределены ли
> > какие-нибудь последовательности ресурсами пакета app-defaults.
> 
> Расширенный ответ:
> 
> [yuk@yuk ~]$ rpm -ql app-defaults | grep -i xterm
> [yuk@yuk ~]$ grep -i "xterm" `rpm -ql app-defaults`

Ещё имеет смысл проверять vt100.

> Короткий ответ: НЕТ

Незадолго до релиза 4.0/Server в app_defaults было изменение на эту тему:
* Fri May 11 2007 Stanislav Ievlev <inger@altlinux> 0.2.8.4-alt1
- Second part of hack for kbs vs. Emacs: 
  xterm will use escape sequence from terminfo database
  remove previous VT100 translations

> > > Внесение предложенного изменения также приведет к необходимости внесения
> > > изменений в базу terminfo, но как для меня - это единственно приемлемое
решение.
> > 
> > Я думаю, что такие изменения в базе terminfo нежелательны, поскольку снизят
> > обратную совместимость.
> 
> Извините, обратную совместимость - с чем?

Желательно, чтобы старый xterm корректно работал с новым terminfo на удалённом
сервере, и наоборот, чтобы новый xterm корректно работал со старым terminfo на
другом удалённом сервере.  Хотя для xterm есть несколько записей в terminfo и
переменная $TERM транслируется, так что требование совместимости не очень жёсткое.
Comment 10 Yura Kalinichenko 2008-01-24 01:19:36 MSK
(In reply to comment #9)
> (In reply to comment #8)
> > (In reply to comment #7)
> > > (In reply to comment #6)
> > > Прежде чем патчить xterm, проверьте, пожалуйста, не переопределены ли
> > > какие-нибудь последовательности ресурсами пакета app-defaults.
> > 
> > Расширенный ответ:
> > 
> > [yuk@yuk ~]$ rpm -ql app-defaults | grep -i xterm
> > [yuk@yuk ~]$ grep -i "xterm" `rpm -ql app-defaults`
> 
> Ещё имеет смысл проверять vt100.

По клавишам тоже ничего нет.

> 
> > Короткий ответ: НЕТ
> 
> Незадолго до релиза 4.0/Server в app_defaults было изменение на эту тему:
> * Fri May 11 2007 Stanislav Ievlev <inger@altlinux> 0.2.8.4-alt1
> - Second part of hack for kbs vs. Emacs: 
>   xterm will use escape sequence from terminfo database
>   remove previous VT100 translations

К сожалению, не вижу в чем состоит это изменение: архива нет под рукой.

> 
> > > > Внесение предложенного изменения также приведет к необходимости внесения
> > > > изменений в базу terminfo, но как для меня - это единственно приемлемое
> решение.
> > > 
> > > Я думаю, что такие изменения в базе terminfo нежелательны, поскольку снизят
> > > обратную совместимость.
> > 
> > Извините, обратную совместимость - с чем?
> 
> Желательно, чтобы старый xterm корректно работал с новым terminfo на удалённом
> сервере, и наоборот, чтобы новый xterm корректно работал со старым terminfo на
> другом удалённом сервере.  

Дык и я об этом же. К сожалению, сложилась ситуация, что совместимость по-любому
поломана: либо с Master 2.4, если оставить текущую раскладку; либо с Server 4.0
и возможно Compact 3 (последнего нет под рукой, проверить не могу), если внести
предложенное изменение по поводу Home/End. Как решить эту задачу чтобы всем было
хорошо - не представляю, раньше надо было думать. Для меня лично важнее
совместимость с 2.4 - поэтому на своих машинах буду приводить к тому стандарту,
независимо от генеральной линии партии.

>Хотя для xterm есть несколько записей в terminfo и
> переменная $TERM транслируется, так что требование совместимости не очень 
> жёсткое.
> 
Каков механизм трансляции ? Что-то я ничего об этом не слышал. 
Comment 11 Dmitry V. Levin 2008-01-24 01:31:06 MSK
(In reply to comment #10)
> (In reply to comment #9)
> > (In reply to comment #8)
> > > (In reply to comment #7)
> > > > (In reply to comment #6)
> > > > Прежде чем патчить xterm, проверьте, пожалуйста, не переопределены ли
> > > > какие-нибудь последовательности ресурсами пакета app-defaults.
> > > 
> > > Расширенный ответ:
> > > 
> > > [yuk@yuk ~]$ rpm -ql app-defaults | grep -i xterm
> > > [yuk@yuk ~]$ grep -i "xterm" `rpm -ql app-defaults`
> > 
> > Ещё имеет смысл проверять vt100.
> 
> По клавишам тоже ничего нет.

Раньше было...

> >Хотя для xterm есть несколько записей в terminfo и
> > переменная $TERM транслируется, так что требование совместимости не очень 
> > жёсткое.
> > 
> Каков механизм трансляции ? Что-то я ничего об этом не слышал. 

ssh форвардит $TERM с клиента на сервер.
Comment 12 Yura Kalinichenko 2008-01-24 10:48:17 MSK
(In reply to comment #11)

> > >Хотя для xterm есть несколько записей в terminfo и
> > > переменная $TERM транслируется, так что требование совместимости не очень 
> > > жёсткое.
> > > 
> > Каков механизм трансляции ? Что-то я ничего об этом не слышал. 
> 
> ssh форвардит $TERM с клиента на сервер.
> 
Это-то понятно. Я вас неправильно понял - подумал, что под словом "трансляция"
подразумевается "преобразование значения в зависимости от каких-то условий". 
К примеру, зарегистрировались на Desktop 4, получили TERM=xterm. Пошли оттуда на
Master 2.4 - и там "на лету" это значение преобразовалось, скажем, в xterm4.
Хотя решение это (если бы оно было) - плохое в принципе, ибо подразумевает
адаптацию бардака вместо внедрения порядка, т.е. стандарта.

А так как есть - раскладка клавиатуры и описание terminfo должны быть идентичны
на всех системах для одного и того же типа терминала. У моих заказчиков, для
которых я выполнял адаптацию ОС, так оно и было, по крайней мере что касается
xterm. Это сотни машин по всей Украине, работают под двумя дистрибутами - KSI
Linux и ALT Master 2.4. Соответственно 1998 и 2004 годов выпуска. Спрашивается:
зачем было в дистрибутиве 2007 года ломать устоявшийся стандарт ??? Две кнопки
не понравились ?
Comment 13 Slava Semushin 2008-01-24 13:44:58 MSK
(In reply to comment #6)
> > Эта проблема уже решена (начиная с версии 228-alt2). См. bug #595 и
> > xterm-alt-metaSendsEscape.patch
> 
> В Сизифе. А бранч что - засохла ветка ?

Нет. Просто не было необходимости/запроса я и не перекладывал. Плюс автор xterm
в последнее время иной раз допускает ошибки, хотя и быстро их исправляет, но все
же я не стал в бранч ложить что-то, в чем я не уверен, без необходимости.

2ldv@, yuk@: так что вешать баг на перенос свежего xterm в бранч или нет?

> > P.S. Вы не указали версию xterm.
> xterm-224-alt2.1 
> Но вряд ли это имеет значение.

Во втором случае, как видим, имеет значение.
Comment 14 Slava Semushin 2008-01-24 13:46:09 MSK
(In reply to comment #10)
> > Незадолго до релиза 4.0/Server в app_defaults было изменение на эту тему:
> > * Fri May 11 2007 Stanislav Ievlev <inger@altlinux> 0.2.8.4-alt1
> > - Second part of hack for kbs vs. Emacs: 
> >   xterm will use escape sequence from terminfo database
> >   remove previous VT100 translations
> К сожалению, не вижу в чем состоит это изменение: архива нет под рукой.

А архив и не нужен, ведь есть удобный веб-интерфейс к git:
http://git.altlinux.org/people/inger/packages/app-defaults.git?p=app-defaults.git;a=commit;h=d62e78792ca9cdfb1c47a4e6783a067abbc5fc02
Comment 15 Yura Kalinichenko 2008-01-25 01:30:46 MSK
(In reply to comment #13)

> 2ldv@, yuk@: так что вешать баг на перенос свежего xterm в бранч или нет?
Погодите, соберу и погляжу. Уже не сегодня.
Comment 16 Yura Kalinichenko 2008-01-27 00:04:14 MSK
(In reply to comment #15)
Итак, собрал и установил у себя в бранче xterm-231-alt1. Для сравнения также
достал *.src.rpm пакетов xterm и ncurses из Master 2.4. Вскрытие показало следующее:

1) поведение функциональной клавиатуры xterm "из коробки" Master 2.4 идентично
поведению xterm из бранча до исправления bug #595
2) поведение Ctrl-комбинаций в обоих версиях идентично, хотя и отличается от
общепринятого для ANSI-терминалов. Например, можете сравнить с консолью, которая
ведет себя более правильно и логично (ну не имеет право алфавитно-цифровая
клавиша генерить печатаемый символ при нажатой Ctrl - это я как старый
разработчик железных терминалов говорю):

Клав.комбинация  Консоль  xterm
   Ctrl/1         НЕТ     '1'
   Ctrl/9         НЕТ     '9'
   Ctrl/0         0x7F    '0'
   Ctrl/_         0x1F    '-'
   Ctrl/Enter     0x0A    0x0D

Но поскольку эта бага очень старая - очевидно придется перевести ее в разряд
особенностей дабы не вносить разнобой. Сильно мешать она мало кому может
(поскольку мало кто сегодня интенсивно использует терминальные приложения). А
кому мешает - думаю, в состоянии легко ее пофиксить вручную.

3) terminfo-описание терминала xterm "из коробки" Master 2.4 по клавиатуре не
соответствует реальному поведению этого xterm (клавиши khome/kend). 

Т.е. "из коробки" в Master 2.4 xterm не мог правильно работать с
ncurses-приложениями. А я еще тогда побыстрому привел поведение терминала к
имеющемуся описанию terminfo путем редактирования app-defaults/XTerm из скрипта,
который накатывал после инсталляции, да и за давностью лет забыл об этом, считая
такое поведение "из-коробочным".

Резюме: с формальной точки зрения баги #13462 нет и не было (так же, как и #595). 

Мне с таким терминалом работать некомфортно, но это уже получается мои личные
проблемы, так что решать я их буду в частном порядке. Sorry за беспокойство,
тему можно закрыть

2php-coder@: xterm-231-alt1 можно переносить в бранч.
Comment 17 Slava Semushin 2008-01-28 10:42:52 MSK
(In reply to comment #16)
> 2php-coder@: xterm-231-alt1 можно переносить в бранч.

https://bugzilla.altlinux.org/show_bug.cgi?id=14188