Emuladores de terminal possuem seqüências de controle para inserir e excluir caracteres (e linhas) na tela. Mas quando você está executando um aplicativo (seja um shell ou um editor de texto ), as seqüências de controle que você pode inserir são como regra não ecoadas para o terminal. O aplicativo lê essas chaves especiais e decide quais sequências de controle devem ser enviadas ao terminal. O efeito (inserção, exclusão e overstrike) é apenas uma imagem do que o aplicativo faz. Os dados reais estão na memória do aplicativo (ou arquivos de dados).
A maioria dos terminais tem teclas especiais (como Insert ) que por convenção enviam caracteres que correspondem a uma seqüência de controle com nome semelhante (que seria enviada para o terminal). Isso é porque originalmente, modo local era algo que as pessoas usavam.
Qualquer terminal compatível com ANSI pode ser executado no modo local (desconsiderando como irrelevantes alguns que quebraram este recurso). Isso é chamado de modo de envio / recebimento ( SRM
) no padrão. Em terminais mais antigos, você pode ter que levar em conta outro modo para inserir . Na página de manual terminfo (5) mencionada:
move_insert_mode mir mi safe to move while
in insert mode
Deixando de lado a convenção, nem todos os terminais fazem com que suas chaves especiais correspondam às sequências de controle. Por exemplo,
- com
rxvt
, a insert-key pode enviar escape [ 2 ~
, enquanto a seqüência de controle de inserção é [ @ e (para múltiplos caracteres), o modo de inserção é escape [ 4 m
-
As chaves especiais modificadas (como control Insert ) não podem enviar caracteres correspondentes a qualquer seqüência de controle. Com o xterm, eles são organizados para evitar confusão com sequências de controle existentes, por exemplo, adicionando parâmetros em locais onde programas simplistas os ignoram.
Leitura adicional: