Commit Diff


commit - 67c0cb403ba1e661f6ea1f1a6e02077d0aa2b06a
commit + 028fff5774c0d94d4a1aad1a18ba0efa7aa429d3
blob - 48638c81dd69c3990a39403314a7501e8e8e5e10
blob + c4e4801a051319e8e36bdd92f8b4c5b8909460e9
--- cmd.c
+++ cmd.c
@@ -170,16 +170,25 @@ cmd_scroll_line_up(struct buffer *buffer)
 {
 	struct vline	*vl;
 
-	if (buffer->top_line == NULL)
-		return;
+	for (;;) {
+		if (buffer->top_line == NULL)
+			return;
 
-	if ((vl = TAILQ_PREV(buffer->top_line, vhead, vlines))
-	    == NULL)
-		return;
+		if ((vl = TAILQ_PREV(buffer->top_line, vhead, vlines))
+		    == NULL)
+			return;
 
-	forward_line(buffer, -1);
+		buffer->top_line = vl;
+
+		if (vl->parent->flags & L_HIDDEN)
+			continue;
+
+		break;
+	}
+
 	buffer->line_off--;
-	buffer->top_line = vl;
+
+	forward_line(buffer, -1);
 }
 
 void
@@ -188,7 +197,16 @@ cmd_scroll_line_down(struct buffer *buffer)
 	if (!forward_line(buffer, +1))
 		return;
 
-	buffer->top_line = TAILQ_NEXT(buffer->top_line, vlines);
+	for (;;) {
+		if (buffer->top_line == NULL)
+			return;
+
+		buffer->top_line = TAILQ_NEXT(buffer->top_line, vlines);
+		if (buffer->top_line->parent->flags & L_HIDDEN)
+			continue;
+		break;
+	}
+
 	buffer->line_off++;
 }