Як розморозити після випадкового натискання Ctrl-S у терміналі?


729

Це ситуація, яка трапляється зі мною досить часто: після того, як я натискаю (з іншим наміром) Ctrl-Sв терміналі, взаємодія (вхід або вихід) з ним заморожується. Це, мабуть, свого роду «замок прокрутки» чи що завгодно.

Як розморозити термінал після цього?

(Цього разу я працював apt-shellзсередини bashвсередині - не urxvtвпевнений, хто з них відповідає за особливу обробку Ctrl-S. Я шукав історію команд назад C-r, як зазвичай для перегляду рядків, але потім я хотів повернутися "назад "вперед через історію зі звичайним - принаймні, в Emacs-- C-s( 1 , 2 , 3 ), але це призвело до замерзання терміналу. Ну, прокрутка / пейджинг для перегляду минулих речей все ще працює в терміналі, але взаємодії немає з процесами, які там працюють.)


23
Я працював vimі натискав Ctrl-S, щоб зберегти свої зміни. А-оXD
ADTC

4
Чому це існує в першу чергу?
neverMind9

Відповіді:


862

Ctrl-Q

Щоб це взагалі відключити, дотримуйтесь stty -ixonсценарій запуску. Щоб дозволити будь-якому ключу знову повернутись до потоку, використовуйте stty ixany.

ps: Це робить не термінал, ні оболонка, але драйвер терміналу ОС.


8
Дякую! До речі, там вони запропонували Ctrl-C; це теж працює? (І в іншому місці , вони запропонували так Ctrl-Qсамо, як і ви.)
imz - Іван Захарящев

