git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Junio C Hamano <gitster@pobox.com>
To: Abraham Samuel Adekunle <abrahamadekunle50@gmail.com>
Cc: git@vger.kernel.org,  Patrick Steinhardt <ps@pks.im>,
	 Phillip Wood <phillip.wood123@gmail.com>
Subject: Re: [PATCH] add -p: show hunk selection state when selecting hunks
Date: Sun, 30 Nov 2025 10:32:56 -0800	[thread overview]
Message-ID: <xmqqqztfbcbr.fsf@gitster.g> (raw)
In-Reply-To: <aSxQhqwzT34hIjV8@Adekunles-MacBook-Air.local> (Abraham Samuel Adekunle's message of "Sun, 30 Nov 2025 16:06:15 +0100")

Abraham Samuel Adekunle <abrahamadekunle50@gmail.com> writes:

> diff --git a/add-patch.c b/add-patch.c
> index 173a53241e..e70e390506 100644
> --- a/add-patch.c
> +++ b/add-patch.c
> @@ -45,7 +45,7 @@ static struct patch_mode patch_mode_add = {
>  		N_("Stage mode change [y,n,q,a,d%s,?]? "),
>  		N_("Stage deletion [y,n,q,a,d%s,?]? "),
>  		N_("Stage addition [y,n,q,a,d%s,?]? "),
> -		N_("Stage this hunk [y,n,q,a,d%s,?]? ")
> +		N_("Stage this hunk [y,n,q,a,d%s,?] %s? ")
>  	},

Three comments:

 * These sets of prompts exist for each front-end that uses the
   interactive patch machinery, and we are looking at the set used
   by "git add -p".  But the "I came back here with K, or I do not
   remember which between k and K I came back here with, and I
   cannot easily tell if the hunk I am looking at is already
   selected" issue is shared with other users like "git reset -p".

 * "chmod +x Makefile && echo >>Makefile && git add -p" would ask if
   you want to stage the mode change of the path and content change
   for the path separately.  You may skip, and later come back with
   K to this question.  The same "hmph, have I selected to use
   this?" issue exists, no?

 * The existing "[choices]? " was designed to be at the very end of
   the question, so that the answer given by the user will come
   immediately after the offered choices.  Adding an overly long
   "selected" or "deselected" to make it "[choices] selected?" does
   not give us a pleasant end-user experience.

Also, after you decided on one hunk when you have two hunks, typing
'j' or 'k' would tell you "No other undecided hunk".  The phrase
used here, "undecided", refers to the choice between USE or SKIP.
To convey the intent clearly, "Select"/"Deselect" feels a rather
indirect way (i.e. "selected for use" vs "selected to skip") to say
what is happening.

Ideally, if we can convey

    Stage this mode change (you previously decided to use it) [y,n,q,a,d%s,?]?
    Stage this mode change (you previously decided to skip it) [y,n,q,a,d%s,?]?
    Stage this deletion (you previously decided to use it) [y,n,q,a,d%sm,?]?
    ...

without wasting too many extra display width, that would be great,
but this patch is not quite there, I am afraid to say.

> @@ -1564,7 +1564,19 @@ static int patch_update_file(struct add_p_state *s,
>  			      (uintmax_t)(file_diff->hunk_nr
>  						? file_diff->hunk_nr
>  						: 1));
> -		printf(_(s->mode->prompt_mode[prompt_mode_type]),
> +		if (prompt_mode_type == PROMPT_HUNK) {
> +			const char *state = "";
> +			if (file_diff->hunk_nr) {
> +				if (hunk->use == USE_HUNK)
> +					state = _("[selected]");
> +				else if (hunk->use == SKIP_HUNK)
> +					state = _("[deselected]");
> +			}
> +			printf(_(s->mode->prompt_mode[prompt_mode_type]),
> +				s->buf.buf, state);
> +		}
> +		else
> +			printf(_(s->mode->prompt_mode[prompt_mode_type]),
>  		       s->buf.buf);
>  		if (*s->s.reset_color_interactive)
>  			fputs(s->s.reset_color_interactive, stdout);

  reply	other threads:[~2025-11-30 18:32 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-11-30 15:06 [PATCH] add -p: show hunk selection state when selecting hunks Abraham Samuel Adekunle
2025-11-30 18:32 ` Junio C Hamano [this message]
2025-12-01 10:01   ` Abraham Samuel Adekunle

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=xmqqqztfbcbr.fsf@gitster.g \
    --to=gitster@pobox.com \
    --cc=abrahamadekunle50@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=phillip.wood123@gmail.com \
    --cc=ps@pks.im \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).