=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/tmux/screen-redraw.c,v retrieving revision 1.3 retrieving revision 1.4 diff -c -r1.3 -r1.4 *** src/usr.bin/tmux/screen-redraw.c 2009/07/14 07:23:36 1.3 --- src/usr.bin/tmux/screen-redraw.c 2009/07/14 19:03:16 1.4 *************** *** 1,4 **** ! /* $OpenBSD: screen-redraw.c,v 1.3 2009/07/14 07:23:36 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott --- 1,4 ---- ! /* $OpenBSD: screen-redraw.c,v 1.4 2009/07/14 19:03:16 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott *************** *** 63,71 **** return (0); } ! /* Redraw entire screen.. */ void ! screen_redraw_screen(struct client *c) { struct window *w = c->session->curw->window; struct tty *tty = &c->tty; --- 63,71 ---- return (0); } ! /* Redraw entire screen. */ void ! screen_redraw_screen(struct client *c, int status_only) { struct window *w = c->session->curw->window; struct tty *tty = &c->tty; *************** *** 75,82 **** u_char choriz, cvert, cbackg; /* Get status line, er, status. */ ! status = options_get_number(&c->session->options, "status"); /* Work out ACS characters. */ if (tty_term_has(tty->term, TTYC_ACSC)) { has_acs = 1; --- 75,91 ---- u_char choriz, cvert, cbackg; /* Get status line, er, status. */ ! if (c->message_string != NULL || c->prompt_string != NULL) ! status = 1; ! else ! status = options_get_number(&c->session->options, "status"); + /* If only drawing status and it is present, don't need the rest. */ + if (status_only && status) { + tty_draw_line(tty, &c->status, 0, 0, tty->sy - 1); + return; + } + /* Work out ACS characters. */ if (tty_term_has(tty->term, TTYC_ACSC)) { has_acs = 1; *************** *** 95,100 **** --- 104,111 ---- if (has_acs) tty_putcode(tty, TTYC_SMACS); for (j = 0; j < tty->sy - status; j++) { + if (status_only && j != tty->sy - 1) + continue; for (i = 0; i < tty->sx; i++) { if (!screen_redraw_check_cell(c, i, j)) { tty_cursor(tty, i, j, 0, 0); *************** *** 120,131 **** --- 131,146 ---- tty_putcode(tty, TTYC_SMACS); if (wp->xoff > 0) { for (i = wp->yoff; i < wp->yoff + sy; i++) { + if (status_only && i != tty->sy - 1) + continue; tty_cursor(tty, wp->xoff - 1, i, 0, 0); tty_putc(tty, cvert); } } if (wp->xoff + sx < tty->sx) { for (i = wp->yoff; i < wp->yoff + sy; i++) { + if (status_only && i != tty->sy - 1) + continue; tty_cursor(tty, wp->xoff + sx, i, 0, 0); tty_putc(&c->tty, cvert); } *************** *** 133,156 **** /* Draw top and bottom borders. */ if (wp->yoff > 0) { ! tty_cursor(tty, wp->xoff, wp->yoff - 1, 0, 0); ! for (i = 0; i < sx; i++) ! tty_putc(tty, choriz); } if (wp->yoff + sy < tty->sy - status) { ! tty_cursor(tty, wp->xoff, wp->yoff + sy, 0, 0); ! for (i = 0; i < sx; i++) ! tty_putc(tty, choriz); } if (has_acs) tty_putcode(tty, TTYC_RMACS); /* Draw the pane. */ ! screen_redraw_pane(c, wp); } /* Draw the status line. */ ! screen_redraw_status(c); } /* Draw a single pane. */ --- 148,180 ---- /* Draw top and bottom borders. */ if (wp->yoff > 0) { ! if (!status_only || wp->yoff - 1 == tty->sy - 1) { ! tty_cursor(tty, wp->xoff, wp->yoff - 1, 0, 0); ! for (i = 0; i < sx; i++) ! tty_putc(tty, choriz); ! } } if (wp->yoff + sy < tty->sy - status) { ! if (!status_only || wp->yoff + sy == tty->sy - 1) { ! tty_cursor(tty, wp->xoff, wp->yoff + sy, 0, 0); ! for (i = 0; i < sx; i++) ! tty_putc(tty, choriz); ! } } if (has_acs) tty_putcode(tty, TTYC_RMACS); /* Draw the pane. */ ! for (i = 0; i < wp->sy; i++) { ! if (status_only && i != tty->sy - 1) ! continue; ! tty_draw_line(tty, wp->screen, i, wp->xoff, wp->yoff); ! } } /* Draw the status line. */ ! if (status) ! tty_draw_line(tty, &c->status, 0, 0, tty->sy - 1); } /* Draw a single pane. */ *************** *** 161,172 **** for (i = 0; i < wp->sy; i++) tty_draw_line(&c->tty, wp->screen, i, wp->xoff, wp->yoff); - } - - - /* Draw the status line. */ - void - screen_redraw_status(struct client *c) - { - tty_draw_line(&c->tty, &c->status, 0, 0, c->tty.sy - 1); } --- 185,188 ----