- Consistently make the flags global and any variables used to
hold it longs. (DLR)
- Make edit_scroll() sophisticated enough to keep track of
- current and current_x and update the lines before and after
- the scrolled region, and change the movement functions that
- use edit_scroll() to (a) set current and current_x before
- calling it, and (b) no longer call edit_redraw() afterward,
- since it's now unnecessary. These changes eliminate
- redundant screen updates when the mark is on, since the mark
- display depends on current and current_x. Changes to
- edit_scroll(), do_page_up(), do_page_down(), do_up(), and
- do_down(). (DLR)
+ current and current_x, update the lines before and after the
+ scrolled region, and properly scroll more than editwinrows
+ lines; and change the movement functions that use
+ edit_scroll() to (a) set current and current_x before calling
+ it, and (b) no longer call edit_redraw() afterward, as it's
+ now unnecessary. These changes eliminate redundant screen
+ updates when the mark is on, since the mark display depends on
+ current and current_x. Changes to edit_scroll(),
+ do_page_up(), do_page_down(), do_up(), and do_down(). (DLR)
- Consistently make the fg and bg colortype struct entries and
any variables used to hold them shorts. Changes to
do_colorinit() (renamed color_init()), color_to_int() (renamed
const filestruct *foo;
int i;
- /* Scrolling less than one line or more than editwinrows lines is
- * redundant, so don't allow it. */
- if (nlines < 1 || nlines > editwinrows)
+ /* Don't bother scrolling less than one line. */
+ if (nlines < 1)
return;
+ /* Part 1: nlines is the number of lines we're going to scroll the
+ * text of the edit window. */
+
/* Move the top line of the edit window up or down (depending on the
* value of direction) nlines lines, or as many lines as we can if
* there are fewer than nlines lines available. */
}
}
- /* Scroll the text on the screen up or down nlines lines, depending
- * on the value of direction. */
+ /* Limit nlines to the number of lines in the edit window. */
+ if (nlines > editwinrows)
+ nlines = editwinrows;
+
+ /* Scroll the text of the edit window up or down nlines lines,
+ * depending on the value of direction. */
scrollok(edit, TRUE);
wscrl(edit, (direction == UP) ? -nlines : nlines);
scrollok(edit, FALSE);
+ /* Part 2: nlines is the number of lines in the scrolled region of
+ * the edit window that we need to draw. */
+
/* If we scrolled up, we couldn't scroll up all nlines lines, and
- * we're now at the top of the file, we need to treat the entire
- * screen as the scrolled region, instead of just the top nlines
- * lines. */
+ * we're now at the top of the file, we need to draw the entire edit
+ * window instead of just its top nlines lines. */
if (direction == UP && i > 0 && openfile->edittop ==
openfile->fileage)
- nlines = editwinrows;
+ nlines = editwinrows - 2;
- /* Make nlines account for the lines before and after the scrolled
- * region, if they're onsccreen. */
+ /* If the lines before and after the scrolled region are visible in
+ * the edit window, we need to draw them too. */
nlines += 2;
if (nlines > editwinrows)
nlines = editwinrows;