119: How do I handle C-s and C-q being used for flow control?
C-s and C-q are used in the XON/XOFF flow control protocol. This messes
things up when you're using Emacs, because Emacs binds these keys to
commands by default. Because Emacs won't honor them as flow control
characters, too many of these characters are not passed on and overwhelm
output buffers. Sometimes, intermediate software using XON/XOFF flow
control will prevent Emacs from ever seeing C-s and C-q.
Possible solutions:
* Disable the use of C-s and C-q for flow control.
You need to determine the cause of the flow control.
* your terminal
Your terminal may use XON/XOFF flow control to have time to display
all the characters it receives. For example, VT series terminals do
this. It may be possible to turn this off from a setup menu. For
example, on a VT220 you may select "No XOFF" in the setup menu. This
is also true for some terminal emulation programs on PCs.
When you turn off flow control at the terminal, you will also need to
turn it off at the other end, which might be at the computer you are
logged in to or at some terminal server in between.
If you turn off flow control, characters may be lost; using a printer
connected to the terminal may fail. You may be able to get around
this problem by modifying the "termcap" entry for your terminal to
include extra NUL padding characters.
* a modem
If you are using a dialup connection, the modems may be using
XON/XOFF flow control. It's not clear how to get around this.
* a router or terminal server
Some network box between the terminal and your computer may be using
XON/XOFF flow control. It may be possible to make it use some other
kind of flow control. You will probably have to ask your local
network experts for help with this.
* tty and/or pty devices
If your connection to Emacs goes through multiple tty and/or pty
devices, they may be using XON/XOFF flow control even when it is not
necessary.
Eirik Fuller <eirik@theory.tn.cornell.edu> writes:
Some versions of "rlogin" (and possibly telnet) do not pass flow
control characters to the remote system to which they connect. On
such systems, Emacs on the remote system cannot disable flow
control on the local system. Sometimes "rlogin -8" will avoid this
problem.
One way to cure this is to disable flow control on the local host
(the one running rlogin, not the one running rlogind) using the
stty command, before starting the rlogin process. On many systems,
"stty start u stop u" will do this.
Some versions of "tcsh" will prevent even this from working. One
way around this is to start another shell before starting rlogin,
and issue the stty command to disable flow control from that shell.
Use "stty -ixon" instead of "stty start u stop u" on some systems.
* Make Emacs speak the XON/XOFF flow control protocol.
You can make Emacs treat C-s and C-q as flow control characters by
evaluating the form
(enable-flow-control)
to unconditionally enable flow control or
(enable-flow-control-on "vt100" "h19")
(using your terminal names instead of "vt100" or "h19") to enable
selectively. These commands will automatically swap `C-s' and `C-q' to
`C-\' and `C-^'. Variables can be used to change the default swap keys
("flow-control-c-s-replacement" and "flow-control-c-q-replacement").
If you are fixing this for yourself, simply put the form in your .emacs
file. If you are fixing this for your entire site, the best place to
put it is in the lisp/site-start.el file. Putting this form in
lisp/default.el has the problem that if the user's .emacs file has an
error, this will prevent lisp/default.el from being loaded and Emacs
may be unusable for the user, even for correcting their .emacs file
(unless they're smart enough to move it to another name).
For further discussion of this issue, read the file PROBLEMS (in the
top-level directory when you unpack the Emacs source).