mirror of
https://github.com/tmux/tmux.git
synced 2024-12-13 01:48:47 +00:00
Status bar left and right strings (set with status-left and status-right), and automatic update (at interval set by status-interval).
This commit is contained in:
parent
9e6090a7a2
commit
811e75da52
11
CHANGES
11
CHANGES
@ -1,3 +1,12 @@
|
|||||||
|
04 June 2008
|
||||||
|
|
||||||
|
* Strings to display on the left and right of the status bar may now be set
|
||||||
|
with the status-left and status-right options. These are passed through
|
||||||
|
strftime(3) before being displayed. The status bar is automatically updated
|
||||||
|
at an interval set by the status-interval option. The default is to display
|
||||||
|
nothing on the left and the date and time on the left; the default update
|
||||||
|
interval is 15 seconds.
|
||||||
|
|
||||||
03 June 2008
|
03 June 2008
|
||||||
|
|
||||||
* Per session options. Setting options without specifying a session sets the
|
* Per session options. Setting options without specifying a session sets the
|
||||||
@ -382,4 +391,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.103 2008-06-03 21:42:36 nicm Exp $
|
$Id: CHANGES,v 1.104 2008-06-04 05:40:35 nicm Exp $
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $Id: cmd-set-option.c,v 1.19 2008-06-03 21:42:37 nicm Exp $ */
|
/* $Id: cmd-set-option.c,v 1.20 2008-06-04 05:40:35 nicm Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
|
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
|
||||||
@ -242,6 +242,18 @@ cmd_set_option_exec(void *ptr, unused struct cmd_ctx *ctx)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
options_set_number(oo, "history-limit", number);
|
options_set_number(oo, "history-limit", number);
|
||||||
|
} else if (strcmp(data->option, "status-left") == 0) {
|
||||||
|
if (data->value == NULL) {
|
||||||
|
ctx->error(ctx, "invalid value");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
options_set_string(oo, "status-left", "%s", data->value);
|
||||||
|
} else if (strcmp(data->option, "status-right") == 0) {
|
||||||
|
if (data->value == NULL) {
|
||||||
|
ctx->error(ctx, "invalid value");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
options_set_string(oo, "status-right", "%s", data->value);
|
||||||
} else {
|
} else {
|
||||||
ctx->error(ctx, "unknown option: %s", data->option);
|
ctx->error(ctx, "unknown option: %s", data->option);
|
||||||
return;
|
return;
|
||||||
|
14
server.c
14
server.c
@ -1,4 +1,4 @@
|
|||||||
/* $Id: server.c,v 1.49 2008-06-03 21:42:37 nicm Exp $ */
|
/* $Id: server.c,v 1.50 2008-06-04 05:40:35 nicm Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
|
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
|
||||||
@ -163,7 +163,7 @@ server_main(const char *srv_path, int srv_fd)
|
|||||||
|
|
||||||
/* Do the poll. */
|
/* Do the poll. */
|
||||||
log_debug("polling %d fds", nfds);
|
log_debug("polling %d fds", nfds);
|
||||||
if ((nfds = poll(pfds, nfds, INFTIM)) == -1) {
|
if ((nfds = poll(pfds, nfds, 500)) == -1) {
|
||||||
if (errno == EAGAIN || errno == EINTR)
|
if (errno == EAGAIN || errno == EINTR)
|
||||||
continue;
|
continue;
|
||||||
fatal("poll failed");
|
fatal("poll failed");
|
||||||
@ -290,11 +290,21 @@ void
|
|||||||
server_handle_clients(struct pollfd **pfd)
|
server_handle_clients(struct pollfd **pfd)
|
||||||
{
|
{
|
||||||
struct client *c;
|
struct client *c;
|
||||||
|
struct timespec now;
|
||||||
u_int i;
|
u_int i;
|
||||||
|
|
||||||
for (i = 0; i < ARRAY_LENGTH(&clients); i++) {
|
for (i = 0; i < ARRAY_LENGTH(&clients); i++) {
|
||||||
c = ARRAY_ITEM(&clients, i);
|
c = ARRAY_ITEM(&clients, i);
|
||||||
|
|
||||||
|
/* XXX REDRAW FLAGS */
|
||||||
|
if (c->session != NULL && options_get_number(
|
||||||
|
&c->session->options, "status-lines") != 0) {
|
||||||
|
if (clock_gettime(CLOCK_REALTIME, &now) != 0)
|
||||||
|
fatal("clock_gettime");
|
||||||
|
if (timespeccmp(&now, &c->status_ts, >))
|
||||||
|
server_status_client(c);
|
||||||
|
}
|
||||||
|
|
||||||
if (c != NULL) {
|
if (c != NULL) {
|
||||||
log_debug("testing client %d (%d)", (*pfd)->fd, c->fd);
|
log_debug("testing client %d (%d)", (*pfd)->fd, c->fd);
|
||||||
if (buffer_poll(*pfd, c->in, c->out) != 0) {
|
if (buffer_poll(*pfd, c->in, c->out) != 0) {
|
||||||
|
34
status.c
34
status.c
@ -1,4 +1,4 @@
|
|||||||
/* $Id: status.c,v 1.19 2008-06-03 21:42:37 nicm Exp $ */
|
/* $Id: status.c,v 1.20 2008-06-04 05:40:35 nicm Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
|
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
|
||||||
@ -17,8 +17,10 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
#include <sys/time.h>
|
||||||
|
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
#include "tmux.h"
|
#include "tmux.h"
|
||||||
|
|
||||||
@ -29,7 +31,9 @@ status_write_client(struct client *c)
|
|||||||
{
|
{
|
||||||
struct screen_redraw_ctx ctx;
|
struct screen_redraw_ctx ctx;
|
||||||
struct winlink *wl;
|
struct winlink *wl;
|
||||||
char flag;
|
char flag, *left, *right;
|
||||||
|
char lbuf[BUFSIZ], rbuf[BUFSIZ];
|
||||||
|
size_t llen, rlen;
|
||||||
u_char scolour;
|
u_char scolour;
|
||||||
u_int slines;
|
u_int slines;
|
||||||
|
|
||||||
@ -38,8 +42,21 @@ status_write_client(struct client *c)
|
|||||||
if (slines == 0 || c->sy <= slines)
|
if (slines == 0 || c->sy <= slines)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
if (clock_gettime(CLOCK_REALTIME, &c->status_ts) != 0)
|
||||||
|
fatal("clock_gettime");
|
||||||
|
|
||||||
|
left = options_get_string(&c->session->options, "status-left");
|
||||||
|
strftime(lbuf, sizeof lbuf, left, localtime(&(c->status_ts.tv_sec)));
|
||||||
|
llen = strlen(lbuf) + 1;
|
||||||
|
right = options_get_string(&c->session->options, "status-right");
|
||||||
|
strftime(rbuf, sizeof rbuf, right, localtime(&(c->status_ts.tv_sec)));
|
||||||
|
rlen = strlen(rbuf) + 1;
|
||||||
|
|
||||||
|
c->status_ts.tv_sec +=
|
||||||
|
options_get_number(&c->session->options, "status-interval");
|
||||||
|
|
||||||
screen_redraw_start_client(&ctx, c);
|
screen_redraw_start_client(&ctx, c);
|
||||||
screen_redraw_move_cursor(&ctx, 0, c->sy - slines);
|
screen_redraw_move_cursor(&ctx, llen, c->sy - slines);
|
||||||
screen_redraw_set_attributes(&ctx, 0, scolour);
|
screen_redraw_set_attributes(&ctx, 0, scolour);
|
||||||
|
|
||||||
RB_FOREACH(wl, winlinks, &c->session->windows) {
|
RB_FOREACH(wl, winlinks, &c->session->windows) {
|
||||||
@ -53,14 +70,21 @@ status_write_client(struct client *c)
|
|||||||
screen_redraw_write_string(
|
screen_redraw_write_string(
|
||||||
&ctx, "%d:%s%c ", wl->idx, wl->window->name, flag);
|
&ctx, "%d:%s%c ", wl->idx, wl->window->name, flag);
|
||||||
|
|
||||||
if (ctx.s->cx > screen_last_x(ctx.s))
|
if (ctx.s->cx > screen_size_x(ctx.s) - rlen)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
while (ctx.s->cx < screen_size_x(ctx.s)) {
|
while (ctx.s->cx < screen_size_x(ctx.s) - rlen) {
|
||||||
ctx.write(ctx.data, TTY_CHARACTER, ' ');
|
ctx.write(ctx.data, TTY_CHARACTER, ' ');
|
||||||
ctx.s->cx++;
|
ctx.s->cx++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
screen_redraw_move_cursor(&ctx, 0, c->sy - slines);
|
||||||
|
screen_redraw_write_string(&ctx, "%s ", lbuf);
|
||||||
|
|
||||||
|
screen_redraw_move_cursor(
|
||||||
|
&ctx, screen_size_x(ctx.s) - rlen, c->sy - slines);
|
||||||
|
screen_redraw_write_string(&ctx, " %s", rbuf);
|
||||||
|
|
||||||
screen_redraw_stop(&ctx);
|
screen_redraw_stop(&ctx);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
6
tmux.c
6
tmux.c
@ -1,4 +1,4 @@
|
|||||||
/* $Id: tmux.c,v 1.51 2008-06-03 21:42:37 nicm Exp $ */
|
/* $Id: tmux.c,v 1.52 2008-06-04 05:40:35 nicm Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
|
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
|
||||||
@ -204,6 +204,10 @@ main(int argc, char **argv)
|
|||||||
options_set_number(&global_options, "bell-action", BELL_ANY);
|
options_set_number(&global_options, "bell-action", BELL_ANY);
|
||||||
options_set_number(&global_options, "history-limit", 2000);
|
options_set_number(&global_options, "history-limit", 2000);
|
||||||
options_set_number(&global_options, "prefix-key", META);
|
options_set_number(&global_options, "prefix-key", META);
|
||||||
|
options_set_string(&global_options, "status-left", "");
|
||||||
|
options_set_string(
|
||||||
|
&global_options, "status-right", "%%H:%%M %%d-%%b-%%y");
|
||||||
|
options_set_number(&global_options, "status-interval", 15);
|
||||||
|
|
||||||
paste_buffer = NULL;
|
paste_buffer = NULL;
|
||||||
|
|
||||||
|
3
tmux.h
3
tmux.h
@ -1,4 +1,4 @@
|
|||||||
/* $Id: tmux.h,v 1.125 2008-06-03 21:42:37 nicm Exp $ */
|
/* $Id: tmux.h,v 1.126 2008-06-04 05:40:35 nicm Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
|
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
|
||||||
@ -619,6 +619,7 @@ struct client {
|
|||||||
struct buffer *out;
|
struct buffer *out;
|
||||||
|
|
||||||
struct tty tty;
|
struct tty tty;
|
||||||
|
struct timespec status_ts;
|
||||||
|
|
||||||
u_int sx;
|
u_int sx;
|
||||||
u_int sy;
|
u_int sy;
|
||||||
|
Loading…
Reference in New Issue
Block a user