App-cpangrep
view release on metacpan or search on metacpan
lib/App/cpangrep.pm view on Meta::CPAN
next;
}
substr($snippet, $start, $len) = colored(substr($snippet, $start, $len), "BOLD RED");
if ($match->{line}) {
my $ln = $match->{line}[0] - (substr($snippet, 0, $start) =~ y/\n//);
my $print_ln = sub {
colored($ln++, "BLUE") . colored(":", "CYAN")
};
$snippet =~ s/^/$print_ln->()/mge;
}
chomp $snippet;
print $snippet, color("reset"), "\n\n";
}
printf colored(" â %d more match%s from this file.\n\n", "MAGENTA"),
$file->{truncated}, ($file->{truncated} != 1 ? "es" : "")
if $file->{truncated};
}
printf colored("â %d more file%s matched in %s.\n\n", "MAGENTA"),
$result->{truncated}, ($result->{truncated} != 1 ? "s" : ""), $dist->distvname
if $result->{truncated};
}
}
sub display_list {
my $search = shift or return;
my $results = $search->{results} || [];
for my $result (@$results) {
my $fulldist = $result->{dist};
$fulldist =~ s{^(?=(([A-Z])[A-Z]))}{$2/$1/};
my $dist = CPAN::DistnameInfo->new($fulldist);
for my $file (@{$result->{files}}) {
print join("/", $dist->cpanid, $dist->distvname, $file->{file}), "\n";
}
}
}
# Some tricks borrowed from uninames' fork_output()
sub setup_pager {
return unless -t STDOUT;
my $pager = $ENV{PAGER} || 'less';
$ENV{LESS} = 'SRFX' . ($ENV{LESS} || '')
if $pager =~ /less/;
$ENV{LESSCHARSET} = "utf-8"
if $pager =~ /more|less/ and ($ENV{LESSCHARSET} || "") ne "utf-8";
open STDOUT, "| $pager"
or die "couldn't reopen stdout to pager '$pager': $!\n";
# exit cleanly on :q in less
$SIG{PIPE} = sub { exit };
# close piped output, otherwise we screw up terminal
END { close STDOUT or die "error closing stdout: $!\n" }
binmode STDOUT, ':encoding(UTF-8)';
$| = 1;
}
# Setup colored output if we have it
sub setup_colors {
eval { require Term::ANSIColor };
if ( not $@ and supports_color() ) {
$Term::ANSIColor::EACHLINE = "\n";
*color = *_color_real;
*colored = *_colored_real;
}
}
# No-op passthrough defaults
sub color { "" }
sub colored { ref $_[0] ? @_[1..$#_] : $_[0] }
sub _color_real { Term::ANSIColor::color(@_) }
sub _colored_real { Term::ANSIColor::colored(@_) }
sub supports_color {
# We're not on a TTY and don't force it, kill color
return 0 unless -t *STDOUT or $COLOR;
if ( $Config{'osname'} eq 'MSWin32' ) {
eval { require Win32::Console::ANSI; };
return 1 if not $@;
}
else {
return 1 if $ENV{'TERM'} =~ /^(xterm|rxvt|linux|ansi|screen)/;
return 1 if $ENV{'COLORTERM'};
}
return 0;
}
sub debug {
return unless $DEBUG;
warn "DEBUG: ", @_, " [", join("/", (caller(1))[3,2]), "]\n";
}
1;
__END__
=encoding utf-8
=head1 NAME
App::cpangrep - Grep CPAN from the command-line using grep.cpan.me
=head1 SYNOPSIS
cpangrep "\bpackage\s+App::cpangrep\b"
cpangrep --help
=head1 DESCRIPTION
App::cpangrep provides the C<cpangrep> program which is a command-line
interface for L<http://grep.cpan.me>.
=head1 AUTHOR
( run in 0.690 second using v1.01-cache-2.11-cpan-140bd7fdf52 )