diff options
Diffstat (limited to 'status.c')
-rw-r--r-- | status.c | 34 |
1 files changed, 29 insertions, 5 deletions
@@ -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> @@ -17,8 +17,10 @@ */ #include <sys/types.h> +#include <sys/time.h> #include <stdarg.h> +#include <string.h> #include "tmux.h" @@ -29,7 +31,9 @@ status_write_client(struct client *c) { struct screen_redraw_ctx ctx; struct winlink *wl; - char flag; + char flag, *left, *right; + char lbuf[BUFSIZ], rbuf[BUFSIZ]; + size_t llen, rlen; u_char scolour; u_int slines; @@ -38,8 +42,21 @@ status_write_client(struct client *c) if (slines == 0 || c->sy <= slines) 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_move_cursor(&ctx, 0, c->sy - slines); + screen_redraw_move_cursor(&ctx, llen, c->sy - slines); screen_redraw_set_attributes(&ctx, 0, scolour); RB_FOREACH(wl, winlinks, &c->session->windows) { @@ -53,14 +70,21 @@ status_write_client(struct client *c) screen_redraw_write_string( &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; } - 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.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); } |