mirror of
https://github.com/tmux/tmux.git
synced 2024-12-13 01:48:47 +00:00
Set window title to current session. New options set-titles to disable.
This commit is contained in:
parent
f9dedfccca
commit
8873c79cbc
11
CHANGES
11
CHANGES
@ -1,5 +1,14 @@
|
|||||||
18 June 2008
|
18 June 2008
|
||||||
|
|
||||||
|
* New option, set-titles. On by default, this attempts to set the window title
|
||||||
|
using the \e]2;...\007 xterm code.
|
||||||
|
|
||||||
|
Note that elinks requires the STY environment variable (used by screen) to be
|
||||||
|
set before it will set the window title. So, if you want window titles set by
|
||||||
|
elinks, set STY before running it (any value will do). I can't do this for all
|
||||||
|
windows since setting it to an invalid value breaks screen. Why they couldn't
|
||||||
|
just look for TERM=screen (or send it regardless if the user turned it on) is
|
||||||
|
beyond me.
|
||||||
* Show arrows at either end of status line when scrolled if more windows
|
* Show arrows at either end of status line when scrolled if more windows
|
||||||
exist. Highlight the arrow if a hidden window has activity or bell.
|
exist. Highlight the arrow if a hidden window has activity or bell.
|
||||||
* Scroll the status line to show the current window if necessary. Also handle
|
* Scroll the status line to show the current window if necessary. Also handle
|
||||||
@ -494,4 +503,4 @@
|
|||||||
(including mutt, emacs). No status bar yet and no key remapping or other
|
(including mutt, emacs). No status bar yet and no key remapping or other
|
||||||
customisation.
|
customisation.
|
||||||
|
|
||||||
$Id: CHANGES,v 1.124 2008-06-18 17:14:02 nicm Exp $
|
$Id: CHANGES,v 1.125 2008-06-18 18:52:44 nicm Exp $
|
||||||
|
6
TODO
6
TODO
@ -63,12 +63,9 @@
|
|||||||
- cfg file improvements
|
- cfg file improvements
|
||||||
- proper per-window options (per-session list of window ranges?)
|
- proper per-window options (per-session list of window ranges?)
|
||||||
- better mode features: search, back word, forward word, etc
|
- better mode features: search, back word, forward word, etc
|
||||||
- status bar customisation variables, show-activity, show-last-window
|
|
||||||
- figure out Linux tcsetattr problem, remove header bodge if unnecessary
|
- figure out Linux tcsetattr problem, remove header bodge if unnecessary
|
||||||
- flags to centre screen in window
|
- flags to centre screen in window
|
||||||
- get rid of DEFDATA etc
|
- get rid of DEFDATA etc
|
||||||
- scroll status line to show current window. mark beginning end with "<-"/"->"
|
|
||||||
and highlight this if any off-screen are active
|
|
||||||
|
|
||||||
---
|
---
|
||||||
support window title commands properly:
|
support window title commands properly:
|
||||||
@ -87,6 +84,5 @@ option to pass through to xterm window when switching window
|
|||||||
should not emulate it doing so
|
should not emulate it doing so
|
||||||
- activity/bell should be per-window not per-link? what if it is cur win in
|
- activity/bell should be per-window not per-link? what if it is cur win in
|
||||||
session not being watched?
|
session not being watched?
|
||||||
- document status-left/status-right/status-interval
|
- document status-left/status-right/status-interval/set-titles
|
||||||
- enhance paste buffers. per-session buffers, lots of command love
|
- enhance paste buffers. per-session buffers, lots of command love
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $Id: cmd-set-option.c,v 1.28 2008-06-16 06:33:50 nicm Exp $ */
|
/* $Id: cmd-set-option.c,v 1.29 2008-06-18 18:52:44 nicm Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
|
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
|
||||||
@ -272,6 +272,14 @@ cmd_set_option_exec(struct cmd *self, unused struct cmd_ctx *ctx)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
options_set_number(oo, "status-interval", number);
|
options_set_number(oo, "status-interval", number);
|
||||||
|
} else if (strcmp(data->option, "set-titles") == 0) {
|
||||||
|
if (bool == -1) {
|
||||||
|
ctx->error(ctx, "bad value: %s", data->value);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (bool == -2)
|
||||||
|
bool = !options_get_number(oo, "set-titles");
|
||||||
|
options_set_number(oo, "set-titles", bool);
|
||||||
} else {
|
} else {
|
||||||
ctx->error(ctx, "unknown option: %s", data->option);
|
ctx->error(ctx, "unknown option: %s", data->option);
|
||||||
return;
|
return;
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $Id: screen-write.c,v 1.7 2008-06-04 19:20:09 nicm Exp $ */
|
/* $Id: screen-write.c,v 1.8 2008-06-18 18:52:44 nicm Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
|
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
|
||||||
@ -92,9 +92,6 @@ screen_write_set_title(struct screen_write_ctx *ctx, char *title)
|
|||||||
|
|
||||||
xfree(s->title);
|
xfree(s->title);
|
||||||
s->title = title;
|
s->title = title;
|
||||||
|
|
||||||
if (ctx->write != NULL)
|
|
||||||
ctx->write(ctx->data, TTY_TITLE, s->title);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Put a character. */
|
/* Put a character. */
|
||||||
|
24
server.c
24
server.c
@ -1,4 +1,4 @@
|
|||||||
/* $Id: server.c,v 1.65 2008-06-17 19:26:19 nicm Exp $ */
|
/* $Id: server.c,v 1.66 2008-06-18 18:52:44 nicm Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
|
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
|
||||||
@ -300,18 +300,33 @@ server_handle_windows(struct pollfd **pfd)
|
|||||||
void
|
void
|
||||||
server_check_redraw(struct client *c)
|
server_check_redraw(struct client *c)
|
||||||
{
|
{
|
||||||
|
struct session *s;
|
||||||
struct screen_redraw_ctx ctx;
|
struct screen_redraw_ctx ctx;
|
||||||
struct screen screen;
|
struct screen screen;
|
||||||
u_int xx, yy, sx, sy;
|
u_int xx, yy, sx, sy;
|
||||||
|
char title[BUFSIZ];
|
||||||
|
|
||||||
if (c == NULL || c->session == NULL)
|
if (c == NULL || c->session == NULL)
|
||||||
return;
|
return;
|
||||||
|
s = c->session;
|
||||||
|
|
||||||
|
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->base.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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
xx = c->sx;
|
xx = c->sx;
|
||||||
yy = c->sy - options_get_number(&global_options, "status-lines");
|
yy = c->sy - options_get_number(&s->options, "status-lines");
|
||||||
if (c->flags & CLIENT_REDRAW) {
|
if (c->flags & CLIENT_REDRAW) {
|
||||||
sx = screen_size_x(c->session->curw->window->screen);
|
sx = screen_size_x(s->curw->window->screen);
|
||||||
sy = screen_size_y(c->session->curw->window->screen);
|
sy = screen_size_y(s->curw->window->screen);
|
||||||
if (sx < xx || sy < yy) {
|
if (sx < xx || sy < yy) {
|
||||||
/*
|
/*
|
||||||
* Fake up a blank(ish) screen and use it to draw the
|
* Fake up a blank(ish) screen and use it to draw the
|
||||||
@ -463,6 +478,7 @@ server_accept_client(int srv_fd)
|
|||||||
c->out = buffer_create(BUFSIZ);
|
c->out = buffer_create(BUFSIZ);
|
||||||
|
|
||||||
c->tty.fd = -1;
|
c->tty.fd = -1;
|
||||||
|
c->title = NULL;
|
||||||
|
|
||||||
c->session = NULL;
|
c->session = NULL;
|
||||||
c->sx = 80;
|
c->sx = 80;
|
||||||
|
3
tmux.c
3
tmux.c
@ -1,4 +1,4 @@
|
|||||||
/* $Id: tmux.c,v 1.57 2008-06-18 16:39:15 nicm Exp $ */
|
/* $Id: tmux.c,v 1.58 2008-06-18 18:52:44 nicm Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
|
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
|
||||||
@ -212,6 +212,7 @@ main(int argc, char **argv)
|
|||||||
options_set_string(
|
options_set_string(
|
||||||
&global_options, "status-right", "%%H:%%M %%d-%%b-%%y");
|
&global_options, "status-right", "%%H:%%M %%d-%%b-%%y");
|
||||||
options_set_number(&global_options, "status-interval", 15);
|
options_set_number(&global_options, "status-interval", 15);
|
||||||
|
options_set_number(&global_options, "set-titles", 1);
|
||||||
|
|
||||||
paste_buffer = NULL;
|
paste_buffer = NULL;
|
||||||
|
|
||||||
|
10
tmux.h
10
tmux.h
@ -1,4 +1,4 @@
|
|||||||
/* $Id: tmux.h,v 1.144 2008-06-16 17:35:40 nicm Exp $ */
|
/* $Id: tmux.h,v 1.145 2008-06-18 18:52:44 nicm Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
|
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
|
||||||
@ -295,9 +295,8 @@ struct buffer {
|
|||||||
#define TTY_KCURSORON 21
|
#define TTY_KCURSORON 21
|
||||||
#define TTY_KKEYPADOFF 22
|
#define TTY_KKEYPADOFF 22
|
||||||
#define TTY_KKEYPADON 23
|
#define TTY_KKEYPADON 23
|
||||||
#define TTY_TITLE 24
|
#define TTY_MOUSEON 24
|
||||||
#define TTY_MOUSEON 25
|
#define TTY_MOUSEOFF 25 /* XXX merge allon/off into 1 arg? */
|
||||||
#define TTY_MOUSEOFF 26 /* XXX merge allon/off into 1 arg? */
|
|
||||||
|
|
||||||
/* Message codes. */
|
/* Message codes. */
|
||||||
enum hdrtype {
|
enum hdrtype {
|
||||||
@ -647,6 +646,8 @@ struct client {
|
|||||||
struct buffer *in;
|
struct buffer *in;
|
||||||
struct buffer *out;
|
struct buffer *out;
|
||||||
|
|
||||||
|
char *title;
|
||||||
|
|
||||||
struct tty tty;
|
struct tty tty;
|
||||||
struct timespec status_ts;
|
struct timespec status_ts;
|
||||||
|
|
||||||
@ -786,6 +787,7 @@ u_char options_get_colours(struct options *, const char *);
|
|||||||
|
|
||||||
/* tty.c */
|
/* tty.c */
|
||||||
void tty_init(struct tty *, char *, char *);
|
void tty_init(struct tty *, char *, char *);
|
||||||
|
void tty_set_title(struct tty *, const char *);
|
||||||
int tty_open(struct tty *, char **);
|
int tty_open(struct tty *, char **);
|
||||||
void tty_close(struct tty *);
|
void tty_close(struct tty *);
|
||||||
void tty_free(struct tty *);
|
void tty_free(struct tty *);
|
||||||
|
12
tty.c
12
tty.c
@ -1,4 +1,4 @@
|
|||||||
/* $Id: tty.c,v 1.23 2008-06-10 18:51:22 nicm Exp $ */
|
/* $Id: tty.c,v 1.24 2008-06-18 18:52:44 nicm Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
|
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
|
||||||
@ -342,6 +342,14 @@ tty_putc(struct tty *tty, char ch)
|
|||||||
buffer_write8(tty->out, ch);
|
buffer_write8(tty->out, ch);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
tty_set_title(struct tty *tty, const char *title)
|
||||||
|
{
|
||||||
|
tty_puts(tty, "\e]0;");
|
||||||
|
tty_puts(tty, title);
|
||||||
|
tty_putc(tty, '\007');
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
tty_vwrite(struct tty *tty, struct screen *s, int cmd, va_list ap)
|
tty_vwrite(struct tty *tty, struct screen *s, int cmd, va_list ap)
|
||||||
{
|
{
|
||||||
@ -544,8 +552,6 @@ tty_vwrite(struct tty *tty, struct screen *s, int cmd, va_list ap)
|
|||||||
if (key_mouse != NULL)
|
if (key_mouse != NULL)
|
||||||
tty_puts(tty, "\e[?1000h");
|
tty_puts(tty, "\e[?1000h");
|
||||||
break;
|
break;
|
||||||
case TTY_TITLE:
|
|
||||||
break;
|
|
||||||
case TTY_ATTRIBUTES:
|
case TTY_ATTRIBUTES:
|
||||||
ua = va_arg(ap, u_int);
|
ua = va_arg(ap, u_int);
|
||||||
ub = va_arg(ap, u_int);
|
ub = va_arg(ap, u_int);
|
||||||
|
Loading…
Reference in New Issue
Block a user