A resposta de Johan Myréen foi próxima, mas não exatamente o problema: a maioria dos emuladores de terminal que você usará possui modos normal e de aplicativo para teclas especiais. As descrições dos terminais são escritas para um modo, que corresponde ao que um aplicativo de tela cheia usa. Outros aplicativos (como um shell interativo ) normalmente não inicializam a tela para usar o modo de aplicativo . Bash é um exemplo disso.
No modo normal , xterm e terminais semelhantes enviam escape[(CSI) enquanto no modo de aplicativo , seus teclados enviam escapeO(SS3). Na sintaxe terminfo, esse escape é \E. Então, infocmpestá mostrando que a descrição usa o modo de aplicativo. O homerecurso é enviado ao terminal, informando como mover o cursor para a posição inicial (superior esquerda) e não é o mesmo que khome(enviado do terminal usando o teclado).
Aplicativos de tela cheia (como aqueles que usam ncurses) podem enviar as strings de capacidade do terminal para inicializar o teclado. Algumas descrições de terminal colocam o terminal no modo de aplicativo, outras não.
O uso de kendversus endé uma convenção de nomenclatura: em terminfo por convenção, qualquer nome que comece com k se refere a uma tecla especial (tecla de função, tecla do cursor, tecla do teclado) para deixar claro que essas são cadeias de caracteres para serem lidas por um aplicativo. Por exemplo, kcub1( tecla do cursor para trás ) é diferente de cub1(mova o cursor para trás uma coluna).
O ncurses reconhece a tecla KEY_ENDporque o aplicativo que você está usando chamará a keypadfunção para inicializar o terminal usando o smkx(o mnemônico significa "iniciar o modo de transmissão do teclado"). Isso pode ou não pode realmente ativar o modo de aplicativo. A descrição do terminal do console Linux não, a do xterm.
Em princípio, você pode usar tputpara alternar o modo (e obter resultados diferentes de showkey):
$ showkey -a
Press any keys - Ctrl-D will terminate this program
^[[H 27 0033 0x1b
91 0133 0x5b
72 0110 0x48
^C 3 0003 0x03
^D 4 0004 0x04
$ tput smkx
$ showkey -a
Press any keys - Ctrl-D will terminate this program
^[OH 27 0033 0x1b
79 0117 0x4f
72 0110 0x48
Como complicação, as maldições reconhecerão apenas um nome para uma string. Alguns terminais (como o xterm) emulam terminais de hardware mais antigos usando nomes diferentes para as teclas no teclado de edição. Nas perguntas frequentes do xterm listadas abaixo, há a possibilidade de nomear a tecla "Página inicial" "Inserir" ...
Leitura adicional:
homeekhomeé que akhomesequência é a sequência que pressiona a tecla Home, enquantohomesequência é a sequência que deve ser enviada ao terminal para mover o cursor para a posição inicial. Que eu saiba, terminfo não define umaendcapacidade, apenaskend.