it-swarm-ru.tech

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

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

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

(На этот раз я работал с apt-Shell внутри bash внутри urxvt-- не знаю, кто из них отвечает за специальную обработку Ctrl-S: Я искал историю команд назад с C-rКак обычно для readline, но потом я хотел вернуться назад по истории с обычным - по крайней мере, в Emacs -C-s ( 1 , 2 , ), но это привело к зависанию терминала. Ну, прокрутка/просмотр страниц для просмотра прошлых вещей все еще работает в терминале, но никакого взаимодействия с процессами, выполняемыми там.)

772
imz -- Ivan Zakharyaschev

Ctrl-Q

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

ps: это не терминал или Shell, которые делают это, но драйвер терминала ОС.

924
ak2

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

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

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

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

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 означает "хорошо, продолжайте отправлять сейчас".

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

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

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

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

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

412
RBerteig