We now only checking for name changes when the active pane has changed,

but that can only happen when we have already been woken up by a read
event, so there is no need for a timer, we can just check the changed
flag on the end of that read event (we already loop over the windows to
check for bells etc anyway).
This commit is contained in:
nicm 2015-08-28 15:51:48 +00:00
parent b0940bdf54
commit e2100c5f5f
5 changed files with 10 additions and 35 deletions

View File

@ -180,9 +180,7 @@ cmd_set_option_exec(struct cmd *self, struct cmd_q *cmdq)
if (strcmp(oe->name, "automatic-rename") == 0) { if (strcmp(oe->name, "automatic-rename") == 0) {
RB_FOREACH(w, windows, &windows) { RB_FOREACH(w, windows, &windows) {
if (options_get_number(&w->options, "automatic-rename")) if (options_get_number(&w->options, "automatic-rename"))
queue_window_name(w); w->active->flags |= PANE_CHANGED;
else if (event_initialized(&w->name_timer))
evtimer_del(&w->name_timer);
} }
} }
if (strcmp(oe->name, "status") == 0 || if (strcmp(oe->name, "status") == 0 ||

32
names.c
View File

@ -25,37 +25,16 @@
#include "tmux.h" #include "tmux.h"
void window_name_callback(unused int, unused short, void *);
void void
queue_window_name(struct window *w) check_window_name(struct window *w)
{ {
struct timeval tv; char *name;
tv.tv_sec = 0;
tv.tv_usec = NAME_INTERVAL * 1000L;
if (event_initialized(&w->name_timer))
evtimer_del(&w->name_timer);
evtimer_set(&w->name_timer, window_name_callback, w);
evtimer_add(&w->name_timer, &tv);
}
void
window_name_callback(unused int fd, unused short events, void *data)
{
struct window *w = data;
char *name;
if (w->active == NULL) if (w->active == NULL)
return; return;
if (!options_get_number(&w->options, "automatic-rename")) { if (!options_get_number(&w->options, "automatic-rename"))
if (event_initialized(&w->name_timer))
event_del(&w->name_timer);
return; return;
}
queue_window_name(w);
if (~w->active->flags & PANE_CHANGED) if (~w->active->flags & PANE_CHANGED)
return; return;
@ -63,9 +42,12 @@ window_name_callback(unused int fd, unused short events, void *data)
name = format_window_name(w); name = format_window_name(w);
if (strcmp(name, w->name) != 0) { if (strcmp(name, w->name) != 0) {
log_debug("@%u new name %s (was %s)", w->id, name, w->name);
window_set_name(w, name); window_set_name(w, name);
server_status_window(w); server_status_window(w);
} } else
log_debug("@%u name not changed (still %s)", w->id, w->name);
free(name); free(name);
} }

View File

@ -49,6 +49,7 @@ server_window_loop(void)
server_status_session(s); server_status_session(s);
} }
} }
check_window_name(w);
} }
} }

3
tmux.h
View File

@ -870,7 +870,6 @@ RB_HEAD(window_pane_tree, window_pane);
struct window { struct window {
u_int id; u_int id;
char *name; char *name;
struct event name_timer;
struct timeval silence_timer; struct timeval silence_timer;
struct timeval activity_time; struct timeval activity_time;
@ -2209,7 +2208,7 @@ void window_choose_collapse_all(struct window_pane *);
void window_choose_set_current(struct window_pane *, u_int); void window_choose_set_current(struct window_pane *, u_int);
/* names.c */ /* names.c */
void queue_window_name(struct window *); void check_window_name(struct window *);
char *default_window_name(struct window *); char *default_window_name(struct window *);
char *format_window_name(struct window *); char *format_window_name(struct window *);
char *parse_window_name(const char *); char *parse_window_name(const char *);

View File

@ -299,8 +299,6 @@ window_create1(u_int sx, u_int sy)
fatal("gettimeofday failed"); fatal("gettimeofday failed");
options_init(&w->options, &global_w_options); options_init(&w->options, &global_w_options);
if (options_get_number(&w->options, "automatic-rename"))
queue_window_name(w);
w->references = 0; w->references = 0;
@ -349,9 +347,6 @@ window_destroy(struct window *w)
layout_free_cell(w->saved_layout_root); layout_free_cell(w->saved_layout_root);
free(w->old_layout); free(w->old_layout);
if (event_initialized(&w->name_timer))
evtimer_del(&w->name_timer);
options_free(&w->options); options_free(&w->options);
window_destroy_panes(w); window_destroy_panes(w);