Have the client pass its stdin fd to the server when identifying itself and

have the server use that rather than reopening the tty. If the fd isn't given,
use the old behaviour (so no need for a version change).

This allows tmux to be used as the shell, so also change so that when working
out the command to execute if default-command is empty (the default), tmux will
try not execute itself.
This commit is contained in:
Nicholas Marriott
2009-08-11 21:28:11 +00:00
parent 4ec8ade11c
commit 4310282a4c
5 changed files with 31 additions and 15 deletions

14
tty.c
View File

@ -45,9 +45,11 @@ void tty_cell(struct tty *,
const struct grid_cell *, const struct grid_utf8 *);
void
tty_init(struct tty *tty, char *path, char *term)
tty_init(struct tty *tty, int fd, char *path, char *term)
{
tty->path = xstrdup(path);
tty->fd = fd;
if (term == NULL || *term == '\0')
tty->termname = xstrdup("unknown");
else
@ -59,12 +61,14 @@ tty_init(struct tty *tty, char *path, char *term)
int
tty_open(struct tty *tty, const char *overrides, char **cause)
{
int mode;
int mode;
tty->fd = open(tty->path, O_RDWR|O_NONBLOCK);
if (tty->fd == -1) {
xasprintf(cause, "%s: %s", tty->path, strerror(errno));
return (-1);
tty->fd = open(tty->path, O_RDWR|O_NONBLOCK);
if (tty->fd == -1) {
xasprintf(cause, "%s: %s", tty->path, strerror(errno));
return (-1);
}
}
if ((mode = fcntl(tty->fd, F_GETFL)) == -1)