summaryrefslogtreecommitdiff
path: root/Master/texmf
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf')
-rw-r--r--Master/texmf/scripts/texlive/tlmgrgui.pl65
1 files changed, 49 insertions, 16 deletions
diff --git a/Master/texmf/scripts/texlive/tlmgrgui.pl b/Master/texmf/scripts/texlive/tlmgrgui.pl
index 6467e9d5750..8cc71646e66 100644
--- a/Master/texmf/scripts/texlive/tlmgrgui.pl
+++ b/Master/texmf/scripts/texlive/tlmgrgui.pl
@@ -109,7 +109,8 @@ my $status_value = 0;
my $show_packages = 1;
my $show_collections = 1;
my $show_schemes = 1;
-my $match_string = 0;
+my $match_descriptions = 0;
+my $match_filenames = 0;
my $selection_value = 0;
@@ -297,9 +298,12 @@ sub do_rest_of_gui {
my $filter_match = $filter_frame->Labelframe(-text => __("Match"));
$filter_match->pack(@left, @x_y, @p_ii);
- $filter_match->Checkbutton(-text => __("pattern:"),
+ $filter_match->Checkbutton(-text => __("filenames"),
-command => \&update_grid,
- -variable => \$match_string)->pack(@a_w);
+ -variable => \$match_filenames)->pack(@a_w);
+ $filter_match->Checkbutton(-text => __("descriptions"),
+ -command => \&update_grid,
+ -variable => \$match_descriptions)->pack(@a_w);
$match_entry =
$filter_match->Entry(-width => 15, -validate => 'key',
)->pack(@a_w, -padx => '2m', @x_x);
@@ -307,9 +311,9 @@ sub do_rest_of_gui {
$match_entry->configure(-validate => 'key',
-validatecommand => sub { my $new_val = shift;
if (!$new_val) {
- $match_string = 0;
+ $match_descriptions = 0;
} else {
- $match_string = 1;
+ $match_descriptions = 1;
}
update_grid(); return 1; });
@@ -339,7 +343,7 @@ sub do_rest_of_gui {
$show_packages = 1; $show_collections = 1;
$show_schemes = 1;
$selection_value = 0;
- $match_string = 0;
+ $match_descriptions = 0;
update_grid();
})->pack(@x_x, @a_c);
@@ -831,19 +835,48 @@ sub MatchesFilters {
} else {
return 0;
}
- # match
- if ($match_string) {
+ #
+ # match dealing
+ # here we have an "or" condition, either it matches the one or the
+ # other, so since we are in negative branch returning 0 we have to
+ # make sure that we negate the value
+ # (sorry if you don't understand that one, I had some Sake)
+ #
+ # SPECIAL: If neiter description matching nor file name matching is
+ # selected, we do NOT do any checks at all. Somehow that is what
+ # feels right to me, but please correct me!
+ if ($match_descriptions || $match_filenames) {
+ my $found = 0;
my $r = $match_entry->get;
- # check for match on string
- my $t = $Packages{$p}{'tlp'}->shortdesc;
- $t |= "";
- my $lt = $Packages{$p}{'tlp'}->longdesc;
- $lt |= "";
- if (($p =~ m/$r/) || ($t =~ m/$r/) || ($lt =~ m/$r/)) {
- # do nothing, more checks have to be done
- } else {
+ # check first for the default search type, the descriptions
+ if ($match_descriptions) {
+ # normal case, match descriptions
+ my $t = $Packages{$p}{'tlp'}->shortdesc;
+ $t |= "";
+ my $lt = $Packages{$p}{'tlp'}->longdesc;
+ $lt |= "";
+ if (($p =~ m/$r/) || ($t =~ m/$r/) || ($lt =~ m/$r/)) {
+ $found = 1;
+ }
+ }
+ # if we already dound, don't check the next condition!
+ if (!$found) {
+ if ($match_filenames) {
+ my @files = $Packages{$p}{'tlp'}->all_files;
+ if ($Packages{$p}{'tlp'}->relocated) {
+ for (@files) { s:^$RelocPrefix/:$RelocTree/:; }
+ }
+ my @ret = grep(m;$r;, @files);
+ if (@ret) {
+ $found = 1;
+ }
+ }
+ }
+ if (!$found) {
+ # not matched in either of the above cases, return 0 immediately
return 0;
}
+ # otherwise more checks have to be done
}
# selection
if ($selection_value == 0) {