diff --git a/ChangeLog b/ChangeLog index e56a8713..dfd4bec1 100644 --- a/ChangeLog +++ b/ChangeLog @@ -71,6 +71,12 @@ CVS code - - help.c: do_help() - Simplify screen update handling and exiting. (DLR) +- move.c: + do_scroll_up(), do_scroll_down() + - Fix problems where, after scrolling, the previous and current + lines would not be updated properly if the current line was + not the first or last line of the edit window. (DLR, found by + Mike Frysinger) - winio.c: display_string() - Properly handle buf[start_index]'s being a null terminator. diff --git a/src/move.c b/src/move.c index 76b22275..f7f770b6 100644 --- a/src/move.c +++ b/src/move.c @@ -522,6 +522,16 @@ void do_scroll_up(void) /* Scroll the edit window up one line. */ edit_scroll(UP, 1); + + /* If we're not on the first line of the edit window, update the + * line we were on before and the line we're on now. The former + * needs to be redrawn if we're not on the first page, and the + * latter needs to be drawn unconditionally. */ + if (openfile->current_y > 0) { + if (need_vertical_update(0)) + update_line(openfile->current->next, 0); + update_line(openfile->current, openfile->current_x); + } } #endif /* !NANO_TINY */ @@ -576,6 +586,16 @@ void do_scroll_down(void) /* Scroll the edit window down one line. */ edit_scroll(DOWN, 1); + + /* If we're not on the last line of the edit window, update the line + * we were on before and the line we're on now. The former needs to + * be redrawn if we're not on the first page, and the latter needs + * to be drawn unconditionally. */ + if (openfile->current_y < editwinrows - 1) { + if (need_vertical_update(0)) + update_line(openfile->current->prev, 0); + update_line(openfile->current, openfile->current_x); + } } #endif /* !NANO_TINY */