Como desativar a interceptação da concha dos caracteres de controle?
Pergunta
Estou escrevendo um aplicativo de maldição no Python no UNIX. Quero permitir que o usuário use o CY para arrancar de um anel de matar a la emacs.
O problema é, obviamente, que o CY é capturado pelo meu shell, que envia SigtStp para o meu processo. Além disso, a CZ também resulta em que o SIGTSTP está sendo enviado, portanto, pegar o sinal significa que Cy e CZ não são distinguíveis (embora mesmo sem isso as únicas soluções que eu consigo pensar são extremamente hackish).
Sei o que estou perguntando é possível (em C, se não estiver em Python), já que o Emacs faz isso. Como posso desativar o manuseio especial do shell de certos caracteres de controle enviados do teclado e fazer com que os personagens em questão apareçam no processo do processo?
Solução
Veja o termios
módulo e o termios(3)
página de homem.
Outras dicas
Para funcionalidade básica, use tty
. Por exemplo, chamando tty.setraw(sys.stdin)
colocará o terminal da entrada padrão no modo bruto.
Para o caso mais geral, Python vem com um Termios Library, mas você provavelmente precisa de alguma experiência com o Termios para saber como usá -lo.
Alternativamente, uma maneira barata é gastar stty
, que é uma interface de linha de comando para Termios.