Почему символ обводки / каретки используется в качестве символа для Ctrl?

18

Я начал использовать консоль Linux давным-давно, но никогда не задавался вопросом о символе круговой рамки, или каретке ( ^). Я хотел бы спросить, почему это используется в качестве замены слова Ctrl.

Я думал об этом на днях, когда я использовал nano, и я также искал, чтобы найти какие-то ответы в Интернете, но я нашел только вопросы о том, «что это такое» и «что это представляет».

Есть ли исторические причины? Или это происходит из какого-то странного соглашения?

Джакомо Черквоне
источник
2
Даже оригинал vi(по крайней мере, тот, что в SunOS 3.5) использовал знак вставки / диафрагмы перед буквами, чтобы обозначить ctrl-C, ctrl-V и т. Д. stty, И делает это тоже. С другой стороны, он ^работал как синоним |сценариев оболочки в ту эпоху, так что вам всегда нужно было ставить обратную косую черту в вызовах stty. Хороший вопрос.
Брюс Эдигер
1
Если бы мне пришлось угадывать, я бы сказал, что это может иметь какое-то отношение к тому факту, что Shift, Control и Meta (а также их менее известные типы, такие как Super и Hyper) являются клавишами-модификаторами, из которых Control вероятно, наиболее часто используемый. Поскольку большинство символов «Сдвинутые версии» могут быть просто напечатаны (например, 3/ #), это ^может быть визуальным сокращением для, так сказать, различного рода «сдвига». Тот факт, что для большинства набираемых клавиш / символов Ctrl просто отключает 64-битный символ, также может быть связан с ^сокращением NOT (0x40).
DopeGhoti

Ответы:

11

Круговой ( ^) был приравнен к символу со стрелкой вверх на телепринтерах. Ко времени появления SunOS и т. Д. Эта часть была уже более 10 лет назад. Этот же символ (замена) использовался в математических выражениях, например, ^для полномочий (где некоторые другие могут использовать **). Он также использовался в Паскале для указания указателей.

Используется для обозначения управляющих символов, это даты (по крайней мере) до 1980 года Вы можете найти это используется в DEC документации, например (это, конечно , в использовании к середине 1970-х годов , когда я использовал TECO. The Utilities руководство с 1973 года (стр 927) показывает, controlCнапример.

В поисках подходящего источника я нахожу коды связи телетайперов от Джила Смита, в которых сказано, что это достаточно, чтобы разместить это в конце 1960-х годов (демонстрируя также, что происхождение происходит до пре-Unix):

ASCII-63 был в основном идентичен текущей версии ASCII-67. Определения управляющих символов (col-1 выше) варьировались между двумя версиями, как определено ниже. Кроме того, в ASCII-63 верхние 32 позиции (столбец 4) были неопределенными, за исключением трех: RUB (0x7F), ACK (0x7C) и ESC (0x7E). В ASCII-63 имеются противоречивые ссылки на символ ALT-MODE (0x7D). В версии 1967 года RUB стал DEL и остался в той же позиции, но ACK и ESC переместились в область контрольных символов (col-1). В ASCII-67 ^ заменил символ стрелки вверх, а _ заменил стрелку влево

ASCII-63 и ASCII-67 являются распространенными вариантами ASCII, но, по-видимому, также были некоторые переходные версии: в руководстве по модели 33 телетайпа есть ссылки на версию ASCII 1965 года, в которой вместо SUB имелась SS (0x1A), \ for @ (0x40), ~ for \ (0x5C), нечетный символ вместо | (0x7C) и | для ~ (0x7E). Кодовая карта Teletype для машин M33 и M35 указывает на версию ASCII 1966 года, хотя печатные символы, показанные на карте, были идентичны во всех версиях.

Раньше это было хорошо известно из-за проблем обмена файлами между различными кодировками, такими как ASCII и EBCDIC, где все еще существовали принтеры, способные отображать стрелки вверх так долго, после того как в ASCII больше не существовало символа.

Томас Дики
источник
1
0x5e, будучи стрелкой вверх, ^также объясняет, почему этот символ использовался в качестве оператора канала в исходной оболочке Unix (передает идею передачи данных от одной команды к другой). Оболочка Борна по-прежнему рассматривается ^как альтернативный оператор канала (я полагаю, для обратной совместимости с оболочкой Томсона).
Стефан Шазелас
да - стрелки были слишком полезны, чтобы их отпустить с ASCII. Это также напоминает мне о более прямом связывании с клавиатурой, но я не нашел изображения для иллюстрации.
Томас Дики
1
0x9 (TAB) обычно представляется как ^I, 0x89 как M-^I, 0xc9 как M-I, 0xe9 как M-i. А теперь, если какой-то персонаж использовался вместо Меты M-?
Стефан Шазелас
Не случайно: я не обращал особого внимания на super / meta / hyper, потому что, когда они были представлены, они относились только к нескольким терминалам, которые большинство никогда не видели.
Томас Дики