mirror of
				https://github.com/tmux/tmux.git
				synced 2025-11-04 00:56:10 +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:
		@@ -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);
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user