mirror of
https://github.com/tmux/tmux.git
synced 2024-12-13 18:38:48 +00:00
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:
parent
b0940bdf54
commit
e2100c5f5f
@ -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
32
names.c
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -49,6 +49,7 @@ server_window_loop(void)
|
|||||||
server_status_session(s);
|
server_status_session(s);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
check_window_name(w);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
3
tmux.h
3
tmux.h
@ -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 *);
|
||||||
|
5
window.c
5
window.c
@ -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);
|
||||||
|
Loading…
Reference in New Issue
Block a user