Come disattivare guscio intercettazione di caratteri di controllo?
Domanda
Sto scrivendo una domanda di maledizioni in Python in ambiente UNIX. Voglio consentire all'utente di utilizzare C-Y per tirare da un anello di uccidere alla l'Emacs.
Il problema è, naturalmente, che C-Y viene catturato da mio guscio che poi invia SIGTSTP al mio processo. Inoltre, C-Z comporta anche SIGTSTP inviati, quindi prendere la segnale significa che C-Y e C-Z non sono distinguibili (ma anche senza questo le uniche soluzioni che vengono in mente sono estremamente hackish).
Lo so quello che sto chiedendo è possibile (in C, se non in Python), dal momento che Emacs lo fa. Come è possibile disattivare la gestione speciale della shell di alcuni caratteri di controllo inviati dalla tastiera e hanno i personaggi in questione compaiono sul processo di stdin?
Soluzione
Si veda il modulo termios
, e la pagina termios(3)
dell'uomo.
Altri suggerimenti
Per la funzionalità di base, utilizzare tty
. Ad esempio, la chiamata tty.setraw(sys.stdin)
metterà terminale di input standard in modalità raw.
Per il caso più generale, Python viene fornito con una termios biblioteca , ma si probabilmente bisogno di una certa esperienza con termios sapere come usarlo.
In alternativa, un modo economico è sborsare a stty
, che è una riga di comando per termios.