aboutsummaryrefslogtreecommitdiffhomepage
path: root/init/functions/__fish_print_packages.fish
diff options
context:
space:
mode:
Diffstat (limited to 'init/functions/__fish_print_packages.fish')
-rw-r--r--init/functions/__fish_print_packages.fish55
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
+