O script de @ chris-johnsen parece que funcionaria, mas a explicação tem alguns problemas:
- Para começar, o vim é um aplicativo termcap . Ele usa a interface termcap, por exemplo, de ncurses.
- ncurses fornece nomes para as teclas de função, mas os aplicativos termcap podem ver apenas os nomes padrão.
- a maioria das teclas de função deslocados são capacidades alargadas , como observado no o banco de dados do terminal.
- aquelas em que você está interessado estão na seção no xterm , que menciona
# Most of the xterm extensions are for function-keys. Since patch #94 (in
# 1999), xterm has supported shift/control/alt/meta modifiers which produce
# additional function-key strings. Some other developers copied the feature,
# though they did not follow xterm's lead in patch #167 (in 2002), to make
# these key definitions less ambiguous.
- a alteração mencionada no patch # 167 trocou os parâmetros do modificador e keycode , para evitar o problema de o modificador ser confundido com uma contagem de repetição para as teclas do cursor (em
emacs
, outro aplicativo termcap).
- fazer a mudança no xterm não afetou muito o vim, porque (não é surpresa) ele estava usando uma extensão diferente "tcap-query" introduzida em patch # 148 do xterm.
- usando o vim no gnome-terminal ou no konsole, ele não tinha o recurso "tcap-query" e não tinha como saber o que as teclas de função enviavam (além de os usuários preencherem as informações de ligação de chaves).
- desde o gnome-terminal e o konsole (não tem certeza de qual foi o "primeiro" pois nem documenta as coisas tão bem) copiou o comportamento anterior do xterm, isso produziu pelo menos dez anos de relatórios de bug (como essa questão). A ncurses, a propósito, forneceu as descrições corretas dos terminais para esses terminais, que eram em grande parte não utilizados. Tanto para padronização.
Ao longo da linha de padronização:
- não há "padrão" como tal, que indica quais teclas de função serão enviadas.
O - xterm começou (a partir do início dos anos 90, de qualquer forma), com uma extensão do teclado vt220. O vt220 definiu F6-F20. F1-F5 eram "locais". Qualquer coisa fora disso veio depois.
- a motivação para estender veio inicialmente de teclados de PC (com 12 teclas de função), que não se dividem uniformemente contra 20. Então o xterm tem 24 teclas, usando o deslocamento (inicialmente).
- F1-F4 eram especiais porque também eram usados para fornecer PF1-PF4 para a emulação vt100 do xterm. Aqueles terminam com P, Q, R, S em vez de
"~"
. Levando em conta a mudança, isso acrescentou uma das peculiaridades observadas na pergunta.
- control-, meta-, veio mais tarde, por exemplo, no patch # 94 . Em vez de fazer com que 12 chaves reais parecessem 24, era possível obter 48 (controle e deslocamento) com algumas sobras (para caber no limite terminfo / termcap de 60 teclas de função).
- Inicialmente, não havia motivo para inventar nomes para as chaves extras, mas a adição de modificadores às outras teclas especiais (teclas de cursor e edição) seguiu.
- ajudou o fato de haver (na mesma época) uma extensão ncurses para fornecer os nomes estendidos .
- enquanto alguns recursos estendidos (como
AX
) são projetados para que possam ser testados a partir do termcap, nenhum das chaves especiais estendidas podem ser testadas usando a interface termcap.