Break out termios initialization into a separate function, from George

Nachman.
pull/1/head
Nicholas Marriott 2012-03-17 21:27:51 +00:00
parent 164e85cca7
commit 889fe42e11
2 changed files with 15 additions and 7 deletions

1
tmux.h
View File

@ -1444,6 +1444,7 @@ void environ_update(const char *, struct environ *, struct environ *);
void environ_push(struct environ *);
/* tty.c */
void tty_init_termios(int, struct termios *, struct bufferevent *);
void tty_raw(struct tty *, const char *);
void tty_attributes(struct tty *, const struct grid_cell *);
void tty_reset(struct tty *);

21
tty.c
View File

@ -175,18 +175,19 @@ tty_error_callback(
}
void
tty_start_tty(struct tty *tty)
tty_init_termios(int fd, struct termios *orig_tio, struct bufferevent *bufev)
{
struct termios tio;
if (tty->fd == -1 || tcgetattr(tty->fd, &tty->tio) != 0)
if (fd == -1 || tcgetattr(fd, orig_tio) != 0)
return;
setblocking(tty->fd, 0);
setblocking(fd, 0);
bufferevent_enable(tty->event, EV_READ|EV_WRITE);
if (bufev != NULL)
bufferevent_enable(bufev, EV_READ|EV_WRITE);
memcpy(&tio, &tty->tio, sizeof tio);
memcpy(&tio, orig_tio, sizeof tio);
tio.c_iflag &= ~(IXON|IXOFF|ICRNL|INLCR|IGNCR|IMAXBEL|ISTRIP);
tio.c_iflag |= IGNBRK;
tio.c_oflag &= ~(OPOST|ONLCR|OCRNL|ONLRET);
@ -194,8 +195,14 @@ tty_start_tty(struct tty *tty)
ECHOPRT|ECHOKE|ECHOCTL|ISIG);
tio.c_cc[VMIN] = 1;
tio.c_cc[VTIME] = 0;
if (tcsetattr(tty->fd, TCSANOW, &tio) == 0)
tcflush(tty->fd, TCIOFLUSH);
if (tcsetattr(fd, TCSANOW, &tio) == 0)
tcflush(fd, TCIOFLUSH);
}
void
tty_start_tty(struct tty *tty)
{
tty_init_termios(tty->fd, &tty->tio, tty->event);
tty_putcode(tty, TTYC_SMCUP);