mirror of
https://github.com/tmux/tmux.git
synced 2025-09-03 22:43:58 +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:
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>
|
||||
@ -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);
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user