=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/tmux/status.c,v retrieving revision 1.43 retrieving revision 1.44 diff -u -r1.43 -r1.44 --- src/usr.bin/tmux/status.c 2009/11/17 13:30:07 1.43 +++ src/usr.bin/tmux/status.c 2009/11/18 13:16:33 1.44 @@ -1,4 +1,4 @@ -/* $OpenBSD: status.c,v 1.43 2009/11/17 13:30:07 nicm Exp $ */ +/* $OpenBSD: status.c,v 1.44 2009/11/18 13:16:33 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott @@ -566,9 +566,12 @@ void printflike2 status_message_set(struct client *c, const char *fmt, ...) { - struct timeval tv; - va_list ap; - int delay; + struct timeval tv; + struct session *s = c->session; + struct message_entry *msg; + va_list ap; + int delay; + u_int i, limit; status_prompt_clear(c); status_message_clear(c); @@ -577,10 +580,25 @@ xvasprintf(&c->message_string, fmt, ap); va_end(ap); + ARRAY_EXPAND(&c->message_log, 1); + msg = &ARRAY_LAST(&c->message_log); + msg->msg_time = time(NULL); + msg->msg = xstrdup(c->message_string); + + if (s == NULL) + limit = 0; + else + limit = options_get_number(&s->options, "message-limit"); + for (i = ARRAY_LENGTH(&c->message_log); i > limit; i--) { + msg = &ARRAY_ITEM(&c->message_log, i - 1); + xfree(msg->msg); + ARRAY_REMOVE(&c->message_log, i - 1); + } + delay = options_get_number(&c->session->options, "display-time"); tv.tv_sec = delay / 1000; tv.tv_usec = (delay % 1000) * 1000L; - + evtimer_del(&c->message_timer); evtimer_set(&c->message_timer, status_message_callback, c); evtimer_add(&c->message_timer, &tv);