diff options
author | 2006-02-08 19:20:05 +1000 | |
---|---|---|
committer | 2006-02-08 19:20:05 +1000 | |
commit | 73a9c8bcb8d3d8db967fcc5cc9dd5e8db645400f (patch) | |
tree | 13862f394dca16b0c9bae427f86fbbecdfc9ac03 /init/functions/__fish_print_packages.fish | |
parent | 47b652c76e240e16875734f7ca251bab97ae6309 (diff) |
Autoloaded functions
darcs-hash:20060208092005-ac50b-8e784f79a4e158c8c15b553fad85002dccc7bd03.gz
Diffstat (limited to 'init/functions/__fish_print_packages.fish')
-rw-r--r-- | init/functions/__fish_print_packages.fish | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/init/functions/__fish_print_packages.fish b/init/functions/__fish_print_packages.fish new file mode 100644 index 00000000..03e52314 --- /dev/null +++ b/init/functions/__fish_print_packages.fish @@ -0,0 +1,55 @@ + +function __fish_print_packages + + # apt-cache is much, much faster than rpm, and can do this in real + # time. We use it if available. + + switch (commandline -tc) + case '-**' + return + end + + #Get the word 'Package' in the current language + set -l package (_ Package) + + if which apt-cache >/dev/null ^/dev/null + # Apply the following filters to output of apt-cache: + # 1) Remove package names with parentesis in them, since these seem to not correspond to actual packages as reported by rpm + # 2) Remove package names that are .so files, since these seem to not correspond to actual packages as reported by rpm + # 3) Remove path information such as /usr/bin/, as rpm packages do not have paths + + apt-cache --no-generate pkgnames (commandline -tc)|grep -v \( |grep -v '\.so\(\.[0-9]\)*$'|sed -e 's/\/.*\///'|sed -e 's/$/\t'$package'/' + return + end + + # Rpm is too slow for this job, so we set it up to do completions + # as a background job and cache the results. + + if which rpm >/dev/null ^/dev/null + + # If the cache is less than five minutes old, we do not recalculate it + + set cache_file /tmp/.rpm-cache.$USER + if test -f $cache_file + cat $cache_file + set age (echo (date +%s) - (stat -c '%Y' $cache_file) | bc) + set max_age 250 + if test $age -lt $max_age + return + end + end + + # Remove package version information from output and pipe into cache file + rpm -qa >$cache_file |sed -e 's/-[^-]*-[^-]*$//' | sed -e 's/$/\t'$package'/' & + end + + # This completes the package name from the portage tree. + # True for installing new packages. Function for printing + # installed on the system packages is in completions/emerge.fish + if which emerge >/dev/null ^/dev/null + emerge -s \^(commandline -tc) |grep "^*" |cut -d\ -f3 |cut -d/ -f2 + return + end + +end + |