mirror of
				https://github.com/tmux/tmux.git
				synced 2025-11-04 09:26:05 +00:00 
			
		
		
		
	New option, set-titles-string, to allow the window title to be specified (as
for status-left/right) if set-titles is on. Also only update the title when the status line is being redrawn.
This commit is contained in:
		@@ -69,6 +69,7 @@ const struct set_option_entry set_option_table[] = {
 | 
			
		||||
	{ "repeat-time", SET_OPTION_NUMBER, 0, SHRT_MAX, NULL },
 | 
			
		||||
	{ "set-remain-on-exit", SET_OPTION_FLAG, 0, 0, NULL },
 | 
			
		||||
	{ "set-titles", SET_OPTION_FLAG, 0, 0, NULL },
 | 
			
		||||
	{ "set-titles-string", SET_OPTION_STRING, 0, 0, NULL },
 | 
			
		||||
	{ "status", SET_OPTION_FLAG, 0, 0, NULL },
 | 
			
		||||
	{ "status-attr", SET_OPTION_ATTRIBUTES, 0, 0, NULL },
 | 
			
		||||
	{ "status-bg", SET_OPTION_COLOUR, 0, 0, NULL },
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										37
									
								
								server.c
									
									
									
									
									
								
							
							
						
						
									
										37
									
								
								server.c
									
									
									
									
									
								
							@@ -66,6 +66,7 @@ void		 server_clean_dead(void);
 | 
			
		||||
void		 server_lost_client(struct client *);
 | 
			
		||||
void	 	 server_check_window(struct window *);
 | 
			
		||||
void		 server_check_redraw(struct client *);
 | 
			
		||||
void		 server_set_title(struct client *);
 | 
			
		||||
void		 server_redraw_locked(struct client *);
 | 
			
		||||
void		 server_check_timers(struct client *);
 | 
			
		||||
void		 server_second_timers(void);
 | 
			
		||||
@@ -516,7 +517,6 @@ server_check_redraw(struct client *c)
 | 
			
		||||
{
 | 
			
		||||
	struct session		*s;
 | 
			
		||||
	struct window_pane	*wp;
 | 
			
		||||
	char		 	 title[512];
 | 
			
		||||
	int		 	 flags, redraw;
 | 
			
		||||
 | 
			
		||||
	if (c == NULL || c->session == NULL)
 | 
			
		||||
@@ -526,19 +526,10 @@ server_check_redraw(struct client *c)
 | 
			
		||||
	flags = c->tty.flags & TTY_FREEZE;
 | 
			
		||||
	c->tty.flags &= ~TTY_FREEZE;
 | 
			
		||||
 | 
			
		||||
	if (options_get_number(&s->options, "set-titles")) {
 | 
			
		||||
		xsnprintf(title, sizeof title, "%s:%u:%s - \"%s\"",
 | 
			
		||||
		    s->name, s->curw->idx, s->curw->window->name,
 | 
			
		||||
		    s->curw->window->active->screen->title);
 | 
			
		||||
		if (c->title == NULL || strcmp(title, c->title) != 0) {
 | 
			
		||||
			if (c->title != NULL)
 | 
			
		||||
				xfree(c->title);
 | 
			
		||||
			c->title = xstrdup(title);
 | 
			
		||||
			tty_set_title(&c->tty, c->title);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (c->flags & (CLIENT_REDRAW|CLIENT_STATUS)) {
 | 
			
		||||
		if (options_get_number(&s->options, "set-titles"))
 | 
			
		||||
			server_set_title(c);
 | 
			
		||||
	
 | 
			
		||||
		if (c->message_string != NULL)
 | 
			
		||||
			redraw = status_message_redraw(c);
 | 
			
		||||
		else if (c->prompt_string != NULL)
 | 
			
		||||
@@ -570,6 +561,26 @@ server_check_redraw(struct client *c)
 | 
			
		||||
	c->flags &= ~(CLIENT_REDRAW|CLIENT_STATUS);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Set client title. */
 | 
			
		||||
void
 | 
			
		||||
server_set_title(struct client *c)
 | 
			
		||||
{
 | 
			
		||||
	struct session	*s = c->session;
 | 
			
		||||
	const char	*template;
 | 
			
		||||
	char		*title;
 | 
			
		||||
 | 
			
		||||
	template = options_get_string(&s->options, "set-titles-string");
 | 
			
		||||
	
 | 
			
		||||
	title = status_replace(c->session, template, time(NULL));
 | 
			
		||||
	if (c->title == NULL || strcmp(title, c->title) != 0) {
 | 
			
		||||
		if (c->title != NULL)
 | 
			
		||||
			xfree(c->title);
 | 
			
		||||
		c->title = xstrdup(title);
 | 
			
		||||
		tty_set_title(&c->tty, c->title);
 | 
			
		||||
	}
 | 
			
		||||
	xfree(title);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Redraw client when locked. */
 | 
			
		||||
void
 | 
			
		||||
server_redraw_locked(struct client *c)
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										7
									
								
								tmux.1
									
									
									
									
									
								
							
							
						
						
									
										7
									
								
								tmux.1
									
									
									
									
									
								
							@@ -1287,6 +1287,13 @@ This option is off by default.
 | 
			
		||||
Note that elinks
 | 
			
		||||
will only attempt to set the window title if the STY environment
 | 
			
		||||
variable is set.
 | 
			
		||||
.It Ic set-titles-string Ar string
 | 
			
		||||
String used to set the window title if
 | 
			
		||||
.Ic set-titles
 | 
			
		||||
is on.
 | 
			
		||||
Character sequences are replaced as for the
 | 
			
		||||
.Ic status-left
 | 
			
		||||
option.
 | 
			
		||||
.It Xo Ic status
 | 
			
		||||
.Op Ic on | off
 | 
			
		||||
.Xc
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										1
									
								
								tmux.c
									
									
									
									
									
								
							
							
						
						
									
										1
									
								
								tmux.c
									
									
									
									
									
								
							@@ -413,6 +413,7 @@ main(int argc, char **argv)
 | 
			
		||||
	options_set_number(so, "repeat-time", 500);
 | 
			
		||||
	options_set_number(so, "set-remain-on-exit", 0);
 | 
			
		||||
	options_set_number(so, "set-titles", 0);
 | 
			
		||||
	options_set_string(so, "set-titles-string", "#S:#I:#W - \"#T\"");
 | 
			
		||||
	options_set_number(so, "status", 1);
 | 
			
		||||
	options_set_number(so, "status-attr", 0);
 | 
			
		||||
	options_set_number(so, "status-bg", 2);
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user