No linux, você usaria
$ stty intr undef
no terminal em questão. Isso define o caractere de interrupção como nada ("undef"). Para restaurar você usaria
$ stty intr ^c
Veja man stty
para detalhes.
Quando você envia um caractere de controle do terminal, por exemplo, se você pressionou Ctrl+C
, a disciplina de linha receberá o byte que representa esse caractere de controle (que é 0x03
no caso de Ctrl+C
).
Agora, em vez da disciplina de linha enviar o byte 0x03
para o programa associado ao terminal, ele irá enviar o sinal SIGINT
(ou ele fará alguma outra ação se é um personagem de controle diferente).
Agora existe uma maneira de evitar que a disciplina de linha manipule caracteres de controle, então o que eu quero é que o programa associado ao terminal receba os bytes reais que representam os caracteres de controle ( 0x03
no nosso caso).
different control character […] control characters
Eu anoto o plural. Você está procurando o modo de entrada não-canônico , conhecido antes do padrão POSIX como modo raw . Este é o modo que os aplicativos que usam GNU Readline, ZLE ou libedit utilizam. O código deles define isso com as funções da biblioteca tcgetattr()
, cfmakeraw()
e tcsetattr()
, ou similar. Estes são também os alicerces de stty raw
. (Observe a existência de stty sane
se você jogar com isso.)
cfmakeraw()
. Páginas do manual do NetBSD. 2004.