git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [Suggestion] Alternative way for displaying help menu of patch flow
@ 2017-04-28  5:14 Kaartic Sivaraam
  2017-04-28  6:37 ` Jeff King
  0 siblings, 1 reply; 3+ messages in thread
From: Kaartic Sivaraam @ 2017-04-28  5:14 UTC (permalink / raw)
  To: git

Hello community,

I would like to state about a small issue I face when I use the `git add 
-i` command. I guess it's expressed easily with an example.

**** Start ****

Imagine a situation in which you accidentally made a reasonable amount 
of change to your code from your last commit. You would like to put them 
in separate commits and hence you go for the `git add -i` command and 
choose the `patch` option. You choose the file which you want to update 
as patches.

Unfortunately a hunk (of reasonable size) in the file seems to be having 
changes that you would like to be in separate commits. So, you would 
like to split the hunk into smaller parts but you forgot the correct 
option for it and you use `?` option. In most cases you wouldn't see the 
help menu completely. Moreover, if the hunk's size is reasonable enough 
to take up the whole screen of the terminal you would be seeing the same 
screen as before as the help menu is hidden above the hunk and you need 
to scroll to see it (only if you knew it's up there in the first place!)

**** End ****

I guess it would be better to display the help menu in a separate flow, 
like when the user click the `?` option in the `patch` flow then the 
whole screen is cleared and the help menu is displayed in some 
appropriate place and after the user has viewed the help menu he could 
quit from the help screen (probably by using a key like `q`) to continue 
where he left off. I think it would be better because, in general, a 
user would want to see the help menu when he uses the `?` option in the 
patch flow, not the hunk that gets displayed after it.

Is it a good suggestion or is there anything I missed?

Quote : "You don’t change the world by doing what you’re told.” — Joi Ito

Regards,
Kaartic


^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [Suggestion] Alternative way for displaying help menu of patch flow
  2017-04-28  5:14 [Suggestion] Alternative way for displaying help menu of patch flow Kaartic Sivaraam
@ 2017-04-28  6:37 ` Jeff King
  2017-04-28  7:21   ` Kaartic Sivaraam
  0 siblings, 1 reply; 3+ messages in thread
From: Jeff King @ 2017-04-28  6:37 UTC (permalink / raw)
  To: Kaartic Sivaraam; +Cc: git

On Fri, Apr 28, 2017 at 10:44:22AM +0530, Kaartic Sivaraam wrote:

> I guess it would be better to display the help menu in a separate flow, like
> when the user click the `?` option in the `patch` flow then the whole screen
> is cleared and the help menu is displayed in some appropriate place and
> after the user has viewed the help menu he could quit from the help screen
> (probably by using a key like `q`) to continue where he left off. I think it
> would be better because, in general, a user would want to see the help menu
> when he uses the `?` option in the patch flow, not the hunk that gets
> displayed after it.

I think it would be nicer to avoid modality in the interface. I.e.,
rather than having "?" switch you into "help mode", stay at the same
hunk prompt but just don't show the hunk again automatically. In most
cases it will still be visible on the screen anyway, and there probably
ought to be a "r"edisplay command if the user wants to see it from
scratch.

Something like the patch at the end of this message.

I think this problem does extend to other output we show in the patch
loop. For instance, if you hit 'j' and there is no, you get:

  $ git add -p
  diff --git a/foo b/foo
  index 3367afd..3e75765 100644
  --- a/foo
  +++ b/foo
  @@ -1 +1 @@
  -old
  +new
  Stage this hunk [y,n,q,a,d,/,e,?]? j
  No next hunk
  @@ -1 +1 @@
  -old
  +new
  Stage this hunk [y,n,q,a,d,/,e,?]? 

If the hunk is big, that message scrolls off the screen. We could
probably put it after the hunk, but I'd worry that the ordering would be
confusing (because it comes between the hunk and the "this hunk" prompt.

Or it could just not re-display the hunk all (like what my patch does
for help), and you'd get:

  @@ -1 +1 @@
  -old
  +new
  Stage this hunk [y,n,q,a,d,/,e,?]? j
  No next hunk
  Stage this hunk [y,n,q,a,d,/,e,?]? 

at which point you could "r" to redisplay it if you wanted to.

I also suspect that other menus in add--interactive have the same
issue. E.g., if you have a large number of files what does the
file-selection menu "git add -i" look like? Perhaps the issue is less
common there, though.

---
diff --git a/git-add--interactive.perl b/git-add--interactive.perl
index 709a5f6ce..81f62331b 100755
--- a/git-add--interactive.perl
+++ b/git-add--interactive.perl
@@ -1237,6 +1237,7 @@ k - leave this hunk undecided, see previous undecided hunk
 K - leave this hunk undecided, see previous hunk
 s - split the current hunk into smaller hunks
 e - manually edit the current hunk
+r - redisplay the current hunk
 ? - print help
 EOF
 }
@@ -1385,6 +1386,7 @@ my %patch_update_prompt_modes = (
 sub patch_update_file {
 	my $quit = 0;
 	my ($ix, $num);
+	my $skip_hunk_display;
 	my $path = shift;
 	my ($head, @hunk) = parse_diff($path);
 	($head, my $mode, my $deletion) = parse_diff_header($head);
@@ -1451,8 +1453,13 @@ sub patch_update_file {
 		if ($hunk[$ix]{TYPE} eq 'hunk') {
 			$other .= ',e';
 		}
-		for (@{$hunk[$ix]{DISPLAY}}) {
-			print;
+
+		if ($skip_hunk_display) {
+			$skip_hunk_display = 0;
+		} else {
+			for (@{$hunk[$ix]{DISPLAY}}) {
+				print;
+			}
 		}
 		print colored $prompt_color,
 			sprintf(__($patch_update_prompt_modes{$patch_mode}{$hunk[$ix]{TYPE}}), $other);
@@ -1608,8 +1615,13 @@ sub patch_update_file {
 					splice @hunk, $ix, 1, $newhunk;
 				}
 			}
+			elsif ($line =~ /^r/) {
+				# do nothing; we'll show the hunk when we loop
+				next;
+			}
 			else {
 				help_patch_cmd($other);
+				$skip_hunk_display = 1;
 				next;
 			}
 			# soft increment

^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [Suggestion] Alternative way for displaying help menu of patch flow
  2017-04-28  6:37 ` Jeff King
