Wie deaktiviert man das Abfangen von Shell -Interception von Kontrollfiguren?
Frage
Ich schreibe eine Flursanwendung in Python unter Unix. Ich möchte es dem Benutzer ermöglichen, Cy zu verwenden, um von einem Killring a la emacs zu yank.
Das Problem ist natürlich, dass Cy von meiner Hülle gefangen wird, die dann Sigtstp zu meinem Prozess sendet. Darüber hinaus führt CZ auch dazu, dass SIGTSTP gesendet wird, sodass das Signal das Signal fängt, dass Cy und CZ nicht unterscheidbar sind (obwohl dies auch ohne diese Lösungen, die ich mir vorstellen kann, extrem hackisch sind).
Ich weiß, was ich frage, ist möglich (in C, wenn nicht in Python), da EMACs es tut. Wie kann ich die spezielle Handhabung bestimmter Steuerzeichen der Shell deaktivieren, die von der Tastatur gesendet wurden, und die fraglichen Zeichen im Prozess "Stdin" erscheinen lassen?
Lösung
Siehe das termios
Modul und die termios(3)
Mann Seite.
Andere Tipps
Für die grundlegende Funktionalität verwenden Sie tty
. Zum Beispiel anrufen tty.setraw(sys.stdin)
Stellt das Terminal des Standardeingangs in den Rohmodus ein.
Für den allgemeineren Fall kommt Python mit a Termios Bibliothek, Aber Sie brauchen wahrscheinlich einige Erfahrungen mit Termios, um zu wissen, wie man es benutzt.
Alternativ ist ein billiger Weg, sich auszuschütteln stty
, was eine Befehlszeilenschnittstelle zu Termios ist.