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. Я думал, что это была ошибка vim, так как при использовании C-s/ C-x C-sв emacs nox проблем не было . Однако только сейчас, когда я читал man-страницу и нажимал Ctrl-s, она также зависает man (я устанавливаю lessв качестве ПЕЙДЖЕРА).

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

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


6
Это может быть глупый вопрос, но вы не упомянули, что пытались в своем вопросе. Вы пытались C-qснова включить прокрутку, верно?
h3rrmiller

3
@ h3rrmiller да, все верно. Но я просто хотел бы знать, почему ctrl-sпроцесс зависает.
Хунсю Чен

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

2
Это глупая историческая установка в эмуляторах терминала; см. этот связанный вопрос о том, как починить свой терминал.
Инго Каркат

1
@IngoKarkat Я бы не сказал, что это глупо ... Я до сих пор использую его время от времени
h3rrmiller

Ответы:


361

Эта функция называется Software Flow Control (управление потоком 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.