+ {
+ int from = lines > 0 ? view->height - lines : 0;
+ int to = from + (lines > 0 ? lines : -lines);
+
+ wscrl(view->win, lines);
+
+ for (; from < to; from++) {
+ if (!view->render(view, from))
+ break;
+ }
+ }
+
+ /* Move current line into the view. */
+ if (view->lineno < view->offset) {
+ view->lineno = view->offset;
+ view->render(view, 0);
+
+ } else if (view->lineno >= view->offset + view->height) {
+ view->lineno = view->offset + view->height - 1;
+ view->render(view, view->lineno - view->offset);
+ }
+
+ assert(view->offset <= view->lineno && view->lineno <= view->lines);
+
+ redrawwin(view->win);
+ wrefresh(view->win);
+
+ report_position(view, lines);
+}
+static void
+scroll_view(struct view *view, int request)
+{
+ int lines = 1;