Ctrl-s colgar emulador de terminal?


311

Encontré una oración en vimdoc:

Note: CTRL-S does not work on all terminals and might block
                further input, use CTRL-Q to get going again.

y esta llave realmente cuelga mi vim. Estaba pensando que fue culpa de vim, ya que no había ningún problema cuando uso C-s/ C-x C-sen emacs nox. Sin embargo, justo ahora, cuando estaba leyendo una página de manual y presioné Ctrl-s, también se cuelga man (estoy configurando lesscomo PAGER).

Entonces, ¿alguien puede decirme qué está pasando?

Los emuladores de terminal son xtermy lxterminal, y ttytambién tiene este problema. Y a Ctrl+ qvuelve a enderezar el proceso en todos los casos.


66
Esta podría ser una pregunta estúpida, pero no mencionó lo que intentó en su pregunta. Intentaste C-qvolver a habilitar el desplazamiento, ¿verdad?
h3rrmiller

3
@ h3rrmiller sí, es cierto. Pero solo me gustaría saber por qué ctrl-sel proceso se bloquea.
Hongxu Chen

antes había teclados con la tecla de bloqueo de desplazamiento C-sy C-qeran los viejos tiempos "alternar bloqueo de desplazamiento". puede deshabilitar esta funcionalidad agregando stty ixanyy stty ixoff -ixona su.bashrc
h3rrmiller

2
Este es un escenario histórico estúpido hoy en día en emuladores de terminal; vea esta pregunta relacionada sobre cómo arreglar su terminal.
Ingo Karkat

1
@IngoKarkat No diría que es estúpido ... Todavía lo uso de vez en cuando
h3rrmiller

Respuestas:


361

Esta característica se llama Software Flow Control (control de flujo XON / XOFF)

Cuando un extremo del enlace de datos (en este caso, el emulador de terminal) no puede recibir más datos (porque el búfer está lleno o casi lleno o el usuario envía C-s) enviará un "XOFF" para indicar el final del envío. enlace de datos para pausar hasta que se reciba la señal "XON".

Lo que sucede debajo del capó es que el "XOFF" le dice al controlador TTY en el kernel que ponga el proceso que está enviando datos en un estado de suspensión (como pausar una película) hasta que el controlador TTY reciba un "XON" para decirle al kernel para reanudar el proceso como si nunca se hubiera detenido en primer lugar.

C-shabilita el bloqueo de desplazamiento del terminal. Lo que evita que su terminal se desplace (enviando una señal "XOFF" para pausar la salida del software).

C-qdeshabilita el bloqueo de desplazamiento. Reanudar el desplazamiento del terminal (enviando una señal "XON" para reanudar la salida del software).

Esta característica es heredada (cuando los terminales eran muy lentos y no permitían el desplazamiento) y está habilitada de manera predeterminada.

Para deshabilitar esta función, necesita lo siguiente en ~/.bash_profileo ~/.bashrc:

stty -ixon

10
En realidad, creo que al menos se remonta a los años 70, si no a los 60.
Keith

Sin embargo, parece que no funciona en Ubuntu 16.04.
Robert

3
"stty -ixon" <----- esta es una de las cosas más importantes que he leído en internet en la última semana. gracias.
Brad P.

En realidad, la historia de esto comienza varias décadas antes de los 80. Ver El TTY desmitificado .
RoboAlex

25

Al final de mi .bashrcscript he agregado:

#so as not to be disturbed by Ctrl-S ctrl-Q in terminals:
stty -ixon
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.