version 1.8, 2009/10/10 15:23:13 |
version 1.9, 2009/11/04 23:54:57 |
|
|
|
|
#include "tmux.h" |
#include "tmux.h" |
|
|
|
void window_name_callback(unused int, unused short, void *); |
char *parse_window_name(const char *); |
char *parse_window_name(const char *); |
|
|
void |
void |
set_window_names(void) |
queue_window_name(struct window *w) |
{ |
{ |
struct window *w; |
struct timeval tv; |
u_int i; |
|
char *name, *wname; |
|
struct timeval tv, tv2; |
|
|
|
if (gettimeofday(&tv, NULL) != 0) |
tv.tv_sec = 0; |
fatal("gettimeofday failed"); |
tv.tv_usec = NAME_INTERVAL * 1000L; |
|
|
for (i = 0; i < ARRAY_LENGTH(&windows); i++) { |
evtimer_del(&w->name_timer); |
w = ARRAY_ITEM(&windows, i); |
evtimer_set(&w->name_timer, window_name_callback, w); |
if (w == NULL || w->active == NULL) |
evtimer_add(&w->name_timer, &tv); |
continue; |
} |
|
|
if (timercmp(&tv, &w->name_timer, <)) |
void |
continue; |
window_name_callback(unused int fd, unused short events, void *data) |
memcpy(&w->name_timer, &tv, sizeof w->name_timer); |
{ |
tv2.tv_sec = 0; |
struct window *w = data; |
tv2.tv_usec = NAME_INTERVAL * 1000L; |
char *name, *wname; |
timeradd(&w->name_timer, &tv2, &w->name_timer); |
|
|
|
if (!options_get_number(&w->options, "automatic-rename")) |
queue_window_name(w); /* XXX even if the option is off? */ |
continue; |
if (!options_get_number(&w->options, "automatic-rename")) |
|
return; |
|
|
if (w->active->screen != &w->active->base) |
if (w->active->screen != &w->active->base) |
name = NULL; |
name = NULL; |
|
else |
|
name = get_proc_name(w->active->fd, w->active->tty); |
|
if (name == NULL) |
|
wname = default_window_name(w); |
|
else { |
|
/* |
|
* If tmux is using the default command, it will be a login |
|
* shell and argv[0] may have a - prefix. Remove this if it is |
|
* present. Ick. |
|
*/ |
|
if (w->active->cmd != NULL && *w->active->cmd == '\0' && |
|
name != NULL && name[0] == '-' && name[1] != '\0') |
|
wname = parse_window_name(name + 1); |
else |
else |
name = get_proc_name(w->active->fd, w->active->tty); |
|
if (name == NULL) |
|
wname = default_window_name(w); |
|
else { |
|
/* |
|
* If tmux is using the default command, it will be a |
|
* login shell and argv[0] may have a - prefix. Remove |
|
* this if it is present. Ick. |
|
*/ |
|
if (w->active->cmd != NULL && *w->active->cmd == '\0' && |
|
name != NULL && name[0] == '-' && name[1] != '\0') |
|
wname = parse_window_name(name + 1); |
|
else |
|
wname = parse_window_name(name); |
wname = parse_window_name(name); |
xfree(name); |
xfree(name); |
} |
} |
|
|
if (w->active->fd == -1) { |
if (w->active->fd == -1) { |
xasprintf(&name, "%s[dead]", wname); |
xasprintf(&name, "%s[dead]", wname); |
xfree(wname); |
xfree(wname); |
wname = name; |
wname = name; |
} |
} |
|
|
if (strcmp(wname, w->name) == 0) |
if (strcmp(wname, w->name) == 0) |
xfree(wname); |
xfree(wname); |
else { |
else { |
xfree(w->name); |
xfree(w->name); |
w->name = wname; |
w->name = wname; |
server_status_window(w); |
server_status_window(w); |
} |
|
} |
} |
} |
} |
|
|