Ctrl-s підключити емулятор терміналу?


311

Я натрапив на пропозицію vimdoc:

Note: CTRL-S does not work on all terminals and might block
                further input, use CTRL-Q to get going again.

і цей ключ справді висить у мене. Я думав, що це вина vim, оскільки не було проблем, коли я використовую C-s/ C-x C-sв emacs nox. Однак якраз зараз, коли я читав manpage і натискав на Ctrl-sнього, він також висить man (я встановлюю lessяк ПАГЕР).

То чи може хтось сказати мені, що відбувається?

Емулятори терміналів є xtermі є lxterminal, і ttyтакож є ця проблема. І Ctrl+ qставить процес знову правильно у всіх випадках.


6
Це може бути дурним питанням, але ви не згадали, що ви спробували у своєму питанні. Ви намагалися C-qзнову ввімкнути прокрутку, правда?
h3rrmiller

3
@ h3rrmiller так, це правильно. Але я просто хотів би знати, чому ctrl-sзмушує процес зависати.
Hongxu Chen

раніше існували клавіатури з клавішею блокування прокрутки C-sі C-qбули давніми "перемиканнями блокування прокрутки". ви можете вимкнути цю функціональність, додавши stty ixanyі stty ixoff -ixonдо свого.bashrc
h3rrmiller

2
Це сьогодні дурна історична установка в термінальних емуляторах; перегляньте це пов’язане питання щодо виправлення терміналу.
Інго Каркат

1
@IngoKarkat Я б не сказав, що це дурно ... Я все ще використовую його час від часу
h3rrmiller

Відповіді:


361

Ця функція називається програмним керуванням потоком (контроль потоку XON / XOFF)

Коли один кінець посилання даних (у цьому випадку емулятор терміналу) не може більше отримувати дані (оскільки буфер повний або наближається до повного або користувач надсилає C-s), він надішле "XOFF", щоб повідомити про кінець відправки дані посилання на паузу до отримання сигналу "XON".

Що відбувається під кришкою - "XOFF" говорить драйверу TTY в ядрі, щоб перевести процес, який надсилає дані в стан сну (наприклад, призупинення фільму), поки драйвер TTY не надішле "XON", щоб повідомити ядро, щоб відновити процес так, ніби його ніколи не зупиняли.

C-sдозволяє блокувати прокрутку терміналу. Що заважає вашому терміналу прокручуватися (надсилаючи сигнал "XOFF", щоб призупинити вихід програмного забезпечення).

C-qвимикає блокування прокрутки. Відновлення прокрутки терміналу (надсилаючи сигнал "XON" для відновлення виходу програмного забезпечення).

Ця функція застаріла (назад, коли термінали були дуже повільними і не дозволяли прокручувати), і вона включена за замовчуванням.

Щоб відключити цю функцію , вам потрібно наступне або ~/.bash_profileабо ~/.bashrc:

stty -ixon

10
Насправді я думаю, що це нарешті сягає 70-х, якщо не 60-ті.
Кіт

Однак, здається, він не працює на Ubuntu 16.04.
Роберт

3
"stty -ixon" <----- це одна з найважливіших речей, яку я читав в Інтернеті за останній тиждень. спасибі.
Бред П.

Власне, історія цього починається на кілька десятиліть раніше 80-х. Дивіться демістифікований TTY .
RoboAlex

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.