Ctrl-s hangs the terminal emulator?

225,002

Solution 1

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

Solution 2

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.

Share:
225,002

Related videos on Youtube

Evan Harrison
Author by

Evan Harrison

Updated on September 18, 2022

Comments

  • Evan Harrison
    Evan Harrison over 1 year

    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 using CTRL-S indeed hangs my vim. I was thinking that it was vims fault, since there was no problem when I used C-s/C-x C-s in emacs nox. However, just now, when I was reading a man page and pressed Ctrl-s, it hung man as well (less was the output pager).

    So, can someone tell me what's happening?

    The terminal emulators I've testd are xterm and lxterminal. tty also has this problem. A Ctrl+q unhangs the terminal in all the cases.

    • h3rrmiller
      h3rrmiller about 11 years
      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?
    • Evan Harrison
      Evan Harrison about 11 years
      @h3rrmiller yeah, that's right. But I just would like to know why ctrl-s cause the process to hang.
    • h3rrmiller
      h3rrmiller about 11 years
      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
    • Ingo Karkat
      Ingo Karkat about 11 years
      This is a nowadays stupid historical setting in terminal emulators; see this related question for how to fix your terminal.
    • h3rrmiller
      h3rrmiller about 11 years
      @IngoKarkat I wouldn't say it's stupid... I still use it from time to time
    • Evan Harrison
      Evan Harrison about 11 years
      @h3rrmiller, but I hope you can tell me some details about the settings(from the stty manpage is a bit confusing).
    • dr_
      dr_ over 6 years
  • Keith
    Keith about 11 years
    Actually I think it goes at last as far back as the 70's, if not the 60's.
  • Brad P.
    Brad P. over 5 years
    "stty -ixon" <----- this is one of the most important things I've read on the internet in the last week. thank you.
  • RoboAlex
    RoboAlex about 5 years
    Actually, the history of this starts several decades earlier than 80's. See The TTY demystified.
  • Victoria Stuart
    Victoria Stuart about 4 years
    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: superuser.com/a/1328326/409327
  • ram
    ram over 3 years
    Just out of curiosity, which kind of situations do you use this in? I was about to add it to bashrc, but you've intrigued me.
  • Stephane Rolland
    Stephane Rolland over 3 years
    Can't remember last time I used it. Think of it like pressing the Pause key on a music player.
  • Valerij Dobler
    Valerij Dobler about 2 years
    ctrl + q saved me.