Inserir / sobrescrever no peixe

0

Estou usando o Linux Mint em um MacBook e em seu teclado o equivalente para a chave INSERT é a combinação Fn + RETURN .

No momento, só consigo ver o comportamento pretendido dessa combinação no GNU-Emacs: lá, o modo de sobrescrever está vinculado a <insertchar> e <insert> .

Por exemplo, no navegador, ele não tem efeito. Dentro de um terminal linux e também dentro de qualquer um dos emuladores de terminal que eu tentei (por exemplo, konsole, xterm) ao invés de mudar para o modo insert, a seqüência de escape [2~ é impressa na tela.

Desde que eu acho que é uma coisa útil para ter, eu quero fazê-lo funcionar. Alguém sabe onde consertar isso?

A propósito: Fn + Backspace , representando "DELETE" , funciona bem nas aplicações mencionadas.

A propósito não. 2: estou usando a casca de peixe. Dentro do shell bash, a seqüência de escape não é impressa, mas a combinação de teclas também não tem efeito.

    
por Anton Harald 22.05.2016 / 15:34

2 respostas

1

Os emuladores de terminal não podem editar texto por si próprios e, portanto, o conceito de modo de inserção versus modo de substituição não existe neste nível.

Eles apenas enviam os pressionamentos de tecla para o aplicativo em execução (através do driver tty do kernel) e recebem (novamente, através do driver do kernel tty) e interpretam os dados do aplicativo e atualizam a tela de acordo.

Para a tecla Insert, a ação apropriada é enviar a seqüência de escape \e[2~ .

Cabe aos aplicativos (fish / bash / etc. shell, editor de texto emacs / etc., etc.) interpretá-lo e alternar entre os modos inserir e sobrescrever (se implementarem o último).

    
por 22.05.2016 / 17:38
0

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:

por 22.05.2016 / 18:09