Comment désactiver l'interception shell de caractères de contrôle?
Question
J'écris une application en Python malédictions sous UNIX. Je veux permettre à l'utilisateur d'utiliser C-Y Yank d'un anneau kill a la Emacs.
Le problème est, bien sûr, que C-Y est pris par ma coquille qui envoie ensuite SIGTSTP à mon processus. En outre, C-Z se traduit également par SIGTSTP être envoyé, attrapant le signal signifie que C-Y et C-Z ne se distinguent pas (mais même sans cela, les seules solutions que je peux penser sont extrêmement hackish).
Je sais ce que je demande est possible (en C sinon en Python), depuis Emacs fait. Comment puis-je désactiver un traitement spécial de certains caractères de contrôle envoyés à partir du clavier et ont apparaissent les personnages en question sur le processus du shell stdin?
La solution
Voir le module termios
, et la page de manuel termios(3)
.
Autres conseils
Pour les fonctionnalités de base, utilisez tty
. Par exemple, appeler tty.setraw(sys.stdin)
mettra le terminal d'entrée standard en mode brut.
Pour le cas plus général, Python est livré avec un termios bibliothèque , mais vous probablement besoin d'une certaine expérience avec termios de savoir comment l'utiliser.
En variante, un moyen pas cher est de bombarder à stty
, qui est une interface de ligne de commande à termios.