@ 2017-04-28  7:21   ` Kaartic Sivaraam
  0 siblings, 0 replies; 3+ messages in thread
From: Kaartic Sivaraam @ 2017-04-28  7:21 UTC (permalink / raw)
  To: Jeff King; +Cc: git

On Friday 28 April 2017 12:07 PM, Jeff King wrote:
>
> If the hunk is big, that message scrolls off the screen. We could
> probably put it after the hunk, but I'd worry that the ordering would be
> confusing (because it comes between the hunk and the "this hunk" prompt.
Probably it could be better to clear the console after each user input, 
before
the result of that input is displayed. That could probably remove the 
clutter
and could allow the user to easily differentiate from the current output 
from
previous output.
> Or it could just not re-display the hunk all (like what my patch does
> for help), and you'd get:
>
>    @@ -1 +1 @@
>    -old
>    +new
>    Stage this hunk [y,n,q,a,d,/,e,?]? j
>    No next hunk
>    Stage this hunk [y,n,q,a,d,/,e,?]?
>
> at which point you could "r" to redisplay it if you wanted to.
This seems good too. But, I guess, the help menu would probably hide the
hunk and could make that prompt a little absurd.
> I also suspect that other menus in add--interactive have the same
> issue. E.g., if you have a large number of files what does the
> file-selection menu "git add -i" look like? Perhaps the issue is less
> common there, though.
>
> ---
> diff --git a/git-add--interactive.perl b/git-add--interactive.perl
> index 709a5f6ce..81f62331b 100755
> --- a/git-add--interactive.perl
> +++ b/git-add--interactive.perl
> @@ -1237,6 +1237,7 @@ k - leave this hunk undecided, see previous undecided hunk
>   K - leave this hunk undecided, see previous hunk
>   s - split the current hunk into smaller hunks
>   e - manually edit the current hunk
> +r - redisplay the current hunk
>   ? - print help
>   EOF
>   }
> @@ -1385,6 +1386,7 @@ my %patch_update_prompt_modes = (
>   sub patch_update_file {
>   	my $quit = 0;
>   	my ($ix, $num);
> +	my $skip_hunk_display;
>   	my $path = shift;
>   	my ($head, @hunk) = parse_diff($path);
>   	($head, my $mode, my $deletion) = parse_diff_header($head);
> @@ -1451,8 +1453,13 @@ sub patch_update_file {
>   		if ($hunk[$ix]{TYPE} eq 'hunk') {
>   			$other .= ',e';
>   		}
> -		for (@{$hunk[$ix]{DISPLAY}}) {
> -			print;
> +
> +		if ($skip_hunk_display) {
> +			$skip_hunk_display = 0;
> +		} else {
> +			for (@{$hunk[$ix]{DISPLAY}}) {
> +				print;
> +			}
>   		}
>   		print colored $prompt_color,
>   			sprintf(__($patch_update_prompt_modes{$patch_mode}{$hunk[$ix]{TYPE}}), $other);
> @@ -1608,8 +1615,13 @@ sub patch_update_file {
>   					splice @hunk, $ix, 1, $newhunk;
>   				}
>   			}
> +			elsif ($line =~ /^r/) {
> +				# do nothing; we'll show the hunk when we loop
> +				next;
> +			}
>   			else {
>   				help_patch_cmd($other);
> +				$skip_hunk_display = 1;
>   				next;
>   			}
>   			# soft increment
Regards,
Kaartic

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2017-04-28  7:21 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-04-28  5:14 [Suggestion] Alternative way for displaying help menu of patch flow Kaartic Sivaraam
2017-04-28  6:37 ` Jeff King
2017-04-28  7:21   ` Kaartic Sivaraam

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).