Commit Diff


commit - 80ee46039aad5490fab4f020f562d807f8e9f6b4
commit + dfc1d240864e4b31fed0d15b829dc86a45b808c5
blob - 7f8c1b8136bc76376e52533c1c368364ac8da0d8
blob + d8bdfb1478a2cc082beeb058cb703b14a959463c
--- tog/tog.c
+++ tog/tog.c
@@ -611,9 +611,13 @@ show_log_view(struct got_object_id *start_id, struct g
 				scroll_up(&first_displayed_entry, 1, &commits);
 				break;
 			case KEY_PPAGE:
+				if (TAILQ_FIRST(&commits) ==
+				    first_displayed_entry) {
+					selected = 0;
+					break;
+				}
 				scroll_up(&first_displayed_entry, LINES,
 				    &commits);
-				selected = 0;
 				break;
 			case 'j':
 			case KEY_DOWN:
@@ -631,13 +635,19 @@ show_log_view(struct got_object_id *start_id, struct g
 				break;
 			case KEY_NPAGE:
 				nparents = num_parents(first_displayed_entry);
+				if (nparents < LINES - 1 &&
+				    selected < nparents - 1) {
+					selected = nparents - 1;
+					break;
+				}
 				err = scroll_down(&first_displayed_entry,
 				    MIN(nparents, LINES), last_displayed_entry,
 				    &commits, repo);
 				if (err)
 					goto done;
 				nparents = num_parents(first_displayed_entry);
-				selected = MIN(nparents, LINES) - 1;
+				if (selected > nparents)
+					selected = nparents - 1;
 				break;
 			case KEY_RESIZE:
 				if (selected > LINES)