commit 5a8b5076742038c09dece0c1e59ecddf8cd7a41a from: Stefan Sperling date: Sat Dec 05 16:58:37 2020 UTC do not recompute the displayed diff if '<' or '>' command cannot advance Recomputing a diff can take time. Only do it if a different commit is going to be displayed. commit - fb59748f6b2d9108022ebf444586386f085fd134 commit + 5a8b5076742038c09dece0c1e59ecddf8cd7a41a blob - 1497322b4643af8cb574d4b4e0364308dad35b2f blob + b61cdb3e9c3038dd263ff6b27e3d4dfbe918578f --- tog/tog.c +++ tog/tog.c @@ -3607,6 +3607,7 @@ input_diff_view(struct tog_view **new_view, struct tog const struct got_error *err = NULL; struct tog_diff_view_state *s = &view->state.diff; struct tog_log_view_state *ls; + struct commit_queue_entry *old_selected_entry; int i; switch (ch) { @@ -3679,11 +3680,15 @@ input_diff_view(struct tog_view **new_view, struct tog if (s->log_view == NULL) break; ls = &s->log_view->state.log; + old_selected_entry = ls->selected_entry; err = input_log_view(NULL, s->log_view, KEY_UP); if (err) break; + if (old_selected_entry == ls->selected_entry) + break; + err = set_selected_commit(s, ls->selected_entry); if (err) break; @@ -3699,9 +3704,13 @@ input_diff_view(struct tog_view **new_view, struct tog if (s->log_view == NULL) break; ls = &s->log_view->state.log; + old_selected_entry = ls->selected_entry; err = input_log_view(NULL, s->log_view, KEY_DOWN); if (err) + break; + + if (old_selected_entry == ls->selected_entry) break; err = set_selected_commit(s, ls->selected_entry);