diff --git a/CHANGES b/CHANGES index 695f4230..73ab107e 100644 --- a/CHANGES +++ b/CHANGES @@ -1,5 +1,6 @@ 19 January 2009 +* Fix various stupid issues when the status line is turned off. Grr. * Use reverse attributes for clock and cursor, otherwise they do not appear on black and white terminals. * An error in a command sequence now stops execution of that sequence. @@ -969,7 +970,7 @@ (including mutt, emacs). No status bar yet and no key remapping or other customisation. -$Id: CHANGES,v 1.223 2009-01-19 19:01:11 nicm Exp $ +$Id: CHANGES,v 1.224 2009-01-19 20:14:55 nicm Exp $ LocalWords: showw utf UTF fulvio ciriaco joshe OSC APC gettime abc DEF OA clr LocalWords: rivo nurges lscm Erdely eol smysession mysession ek dstname RB ms diff --git a/TODO b/TODO index c3490bbe..488e7e2f 100644 --- a/TODO +++ b/TODO @@ -83,3 +83,7 @@ - bring back -l/-p on splitw so i can do "splitw -p 75 elinks" - UTF-8 combining characters don't work (probably should be width 1 but are listed as 2) +- client sx/sy should be in tty, then can let the terminal wrap at edge + to allow xterm to pick up it should be one line for its c/p +- with no status line and when window sy @@ -53,14 +53,14 @@ screen_redraw_screen(struct client *c, struct screen *s) s = wp->screen; sy = screen_size_y(s); - if (!status && TAILQ_NEXT(wp, entry) == NULL) - sy--; cx = s->cx; cy = s->cy; if (wp->yoff + sy <= w->sy) { - for (i = 0; i < sy; i++) - screen_redraw_line(c, s, wp->yoff, i); + for (i = 0; i < sy; i++) { + if (wp->yoff + i != c->sy - 1) + screen_redraw_line(c, s, wp->yoff, i); + } if (TAILQ_NEXT(wp, entry) != NULL) screen_redraw_blanky(c, wp->yoff + sy, 1, '-'); } @@ -70,7 +70,7 @@ screen_redraw_screen(struct client *c, struct screen *s) /* Fill in empty space below. */ if (w->sy < c->sy - status) - screen_redraw_blanky(c, w->sy, c->sy - w->sy, '='); + screen_redraw_blanky(c, w->sy, c->sy - status - w->sy, '='); /* Draw the status line. */ screen_redraw_status(c); diff --git a/status.c b/status.c index a7d0d58f..c388cd76 100644 --- a/status.c +++ b/status.c @@ -1,4 +1,4 @@ -/* $Id: status.c,v 1.65 2009-01-19 19:01:11 nicm Exp $ */ +/* $Id: status.c,v 1.66 2009-01-19 20:14:55 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott @@ -53,6 +53,13 @@ status_redraw(struct client *c) left = right = NULL; + /* Resize the target screen. */ + if (screen_size_x(&c->status) != c->sx) { + screen_free(&c->status); + screen_init(&c->status, c->sx, 1, 0); + } + + /* No status line? */ if (c->sy == 0 || !options_get_number(&s->options, "status")) goto off; larrow = rarrow = 0; @@ -67,6 +74,7 @@ status_redraw(struct client *c) if (yy == 0) goto blank; + /* Work out the left and right strings. */ left = status_replace(s, options_get_string( &s->options, "status-left"), c->status_timer.tv_sec); llen = options_get_number(&s->options, "status-left-length"); @@ -147,12 +155,6 @@ status_redraw(struct client *c) width = xx; draw: - /* Resize the target screen. */ - if (screen_size_x(&c->status) != c->sx) { - screen_free(&c->status); - screen_init(&c->status, c->sx, 1, 0); - } - /* Bail here if anything is too small too. XXX. */ if (width == 0 || xx == 0) goto blank; @@ -259,20 +261,20 @@ off: * Draw the real window last line. Necessary to wipe over message if * status is off. Not sure this is the right place for this. */ + memcpy(&gc, &grid_default_cell, sizeof gc); screen_write_start(&ctx, NULL, &c->status); sy = 0; TAILQ_FOREACH(wp, &s->curw->window->panes, entry) { - sy += wp->sy; + sy += wp->sy + 1; sc = wp->screen; } - sy++; screen_write_cursormove(&ctx, 0, 0); - if (sy < c->sy - 1) { + if (sy < c->sy) { /* If the screen is too small, use blank. */ - for (offset = 0; offset < c->sx; offset++) - screen_write_putc(&ctx, &gc, ' '); + for (offset = 0; offset < c->sx; offset++) + screen_write_putc(&ctx, &gc, ' '); } else { screen_write_copy(&ctx, sc, 0, sc->grid->hsize + screen_size_y(sc) - 1, c->sx, 1);