Por que o caractere circunflexo / circunflexo é usado como um símbolo para Ctrl?

18

Comecei a usar o console Linux há muito tempo, mas nunca me questionei sobre o caractere circunflex, também conhecido como circunflexo ( ^). Gostaria de perguntar por que é usado como um substituto para a palavra Ctrl.

Pensei nisso outro dia enquanto estava usando o nano e também procurei ver se havia algumas respostas na internet, mas o que encontrei foram apenas perguntas sobre "o que é" e "o que representa".

Existem algumas razões históricas? Ou vem de alguma convenção estranha?

Giacomo Cerquone
fonte
2
Mesmo o original vi(pelo menos a uma em SunOS 3,5) utilizado um acento circunflexo / circunflexa em frente de cartas para reprecents CTRL-C, ctrl-V, etc. sttyfez e faz isso também. Por outro lado, ^funcionou como sinônimo de |scripts de shell durante essa época, portanto, você sempre teria que fazer uma barra invertida no cursor em sttyinvocações. Boa pergunta.
23616 Bruce Ediger
11
Se eu tivesse que adivinhar, eu diria que isso pode ter algo a ver com o fato de que Shift, Control e Meta (assim como seus tipos menos conhecidos, como Super e Hyper) são todas teclas modificadoras, das quais Control é provavelmente o mais usado. Como a maioria das versões Shifted das personagens pode ser simplesmente digitada, (por exemplo, 3/ #), ^pode ser uma abreviação visual para um tipo diferente de 'shift', por assim dizer. O fato de que, para a maioria das teclas / caracteres tipáveis, o Ctrl apenas desativa os 64 bits do caractere também pode estar relacionado - ^sendo uma abreviação para NOT (0x40).
DopeGhoti

Respostas:

11

O circunflexo ( ^) foi igualado ao caractere de seta para cima nas tele-impressoras. No momento em que o SunOS e assim por diante surgiram, essa parte já existia há mais de 10 anos. O mesmo caractere (substituição) foi usado em expressões matemáticas, por exemplo, ^para poderes (onde alguns outros podem usar **). Também foi usado em Pascal para indicar indicadores.

Usado para indicar caracteres de controle, data (pelo menos) antes de 1980. Você pode encontrá-lo na documentação do DEC, por exemplo (estava certamente em uso em meados da década de 1970 quando usei o teco. O manual Utilities de 1973 (página 927) mostra um controlCpor exemplo.

Procurando uma fonte adequada, encontro os Códigos de Comunicação de Teletypewriter de Gil Smith, que diz o suficiente para colocar isso no final dos anos 1960 (demonstrando que a origem também é pré-Unix):

O ASCII-63 era praticamente idêntico à versão atual do ASCII-67. As definições dos caracteres de controle (col-1 acima) variaram entre as duas versões, conforme definido abaixo. Além disso, no ASCII-63, as 32 posições superiores (col-4) não foram definidas, exceto por três: RUB (0x7F), ACK (0x7C) e ESC (0x7E). Existem referências inconsistentes para um caractere ALT-MODE (0x7D) no ASCII-63. Na versão de 1967, o RUB tornou-se DEL e permaneceu na mesma posição, mas ACK e ESC foram para a área de caracteres de controle (col-1). No ASCII-67, ^ substituiu o símbolo de seta para cima e _ substituiu o símbolo de seta para a esquerda

ASCII-63 e ASCII-67 são as variantes comuns do ASCII, mas parece ter havido também algumas versões transitórias: no manual Teletype Model 33, há referências a uma versão de 1965 do ASCII, que tinha SS no lugar de SUB (0x1A), \ para @ (0x40), ~ para \ (0x5C), um caractere ímpar no lugar de | (0x7C) e | para ~ (0x7E). Um cartão de código Teletype para máquinas M33 e M35 indica uma versão 1966 do ASCII, embora os caracteres imprimíveis mostrados no cartão sejam idênticos em todas as versões.

Isso costumava ser bem conhecido, devido aos problemas de troca de arquivos entre codificações diferentes, como ASCII e EBCDIC, onde ainda havia impressoras capazes de renderizar setas para cima, desde que o caractere não existisse mais no ASCII.

Thomas Dickey
fonte
11
O fato de 0x5e ser uma seta para cima antes de ser ^também explica por que esse caractere foi usado como operador de canal no shell Unix original (transmite a ideia de dados fluindo de um comando para outro). O shell Bourne ainda é tratado ^como um operador de tubo alternativo (suponho que seja compatível com o shell Thomson).
Stéphane Chazelas 23/02
sim - as uparrows foram úteis demais para deixar ir, com o ASCII. Isso também me lembra uma ligação mais direta ao teclado, mas não encontrei nenhuma figura para ilustrar.
Thomas Dickey
11
0x9 (TAB) é geralmente representado como ^I, 0x89 como M-^I, 0xc9 como M-I, 0xe9 como M-i. Você agora se algum personagem já foi usado para representar o Meta no lugar de M-?
Stéphane Chazelas 23/02
Não de imediato: não prestei muita atenção ao super / meta / hiper porque, quando eles foram introduzidos, eles só se aplicavam a alguns terminais que a maioria nunca viu.
Thomas Dickey