[PATCH] Fixes for automatic prefix highlighting

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



These changes make the automatic prefix highlighting work with the "Add
untracked" subcommand in git-add--interactive by explicitly handling
arrays, hashes and strings internally (previously only arrays and hashes
were handled).

In addition, prefixes which have special meaning for list_and_choose
(things like "*" for "all" and "-" for "deselect) are explicitly
excluded (highlighting these prefixes would be misleading).

Signed-off-by: Wincent Colaiuta <win@xxxxxxxxxxx>
---

El 1/12/2007, a las 19:04, Junio C Hamano escribió:

> I've locally munged and pushed out the results before sending the
> message you are responding to.  Sorry, I should have been clearer (and
> this is the second time with you if I recall correctly).

Sorry, Junio. I do fetch, inspect and integrate changes fairly
regularly, but I missed that one.

This patch which I am sending now applies on top of "next" (as fetched a
few minutes ago).

 git-add--interactive.perl |   47 ++++++++++++++++++++++++++++----------------
 1 files changed, 30 insertions(+), 17 deletions(-)

diff --git a/git-add--interactive.perl b/git-add--interactive.perl
index 23fd2f7..32fb9ea 100755
--- a/git-add--interactive.perl
+++ b/git-add--interactive.perl
@@ -193,7 +193,7 @@ sub find_unique_prefixes {
 		if ((ref $print) eq 'ARRAY') {
 			$print = $print->[0];
 		}
-		else {
+		elsif ((ref $print) eq 'HASH') {
 			$print = $print->{VALUE};
 		}
 		update_trie(\%trie, $print);
@@ -230,12 +230,25 @@ sub find_unique_prefixes {
 	return @return;
 }
 
+# filters out prefixes which have special meaning to list_and_choose()
+sub is_valid_prefix {
+	my $prefix = shift;
+	return (defined $prefix) &&
+	    !($prefix =~ /[\s,]/) && # separators
+	    !($prefix =~ /^-/) &&    # deselection
+	    !($prefix =~ /^\d+/) &&  # selection
+	    ($prefix ne '*');        # "all" wildcard
+}
+
 # given a prefix/remainder tuple return a string with the prefix highlighted
 # for now use square brackets; later might use ANSI colors (underline, bold)
 sub highlight_prefix {
 	my $prefix = shift;
 	my $remainder = shift;
-	return (defined $prefix) ? "[$prefix]$remainder" : $remainder;
+	return $remainder unless defined $prefix;
+	return is_valid_prefix($prefix) ?
+	    "[$prefix]$remainder" :
+	    "$prefix$remainder";
 }
 
 sub list_and_choose {
@@ -257,21 +270,21 @@ sub list_and_choose {
 		for ($i = 0; $i < @stuff; $i++) {
 			my $chosen = $chosen[$i] ? '*' : ' ';
 			my $print = $stuff[$i];
-			if (ref $print) {
-				if ((ref $print) eq 'ARRAY') {
-					$print = @prefixes ?
-					    highlight_prefix(@{$prefixes[$i]}) :
-					    $print->[0];
-				}
-				else {
-					my $value = @prefixes ?
-					    highlight_prefix(@{$prefixes[$i]}) :
-					    $print->{VALUE};
-					$print = sprintf($status_fmt,
-					    $print->{INDEX},
-					    $print->{FILE},
-					    $value);
-				}
+			my $ref = ref $print;
+			my $highlighted = highlight_prefix(@{$prefixes[$i]})
+			    if @prefixes;
+			if ($ref eq 'ARRAY') {
+				$print = $highlighted || $print->[0];
+			}
+			elsif ($ref eq 'HASH') {
+				my $value = $highlighted || $print->{VALUE};
+				$print = sprintf($status_fmt,
+				    $print->{INDEX},
+				    $print->{FILE},
+				    $value);
+			}
+			else {
+				$print = $highlighted || $print;
 			}
 			printf("%s%2d: %s", $chosen, $i+1, $print);
 			if (($opts->{LIST_FLAT}) &&
-- 
1.5.3.6.953.gdffc

-
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux