Minden terminál egyenlő, de az xterm még egyenlőbb

Mondjuk van egy konsole, ami azt állítja magáról, hogy TERM=xterm. Futtatjuk benne a 'vi'-t, Ctrl+Bal/Jobb billentyűk működnek (lehet, hogy a Shift+Nyíl is működne, ha a konsole nem nyúlná le).

Most futtassuk a 'TERM=konsole vi'-t, és vegyük örömmel észre, hogy Ctrl+Bal/Jobb billentyűk nem működik.

Akkor nézzük meg például a ncurses demo_keyok című programját.


TERM=xterm:
Keycode 561 01061, name kUP5
Keycode 520 01010, name kDN5
Keycode 555 01053, name kRIT5
Keycode 540 01034, name kLFT5
TERM=konsole:
Keycode 530 01022, name kUP5
Keycode 514 01002, name kDN5
Keycode 524 01014, name kRIT5
Keycode 519 01007, name kLFT5

Azt vélem látni, hogy a szöveg azonos, de a szám különbözik... ebből vajon következik valami?

20150313.1808: a wgetch a ncurses/base/lib_getch.c-ben lakik, de az érdemi munkát a _nc_wgetch végzi (ugyanabban a fájlban van). Folyt köv.

20150316.1135: Na jó, a DECKNM az csak +1 lehetőség az Application/Numeric átkapcsolásra

20150316.1407: TERM=xterm esetén az 556-os bűvös számból indul ki, ehhez adja hozzá a módosítót. A módosító a következő:
1+(1 if Shift)+(2 if Alt)+(4 if Ctrl), tehát 1 és 8 között lehet elméletileg

Hozzászólások

Ezt most találtam, nem értem és nem tudom van-e köze hozzá, de kicsit ijesztő: http://invisible-island.net/xterm/xterm.faq.html#bug_gnometerm
Egy bizonyos ESC[>c szekvenciát kellene emulálni?
http://vt100.net/docs/vt220-rm/chapter4.html#S4.17.1

Még továbbá:
a vt220 leírása szerint


ESC =   DECKPAM  Selects application keypad mode.
ESC >   DECKPNM  Selects numeric keypad mode.

a vt510 leírása tartalmaz egy ilyet is:


DECNKM—Numeric Keypad Mode
ESC [ ? 66 h  Set: application sequences.
ESC [ ? 66 l  Reset: keypad characters.

lásd még: http://invisible-island.net/xterm/ctlseqs/ctlseqs.html