summaryrefslogtreecommitdiffstats
path: root/contrib/pacsearch
diff options
context:
space:
mode:
authorDan McGee <dan@archlinux.org>2007-02-17 05:39:59 +0100
committerDan McGee <dan@archlinux.org>2007-02-17 05:39:59 +0100
commit9ebf50075812077a0544eeb0ed44222f0d0ed661 (patch)
treefa18f8418904424f69f6bf1ff12be5dfc2cddec0 /contrib/pacsearch
parent8e34023bbd43b916af91c7eb65890557b7db4fd8 (diff)
downloadpacman-9ebf50075812077a0544eeb0ed44222f0d0ed661.tar.gz
pacman-9ebf50075812077a0544eeb0ed44222f0d0ed661.tar.xz
* Adding pacsearch - a script to search both the sync repos and locally
installed packages in color, and indicate those which are installed.
Diffstat (limited to 'contrib/pacsearch')
-rwxr-xr-xcontrib/pacsearch77
1 files changed, 77 insertions, 0 deletions
diff --git a/contrib/pacsearch b/contrib/pacsearch
new file mode 100755
index 00000000..71d45287
--- /dev/null
+++ b/contrib/pacsearch
@@ -0,0 +1,77 @@
+#!/bin/bash
+# pacsearch - Adds color and install information to a 'pacman -Ss' search
+#
+# Copyright (C) 2006-2007 Dan McGee <dpmcgee@gmail.com>
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+
+#TODO: colors flag on commandline
+
+readonly progname="pacsearch"
+
+readonly CLR1='\\\e[0;34m'
+readonly CLR2='\\\e[0;32m'
+readonly CLR3='\\\e[0;35m'
+readonly CLR4='\\\e[0;36m'
+readonly CLR5='\\\e[0;31m'
+readonly CLR6='\\\e[0;33m'
+readonly CLR7='\\\e[1;36m'
+readonly INST='\\\e[1;31m'
+readonly BASE='\\\e[0m'
+
+if [ -z "$1" ]; then
+ echo "Usage: $progname <pattern>"
+ echo "Ex: $progname ^gnome"
+ exit 0
+fi
+
+# Make two temp files and send output of commands to these files
+querydump=$(mktemp)
+pacman -Qs $1 > $querydump
+syncdump=$(mktemp)
+pacman -Ss $1 > $syncdump
+
+# Strip descriptions and 'local/' from -Qs query
+instpkg=$(mktemp)
+egrep '^[^ ]' $querydump | sed -e 's@^local/@@' > $instpkg
+
+# Add pkgs not in sync db, mark pkgs that are installed
+cat $instpkg | while read -r pkg; do
+ if [ -z "$(grep "$pkg" $syncdump)" ]; then
+ # grep package name; pipe to another grep that prints at most one
+ # line starting with 'local/', allows for comments >1 line
+ grep -A10 "$pkg" $querydump | grep -A10 -m1 "local/" >> $syncdump
+ fi
+ sed -i "s@^\(.\+/$pkg\)@\***\1@" $syncdump
+done
+
+# Print colorized package list and descriptions to screen
+echo -e "$(sed -r \
+ -e "s@current/.*@$CLR1&$BASE@" \
+ -e "s@extra/.*@$CLR2&$BASE@" \
+ -e "s@community/.*@$CLR3&$BASE@" \
+ -e "s@testing/.*@$CLR4&$BASE@" \
+ -e "s@unstable/.*@$CLR5&$BASE@" \
+ -e "s@custom/.*@$CLR6&$BASE@" \
+ -e "s@local/.*@$CLR7&$BASE@" \
+ -e "s@(^|\*\*\*)([[:alnum:]]*/.* .*)@\1$CLR6\2$BASE@" \
+ -e "s@\*\*\*@$INST&@" \
+ < $syncdump )"
+echo -en "\e[0m"
+
+rm $querydump
+rm $syncdump
+rm $instpkg
+