version 1.20, 2009/08/12 09:14:25 |
version 1.21, 2009/08/13 19:04:00 |
|
|
|
|
struct window * |
struct window * |
window_create(const char *name, const char *cmd, const char *cwd, |
window_create(const char *name, const char *cmd, const char *cwd, |
struct environ *env, u_int sx, u_int sy, u_int hlimit, char **cause) |
struct environ *env, struct termios *tio, u_int sx, u_int sy, u_int hlimit, |
|
char **cause) |
{ |
{ |
struct window *w; |
struct window *w; |
struct window_pane *wp; |
struct window_pane *wp; |
|
|
w = window_create1(sx, sy); |
w = window_create1(sx, sy); |
wp = window_add_pane(w, hlimit); |
wp = window_add_pane(w, hlimit); |
layout_init(w); |
layout_init(w); |
if (window_pane_spawn(wp, cmd, cwd, env, cause) != 0) { |
if (window_pane_spawn(wp, cmd, cwd, env, tio, cause) != 0) { |
window_destroy(w); |
window_destroy(w); |
return (NULL); |
return (NULL); |
} |
} |
|
|
} |
} |
|
|
int |
int |
window_pane_spawn(struct window_pane *wp, |
window_pane_spawn(struct window_pane *wp, const char *cmd, |
const char *cmd, const char *cwd, struct environ *env, char **cause) |
const char *cwd, struct environ *env, struct termios *tio, char **cause) |
{ |
{ |
struct winsize ws; |
struct winsize ws; |
int mode; |
int mode; |
|
|
tv.tv_usec = NAME_INTERVAL * 1000L; |
tv.tv_usec = NAME_INTERVAL * 1000L; |
timeradd(&wp->window->name_timer, &tv, &wp->window->name_timer); |
timeradd(&wp->window->name_timer, &tv, &wp->window->name_timer); |
|
|
switch (wp->pid = forkpty(&wp->fd, wp->tty, NULL, &ws)) { |
switch (wp->pid = forkpty(&wp->fd, wp->tty, tio, &ws)) { |
case -1: |
case -1: |
wp->fd = -1; |
wp->fd = -1; |
xasprintf(cause, "%s: %s", cmd, strerror(errno)); |
xasprintf(cause, "%s: %s", cmd, strerror(errno)); |