Bug 15628

Summary: /etc/inputrc: Ctrl-arrows in xterm don't work
Product: Sisyphus Reporter: Ivan Zakharyaschev <imz>
Component: setupAssignee: Alexey Gladkov <legion>
Status: CLOSED FIXED QA Contact: qa-sisyphus
Severity: normal    
Priority: P2 CC: glebfm, ldv, legion, php-coder, placeholder, wrar
Version: unstable   
Hardware: all   
OS: Linux   
Bug Depends on:    
Bug Blocks: 22021, 18383    

Description Ivan Zakharyaschev 2008-05-12 22:08:47 MSD
xterm-235-alt1

I expect (in bash) Ctrl-Left/Right to jump over words, Alt-Backspace to delete
the word to the left. aterm does this, xterm doesn't.
Steps to Reproduce:
1.start xterm
2.type "aaaa bbbb cccc"
3. Press Ctrl-Left
4. Press Alt-BkSp
Actual Results:  
3. aaaa bbbb cccc5D (and a beep)
4. aaaa bbbb cccc5

Expected Results:  
As in aterm-1.0.1-alt2:
3. (the cursor moved one word left)
4. aaaa cccc
Comment 1 Ivan Zakharyaschev 2008-05-13 00:16:01 MSD
One part of this bug is also valid for gnome-terminal --
https://bugzilla.altlinux.org/show_bug.cgi?id=15629 .
Comment 2 Ivan Zakharyaschev 2008-05-13 00:23:16 MSD
One part of this bug (Ctrl-arrows) is also valid for konsole from KDE3 --
https://bugzilla.altlinux.org/show_bug.cgi?id=15630 .
Comment 3 Slava Semushin 2008-05-13 09:43:35 MSD
Ctrl-Left/Right у меня не работает, как и у вас. А вот Alt-Backspace удаляет
слово. Проверил на xterm 234-alt2/235-alt1

Полагаю, что тут ещё termcap/terminfo как-то замешены (у меня terminfo-5.6-alt3).

