Modo de inserção/substituição em peixes

Modo de inserção/substituição em peixes

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

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

Por exemplo, no navegador não tem efeito. Dentro de um terminal Linux e também dentro de qualquer um dos emuladores de terminal que tentei (por exemplo, konsole, xterm) em vez de mudar para o modo de inserção, a sequência de escape [2~é impressa na tela.

Como acho que é uma coisa útil de se ter, quero fazê-lo funcionar. Alguém sabe onde consertar isso?

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

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

Responder1

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

Eles apenas enviam as teclas pressionadas para o aplicativo em execução (por meio do driver tty do kernel) e recebem (novamente, por meio do driver tty do kernel) e interpretam os dados do aplicativo e atualizam a tela de acordo.

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

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

Responder2

Emuladores de terminal possuem sequências de controle para inserção e exclusão de caracteres (e linhas) na tela. Mas quando você está executando um aplicativo (seja umconchaou umeditor de texto), as sequências de controle que você pode inserir são geralmentenãoecoou para o terminal. A aplicação lê essas chaves especiais e decide quais sequências de controle enviar ao terminal. O efeito (inserção, exclusão – e overstrike) é apenas umfotodo que o aplicativo faz. Os dados reais estão na memória do aplicativo (ou arquivos de dados).

A maioria dos terminais possui teclas especiais (como Insert) que,convençãoenviar caracteres que correspondam a uma sequência de controle com nome semelhante (que seria enviadaparao terminal). Isso porque originalmente,modo localera algo que as pessoas usavam.

Qualquer terminal compatível com ANSI pode ser executado emlocalmodo (desconsiderando como irrelevantes alguns que quebraram esse recurso). Isso é chamadomodo enviar/receber( SRM) na norma. Em terminais mais antigos, talvez seja necessário levar em consideração outro modo parainserindo. Noinformações do termo(5)página de manual mencionada:

   move_insert_mode          mir    mi   safe to move while
                                         in insert mode

Deixando a convenção de lado, nem todos os terminais fazem com que suas teclas especiais correspondam às sequências de controle. Por exemplo,

  • comrxvt, a chave de inserção pode enviar escape[2~, enquanto o caractere de inserçãosequência de controleé escape[@e (para vários caracteres), o modo de inserção éescape[4m
  • modificadochaves especiais (como controlInsert) podem não enviar caracteres correspondentesqualquersequê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:

informação relacionada