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:
Nicholas Marriott 2009-09-18 15:19:27 +00:00
parent 5c60162e3c
commit 63d499f480
4 changed files with 33 additions and 13 deletions

View File

@ -69,6 +69,7 @@ const struct set_option_entry set_option_table[] = {
{ "repeat-time", SET_OPTION_NUMBER, 0, SHRT_MAX, NULL }, { "repeat-time", SET_OPTION_NUMBER, 0, SHRT_MAX, NULL },
{ "set-remain-on-exit", SET_OPTION_FLAG, 0, 0, NULL }, { "set-remain-on-exit", SET_OPTION_FLAG, 0, 0, NULL },
{ "set-titles", 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", SET_OPTION_FLAG, 0, 0, NULL },
{ "status-attr", SET_OPTION_ATTRIBUTES, 0, 0, NULL }, { "status-attr", SET_OPTION_ATTRIBUTES, 0, 0, NULL },
{ "status-bg", SET_OPTION_COLOUR, 0, 0, NULL }, { "status-bg", SET_OPTION_COLOUR, 0, 0, NULL },

View File

@ -66,6 +66,7 @@ void server_clean_dead(void);
void server_lost_client(struct client *); void server_lost_client(struct client *);
void server_check_window(struct window *); void server_check_window(struct window *);
void server_check_redraw(struct client *); void server_check_redraw(struct client *);
void server_set_title(struct client *);
void server_redraw_locked(struct client *); void server_redraw_locked(struct client *);
void server_check_timers(struct client *); void server_check_timers(struct client *);
void server_second_timers(void); void server_second_timers(void);
@ -516,7 +517,6 @@ server_check_redraw(struct client *c)
{ {
struct session *s; struct session *s;
struct window_pane *wp; struct window_pane *wp;
char title[512];
int flags, redraw; int flags, redraw;
if (c == NULL || c->session == NULL) if (c == NULL || c->session == NULL)
@ -526,19 +526,10 @@ server_check_redraw(struct client *c)
flags = c->tty.flags & TTY_FREEZE; flags = c->tty.flags & TTY_FREEZE;
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 (c->flags & (CLIENT_REDRAW|CLIENT_STATUS)) {
if (options_get_number(&s->options, "set-titles"))
server_set_title(c);
if (c->message_string != NULL) if (c->message_string != NULL)
redraw = status_message_redraw(c); redraw = status_message_redraw(c);
else if (c->prompt_string != NULL) else if (c->prompt_string != NULL)
@ -570,6 +561,26 @@ server_check_redraw(struct client *c)
c->flags &= ~(CLIENT_REDRAW|CLIENT_STATUS); 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. */ /* Redraw client when locked. */
void void
server_redraw_locked(struct client *c) server_redraw_locked(struct client *c)

7
tmux.1
View File

@ -1287,6 +1287,13 @@ This option is off by default.
Note that elinks Note that elinks
will only attempt to set the window title if the STY environment will only attempt to set the window title if the STY environment
variable is set. 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 .It Xo Ic status
.Op Ic on | off .Op Ic on | off
.Xc .Xc

1
tmux.c
View File

@ -413,6 +413,7 @@ main(int argc, char **argv)
options_set_number(so, "repeat-time", 500); options_set_number(so, "repeat-time", 500);
options_set_number(so, "set-remain-on-exit", 0); options_set_number(so, "set-remain-on-exit", 0);
options_set_number(so, "set-titles", 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", 1);
options_set_number(so, "status-attr", 0); options_set_number(so, "status-attr", 0);
options_set_number(so, "status-bg", 2); options_set_number(so, "status-bg", 2);