23
Ctrl-C працює, але він також надсилає сигнал переривання, який, як правило, не хотів би. (Btw, ключі, які використовуються для цих речей, можна налаштувати до stty
кінця

2
Пам’ятаю, випробував цю комбінацію на моєму Apple] [клон, і він також працював там - Ctrl-Sі потім Ctrl-Qвідновити.
sashoalm

19
ДЯКУЮ, БОЖЕ !! Це вже багато років клопоче мене. Не впевнений, чому VIM просто не реалізував це як основний ярлик для збереження, а не що б там не було. Приємно знати, що є втеча з в'язниці - це заморожений екран VIM завдяки природному використанню CTRL + S (збереження ярлика), який застосований майже у всіх програмах ЗАКЛЮЧЕНО.
Прем'єр-міністр Краанг

8
@SanuelJackson Ctrl-S "зберегти ярлик" застосовано майже у всіх програмах DESKTOP EXCEPT vim. І крім Emacs. І Нано. І кожен інший "додаток" ви можете запустити на терміналі, саме тому, що він вже використовується терміналом для контролю потоку. З тієї ж причини ви не знайдете додаток для робочого столу Linux за допомогою ярликів Ctrl-Alt-FN: тому що вони вже використовуються системою.
герлос

384

Ctrl- Qце справді відповідь. Я думав, що я закинув би цю історію, яка занадто довга, щоб вписатись в поля правильної відповіді ak2 .

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

На ранніх терміналах зберігається друкований запис про кожен отриманий символ. Поки символи прибули не швидше, ніж друкована головка могла їх набрати, принаймні. Але як тільки термінали на основі CRT стали можливими, виникла проблема, що лише близько 25 рядків вміщується в CRT, а 25 рядків з 80 символів представляють достатню кількість оперативної пам’яті, що ніхто не задумувався серйозно про надання більшої кількості оперативної пам’яті для символів, які прокручувались вгорі екран.

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

7-бітний код ASCII містить 33 кодові точки, присвячені контрольним символам (від 0 до 31 і 127). Деякі з них були дійсно добре встановлені цілі, такі як NUL(лідер порожній паперової стрічки для нарізування різьблення, щілин і стиків), DEL( «перекресленим» символи на паперовій стрічці , зазначені пробивати всі сім отворів), BEL(дзень!), CR, LF, І TAB. Але чотири були визначені явним чином для керування самим термінальним пристроєм ( DC1до DC4aka Ctrl + Q, Ctrl + R, Ctrl + S і Ctrl + T).

Я найкраще здогадуюсь, що якийсь інженер подумав, що (у міру мнемоніки) "S" для "Стоп" і "Q" для "Продовжити" були не надто поганими, і призначали, DC3що означають "будь ласка, припиніть надсилати" і DC1означати "добре , продовжуйте надсилати зараз ".

Навіть ця конвенція була вже добре встановлена ​​до того часу, коли Unix залишає гніздо в Bell Labs, щоб вийти у світ.

Конвенція відома як програмний контроль потоку і надзвичайно поширена в реальних серійних пристроях. Реалізувати це непросто, оскільки це перешкоджає використанню будь-якого з цих символів для будь-яких інших цілей на каналі зв'язку, і сигнал зупинки повинен оброблятися перед будь-якими очікуваними прийнятими символами, щоб уникнути надсилання більше, ніж може приймати кінець прийому ручка.

Якщо практично, використання переважних сигналів поза діапазону з послідовного потоку даних для управління потоком є ​​переважним. На прямих провідних з'єднаннях, які можуть дозволити додатковий провід сигналу, ви знайдете апаратне рукостискання, яке звільняє цих символів для іншого використання.

Звичайно, сьогоднішнє вікно терміналу не використовує фактичний фізичний послідовний порт, має смуги прокрутки, і зовсім не потрібно рукостискання з програмним забезпеченням. Але конвенція зберігається.

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


2
Дякую .. дуже цікаво ... Мені було цікаво: Чому на землі хтось вирішив продовжувати процес із "Q", який зазвичай використовується (зараз) для Виходу ... Угрупування QRST пояснює це .....
Пітер.O

13
Дуже дякую за цю частину історії. Нещодавно я відключив управління потоком за замовчуванням в емуляторі терміналів, який я підтримую, але йому довелося відновити його досить швидко після голосових протестів традиціоналістів Unix, які все ще використовують його. Я встановлюю біт ixany замість цього, так що принаймні люди, які натискають ^ S, не знаючи про ^ Q, не зациклюються.
ak2

3
@RBerteig Я натрапив на щось подібне, дізнавшись про зворотний простір та видалення. Backspace офіційно ^ H, а видалити ^? Деякі люди, як розробники Emacs (знову Сталман?), Хотіли ^ H доступні для загальних цілей, як ярлики, як Help. Послідовність виходу ^ [[3 ~ чи щось подібне було створено для заміни ^? і зворотний простір тепер став старим символом видалення ^ ?. Насправді я бачив ncurses, спеціально зафіксовані на дистрибутивах Linux, щоб перезавантажувати клавіші those у terminfo, тоді як ncurses на FreeBSD є без виправлення, викликаючи деяку прикрою плутанину, що призводить до того, що резервна область не працює.
penguin359

23
Мені було цікаво, чому DEL мав код 127, а не групувався з іншими символами управління, поки я вперше не грав з паперовою стрічкою та ASR33. Як тільки я зрозумів, що це призведе до пробивання всіх отворів, а це означає, що можна видалити будь-який раніше перфорований символ, щоб видалити його, це мало сенс.
RBerteig

3
@SanuelJackson Минуло уважно, але vimrc за замовчуванням, що постачається з Windows, відображає <Cs> на ": update" протягом багатьох років. Я також впевнений, що в минулому я бачив це в деяких дистрибутивах для gvim. Якщо ви використовуєте vim в терміналі, ця історія все ще дуже актуальна. Сучасні емулятори терміналів все ще реалізують клавіші управління потоком, тому навіть якщо карта Vim їх надіслала, вони ніколи їх не побачать, якщо кожен користувач не вийде зі шляху, щоб відключити управління потоком, як описано у прийнятій відповіді.
Дрю
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.