diff --git a/cmd-set-option.c b/cmd-set-option.c index 52d79395..283f3692 100644 --- a/cmd-set-option.c +++ b/cmd-set-option.c @@ -1,4 +1,4 @@ -/* $Id: cmd-set-option.c,v 1.78 2009-09-02 01:02:44 tcunha Exp $ */ +/* $Id: cmd-set-option.c,v 1.79 2009-09-19 18:53:01 tcunha Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott @@ -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 }, diff --git a/server.c b/server.c index cba9601c..9101ac31 100644 --- a/server.c +++ b/server.c @@ -1,4 +1,4 @@ -/* $Id: server.c,v 1.188 2009-09-15 23:52:30 tcunha Exp $ */ +/* $Id: server.c,v 1.189 2009-09-19 18:53:01 tcunha Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott @@ -65,6 +65,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); @@ -519,7 +520,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) @@ -529,19 +529,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) @@ -573,6 +564,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) diff --git a/tmux.1 b/tmux.1 index 64918e13..4997f226 100644 --- a/tmux.1 +++ b/tmux.1 @@ -1,4 +1,4 @@ -.\" $Id: tmux.1,v 1.167 2009-09-11 14:13:52 tcunha Exp $ +.\" $Id: tmux.1,v 1.168 2009-09-19 18:53:01 tcunha Exp $ .\" .\" Copyright (c) 2007 Nicholas Marriott .\" @@ -14,7 +14,7 @@ .\" IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING .\" OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. .\" -.Dd $Mdocdate: September 10 2009 $ +.Dd $Mdocdate: September 18 2009 $ .Dt TMUX 1 .Os .Sh NAME @@ -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 diff --git a/tmux.c b/tmux.c index 4dff5925..3e9affc1 100644 --- a/tmux.c +++ b/tmux.c @@ -1,4 +1,4 @@ -/* $Id: tmux.c,v 1.171 2009-09-04 20:37:40 tcunha Exp $ */ +/* $Id: tmux.c,v 1.172 2009-09-19 18:53:01 tcunha Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott @@ -422,6 +422,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);