Возврат каретки

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску

Возвра́т каре́тки — управляющий символ или механизм, используемый для возвращения позиции устройства к началу строки. Часто обозначается как CR (от англ. carriage return).

Происхождение термина[править | править код]

Каретка (от итал. carretta — тележка) — узел машины или механизма, несущий ряд деталей и передвигающийся по направляющим или вращающийся в подшипниках. В пишущих машинках имела вид рамки с валиком для бумаги[1].

Пишущие машинки[править | править код]

Первоначально термин «возврат каретки» относился к механизму или рычагу на пишущей машинке. Он использовался после ввода строки и заставлял узел, держащий бумагу (каретку), вернуться вправо, так что машинка была готова печатать дальше на левой стороне бумаги (предполагая письмо слева направо). Рычаг обыкновенно продвигал бумагу на следующую строку. Электрический возврат каретки впервые появился на электрических пишущих машинках фирмы «Electromatic» в 1929 году. Позже эту фирму поглотила IBM и стала выпускать эти машинки под своей маркой как «IBM Electric typewriter[en]»[2][3]. Клавиша, выполнявшая это действие, обыкновенно обозначалась «возврат каретки» (англ. carriage return) или «возврат» (return). В других пишущих машинках, в том числе IBM Selectric, печатающая головка двигалась при печатании, а бумага оставалась неподвижной. В них эта клавиша возвращала влево печатающую головку и иногда называлась «возврат держателя» (англ. carrier return)[источник не указан 1347 дней].

Позже для обозначения этой клавиши был введён знак ↵ (U+21B5).

Телекоммуникация, компьютеры[править | править код]

Управляющий символ возврата каретки ведёт свою родословную от телетайпов. В 1901 году Дональд Мюррей[en] изобрёл телетайп, оснащённый QWERTY-клавиатурой и способный печатать сообщение на бумажном листе. Для этого требовалось добавить в код Бодо дополнительные символы: LF (перевод строки, код 02) и CR (возврат каретки, код 08)[4].

Функции возврата каретки и перевода строки были разделены по двум причинам:

  • Сам по себе возврат каретки предоставлял возможность печати новой строки поверх имеющейся. Это могло быть использовано для получения полужирного шрифта, подчёркиваний, знаков под ударением, зачёркнутого текста и некоторых составных знаков. В дальнейшем, когда принтеры стали графическими, принтер мог вернуть каретку, а потом прокрутить бумагу на любое желаемое расстояние — в том числе ровно на высоту каретки или на пол-иголки (для качественной двухпроходной печати).
  • На частотах в десятки бод возврат каретки был самой длинной операцией, а буферизации, чтобы на это время приостановить печать, не было[источник не указан 1257 дней]. Поэтому время, употреблённое на перевод строки, не было потрачено зря (нередко требовалось несколько дополнительных нажатий клавиши, прежде чем возврат каретки был произведён и можно было печатать дальше). Поэтому возврат каретки всегда производился первым, до перевода строки.

В ранних компьютерах для ввода информации использовались обычные телетайпы, однако в 1963 году специально для ввода и хранения данных компьютерами была разработана первая версия кодировки ASCII, в ней символы перевода строки и возврата каретки были перенесены на позиции 0x0A и 0x0D, и в последующих кодировках эти управляющие символы сохранились на тех же местах, в том числе в Юникоде.

Многие компьютерные программы используют для обозначения конца строки знак возврата каретки отдельно или вместе со знаком перевода строки, но для этой задачи используются и другие знаки; другие используют его только для разбиения абзаца. Некоторые стандарты, вводящие собственные обозначения для управления строками и абзацами (например, HTML), и многие языки программирования обрабатывают знаки возврата каретки и новой строки как пробел.

Для обозначения символа возврата каретки в некоторых программах, которые игнорируют его, если он введён напрямую, возможно использование эмуляции ввода управляющего символа с терминала^M (Ctrl+M). В Си и многих других языках программирования \r обозначает возврат каретки[5]. На ранних кириллических клавиатурах соответствующая клавиша маркировалась «ВК».

Как правило клавиша возврата каретки располагается в правой части клавиатуры и она отвечает как за возврат каретки, так и за перевод строки, а также за ввод команды. В терминалах могли использоваться раздельные клавиши для возврата каретки и перевода строки, а также специальный режим, который генерировал оба этих символа. На IBM PC-совместимых и современных USB HID-клавиатурах код нажатой клавиши не привязан напрямую к генерируемому при вводе символу, за перевод скан-кодов в коды символов отвечает операционная система, поэтому генерируемый по нажатии клавиши Enter символ или последовательность управляющих символом может быть разной в разных операционных системах. В Windows это традиционно CR+LF, в Unix-подобных системах — только LF. Отсутствие единого стандарта часто приводит к проблемам, когда приходится передавать файлы между разными операционными системами[6][7][8].

Примечания[править | править код]

  1. Большая советская энциклопедия. — 3-е изд. — М.: «Советская энциклопедия», 1973. — Т. 11. — 608 с. — 629 000 экз.
  2. Remington and the Electromatic Архивная копия от 4 октября 2020 на Wayback Machine. Retrieved 2016-08-28
  3. The National Museum of American History: Electromatic Typewriter Архивная копия от 13 апреля 2019 на Wayback Machine. Retrieved 2016-08-28
  4. New Zealand’s Donald Murray: The Father of the Remote Typewriter Архивная копия от 7 апреля 2018 на Wayback Machine, Australian Typewriter Museum, Canberra, 9 March 2012; accessed 10 March 2012
  5. Eric S. Roberts. The Art and Science of C. — Addison-Wesley, 1995. — с. 311. (англ.)
  6. Этот день мы приближали, как могли — блокнот в Windows 10 стал понимать юниксовый перевод строки. Habr.com. Дата обращения: 9 августа 2020. Архивировано 13 сентября 2020 года.
  7. Саша Катушкова. Следите за концом строки. html academy. Дата обращения: 9 августа 2020. Архивировано 29 сентября 2020 года.
  8. The Great Newline Schism. CODING HORROR. Дата обращения: 9 августа 2020. Архивировано 24 сентября 2020 года.