Ctrl-s hangs the terminal emulator?
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-s
enables terminal scroll lock. Which prevents your terminal from scrolling (By sending an "XOFF" signal to pause the output of the software).
C-q
disables 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 ~/.bash_profile
or ~/.bashrc
:
stty -ixon
At the end of my .bashrc
script I have added:
#so as not to be disturbed by Ctrl-S ctrl-Q in terminals:
stty -ixon
Edit: over time I have removed this line from my config, as I eventually find it handy to freeze the terminal output with Ctrl-S and resume it with Ctrl-Q. It is not useful everyday, but it's nice to have.