screen: avoid redrawing a line twice

The old_current line needs to be redrawn only if it differs from current,
and if it wasn't drawn already by the iteration for when the mark is on.

Also make the conditions involving horizontal scrolling more precise.
This commit is contained in:
Benno Schulenberg 2016-04-11 20:40:21 +02:00
parent aa1ae0a144
commit 4b5b66a806

View File

@ -2983,11 +2983,17 @@ void edit_redraw(filestruct *old_current)
}
#endif /* !NANO_TINY */
/* Update old_current and current if we've changed page. */
if (need_screen_update(0) || need_screen_update(was_pww)) {
/* Update old_current only if it differs from current, and if not
* already done above, and if it was horizontally scrolled. */
if (old_current != openfile->current && !openfile->mark_set &&
get_page_start(was_pww) > 0)
update_line(old_current, 0);
/* 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) || (old_current != openfile->current &&
get_page_start(openfile->placewewant) > 0))
update_line(openfile->current, openfile->current_x);
}
}
/* Refresh the screen without changing the position of lines. Use this