Ctrl-s hang terminal emulator?
I came across a sentence in vimdoc:
Note: CTRL-S does not work on all terminals and might block further input, use CTRL-Q to get going again.
and this key indeed hangs my vim. I was thinking that it was the fault of vim, since there was no problem when I use
C-x C-sin emacs nox. However just now when I was reading a manpage and pressed the
Ctrl-s, it hangs
manas well(I am setting
lessas the PAGER).
So can someone tell me what's happening?
The terminal emulators are
ttyalso has this problem. And a Ctrl+q puts the process right again in all the cases.
This might be a stupid question but you didn't mention what you have tried in your question. You tried `C-q` to re-enable scrolling, right?
@h3rrmiller yeah, that's right. But I just would like to know why `ctrl-s` cause the process to hang.
before there were keyboards with the scroll lock key `C-s` and `C-q` were the old days "scroll lock toggle". you can disable this functionality by adding `stty ixany` and `stty ixoff -ixon` to your `.bashrc`
This is a nowadays stupid historical setting in terminal emulators; see this related question for how to fix your terminal.
@h3rrmiller, but I hope you can tell me some details about the settings(from the stty manpage is a bit confusing).
This feature is called Software Flow Control (XON/XOFF flow control)
When one end of the data link (in this case the terminal emulator) can't receive any more data (because the buffer is full or nearing full or the user sends
C-s) it will send an "XOFF" to tell the sending end of the data link to pause until the "XON" signal is received.
What is happening under the hood is the "XOFF" is telling the TTY driver in the kernel to put the process that is sending data into a sleep state (like pausing a movie) until the TTY driver is sent an "XON" to tell the kernel to resume the process as if it were never stopped in the first place.
C-senables terminal scroll lock. Which prevents your terminal from scrolling (By sending an "XOFF" signal to pause the output of the software).
C-qdisables the scroll lock. Resuming terminal scrolling (By sending an "XON" signal to resume the output of the software).
This feature is legacy (back when terminals were very slow and did not allow scrolling) and is enabled by default.
To disable this feature you need the following in either
"stty -ixon" <----- this is one of the most important things I've read on the internet in the last week. thank you.
Actually, the history of this starts several decades earlier than 80's. See The TTY demystified.
If, for whatever reason -- you globally remapped ("inactivated") Ctrl-Q (e.g. to avoid accidentally quitting Firefox), adding `stty -ixon` to your `~/.bashrc` enables Ctrl-q in terminals. In my case, Ctrl-s was freezing Vim and I could not get back to it ... until I made that .bashrc modification. Details here: https://superuser.com/a/1328326/409327