Не все Control-комбинации в xterm работают традиционным образом, например, Ctrl- и Delete. Steps to Reproduce: 1.В окне xterm вызываем cat | less 2.Нажимаем Ctrl/- Enter 3. Actual Results: Пустая строка Expected Results: ^_
Created attachment 2281 [details] patch to /etc/X11/app-defaults/XTerm Добавляет некоторые недостающие keybindings для xterm
(In reply to comment #0) > Не все Control-комбинации в xterm работают традиционным образом, например, Ctrl- > и Delete. Кроме того, предлагаемый патч решает еще одну проблему: желательно, чтобы комбинация клавиш Alt+буква генерировала последовательность "ESC буква". Это возможность очень активно используется, например, в mc.
Please have a look.
(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.
Created attachment 2391 [details] Keyboard test Программа принимает клавиатурный ввод и показывает что было введено в нескольких форматах.
(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 Но вряд ли это имеет значение.
(In reply to comment #6) > Ладно, пойдем последовательно по патчу. В разборках поможет выложенная выше > программка getchar. Прежде чем патчить xterm, проверьте, пожалуйста, не переопределены ли какие-нибудь последовательности ресурсами пакета app-defaults. > Внесение предложенного изменения также приведет к необходимости внесения > изменений в базу terminfo, но как для меня - это единственно приемлемое решение. Я думаю, что такие изменения в базе terminfo нежелательны, поскольку снизят обратную совместимость. Нужно всё тщательно взвесить, прежде чем менять /lib/terminfo/x/xterm.
(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
(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 транслируется, так что требование совместимости не очень жёсткое.
(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 транслируется, так что требование совместимости не очень > жёсткое. > Каков механизм трансляции ? Что-то я ничего об этом не слышал.
(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 с клиента на сервер.
(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 года ломать устоявшийся стандарт ??? Две кнопки не понравились ?
(In reply to comment #6) > > Эта проблема уже решена (начиная с версии 228-alt2). См. bug #595 и > > xterm-alt-metaSendsEscape.patch > > В Сизифе. А бранч что - засохла ветка ? Нет. Просто не было необходимости/запроса я и не перекладывал. Плюс автор xterm в последнее время иной раз допускает ошибки, хотя и быстро их исправляет, но все же я не стал в бранч ложить что-то, в чем я не уверен, без необходимости. 2ldv@, yuk@: так что вешать баг на перенос свежего xterm в бранч или нет? > > P.S. Вы не указали версию xterm. > xterm-224-alt2.1 > Но вряд ли это имеет значение. Во втором случае, как видим, имеет значение.
(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
(In reply to comment #13) > 2ldv@, yuk@: так что вешать баг на перенос свежего xterm в бранч или нет? Погодите, соберу и погляжу. Уже не сегодня.
(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 можно переносить в бранч.
(In reply to comment #16) > 2php-coder@: xterm-231-alt1 можно переносить в бранч. https://bugzilla.altlinux.org/show_bug.cgi?id=14188