Ctrl-s эмулятор терминального терминала?

Я встретил предложение в vimdoc:

Примечание. CTRL-S не работает на всех терминалах и может блокировать
                дальнейший ввод, используйте CTRL-Q, чтобы снова начать движение.

, и этот ключ действительно висит в моем vim. Я думал, что это вина вима, потому что не было проблем, когда я использовал C-s /C-x C-s в emacs nox. Однако только когда я читал man-страницу и нажал Ctrl-s, он зависает man (я устанавливаю less как PAGER).

Так может кто-нибудь сказать мне, что происходит?

Терминальные эмуляторы xterm и lxterminal, а tty также имеет эту проблему. И Ctrl + q снова возвращает процесс во всех случаях.

240 голосов | спросил Hongxu Chen 11 PMpThu, 11 Apr 2013 19:35:06 +040035Thursday 2013, 19:35:06

2 ответа


285

Эта функция называется управлением потоком программного обеспечения (управление потоком XON /XOFF)

Когда один конец линии передачи данных (в данном случае эмулятор терминала) не может получить больше данных (поскольку буфер заполнен или близок к полной или пользователь отправляет Cs), он отправит «XOFF», чтобы сообщить отправляющему концу линии передачи данных приостановить до получения сигнала «XON».

Что происходит под капотом, «XOFF» сообщает драйверу TTY в ядре, чтобы он передавал данные в состояние ожидания (например, приостановка фильма), пока драйвер TTY не отправлен «XON», чтобы ядро ​​возобновило процесс, как будто оно никогда не останавливалось в первую очередь.

C-s позволяет блокировать прокрутку терминала. Это предотвращает прокрутку вашего терминала (путем отправки сигнала «XOFF» для приостановки вывода программного обеспечения).

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

Эта функция устарела (с 80-х годов, когда терминалы были очень медленными и не разрешали прокрутку) и по умолчанию включена.

Чтобы отключить эту функцию, вам понадобится следующее: ~ /.bash_profile или ~ /.bashrc:

stty -ixon
ответил h3rrmiller 11 PMpThu, 11 Apr 2013 20:23:12 +040023Thursday 2013, 20:23:12
17

В конце моего сценария .bashrc я добавил:

# так как это не должно быть нарушено Ctrl-S ctrl-Q в терминалах:
stty -ixon
ответил Stephane Rolland 11 PMpThu, 11 Apr 2013 20:17:17 +040017Thursday 2013, 20:17:17

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

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

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