nano

nano with my custom patches
git clone git://bsandro.tech/nano
Log | Files | Refs | README | LICENSE

commit 3c780e1d10ff9d389f282d1dbceae76f2f19d65f
parent 561db3a7c478c16cb77844e62a64aedc27f66daa
Author: David Lawrence Ramsey <pooka109@gmail.com>
Date:   Fri, 26 May 2006 03:46:03 +0000

fix edit_redraw() breakage


git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@3571 35c25a1d-7b9e-4130-9fde-d3aeb78583b8

Diffstat:
Msrc/winio.c | 29++++++++++++++++++-----------
1 file changed, 18 insertions(+), 11 deletions(-)

diff --git 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; } }