web-dev-qa-db-fra.com

Emulateur de terminal CTRL-Hang?

Je suis tombé sur une phrase dans vimdoc:

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

et cette clé accroche en effet mon vim. Je pensais que c'était la faute de vim, car il n'y avait aucun problème lorsque j'utilisais C-s/C-x C-s dans emacs nox. Cependant, tout à l'heure, lorsque je lisais une page de manuel et que j'appuyais sur Ctrl-s, il bloque également man (je configure less comme PAGER).

Alors, quelqu'un peut-il me dire ce qui se passe?

Les émulateurs de terminaux sont xterm et lxterminal, et tty a également ce problème. Et un Ctrl+q remet le processus en marche dans tous les cas.

333
Hongxu Chen

Cette fonctionnalité est appelée Software Flow Control (contrôle de flux XON/XOFF)

Lorsqu'une extrémité de la liaison de données (dans ce cas l'émulateur de terminal) ne peut plus recevoir de données (car le tampon est plein ou presque plein ou l'utilisateur envoie C-s) il enverra un "XOFF" pour dire à l'extrémité d'envoi de la liaison de données de faire une pause jusqu'à ce que le signal "XON" soit reçu.

Ce qui se passe sous le capot, c'est que le "XOFF" dit au pilote TTY dans le noyau de mettre le processus qui envoie les données dans un état de veille (comme mettre en pause un film) jusqu'à ce que le pilote TTY reçoive un "XON" pour dire au noyau pour reprendre le processus comme s'il n'avait jamais été arrêté en premier lieu.

C-s active le verrouillage du défilement du terminal. Ce qui empêche votre terminal de défiler (en envoyant un signal "XOFF" pour suspendre la sortie du logiciel).

C-q désactive le verrouillage du défilement. Reprise du défilement du terminal (en envoyant un signal "XON" pour reprendre la sortie du logiciel).

Cette fonctionnalité est héritée (à l'époque où les terminaux étaient très lents et ne permettaient pas le défilement) et est activée par défaut.

Pour désactiver cette fonction, vous avez besoin des éléments suivants dans ~/.bash_profile ou ~/.bashrc:

stty -ixon
379
h3rrmiller

À la fin de mon .bashrc script que j'ai ajouté:

#so as not to be disturbed by Ctrl-S ctrl-Q in terminals:
stty -ixon
28
Stephane Rolland