Comment 4 Andrey Rahmatullin 2008-05-13 10:10:04 MSD
Прежде чем вешать пицот одинаковых багов на пицот терминалов, неплохо бы 1) 
разобраться, какие терминальные последовательность генерят обсуждаемые 
комбинации клавиш; 2) о каких вообще программах речь; 3) как эти программы 
настроены реагировать на заданные последовательности.
В любом случае это скорее баг этих программ.
Comment 5 Andrey Rahmatullin 2008-05-13 10:23:35 MSD
Так вот, в данном случае все упомянутые терминалы генерят \e[1;5D и \e[1;5C, а 
aterm - \eOd и \eOc (что упомянуто в /etc/inputrc как "on some exotic xterms").
Впишите в /etc/inputrc
"\e[1;5D": backward-word
"\e[1;5C": forward-word
и будет вам щастье.
Перевешиваю на setup, дубликаты сами закрывайте, раз вам это так нравится.
Comment 6 Slava Semushin 2008-05-13 10:27:43 MSD
Reassign to real maintainer.
Comment 7 Ivan Zakharyaschev 2008-05-13 21:30:01 MSD
(In reply to comment #3)
> Ctrl-Left/Right у меня не работает, как и у вас. А вот Alt-Backspace удаляет
> слово. Проверил на xterm 234-alt2/235-alt1

Да, спасибо, проблема с Alt-Backspace где-то у меня, буду искать. (При этом во
всех других терминалах её нет.)

> Полагаю, что тут ещё termcap/terminfo как-то замешены (у меня terminfo-5.6-alt3).

Поставил terminfo-5.6-alt4, пока так же.
Comment 8 Ivan Zakharyaschev 2008-05-13 21:53:17 MSD
(In reply to comment #5)
> Так вот, в данном случае все упомянутые терминалы генерят \e[1;5D и \e[1;5C, а 
> aterm - \eOd и \eOc (что упомянуто в /etc/inputrc как "on some exotic xterms").

Спасибо за объяснение! Экзотические -- это: aterm-1.0.1-alt2, Eterm-0.9.3-alt2,
rxvt-unicode-9.02-alt1.
Comment 9 Ivan Zakharyaschev 2008-05-13 21:54:42 MSD
*** Bug 15632 has been marked as a duplicate of this bug. ***
Comment 10 Ivan Zakharyaschev 2008-05-13 21:54:54 MSD
*** Bug 15630 has been marked as a duplicate of this bug. ***
Comment 11 Ivan Zakharyaschev 2008-05-13 21:55:01 MSD
*** Bug 15629 has been marked as a duplicate of this bug. ***
Comment 12 Andrey Rahmatullin 2008-05-13 22:11:07 MSD
генерация разными терминалами разных кодов - не проблема readline, привет
Comment 13 Ivan Zakharyaschev 2008-05-14 00:35:27 MSD
(In reply to comment #12)
> генерация разными терминалами разных кодов - не проблема readline, привет

Если оно хочет на них одинаково реагировать, то это проблема для readline (нужно
учесть и те коды, и другие).
Comment 14 Ivan Zakharyaschev 2008-05-14 00:39:21 MSD
(In reply to comment #7)
> > Ctrl-Left/Right у меня не работает, как и у вас. А вот Alt-Backspace удаляет
> > слово. Проверил на xterm 234-alt2/235-alt1
> 
> Да, спасибо, проблема с Alt-Backspace где-то у меня, буду искать. (При этом во
> всех других терминалах её нет.)

Да, это было исправлено в app-defaults-0.2.8.4-alt1 (*VT100.Translations).
Извините за беспокойство!
Comment 15 Sergey Vlasov 2008-12-28 23:17:29 MSK
А вот в vim ситуация обратная - последовательности, выдаваемые xterm, обрабатываются правильно, а то, что выдаёт urxvt, не распознаётся.

На самом деле \e[1;5D - это частный случай общей обработки модификаторов, используемой в xterm:

In normal mode, i.e., a Sun/PC keyboard when the sunKeyboard resource is
false, xterm recognizes function key modifiers which are parameters
appended before the final character of the control sequence.

                      Code     Modifiers
                    ---------------------------------
                       2       Shift
                       3       Alt
                       4       Shift + Alt
                       5       Control
                       6       Shift + Control
                       7       Alt + Control
                       8       Shift + Alt + Control
                    ---------------------------------

For example, shift-F5 would be sent as CSI 1 5 ; 2 ~
If the alwaysUseMods resource is set, the Meta modifier also is recog-
nized, making parameters 9 through 16.

(на самом деле просто к значению битовой маски модификаторов добавлена единица, поскольку отсутствующий параметр после CSI считается по умолчанию равным 1, а не 0).

В /etc/inputrc от opensuse-11.0 (в пакете aaa_base) есть довольно много вариантов этих кодов, часть внутри $if term=xterm, $if term=rxvt-unicode или прочих вариантов; видимо, наш /etc/inputrc изрядно протух.
Comment 16 Dmitry V. Levin 2010-05-26 20:48:57 MSD
(In reply to comment #15)
> В /etc/inputrc от opensuse-11.0 (в пакете aaa_base) есть довольно много
> вариантов этих кодов, часть внутри $if term=xterm, $if term=rxvt-unicode или
> прочих вариантов; видимо, наш /etc/inputrc изрядно протух.

Там присвоено одно и то же действие для всех модификаторов и их сочетаний, например:
"\e[2C":	forward-word
"\e[1;2C":	forward-word
"\e[1;3C":	forward-word
"\e[1;4C":	forward-word
"\e[5C":	forward-word
"\e[1;5C":	forward-word
"\e[1;6C":	forward-word
"\e[1;7C":	forward-word
"\e[1;8C":	forward-word

Имеет ли смысл нам поступить так же?
Comment 17 Repository Robot 2010-05-29 02:25:00 MSD
setup-2.2.13-alt1 -> sisyphus:

* Thu May 27 2010 Dmitry V. Levin <ldv@altlinux> 2.2.13-alt1
- /etc/profile.d/lang.*sh: do not source i18n files if
  non-empty LANG is already set (closes: #11814).
- /etc/services: updated SANE entries (closes: #13071).
- /etc/inputrc: added bindings for xterm ctrl-arrows (closes: #15628).
- /etc/profile.d/tmpdir.*sh: do not create ~/tmp directory (closes: #19014).
- /etc/filesystems: replaced obsolete content with a comment hinting
  on the purpose of this file (closes: #21082).
- /etc/inputrc: added bindings for history search (closes: #22570).
- /etc/securetty: added xvc0 for xen virtual console (closes: #23532).