Как разморозить после случайного нажатия Ctrl-S в терминале?

Это довольно часто случается со мной: после того, как я нажал (с другим намерением) Ctrl-S в терминале, взаимодействие (ввод или вывод) с ним заморожено. Вероятно, это своего рода «замок прокрутки» или что-то еще.

Как я могу разморозить терминал после этого?

(На этот раз я работал с apt-shell внутри bash внутри urxvt) - не уверен, кто из них отвечает для специальной обработки Ctrl-S : я искал историю команд назад с помощью Cr , как обычно, для readline, но потом я хотел перейти «назад» вперед история с обычным - по крайней мере, в Emacs - Cs ( 1 , 2 , 3 ), но это заставило терминал замерзнуть. Ну, прокрутка /пейджинг для просмотра прошлых вещей все еще работает в терминале, но нет взаимодействие с выполняемыми там процессами.)

578 голосов | спросил imz -- Ivan Zakharyaschev 27 PMpWed, 27 Apr 2011 16:19:28 +040019Wednesday 2011, 16:19:28

2 ответа


668

CTRL - Q

Чтобы полностью отключить эту функцию, вставьте сценарий stty -ixon в сценарий запуска. Чтобы позволить любому ключу снова возвращаться, используйте stty ixany.

ps: Это не терминал и не оболочка, которые делают это, но драйвер терминала операционной системы.

ответил ak2 27 PMpWed, 27 Apr 2011 16:29:51 +040029Wednesday 2011, 16:29:51
307

Ctrl - Q действительно является ответом. Мне показалось, что я немного задержусь в этой истории, которая слишком длинная, чтобы поместиться на полях правильный ответ ak2 .

В темные века терминал был большой частью оборудования, которое подключалось к удаленному устройству (первоначально другому терминалу, потому что телетайпы были намного легче научиться работать, чем телеграфный ключ) по длинному проводу или по телефонным линиям с модемами. К тому времени, когда Unix разрабатывалась, код ASCII уже был хорошо установлен (хотя конкурирующий код EBCDIC от IBM все еще был силовым, с которым нужно считаться).

Самые ранние терминалы сохраняли печатную запись каждого полученного символа. Пока персонажи прибыли не быстрее, чем печатающая головка может набрать их, по крайней мере. Но как только терминалы на основе ЭЛТ были возможны, возникла проблема, что на ЭЛТ было только около 25 строк, а 25 строк из 80 символов представляли достаточное количество ОЗУ, о которых никто не думал серьезно о предоставлении большего количества ОЗУ для персонажей, которые прокручивались сверху экрана.

Таким образом, было принято какое-то соглашение, чтобы сигнализировать о том, что отправляющая сторона должна остановиться, чтобы догнать читателя.

7-разрядный код ASCII имеет 33 кодовых пункта, предназначенных для управляющих символов (от 0 до 31 и 127). Некоторые из них действительно хорошо зарекомендовали себя, например NUL (листы пустых листов для нарезки, зазоры и сращивания), DEL («вычеркнутые» символы на бумажной ленте обозначается пробиванием всех семи отверстий), BEL (ding!), CR, LF и TAB. Но четыре были определены явно для управления самим терминальным устройством (DC1 до DC4 aka Ctrl + Q, Ctrl + R, Ctrl + S и Ctrl + T).

Моя лучшая догадка заключается в том, что какой-то инженер думал, что (как мнемоники идут), «S» для «Стоп» и «Q» для «Продолжить» были не так уж плохи и назначали DC3 означает «прекратить отправку» и DC1 означает «ok, продолжить отправку».

Даже эта конвенция уже была хорошо установлена ​​к тому моменту, когда Unix покидает гнездо в Bell Labs, чтобы выйти в мир.

Соглашение известно как управление потоком программного обеспечения и чрезвычайно распространено в реальных последовательных устройствах. Это непросто реализовать правильно, поскольку это предотвращает использование любого из этих символов для какой-либо другой цели в канале связи, а сигнал Стоп должен обрабатываться перед любыми ожидающими полученными символами, чтобы избежать отправки большего, чем принимающая сторона, может ручка.

Если практично, использование дополнительных сигналов вне полосы из потока последовательных данных для управления потоком является весьма предпочтительным. На прямых проводных соединениях, которые могут обеспечить дополнительные сигнальные провода, вы найдете аппаратное рукопожатие, которое освобождает эти символы для других целей.

Конечно, сегодняшнее терминальное окно не использует фактический физический последовательный порт, имеет полосы прокрутки и на самом деле не нуждается в рукопожатии программного обеспечения. Но соглашение сохраняется.

Я помню утверждение, что Ричард Столлман получил жалобы на его сопоставление Ctrl + S для инкрементного поиска в первых выпусках emacs и что он был довольно несимпатичным для любого пользователя, который должен был зависеть от 7-битного потока программного обеспечения контролируемое соединение.

ответил RBerteig 28 AMpThu, 28 Apr 2011 01:30:33 +040030Thursday 2011, 01:30:33

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132