{"thread":{"id":"11094","subject":"[PATCH] Fixes for automatic prefix highlighting","startedAt":"2007-12-02T13:44:11Z","lastAt":"2007-12-02T13:44:11Z","messageCount":1,"participants":["Wincent Colaiuta"],"isPatch":true,"patchVersion":1,"patchTotal":null},"messages":[{"id":"61639","messageId":"1196603051-92641-1-git-send-email-win@wincent.com","threadId":"11094","inReplyTo":null,"subject":"[PATCH] Fixes for automatic prefix highlighting","fromName":"Wincent Colaiuta","fromEmail":"win@wincent.com","sentAt":"2007-12-02T13:44:11Z","receivedAt":"2007-12-02T13:44:11Z","isPatch":true,"sender":{"key":"greg@hurrell.net","avatar":"https://avatars.githubusercontent.com/u/7074?v=4"},"body":"These changes make the automatic prefix highlighting work with the \"Add\nuntracked\" subcommand in git-add--interactive by explicitly handling\narrays, hashes and strings internally (previously only arrays and hashes\nwere handled).\n\nIn addition, prefixes which have special meaning for list_and_choose\n(things like \"*\" for \"all\" and \"-\" for \"deselect) are explicitly\nexcluded (highlighting these prefixes would be misleading).\n\nSigned-off-by: Wincent Colaiuta <win@wincent.com>\n---\n\nEl 1/12/2007, a las 19:04, Junio C Hamano escribiÃ³:\n\n> I've locally munged and pushed out the results before sending the\n> message you are responding to.  Sorry, I should have been clearer (and\n> this is the second time with you if I recall correctly).\n\nSorry, Junio. I do fetch, inspect and integrate changes fairly\nregularly, but I missed that one.\n\nThis patch which I am sending now applies on top of \"next\" (as fetched a\nfew minutes ago).\n\n git-add--interactive.perl |   47 ++++++++++++++++++++++++++++----------------\n 1 files changed, 30 insertions(+), 17 deletions(-)\n\ndiff --git a/git-add--interactive.perl b/git-add--interactive.perl\nindex 23fd2f7..32fb9ea 100755\n--- a/git-add--interactive.perl\n+++ b/git-add--interactive.perl\n@@ -193,7 +193,7 @@ sub find_unique_prefixes {\n \t\tif ((ref $print) eq 'ARRAY') {\n \t\t\t$print = $print->[0];\n \t\t}\n-\t\telse {\n+\t\telsif ((ref $print) eq 'HASH') {\n \t\t\t$print = $print->{VALUE};\n \t\t}\n \t\tupdate_trie(\\%trie, $print);\n@@ -230,12 +230,25 @@ sub find_unique_prefixes {\n \treturn @return;\n }\n \n+# filters out prefixes which have special meaning to list_and_choose()\n+sub is_valid_prefix {\n+\tmy $prefix = shift;\n+\treturn (defined $prefix) &&\n+\t    !($prefix =~ /[\\s,]/) && # separators\n+\t    !($prefix =~ /^-/) &&    # deselection\n+\t    !($prefix =~ /^\\d+/) &&  # selection\n+\t    ($prefix ne '*');        # \"all\" wildcard\n+}\n+\n # given a prefix/remainder tuple return a string with the prefix highlighted\n # for now use square brackets; later might use ANSI colors (underline, bold)\n sub highlight_prefix {\n \tmy $prefix = shift;\n \tmy $remainder = shift;\n-\treturn (defined $prefix) ? \"[$prefix]$remainder\" : $remainder;\n+\treturn $remainder unless defined $prefix;\n+\treturn is_valid_prefix($prefix) ?\n+\t    \"[$prefix]$remainder\" :\n+\t    \"$prefix$remainder\";\n }\n \n sub list_and_choose {\n@@ -257,21 +270,21 @@ sub list_and_choose {\n \t\tfor ($i = 0; $i < @stuff; $i++) {\n \t\t\tmy $chosen = $chosen[$i] ? '*' : ' ';\n \t\t\tmy $print = $stuff[$i];\n-\t\t\tif (ref $print) {\n-\t\t\t\tif ((ref $print) eq 'ARRAY') {\n-\t\t\t\t\t$print = @prefixes ?\n-\t\t\t\t\t    highlight_prefix(@{$prefixes[$i]}) :\n-\t\t\t\t\t    $print->[0];\n-\t\t\t\t}\n-\t\t\t\telse {\n-\t\t\t\t\tmy $value = @prefixes ?\n-\t\t\t\t\t    highlight_prefix(@{$prefixes[$i]}) :\n-\t\t\t\t\t    $print->{VALUE};\n-\t\t\t\t\t$print = sprintf($status_fmt,\n-\t\t\t\t\t    $print->{INDEX},\n-\t\t\t\t\t    $print->{FILE},\n-\t\t\t\t\t    $value);\n-\t\t\t\t}\n+\t\t\tmy $ref = ref $print;\n+\t\t\tmy $highlighted = highlight_prefix(@{$prefixes[$i]})\n+\t\t\t    if @prefixes;\n+\t\t\tif ($ref eq 'ARRAY') {\n+\t\t\t\t$print = $highlighted || $print->[0];\n+\t\t\t}\n+\t\t\telsif ($ref eq 'HASH') {\n+\t\t\t\tmy $value = $highlighted || $print->{VALUE};\n+\t\t\t\t$print = sprintf($status_fmt,\n+\t\t\t\t    $print->{INDEX},\n+\t\t\t\t    $print->{FILE},\n+\t\t\t\t    $value);\n+\t\t\t}\n+\t\t\telse {\n+\t\t\t\t$print = $highlighted || $print;\n \t\t\t}\n \t\t\tprintf(\"%s%2d: %s\", $chosen, $i+1, $print);\n \t\t\tif (($opts->{LIST_FLAT}) &&\n-- \n1.5.3.6.953.gdffc\n"}]}