diff options
author | Wincent Colaiuta <win@wincent.com> | 2007-12-02 14:44:11 +0100 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2007-12-02 11:09:22 -0800 |
commit | 633209898b71df4cf4d9296f224294f9fe252f66 (patch) | |
tree | 047cbd7f68001dfd42e2110c6c9a33184babba17 | |
parent | Highlight keyboard shortcuts in git-add--interactive (diff) | |
download | tgif-633209898b71df4cf4d9296f224294f9fe252f66.tar.xz |
add -i: allow prefix highlighting for "Add untracked" as well.
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@wincent.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rwxr-xr-x | 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 23fd2f741b..32fb9ea2bb 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}) && |