diff options
| -rwxr-xr-x | contrib/pacsearch | 44 | 
1 files changed, 21 insertions, 23 deletions
| diff --git a/contrib/pacsearch b/contrib/pacsearch index c9be7594..a20df265 100755 --- a/contrib/pacsearch +++ b/contrib/pacsearch @@ -1,7 +1,7 @@  #!/usr/bin/perl  # pacsearch - Adds color and install information to a 'pacman -Ss' search  # -# Copyright (C) 2008 Dan McGee <dpmcgee@gmail.com> +# Copyright (C) 2008, 2010 Dan McGee <dpmcgee@gmail.com>  #  # Based off original shell script version:  # Copyright (C) 2006-2007 Dan McGee <dpmcgee@gmail.com> @@ -39,7 +39,7 @@ if ($#ARGV lt 0 || $ARGV[0] eq "--help" || $ARGV[0] eq "-h") {  if ($ARGV[0] eq "--version" || $ARGV[0] eq "-v") {  	print "$progname version $version\n"; -	print "Copyright (C) 2006-2008 Dan McGee\n"; +	print "Copyright (C) 2006-2010 Dan McGee\n";  	exit 0;  } @@ -53,17 +53,18 @@ my $CLR6 = "\e[0;33m";  my $CLR7 = "\e[1;36m";  my $INST = "\e[1;31m";  my $BASE = "\e[0m"; -my $INSTMARK = $INST."***"; -# color a "repo/pkgname pkgver" line based on the respository name +# color a "repo/pkgname pkgver" line based on the repository name  sub to_color {  	my $line = shift; +	# get the installed text colored first +	$line =~ s/(\[.*\]$)/$INST$1$BASE/; +	# and now the repo and dealings  	$line =~ s/(^core\/.*)/$CLR1$1$BASE/;  	$line =~ s/(^extra\/.*)/$CLR2$1$BASE/;  	$line =~ s/(^community\/.*)/$CLR3$1$BASE/;  	$line =~ s/(^testing\/.*)/$CLR4$1$BASE/; -	$line =~ s/(^unstable\/.*)/$CLR5$1$BASE/; -	$line =~ s/(^custom\/.*)/$CLR6$1$BASE/; +	$line =~ s/(^community-testing\/.*)/$CLR5$1$BASE/;  	$line =~ s/(^local\/.*)/$CLR7$1$BASE/;  	# any other unknown repository  	$line =~ s/(^[\w-]*\/.*)/$CLR6$1$BASE/; @@ -83,10 +84,10 @@ if ($#syncpkgs >= 0) {  # counter var for packages, used here and in the query loop too  my $cnt = 0;  foreach $_ (@syncpkgs) { -	# we grab 3 fields here: repo, name/ver, and desc -	my @pkgfields = /^(.*?)\/(.*?)\n(.*)$/s; -	# add a fourth field that will indicate install status -	push (@pkgfields, ""); +	# we grab 4 fields here: repo, name/ver, installed, and desc +	my @pkgfields = /^(.*?)\/(.*?) ?(\[.*\])?\n(.*)$/s; +	# since installed is optional, we should fill it in if necessary +	$pkgfields[2] = "" if not defined $pkgfields[2];  	# add a fifth field that indicates original order  	push (@pkgfields, $cnt++);  	# add each sync pkg by name/ver to a hash table for quick lookup @@ -102,16 +103,13 @@ if ($#querypkgs >= 0) {  }  foreach $_ (@querypkgs) { -	# we grab 3 fields here: repo, name/ver, and desc -	my @pkgfields = /^(.*?)\/(.*?)\n(.*)$/s; +	# we grab 4 fields here: repo, name/ver, installed, and desc +	my @pkgfields = /^(.*?)\/(.*?) ?(\[.*\])?\n(.*)$/s; +	# since installed is optional, we should fill it in if necessary +	$pkgfields[2] = "" if not defined $pkgfields[2];  	# check if the package was listed in the sync out -	# if it is we want to mark it with a *** marker -	if (exists $allpkgs{$pkgfields[1]}) { -		# mark it in our fourth field as installed -		@{ $allpkgs{$pkgfields[1]} }[3] = $INSTMARK; -	} else { -		# add a fourth field that will indicate install status -		push (@pkgfields, $INSTMARK); +	if (not exists $allpkgs{$pkgfields[1]}) { +		$pkgfields[2] = "[installed]";  		# add a fifth field that indicates original order (after sync)  		push (@pkgfields, $cnt++);  		# add our local-only package to the hash @@ -122,11 +120,11 @@ foreach $_ (@querypkgs) {  # sort by original order (the fifth field) and print  foreach $_ ( sort{ @{$allpkgs{$a}}[4] <=> @{$allpkgs{$b}}[4] } keys %allpkgs) {  	my @v = @{$allpkgs{$_}}; -	my $line = "$v[0]/$v[1]"; +	my $line = "$v[0]/$v[1] $v[2]";  	$line = to_color($line); -	# print install marker + colorized "repo/pkgname pkgver" string -	print "$v[3]$line\n"; -	print "$v[2]\n"; +	# print colorized "repo/pkgname pkgver" string with possible installed text +	print "$line\n"; +	print "$v[3]\n";  }  #vim: set noet: | 
