Disable ISIG mode entirely if FLAG_CTRLC is set

This commit is contained in:
Paul LeoNerd Evans 2011-05-24 16:40:19 +01:00
parent 41e9e0d39e
commit 6b17f3f620
1 changed files with 7 additions and 3 deletions

View File

@ -280,10 +280,14 @@ static TermKey *termkey_new_full(int fd, int flags, size_t buffsize, int waittim
termios.c_iflag &= ~(IXON|INLCR|ICRNL); termios.c_iflag &= ~(IXON|INLCR|ICRNL);
termios.c_lflag &= ~(ICANON|ECHO); termios.c_lflag &= ~(ICANON|ECHO);
termios.c_cc[VQUIT] = 0;
termios.c_cc[VSUSP] = 0;
if(flags & TERMKEY_FLAG_CTRLC) if(flags & TERMKEY_FLAG_CTRLC)
termios.c_cc[VINTR] = 0; /* want no signal keys at all, so just disable ISIG */
termios.c_lflag &= ~ISIG;
else {
/* Disable Ctrl-\==VQUIT and Ctrl-D==VSUSP but leave Ctrl-C as SIGINT */
termios.c_cc[VQUIT] = 0;
termios.c_cc[VSUSP] = 0;
}
tcsetattr(fd, TCSANOW, &termios); tcsetattr(fd, TCSANOW, &termios);
} }