2006-02-08 19:20:05 +10:00
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)
2006-03-14 10:21:27 +10:00
if type -f apt-cache > /dev/null
2006-02-08 19:20:05 +10:00
# 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
2006-11-30 00:00:04 +10:00
apt-cache --no-generate pkgnames ( commandline -tc ) | sgrep -v \( | sgrep -v '\.so\(\.[0-9]\)*$' | sed -e 's/\/.*\///' | sed -e 's/$/' \t $package '/'
2006-02-08 19:20:05 +10:00
return
end
2013-03-01 23:27:03 +03:30
# yum is slow, just like rpm, so go to the background
if type -f /usr/share/yum-cli/completion-helper.py > /dev/null
2013-03-02 01:48:56 +03:30
# If the cache is less than six hours old, we do not recalculate it
2013-03-01 23:27:03 +03:30
set cache_file /tmp/.yum-cache.$USER
if test -f $cache_file
cat $cache_file
set age ( math ( date +%s) - ( stat -c '%Y' $cache_file ) )
2013-03-02 01:48:56 +03:30
set max_age 21600
2013-03-01 23:27:03 +03:30
if test $age -lt $max_age
return
end
end
# Remove package version information from output and pipe into cache file
/usr/share/yum-cli/completion-helper.py list all -d 0 -C > $cache_file | cut -d '.' -f 1 | sed '1d' | sed '/^\s/d' | sed -e 's/$/' \t $package '/' &
end
2006-02-08 19:20:05 +10:00
# Rpm is too slow for this job, so we set it up to do completions
# as a background job and cache the results.
2010-09-18 10:18:26 +08:00
if type -f rpm > /dev/null
2006-02-08 19:20:05 +10:00
# If the cache is less than five minutes old, we do not recalculate it
set cache_file /tmp/.rpm-cache.$USER
2010-09-18 10:18:26 +08:00
if test -f $cache_file
2006-02-08 19:20:05 +10:00
cat $cache_file
2006-12-13 03:11:18 +10:00
set age ( math ( date +%s) - ( stat -c '%Y' $cache_file ) )
2006-02-08 19:20:05 +10:00
set max_age 250
if test $age -lt $max_age
return
end
end
# Remove package version information from output and pipe into cache file
2006-03-02 21:28:08 +10:00
rpm -qa > $cache_file | sed -e 's/-[^-]*-[^-]*$//' | sed -e 's/$/' \t $package '/' &
2006-02-08 19:20:05 +10:00
end
2010-09-18 10:18:26 +08:00
# This completes the package name from the portage tree.
# True for installing new packages. Function for printing
2006-02-08 19:20:05 +10:00
# installed on the system packages is in completions/emerge.fish
2010-12-02 01:33:56 +08:00
# eix is MUCH faster than emerge so use it if it is available
if type -f eix > /dev/null
eix --only-names "^" ( commandline -tc ) | cut -d / -f2
2006-02-08 19:20:05 +10:00
return
2010-12-02 01:33:56 +08:00
else
# FIXME? Seems to be broken
if type -f emerge > /dev/null
emerge -s \^ ( commandline -tc ) | sgrep "^*" | cut -d \ -f3 | cut -d / -f2
return
end
2006-02-08 19:20:05 +10:00
end
end