¿Por qué se utiliza el carácter circunflejo / careto como símbolo de Ctrl?


18

Comencé a usar la consola Linux hace mucho tiempo, pero nunca me pregunté sobre el carácter circunflejo aka caret ( ^). Me gustaría preguntar por qué se usa como reemplazo de la palabra Ctrl.

Lo pensé el otro día mientras estaba usando nano y también busqué para ver si había algunas respuestas en Internet, pero lo que encontré fueron solo preguntas sobre "qué es" y "qué representa".

¿Hay algunas razones históricas? ¿O viene de alguna convención extraña?


2
Incluso el original vi(al menos el de SunOS 3.5) usó un símbolo de intercalación / circunflejo delante de las letras para representar ctrl-C, ctrl-V, etc. stty, y también lo hizo. Por otro lado, ^funcionó como sinónimo de |scripts en shell durante esa época, por lo que siempre tendría que reducir la barra diagonal en sttyinvocaciones. Buena pregunta.
Bruce Ediger

1
Si tuviera que adivinar, diría que podría tener algo que ver con el hecho de que Shift, Control y Meta (así como su tipo menos conocido como Super e Hyper) son todas teclas modificadoras, de las cuales Control Es probablemente el más utilizado. Dado que la mayoría de las versiones con caracteres de Shifted simplemente se pueden escribir, (por ejemplo, 3/ #), ^podría ser una abreviatura visual para un tipo diferente de 'shift', por así decirlo. El hecho de que para la mayoría de las teclas / caracteres que se pueden escribir, Ctrl simplemente apaga los 64 bits del personaje también puede estar relacionado, ^para abreviar NOT (0x40).
DopeGhoti

Respuestas:


11

El circunflejo ( ^) se equiparó al carácter de flecha hacia arriba en las teleimpresoras. Para cuando apareció SunOS y demás, esta parte tenía más de 10 años en el pasado. El mismo carácter (reemplazo) se usó en expresiones matemáticas, por ejemplo, ^para poderes (donde otros podrían usar **). También se usó en Pascal para indicar punteros.

Utilizado para indicar caracteres de control, esta fecha (al menos) es anterior a 1980. Puede encontrarlo utilizado en la documentación de DEC, por ejemplo (ciertamente estaba en uso a mediados de la década de 1970 cuando usé teco. El manual de utilidades de 1973 (página 927) muestra un controlCpor ejemplo.

Buscando una fuente adecuada, encuentro Códigos de comunicación de teletipo de Gil Smith que dice lo suficiente como para colocar esto a fines de la década de 1960 (lo que demuestra que el origen también es anterior a Unix):

ASCII-63 era casi idéntico a la versión actual de ASCII-67. Las definiciones de los caracteres de control (col-1 arriba) variaron entre las dos versiones, como se define a continuación. Además, en ASCII-63, las 32 posiciones superiores (col-4) no estaban definidas, excepto tres: RUB (0x7F), ACK (0x7C) y ESC (0x7E). Hay referencias inconsistentes a un carácter ALT-MODE (0x7D) en ASCII-63. En la versión de 1967, RUB se convirtió en DEL y permaneció en la misma posición, pero ACK y ESC se movieron al área de caracteres de control (col-1). En ASCII-67, ^ reemplazó el símbolo de flecha hacia arriba y _ reemplazó la flecha hacia la izquierda

ASCII-63 y ASCII-67 son las variantes comunes de ASCII, pero también parece haber algunas versiones de transición: en el manual de Teletype Model 33, hay referencias a una versión de 1965 de ASCII, que tenía SS en lugar de SUB (0x1A), \ for @ (0x40), ~ for \ (0x5C), un carácter extraño en lugar de | (0x7C) y | para ~ (0x7E). Una tarjeta de código de teletipo para máquinas M33 y M35 indica una versión de 1966 de ASCII, aunque los caracteres imprimibles que se muestran en la tarjeta eran idénticos en todas las versiones.

Esto solía ser bien conocido, debido a los problemas de intercambio de archivos entre diferentes codificaciones como ASCII y EBCDIC donde todavía había impresoras capaces de mostrar flechas hacia arriba, mucho después de que el carácter ya no existiera en ASCII.


1
0x5e es una flecha hacia arriba antes de ser ^también explica por qué ese personaje se utilizó como operador de tubería en el shell original de Unix (transmite la idea de que los datos fluyen de un comando a otro). El shell Bourne todavía se trata ^como un operador de tubería alternativo (supongo que por compatibilidad con el shell Thomson).
Stéphane Chazelas

sí, las brechas eran demasiado útiles para dejarlas ir, con ASCII. Esto también me recuerda un poco más de conexión directa con el teclado, pero no encontré ninguna imagen para ilustrar.
Thomas Dickey

1
0x9 (TAB) generalmente se representa como ^I, 0x89 como M-^I, 0xc9 como M-I, 0xe9 como M-i. ¿Sabes si alguna vez se ha utilizado algún personaje para representar a Meta en lugar de M-?
Stéphane Chazelas

No fuera de lugar: no presté mucha atención a super / meta / hyper porque cuando se introdujeron, solo se aplicaron a unos pocos terminales que la mayoría nunca vio.
Thomas Dickey
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.