Como o display é atualizado quando o caractere de apagar é digitado em um emulador de terminal?

3

Pelo que entendi, ao digitar caracteres em um emulador de terminal eles aparecem porque são "ecoados". Imaginamos que o terminal é um dispositivo separado que se comunica com o computador por meio de um canal bidirecional, e cada tecla digitada não atualiza a tela imediatamente, mas aparece quando é enviada de volta do computador.

Minha pergunta é como é possível que a tecla de retrocesso, ou qualquer tecla definida como "apagar" com stty , apareça para apagar um caractere na tela. Se em um xterm eu faço

$ stty erase x
$ cat -
aaaaaaaaaax

o último tipo x I aparece para apagar o último a . No entanto, se este fosse um terminal real, separado do computador, não teria como saber qual era o caracter stty erase . A única maneira que eu esperaria para obter esse comportamento seria se o caractere de apagar fosse ^H e fosse ecoado, e o terminal interpretou isso como um caractere de controle especial dizendo para apagar o caractere antes do cursor.

Esta é uma peculiaridade dos emuladores de terminal, onde eles "trapaceiam" e procuram o que é o caracter stty erase ?

    
por Gavin Smith 17.11.2014 / 19:16

1 resposta

2

O emulador de terminal envia o caractere x , e o driver do terminal vê que isso foi configurado como o caractere de apagamento. Então, em vez de ecoar de volta para o emulador, ele envia a seqüência apropriada para apagar o caractere anterior (por exemplo, backspace-espaço-backspace).

Mesmo quando o caractere de apagamento está definido para Backspace , simplesmente ecoar não iria realmente apagar o que foi digitado. Quando um caractere BS é enviado para um terminal, ele apenas move o cursor um caractere para a esquerda, não o limpa. Portanto, o driver do terminal ainda teria que enviar um espaço de espaço extra para limpá-lo e deixar o cursor naquele local.

    
por 17.11.2014 / 19:33