From: David Lawrence Ramsey Date: Fri, 26 May 2006 03:46:03 +0000 (+0000) Subject: fix edit_redraw() breakage X-Git-Tag: v1.3.12~109 X-Git-Url: https://git.wh0rd.org/?a=commitdiff_plain;h=3c780e1d10ff9d389f282d1dbceae76f2f19d65f;p=nano.git fix edit_redraw() breakage git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@3571 35c25a1d-7b9e-4130-9fde-d3aeb78583b8 --- diff --git a/src/winio.c b/src/winio.c index 195ee370..73a44a13 100644 --- a/src/winio.c +++ b/src/winio.c @@ -2817,19 +2817,25 @@ void edit_redraw(const filestruct *old_current, size_t old_pww) #ifndef NANO_TINY /* If the mark is on, update all the lines between old_current - * and the old last line of the edit window. */ + * and either the old first line or old last line (depending on + * whether we've scrolled up or down) of the edit window. */ if (openfile->mark_set) { - ssize_t old_last_lineno = (old_edittop->lineno + - editwinrows <= openfile->filebot->lineno) ? - old_edittop->lineno + editwinrows : - openfile->filebot->lineno; + ssize_t old_lineno; + + if (old_edittop->lineno < openfile->edittop->lineno) + old_lineno = old_edittop->lineno; + else + old_lineno = (old_edittop->lineno + editwinrows <= + openfile->filebot->lineno) ? + old_edittop->lineno + editwinrows : + openfile->filebot->lineno; foo = old_current; - while (foo->lineno != old_last_lineno) { + while (foo->lineno != old_lineno) { update_line(foo, 0); - foo = (foo->lineno > old_last_lineno) ? foo->prev : + foo = (foo->lineno > old_lineno) ? foo->prev : foo->next; } } @@ -2861,13 +2867,14 @@ void edit_redraw(const filestruct *old_current, size_t old_pww) edit_scroll(DOWN, nlines); #ifndef NANO_TINY - /* If the mark is on, update all the lines between the old last - * line of the edit window and edittop. */ + /* If the mark is on, update all the lines between the old first + * line or old last line of the edit window (depending on + * whether we've scrolled up or down) and current. */ if (openfile->mark_set) { - while (foo != openfile->edittop) { + while (foo->lineno != openfile->current->lineno) { update_line(foo, 0); - foo = (foo->lineno > openfile->edittop->lineno) ? + foo = (foo->lineno > openfile->current->lineno) ? foo->prev : foo->next; } }