diff --git a/src/move.c b/src/move.c index 760684265517ab58430a4866eaed928250788a54..f1d05e366b836e2cb97aba5f0907e1cc16906446 100644 --- a/src/move.c +++ b/src/move.c @@ -385,7 +385,7 @@ void do_home(void) openfile->placewewant = xplustabs(); - if (need_screen_update(was_column, openfile->placewewant)) + if (need_horizontal_scroll(was_column, openfile->placewewant)) update_line(openfile->current, openfile->current_x); } @@ -397,7 +397,7 @@ void do_end(void) openfile->current_x = strlen(openfile->current->data); openfile->placewewant = xplustabs(); - if (need_screen_update(was_column, openfile->placewewant)) + if (need_horizontal_scroll(was_column, openfile->placewewant)) update_line(openfile->current, openfile->current_x); } @@ -439,12 +439,11 @@ void do_up(bool scroll_only) #endif editwinrows / 2 + 1); - /* If we're not on the first line of the edit window, and the target - * column is beyond the screen or the mark is on, redraw the prior - * and current lines. */ - if (need_screen_update(was_column, 0)) + /* Redraw the prior line if it was horizontally scrolled. */ + if (need_horizontal_scroll(was_column, 0)) update_line(openfile->current->next, 0); - if (need_screen_update(0, xplustabs())) + /* Redraw the current line if it needs to be horizontally scrolled. */ + if (need_horizontal_scroll(0, xplustabs())) update_line(openfile->current, openfile->current_x); } @@ -522,12 +521,11 @@ void do_down(bool scroll_only) } } - /* If we're not on the last line of the edit window, and the target - * column is beyond the screen or the mark is on, redraw the prior - * and current lines. */ - if (need_screen_update(was_column, 0)) + /* Redraw the prior line if it was horizontally scrolled. */ + if (need_horizontal_scroll(was_column, 0)) update_line(openfile->current->prev, 0); - if (need_screen_update(0, xplustabs())) + /* Redraw the current line if it needs to be horizontally scrolled. */ + if (need_horizontal_scroll(0, xplustabs())) update_line(openfile->current, openfile->current_x); } @@ -566,7 +564,7 @@ void do_left(void) openfile->placewewant = xplustabs(); - if (need_screen_update(was_column, openfile->placewewant)) + if (need_horizontal_scroll(was_column, openfile->placewewant)) update_line(openfile->current, openfile->current_x); } @@ -583,7 +581,7 @@ void do_right(void) else if (openfile->current != openfile->filebot) { openfile->current_x = 0; openfile->placewewant = 0; - if (need_screen_update(was_column, 0)) + if (need_horizontal_scroll(was_column, 0)) update_line(openfile->current, 0); do_down_void(); return; @@ -591,6 +589,6 @@ void do_right(void) openfile->placewewant = xplustabs(); - if (need_screen_update(was_column, openfile->placewewant)) + if (need_horizontal_scroll(was_column, openfile->placewewant)) update_line(openfile->current, openfile->current_x); } diff --git a/src/proto.h b/src/proto.h index eec6d157bded81b15903531fc854c86aa8d05f55..eaa424c4b156002b11938f69fb6a22e619f1afbc 100644 --- a/src/proto.h +++ b/src/proto.h @@ -785,7 +785,7 @@ void reset_cursor(void); void edit_draw(filestruct *fileptr, const char *converted, int line, size_t start); int update_line(filestruct *fileptr, size_t index); -bool need_screen_update(const size_t old_column, const size_t new_column); +bool need_horizontal_scroll(const size_t old_column, const size_t new_column); void edit_scroll(scroll_dir direction, ssize_t nlines); void edit_redraw(filestruct *old_current); void edit_refresh(void); diff --git a/src/winio.c b/src/winio.c index 12923c76f99fd7675797a99aab08b7f9a3d1fbfe..124f831cdb8c9ad9c6b8d6aa9c766af40b23a94b 100644 --- a/src/winio.c +++ b/src/winio.c @@ -2602,16 +2602,16 @@ int update_line(filestruct *fileptr, size_t index) return extralinesused; } -/* Return TRUE if we need an update after moving the cursor, and - * FALSE otherwise. We need an update if the mark is on, or if - * old_column and new_column are on different pages. */ -bool need_screen_update(const size_t old_column, const size_t new_column) +/* Check whether old_column and new_column are on different "pages" (or that + * the mark is on), which means that the relevant line needs to be redrawn. */ +bool need_horizontal_scroll(const size_t old_column, const size_t new_column) { - return #ifndef NANO_TINY - openfile->mark_set || + if (openfile->mark_set) + return TRUE; + else #endif - get_page_start(old_column) != get_page_start(new_column); + return (get_page_start(old_column) != get_page_start(new_column)); } /* When edittop changes, try and figure out how many lines @@ -2740,7 +2740,7 @@ void edit_scroll(scroll_dir direction, ssize_t nlines) for (i = nlines; i > 0 && foo != NULL; i--) { if ((i == nlines && direction == DOWNWARD) || (i == 1 && direction == UPWARD)) { - if (need_screen_update(openfile->placewewant, 0)) + if (need_horizontal_scroll(openfile->placewewant, 0)) update_line(foo, (foo == openfile->current) ? openfile->current_x : 0); } else @@ -2786,7 +2786,7 @@ void edit_redraw(filestruct *old_current) /* Update current if we've changed page, or if it differs from * old_current and needs to be horizontally scrolled. */ - if (need_screen_update(was_pww, openfile->placewewant) || + if (need_horizontal_scroll(was_pww, openfile->placewewant) || (old_current != openfile->current && get_page_start(openfile->placewewant) > 0)) update_line(openfile->current, openfile->current_x);