в konsole из пакета kdebase-wm-3.5.5-alt5 не отрабатывают нажатия home/end, CTRL+S.
Неуж опять #2900?
на $ date Птн Апр 20 09:58:34 MSD 2007 С выполненным dist-upgrade, ошибка не воспроизводится нажатия клавиш home/end, CTRL+S отрабатываются нормально. $uname -m x86_64 rpmquery -f /usr/bin/konsole kdebase-wm-3.5.6-alt6
Это под новым пользователем ? метод воспроизведения - запустить less, попробовать понажимать home/end
Действительно: в less не обрабатываются коректно клавиши Home/End. В konsole в меню Настройка->Клавиатура выбран пункт "XTerm (XFree 4.x.x)" (по умолчанию). Решением установить по умолчанию другой выбор, например "Xterm (XFree 3.x.x)" или "Консоль Linux" не целесобразно так как: перестанет работать передача информации о модификаторах (например в ноутбуках есть модификаторы подобно NumLock). Из $ldd /usr/bin/less libtinfo.so.5 => /lib64/libtinfo.so.5 (0x00002b71e5578000) ... видно что less _НЕ_ использует библиотеку libreadline. Из чего следует что файлы /etc/inputrc и ~/.inputrc не оказывают никакого влияния на приложения типа less (которые самостоятельно напрямик работают с terminfo). strace показал что что в ответ на нажатие клавишы End konsole (XTerm (XFree 4.x.x)) посылает less ескейп-последовательность: ^[OF (\EOF). Нетрудно заметить что такая ескейп последовательность определена в: /usr/share/apps/konsole/README.default.Keytab ... key Home -AnyMod -AppCuKeys : "\E[H" key End -AnyMod -AppCuKeys : "\E[F" key Home -AnyMod +AppCuKeys : "\EOH" key End -AnyMod +AppCuKeys : "\EOF" key Home +AnyMod : "\E[1;*H" key End +AnyMod : "\E[1;*F" ... То есть со стороны konsole все впорядке. Less прочитав переменную $TERM сама пытается интерпретировать ескейп последовательность \EOH согласно с: $infocmp xterm оно же: /usr/share/terminfo/x/xterm и не находит действия которое нужно предпринять для ескейп-последовательности \EOH. Земетим, что в базе terminfo для $TERM==xterm определены: kend=\E[4~ khome=\E[1~ Тут-то и ошибка. Определения kend и khome для пакета terminfo опрделяются: $ pwd /home/stanv/RPM/ncurses/BUILD/ncurses-5.6 $ tar -tf ../../SOURCES/ncurses-alt.tar alt/ alt/rxvt.ti alt/screen.ti alt/xterm.ti Т.е. нужно обновить alt/xterm.ti в пакете terminfo (ncurses) до актуального состояния, или поправить kend/khome. Из слов vsu: 1. <vsu> выяснили, что в debian там \EOF в terminfo 2. <vsu> xterm.ti происходит из какой-то версии xterm Предлагаю перевесить багу на пакет terminfo.
(In reply to comment #4) > Решением установить по умолчанию другой выбор, например "Xterm (XFree 3.x.x)" > или "Консоль Linux" не целесобразно так как: перестанет работать передача > информации о модификаторах (например в ноутбуках есть модификаторы подобно > NumLock). На самом деле имелись в виду комбинации типа Ctrl+F5 и т.п. - в варианте "XTerm (XFree 4.x.x)" для таких комбинаций выдаются коды вида ^[[15;5~, где передаётся информация о нажатии Ctrl или Shift. > Земетим, что в базе terminfo для $TERM==xterm определены: > kend=\E[4~ > khome=\E[1~ > > Тут-то и ошибка. Более того, эти коды не соответствуют даже поведению xterm (без дополнительных настроек translations или keyboardType), и в нём Home/End в less точно так же не работает из коробки.
перевешивайте конечно.
Точнее - перевешиваю конечно.
Наверное стоит пофиксить kconsole. Нечего изображать из себя xterm, если ты xterm не являешься. Кстати в некоторых дистрибутивах я наблюдал, что для kconsole есть отдельная запись в terminfo.
(In reply to comment #5) > (In reply to comment #4) > > Решением установить по умолчанию другой выбор, например "Xterm (XFree 3.x.x)" > > или "Консоль Linux" не целесобразно так как: перестанет работать передача > > информации о модификаторах (например в ноутбуках есть модификаторы подобно > > NumLock). > > На самом деле имелись в виду комбинации типа Ctrl+F5 и т.п. - в варианте "XTerm > (XFree 4.x.x)" для таких комбинаций выдаются коды вида ^[[15;5~, где передаётся > информация о нажатии Ctrl или Shift. > > > Земетим, что в базе terminfo для $TERM==xterm определены: > > kend=\E[4~ > > khome=\E[1~ > > > > Тут-то и ошибка. > > Более того, эти коды не соответствуют даже поведению xterm (без дополнительных > настроек translations или keyboardType), и в нём Home/End в less точно так же не > работает из коробки. А почему у меня сейчас less работает? Система не очень давно установленная.
Видимо в xterm есть отдельный мешок хаков на эту тему ;)
Уточняю: у Ingera работают End/Home в less в xterm а не в konsole. Это потому что: $ strace less /usr/share/doc/lilo-22.7.3/README.raid1 2>log read(3, "\33", 1) = 1 write(1, "\33[35;1H\33[K \33[KESC\10\10\10ESC", 23) = 23 read(3, "[", 1) = 1 write(1, "\33[K[\10[", 6) = 6 read(3, "4", 1) = 1 write(1, "\33[K4\0104", 6) = 6 read(3, "~", 1) = 1 ЧИТАЕТ: \E[4~ у нас старый xterm....
xterm то у нас новый, но видимо он либо так собран, либо где-то так запатчен
Оказывается, в /etc/X11/Xresources у нас написано: ! Suppr support. *VT100.Translations: #override \ <Key>BackSpace: string(0x7F)\n\ <Key>Delete: string("\033[3~")\n\ <Key>Home: string("\033[1~")\n\ <Key>End: string("\033[4~") BackSpace вроде бы лучше настраивать через *VT100.backarrowKeyIsErase: true; Delete ведёт себя так по умолчанию; настройки Home и End таким образом портят их работу совместно с модификаторами (в частности, kEND=\E[1;2F, kHOM=\E[1;2H, описанные в terminfo, после этого уже не получить). В принципе можно объявить, что Home и End в xterm у нас обязаны выдавать \033[1~ и \033[4~ (как было по умолчанию в каких-то старых версиях xterm), только тогда лучше писать *VT100.Translations: #override \ ~Ctrl ~Shift ~Meta <Key>Home: string("\033[1~")\n\ ~Ctrl ~Shift ~Meta <Key>End: string("\033[4~") (чтобы при использовании модификаторов выдавались коды вида \033[1;2H). В этом случае нужно патчить все остальные эмуляторы терминалов, заявляющие по умолчанию тип xterm, и после xrdb /dev/null клавиши Home/End в настоящем xterm не будут работать правильно.
видимо всё-таки надо патчить terminfo и xterm чем все остальные терминалы
Патчить xterm как раз не надо - надо оторвать лишнее из app-defaults, после чего поведение xterm в области Home/End будет совпадать с konsole (при выбранном типе терминала "XTerm (XFree 4.x.x)"). Кстати, в bug #11067 всплыла информация о том, что новый xterm-225 может быть собран так, чтобы получать информацию о том, какие коды от него ожидаются, из базы terminfo (хотя установка translations всё равно это сломает). Неприятность только в том, что в таком режиме фактически отламывается переключение normal/application mode для таких клавиш.
Помимо xterm и konsole, TERM=xterm также выставляется в gnome-terminal; там libvte берёт коды клавиш из описания terminfo, поэтому проблема с несоответствием описания реальности отсутствует. Впрочем, Shift+Home и Shift+End там не передаются в терминал, прочие модификаторы игнорируются.
Стас, видимо всё-таки надо обновлять terminfo.
Посмотрю, поэкспериментирую. Вообще последняя ремарка про gnome-terminal в очередной раз подтверждает что kde - остой и самое лучшее решение - отдельный терминал. Или мы так и будем всё время с ним мучаться?
кажется это было исправлено
(In reply to comment #19) > кажется это было исправлено Проверил работу клавиш Home/End -- у меня работает (проверял проматывая man в aterm/xterm в bash/zsh). Единственно, что у меня less последний и не из Сизифа: [c0der@rock ~]$ rpm -q xterm aterm less terminfo xterm-229-alt2 aterm-1.0.0-alt4 less-409-alt0 terminfo-5.6-alt4 bash-3.1.17-alt2 zsh-4.3.4-alt3 Локаль CP1251, если это важно.