1
0
mirror of https://github.com/tmux/tmux.git synced 2025-04-23 21:08:48 +00:00

Sync OpenBSD patchset 331:

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:
Tiago Cunha 2009-09-19 18:53:01 +00:00
parent a2e03ce3cb
commit 23d7ed3187
4 changed files with 38 additions and 18 deletions

View File

@ -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 <nicm@users.sourceforge.net> * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
@ -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

@ -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 <nicm@users.sourceforge.net> * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
@ -65,6 +65,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);
@ -519,7 +520,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)
@ -529,19 +529,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)
@ -573,6 +564,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)

11
tmux.1
View File

@ -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 <nicm@users.sourceforge.net> .\" Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
.\" .\"
@ -14,7 +14,7 @@
.\" IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING .\" IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
.\" OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. .\" 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 .Dt TMUX 1
.Os .Os
.Sh NAME .Sh NAME
@ -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

3
tmux.c
View File

@ -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 <nicm@users.sourceforge.net> * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
@ -422,6 +422,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);