Антон меня тут озадачил вопросом: почему сочетание Ctrl+J используется для папки Downloads в браузере, ведь буквы J в слове «download» нет? И оказалось, что это не случайно — J ассоциируется со стрелкой вниз, которая символизирует загрузку (всё-таки она DOWNload).

Чтобы понять связь Ctrl+J со стрелкой, нужно обратиться к истории компьютеров и таблицам символов. Я нашел таблицу ASCII 1967 года в редком представлении, которое позволяет с одного взгляда понять всю эту кухню.

ASCII 1967 года

В этой таблице каждый символ кодируется 7 битами. Первые 32 символа (строки 0 и 1) — управляющие, у них нет печатного представления, они использовались для управления устройствами. Клавиатуры терминалов, созданные по образцу печатных машинок, должны были как-то вводить эти управляющие символы, сохраняя привычную раскладку. Для этого добавили клавишу с ожидаемым названием CTRL (control — управление, управляющий). Удержание клавиши CTRL обнуляло два старших бита нажимаемой буквы, что позволяло вводить управляющие символы путем комбинации клавиш. Для удобства кнопки некоторых клавиатур даже маркировали специально аббревиатурами этих команд. Обратите внимание: клавиша DELETE стоит справа внизу — там же, где она находится и в таблице.

Клавиатура с нанесёнными командами на буквенные клавиши

Кому интересно, под спойлер я поместил расшифровку этих команд.
СимволРасшифровкаПеревод
SOHstart of headingначало заголовка
STXstart of textначало текста
ETXend of textконец текста
EOTend of transmissionконец передачи
ENQenquiry«Прошу подтверждения!»
ACKacknowledgement«Подтверждаю!»
BELbellзвуковой сигнал*
BSbackspaceвозврат на один символ
HThorizontal tabгоризонтальная табуляция
LFline feedперевод строки
VTvertical tabвертикальная табуляция
FFform feed«прогон страницы», новая страница
CRcarriage returnвозврат каретки
SOshift out«Переключиться на другую ленту (кодировку)»
SIshift in«Переключиться на исходную ленту (кодировку)»
DLEdata link escape«Экранирование канала данных»
XONtransmission ONБуфер свободен, можно посылать данные
DCndevice control nN-й символ управления устройством
XOFFtransmission OFFБуфер заполнен, притормози с передачей
NAKnegative acknowledgement«Не подтверждаю!»
SYNsynchronous idleсинхронное ожидание
ETBend of transmission blockконец блока передаваемых данных
CANcancel«Отмена»
EMend of medium«Конец носителя»
SUBsubstitute«Подставить»
ESCescapeэкранирование
DELdelete«Забой», стереть последний символ

*Bell — подача звукового сигнала. Моя любимая команда. Когда ты сидишь в режиме терминала с удаленным компьютером, Ctrl+G издавало звук на другом конце соединения. Так можно было позвать собеседника, если он куда-то отошел. Сегодня очень не хватает такой функции в современных мессенжерах.


Итак, нажатая CTRL изменяла код нажимаемой буквенной клавиши. Например (посмотрите в таблицу):

  • Ctrl+H (^H) превращала 100 1000 в 000 1000 — это BS, Backspace (возврат на один символ ←).
  • Ctrl+J (^J) превращала 100 1010 в 000 1010 — это LF, Line Feed (перевод строки ↓).

Так эти символы стали ассоциироваться с направлениями: H — влево, J — вниз, ну а K и L в силу соседства с первыми двумя приобрели ассоциацию с направлением вверх и вправо.

Поскольку на клавиатурах того времени не было специального блока стрелок, производители терминалов стали использовать эти сочетания для управления курсором, а некоторые (как на терминале ADM-3A) даже наносили изображения стрелок на клавиши с этими буквами.

Клавиатура терминала ADM-3A

Посмотрите на эту клавиатуру. Ну какое еще сочетание клавиш делать для Downloads! Да тут и альтернативы-то нет! И вы понимаете теперь, почему сегодня для ввода ссылки используется комбинация Ctrl+K?! Еще одно открытие, правда? :)

И неудивительно, что автор первого полностраничного редактора для терминалов — программы vi, написанной в середине 70-х — использовал для перемещения курсора по экрану именно эти сочетания клавиш.

Кстати, глядя на таблицу ASCII, становится понятна логика дизайнеров клавиатуры, которые расположили клавишу CTRL над клавишей SHIFT — ведь CTRL делает сдвиг в верхних линейках таблицы, а SHIFT — в нижних. Всё логично!

А вот так выглядит этот терминал целиком.

Терминал ADM-3A

P.S. Обнаружил, что программа-терминал PuTTY, которой я пользуюсь сегодня (из песни слова не выкинешь), по Ctrl+J как раз посылает код LF, то есть вводит команду. Это до сих пор работает! :)

P.P.S. С разного рода физическими терминалами мне пришлось пообщаться достаточно. В середине 80-х мне довелось много работать на ЕС ЭВМ 1033 («аналоге» IBM System/360) через польский терминал с чешской клавиатурой, построенной аж на датчиках Холла (!!!). Стрелки на ней уже были, хотя и располагались ужасно неудобно. Обратите внимание, что стрелок на этой клавиатуре не четыре, а пять. Но главное — это латинские буквы: присмотритесь, ничего общего с раскладкой QWERTY они не имеют — они расположены по фонетическому принципу. Вы где-нибудь видели подобное! Привыкаешь, правда, быстро, ведь никаких персоналок еще нет и твоя моторика не испорчена никакими другими раскладками.

Терминал ЕС ЭВМ

Машинный зал резонно располагался на первом этаже, а терминалы — на третьем в старом здании на Васильевском острове (сейчас там находится один из факультетов универа). Ох я набегался!

А диплом я писал уже на CМ-1420 («аналог» DEC PDP-11) — за 20 лет развития ЭВМ системные блоки уменьшились настолько, что всё оборудование стояло уже в одной комнате.

СМ 4 — предшественник СМ-1420

Сисадмином был бородатый юноша по имени Миша Фрадкин, страшно вредный, документация к редактору была написана так, что хотелось ее авторов побить, никаких специальных клавиш в терминале для редактора не было, всё, абсолютно всё было построено на таинственных горячих клавишах, любое действие вызывало боль, Миша, который сидел за соседним столом, помогать отказывался («разбирайся сам!»), а терминал — в тот момент, когда ты уже был готов его от отчаяния разбить — выводил на экран какую-нибудь издевательскую надпись типа: «А давайте мы будем вместе нажимать на клавиши — вы только скажите, на какие!» или «Эй, поосторожней, я могу и обидеться!». Это все страшно бесило и выводило из себя. Со временем, конечно, освоился.

Нам нужна ваша помощь. Пожалуйста, поддержите Le-francais.ru !