Dlaczego znak Dookoła / Daszka jest używany jako symbol Ctrl?


18

Dawno temu zacząłem korzystać z konsoli Linux, ale nigdy nie zadawałem sobie pytania o postać otaczającą, czyli znak karetki ( ^). Chciałbym zapytać, dlaczego jest używany jako zamiennik tego słowa Ctrl.

Zastanawiałem się nad tym, kiedy korzystałem z nano i szukałem też odpowiedzi w Internecie, ale znalazłem tylko pytania dotyczące „co to jest” i „co to reprezentuje”.

Czy są jakieś historyczne powody? A może pochodzi z jakiejś dziwnej konwencji?


2
Nawet oryginał vi(przynajmniej ten w SunOS 3.5) używał karetki / daszka przed literami, aby reprezentować ctrl-C, ctrl-V itd. sttyI to robi. Z drugiej strony, ^działał jako synonim |skryptów powłoki w tamtej epoce, więc zawsze będziesz musiał odwrócić kursor w sttywywołaniach. Dobre pytanie.
Bruce Ediger

1
Gdybym musiał zgadywać, powiedziałbym, że to może mieć coś wspólnego z faktem, że Shift, Control i Meta (a także ich mniej znany podpowiedź, taki jak Super i Hyper) to wszystkie klawisze modyfikujące, z których Control jest prawdopodobnie najczęściej używanym. Ponieważ większość wersji „Przesuniętych wersji” można po prostu wpisać (np. 3/ #), ^Może to być skrót wizualny dla innego rodzaju „przesunięcia”, że tak powiem. Fakt, że w przypadku większości klawiszy / znaków, które można wpisać, Ctrl po prostu wyłącza 64-bitowy znak, może być również powiązany - ^jest to skrót NOT (0x40).
DopeGhoti

Odpowiedzi:


11

Dookoła ( ^) zostało zrównane ze znakiem strzałki w górę na drukarkach. Do czasu pojawienia się SunOS i tak dalej ta część trwała ponad 10 lat w przeszłości. Ten sam znak (zamiennik) został użyty w wyrażeniach matematycznych, np. W ^odniesieniu do potęg (tam, gdzie inni mogliby użyć **). Był również używany w Pascalu do wskazywania wskaźników.

Służy do wskazywania znaków kontrolnych, datuje się to (przynajmniej) przed 1980 r. Można go znaleźć na przykład w dokumentacji DEC (z pewnością był używany w połowie lat 70., kiedy korzystałem z teco. Podręcznik narzędzi z 1973 r. (Strona 927) pokazuje controlCna przykład.

Poszukując odpowiedniego źródła, znajduję Kody komunikacji Teletypewriter autorstwa Gil Smitha, który mówi wystarczająco dużo, aby umieścić to pod koniec lat 60. XX wieku (pokazując, że pochodzenie również pochodzi z wersji wcześniejszej niż Unix):

ASCII-63 był w większości identyczny z obecną wersją ASCII-67. Definicje znaków kontrolnych (kol. 1 powyżej) różniły się między dwiema wersjami, jak zdefiniowano poniżej. Ponadto w ASCII-63 górne 32 pozycje (col-4) były niezdefiniowane, z wyjątkiem trzech: RUB (0x7F), ACK (0x7C) i ESC (0x7E). Istnieją niespójne odwołania do znaku ALT-MODE (0x7D) w ASCII-63. W wersji z 1967 r. RUB stał się DEL i pozostał w tej samej pozycji, ale ACK i ESC przeszli do obszaru postaci kontrolnej (col-1). W ASCII-67 ^ zastąpił symbol strzałki w górę, a _ zastąpił strzałkę w lewo

ASCII-63 i ASCII-67 są powszechnymi wariantami ASCII, ale wydaje się, że istniały również pewne wersje przejściowe: w podręczniku Teletype Model 33 znajdują się odniesienia do wersji ASCII z 1965 r., Która miała SS zamiast SUB (0x1A), \ dla @ (0x40), ~ dla \ (0x5C), nieparzysty znak zamiast | (0x7C) i | dla ~ (0x7E). Karta z kodem Teletype dla maszyn M33 i M35 wskazuje wersję ASCII z 1966 r., Chociaż znaki do wydrukowania przedstawione na karcie były identyczne we wszystkich wersjach.

Kiedyś było to dobrze znane ze względu na problemy z wymianą plików między różnymi kodowaniami, takimi jak ASCII i EBCDIC, gdzie wciąż istniały drukarki zdolne do renderowania strzałek w górę, długo po tym, jak znak już nie istniał w ASCII.


1
0x5e jest strzałką w górę przed ^wyjaśnieniem, dlaczego znak ten był używany jako operator potoku w oryginalnej powłoce uniksowej (przekazuje ideę danych przepływających z jednego polecenia do drugiego). Powłoka Bourne'a nadal traktuje ^jako alternatywny operator potoku (przypuszczam, że dla kompatybilności wstecznej z powłoką Thomsona).
Stéphane Chazelas

tak - w górę ASCII okazały się zbyt przydatne, aby je puścić. To także przypomina mi bardziej bezpośrednie powiązanie z klawiaturą, ale nie znalazłem żadnego obrazu do zilustrowania.
Thomas Dickey,

1
0x9 (TAB) jest zwykle reprezentowane jako ^I0x89 as M-^I, 0xc9 as M-I, 0xe9 as M-i. Czy teraz, jeśli jakaś postać była kiedyś używana do reprezentowania Meta M-?
Stéphane Chazelas

Nie od razu: nie zwracałem uwagi na super / meta / hyper, ponieważ kiedy zostały wprowadzone, dotyczyły tylko kilku terminali, których większość nigdy nie widziała.
Thomas Dickey,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.