Eu tenho redescoberto caracteres de controle ASCII enquanto brinquei com algum código de emulação de terminal, e escrevi um pequeno programa que gera o valor hexadecimal de cada tecla que eu pressiono (tcsetattr () com ~ ICANON).
Embora eu entenda que pressionar as teclas Control e D simultaneamente (CTL-D) gera o caractere de controle% ASCII ^D
/ EOT
/ 0x04
e uma série de outras, como muito bem descrito no WP ASCII , fiquei surpreso ao ver que (no OS X pelo menos), algumas outras chaves inesperadas também geravam caracteres de controle:
CTL-2/@ = NUL = ^@ = 0x00 (expected actually)
CTL-3/# = ESC = ^[ = 0x1B
CTL-4/$ = FS = ^\ = 0x1C
CTL-5/% = GS = ^] = 0x1D
CTL-6/^ = RS = ^^ = 0x1E (expected actually)
CTL-7/& = CTL-/ = US = ^_ = 0x1F
CTL-8/* = DEL = ^? = 0x7F
Note que CTL-1, -9 e -0 não geram caracteres de controle, apenas o dígito normal.
Com exceção desses dois caracteres esperados (NUL e RS), por que os terminais geram caracteres de controle para esse subconjunto de teclas numéricas?
Editar: para ficar claro, estou ciente e entendo que CTL - [= Esc, e as outras teclas de "circunflexo" / controle padrão (^ \, ^], ^^, ^ _, ^?). Eu estou querendo saber por que o número ou ^ #, ^ $, ^%, ^ &, ^ * e ^ / control keys se sobrepõem a eles.