aboutsummaryrefslogtreecommitdiff
path: root/window.c
diff options
context:
space:
mode:
Diffstat (limited to 'window.c')
-rw-r--r--window.c41
1 files changed, 16 insertions, 25 deletions
diff --git a/window.c b/window.c
index 9289a727..154f908f 100644
--- a/window.c
+++ b/window.c
@@ -1,4 +1,4 @@
-/* $Id: window.c,v 1.59 2009-01-18 18:31:45 nicm Exp $ */
+/* $Id: window.c,v 1.60 2009-01-20 19:35:03 nicm Exp $ */
/*
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
@@ -205,42 +205,19 @@ window_create(const char *name, const char *cmd,
{
struct window *w;
u_int i;
- char *ptr, *copy;
w = xmalloc(sizeof *w);
w->flags = 0;
TAILQ_INIT(&w->panes);
w->active = NULL;
+ w->pgrp = -1;
w->sx = sx;
w->sy = sy;
options_init(&w->options, &global_window_options);
- if (name == NULL) {
- /* XXX */
- if (strncmp(cmd, "exec ", (sizeof "exec ") - 1) == 0)
- copy = xstrdup(cmd + (sizeof "exec ") - 1);
- else
- copy = xstrdup(cmd);
- if ((ptr = strchr(copy, ' ')) != NULL) {
- if (ptr != copy && ptr[-1] != '\\')
- *ptr = '\0';
- else {
- while ((ptr = strchr(ptr + 1, ' ')) != NULL) {
- if (ptr[-1] != '\\') {
- *ptr = '\0';
- break;
- }
- }
- }
- }
- w->name = xstrdup(xbasename(copy));
- xfree(copy);
- } else
- w->name = xstrdup(name);
-
for (i = 0; i < ARRAY_LENGTH(&windows); i++) {
if (ARRAY_ITEM(&windows, i) == NULL) {
ARRAY_SET(&windows, i, w);
@@ -256,6 +233,12 @@ window_create(const char *name, const char *cmd,
return (NULL);
}
w->active = TAILQ_FIRST(&w->panes);
+
+ if (name != NULL) {
+ w->name = xstrdup(name);
+ options_set_number(&w->options, "automatic-rename", 0);
+ } else
+ w->name = default_window_name(w);
return (w);
}
@@ -548,6 +531,7 @@ window_pane_spawn(struct window_pane *wp,
struct winsize ws;
int mode;
const char **envq;
+ struct timeval tv;
if (wp->fd != -1)
close(wp->fd);
@@ -566,6 +550,13 @@ window_pane_spawn(struct window_pane *wp,
ws.ws_col = screen_size_x(&wp->base);
ws.ws_row = screen_size_y(&wp->base);
+ wp->window->pgrp = -1;
+ if (gettimeofday(&wp->window->name_timer, NULL) != 0)
+ fatal("gettimeofday");
+ tv.tv_sec = 0;
+ tv.tv_usec = NAME_INTERVAL * 1000L;
+ timeradd(&wp->window->name_timer, &tv, &wp->window->name_timer);
+
switch (forkpty(&wp->fd, NULL, NULL, &ws)) {
case -1:
return (1);