Pourquoi le caractère circonflexe / caret est-il utilisé comme symbole pour Ctrl?

18

J'ai commencé à utiliser la console Linux il y a longtemps mais je ne me suis jamais interrogé sur le caractère circonflex aka caret ( ^). Je voudrais demander pourquoi il est utilisé pour remplacer le mot Ctrl.

J'y ai pensé l'autre jour alors que j'utilisais nano et j'ai également cherché s'il y avait des réponses sur Internet mais ce que j'ai trouvé n'était que des questions sur "ce que c'est" et "ce qu'il représente".

Y a-t-il des raisons historiques? Ou cela vient-il d'une convention étrange?

Giacomo Cerquone
la source
2
Même l'original vi(au moins celui de SunOS 3.5) utilisait un caret / circonflexe devant les lettres pour reprécents que ctrl-C, ctrl-V, etc. le sttyfaisaient et le font aussi. D'un autre côté, ^fonctionnait comme synonyme de |scripts shell à cette époque, vous auriez donc toujours à faire une barre oblique inverse dans les sttyinvocations. Bonne question.
Bruce Ediger
1
Si je devais deviner, je dirais que cela pourrait avoir quelque chose à voir avec le fait que Shift, Control et Meta (ainsi que leurs semblables moins connus tels que Super et Hyper) sont tous des touches de modification, dont Control est probablement le plus utilisé. Étant donné que la plupart des versions décalées des caractères peuvent simplement être saisies, (par exemple 3/ #), ^pourrait être un raccourci visuel pour un type différent de «décalage», pour ainsi dire. Le fait que pour la plupart des touches / caractères saisissables, Ctrl désactive simplement le 64 bits du caractère peut également être lié - ^étant un raccourci pour NOT (0x40).
DopeGhoti

Réponses:

11

La circonflexe ( ^) était assimilée au caractère de flèche vers le haut sur les téléimprimeurs. Au moment où SunOS et ainsi de suite sont apparus, cette partie remonte à plus de 10 ans. Le même caractère (remplacement) a été utilisé dans les expressions mathématiques, par exemple, ^pour les pouvoirs (là où d'autres pourraient utiliser **). Il a également été utilisé en Pascal pour indiquer des pointeurs.

Utilisé pour indiquer les caractères de contrôle, il date (au moins) avant 1980. Vous pouvez le trouver utilisé dans la documentation DEC par exemple (il était certainement utilisé au milieu des années 1970 lorsque j'ai utilisé teco. Le manuel des utilitaires de 1973 (page 927) montre un controlCpar exemple.

À la recherche d'une source appropriée, je trouve les codes de communication de téléscripteur par Gil Smith qui en dit assez pour placer cela à la fin des années 1960 (démontrant que l'origine est également pré-Unix):

L'ASCII-63 était essentiellement identique à la version actuelle de l'ASCII-67. Les définitions des caractères de contrôle (col-1 ci-dessus) variaient entre les deux versions, comme défini ci-dessous. De plus, en ASCII-63, les 32 positions supérieures (col-4) n'étaient pas définies, à l'exception de trois: RUB (0x7F), ACK (0x7C) et ESC (0x7E). Il existe des références incohérentes à un caractère ALT-MODE (0x7D) dans ASCII-63. Dans la version 1967, RUB est devenu DEL et est resté dans la même position, mais ACK et ESC se sont déplacés dans la zone de caractères de contrôle (col-1). En ASCII-67, ^ a remplacé le symbole de la flèche vers le haut et _ a remplacé la flèche de gauche

ASCII-63 et ASCII-67 sont les variantes courantes de l'ASCII, mais il semble y avoir également eu des versions de transition: dans le manuel Teletype Model 33, il y a des références à une version de 1965 de l'ASCII, qui avait SS à la place de SUB (0x1A), \ for @ (0x40), ~ for \ (0x5C), un caractère impair à la place de | (0x7C) et | pour ~ (0x7E). Une carte de code de télétype pour les machines M33 et M35 indique une version de 1966 de l'ASCII, bien que les caractères imprimables indiqués sur la carte soient identiques dans toutes les versions.

Cela était bien connu, en raison des problèmes d'échange de fichiers entre différents encodages tels que ASCII et EBCDIC où il y avait encore des imprimantes capables de restituer des flèches vers le haut comme telles longtemps après que le caractère n'existait plus en ASCII.

Thomas Dickey
la source
1
0x5e étant une flèche vers le haut avant d'être, ^explique également pourquoi ce caractère a été utilisé comme opérateur de canal dans le shell Unix d'origine (transmet l'idée de données circulant d'une commande à une autre). Le shell Bourne est toujours considéré ^comme un opérateur de tuyau alternatif (je suppose pour une compatibilité descendante avec le shell Thomson).
Stéphane Chazelas
oui - les flèches étaient trop utiles pour être abandonnées, avec ASCII. Cela me rappelle également une connexion plus directe au clavier, mais je n'ai trouvé aucune image à illustrer.
Thomas Dickey
1
0x9 (TAB) est généralement représenté comme ^I, 0x89 comme M-^I, 0xc9 comme M-I, 0xe9 comme M-i. Le savez-vous maintenant si un personnage a déjà été utilisé pour représenter Meta à la place de M-?
Stéphane Chazelas
Pas au hasard: je n'ai pas prêté beaucoup d'attention aux super / méta / hyper parce que lorsqu'ils ont été introduits, ils ne s'appliquaient qu'à quelques terminaux que la plupart n'avaient jamais vus.
Thomas Dickey