Re: [PATCH 5/5] add-patch: render hunks through the pager
On Mon, May 20, 2024 at 12:30:50PM -0700, Junio C Hamano wrote:
Show 5 quoted lines
> > Invoke the pager when displaying hunks during "add -p" sessions, to make
> > it easier for the user to review hunks longer than one screen height.
>
> If the hunk fits on one screen, it is annoying to see a pager
> invoked and then torn down immediately,
> even with "less -F"
> (--quit-if-one-screen). As we know how much output we are throwing
> at the user, we'd want to make this conditional to the size of the
> hunk being shown and the terminal height.
Are you thinking of something like?:
diff --git a/add-patch.c b/add-patch.c
index cefa3941a3..495baad3ac 100644
--- a/add-patch.c
+++ b/add-patch.c
@@ -1449,11 +1449,18 @@ static int patch_update_file(struct add_p_state *s,
strbuf_reset(&s->buf);
if (file_diff->hunk_nr) {
if (rendered_hunk_index != hunk_index) {
- setup_pager();
+ int lines = 0;
render_hunk(s, hunk, 0, colored, &s->buf);
+ for(int i = 0; i < s->buf.len; i++) {
+ if (s->buf.buf[i] == '\n')
+ lines++;
+ }
+ if (lines > term_columns())
+ setup_pager();
fputs(s->buf.buf, stdout);
rendered_hunk_index = hunk_index;
- wait_for_pager();
+ if (lines > term_columns())
+ wait_for_pager();
}
strbuf_reset(&s->buf);
This would significantly reduce the blast radius.
Thanks.