This way it's clearer to users that an argument is expected. It's likely that this commit does not catch all such cases, but it should do it for most of the affected commands I have installed.
218 lines
6.2 KiB
Bash
218 lines
6.2 KiB
Bash
# This function is required by _dpkg() and _dpkg-reconfigure()
|
|
have dpkg && {
|
|
have grep-status && {
|
|
_comp_dpkg_installed_packages()
|
|
{
|
|
grep-status -P -e "^$1" -a -FStatus 'install ok installed' -n -s Package
|
|
}
|
|
} || {
|
|
_comp_dpkg_installed_packages()
|
|
{
|
|
command grep -A 1 "Package: $1" /var/lib/dpkg/status | \
|
|
command grep -B 1 -Ee "ok installed|half-installed|unpacked| \
|
|
half-configured|config-files" \
|
|
-Ee "^Essential: yes" | \
|
|
command grep "Package: $1" | cut -d\ -f2
|
|
}
|
|
}
|
|
|
|
# Debian dpkg(8) completion
|
|
#
|
|
_dpkg()
|
|
{
|
|
local cur prev words cword split
|
|
_init_completion -s || return
|
|
|
|
_expand || return 0
|
|
|
|
local i=$cword
|
|
|
|
# find the last option flag
|
|
if [[ $cur != -* ]]; then
|
|
while [[ $prev != -* && $i -ne 1 ]]; do
|
|
i=$((i-1))
|
|
prev=${words[i-1]}
|
|
done
|
|
fi
|
|
|
|
case $prev in
|
|
-c|-i|-A|-I|-f|-e|-x|-X|-W|--install|--unpack|--record-avail| \
|
|
--contents|--info|--fsys-tarfile|--field|--control|--extract| \
|
|
--show)
|
|
_filedir '?(u)deb'
|
|
return 0
|
|
;;
|
|
-b|--build)
|
|
_filedir -d
|
|
return 0
|
|
;;
|
|
-s|-p|-l|--status|--print-avail|--list)
|
|
COMPREPLY=( $( apt-cache pkgnames "$cur" 2>/dev/null ) )
|
|
return 0
|
|
;;
|
|
-S|--search)
|
|
_filedir
|
|
return 0
|
|
;;
|
|
-r|-L|-P|--remove|--purge|--listfiles)
|
|
COMPREPLY=( $( _comp_dpkg_installed_packages "$cur" ) )
|
|
return 0
|
|
;;
|
|
esac
|
|
|
|
$split && return
|
|
|
|
COMPREPLY=( $( compgen -W '$( _parse_help "$1" )' -- "$cur" ) )
|
|
[[ $COMPREPLY == *= ]] && compopt -o nospace
|
|
} &&
|
|
complete -F _dpkg dpkg dpkg-deb
|
|
}
|
|
|
|
# Debian GNU dpkg-reconfigure(8) completion
|
|
#
|
|
have dpkg-reconfigure &&
|
|
_dpkg_reconfigure()
|
|
{
|
|
local cur prev words cword
|
|
_init_completion || return
|
|
|
|
local opt
|
|
|
|
case $prev in
|
|
-f|--frontend)
|
|
opt=( $( printf '%s\n' /usr/share/perl5/Debconf/FrontEnd/* ) )
|
|
opt=( ${opt[@]##*/} )
|
|
opt=( ${opt[@]%.pm} )
|
|
COMPREPLY=( $( compgen -W '${opt[@]}' -- "$cur" ) )
|
|
return 0
|
|
;;
|
|
-p|--priority)
|
|
COMPREPLY=( $( compgen -W 'low medium high critical' -- "$cur" ) )
|
|
return 0
|
|
;;
|
|
esac
|
|
|
|
if [[ "$cur" == -* ]]; then
|
|
COMPREPLY=( $(compgen -W '--frontend --priority --all --unseen-only \
|
|
--help --showold --force --terse' -- "$cur" ) )
|
|
else
|
|
COMPREPLY=( $( _comp_dpkg_installed_packages "$cur" ) )
|
|
fi
|
|
} &&
|
|
complete -F _dpkg_reconfigure -o default dpkg-reconfigure
|
|
|
|
# Debian dpkg-source completion
|
|
#
|
|
have dpkg-source &&
|
|
_dpkg_source()
|
|
{
|
|
local cur prev words cword
|
|
_init_completion || return
|
|
|
|
local options work i action packopts unpackopts fields
|
|
|
|
packopts="-c -l -F -V -T -D -U -W -E -sa -i -I -sk -sr -ss -sA -sK -sP \
|
|
-sU -sR"
|
|
unpackopts="-sp -sn -su"
|
|
options="-x -b $packopts $unpackopts"
|
|
fields="Format Source Version Binary Maintainer Uploader Architecture \
|
|
Standards-Version Build-Depends Files"
|
|
|
|
action="options"
|
|
for (( i=0; i < ${#words[@]}-1; i++ )); do
|
|
if [[ ${words[$i]} == "-x" ]]; then
|
|
action=unpack
|
|
elif [[ ${words[$i]} == "-b" ]]; then
|
|
action=pack
|
|
elif [[ ${words[$i]} == "-h" ]]; then
|
|
action=help
|
|
fi
|
|
done
|
|
|
|
case $action in
|
|
unpack)
|
|
case $prev in
|
|
-x)
|
|
_filedir -d
|
|
_filedir 'dsc'
|
|
return 0
|
|
;;
|
|
*)
|
|
COMPREPLY=( $( compgen -W "$unpackopts" -- "$cur" ) )
|
|
_filedir -d
|
|
_filedir
|
|
return 0
|
|
;;
|
|
esac
|
|
return 0
|
|
;;
|
|
pack)
|
|
case $prev in
|
|
-b)
|
|
_filedir -d
|
|
return 0
|
|
;;
|
|
-c|-l|-T|-i|-I)
|
|
# -c: get controlfile
|
|
# -l: get per-version info from this file
|
|
# -T: read variables here, not debian/substvars
|
|
# -i: <regexp> filter out files to ignore diffs of.
|
|
# -I: filter out files when building tarballs.
|
|
# return directory names and file names
|
|
_filedir -d
|
|
_filedir
|
|
return 0
|
|
;;
|
|
-F)
|
|
# -F: force change log format
|
|
COMPREPLY=( $( command ls /usr/lib/dpkg/parsechangelog ) )
|
|
return 0
|
|
;;
|
|
-V|-D)
|
|
# -V: set a substitution variable
|
|
# we don't know anything about possible variables or values
|
|
# so we don't try to suggest any completion.
|
|
COMPREPLY=()
|
|
return 0
|
|
;;
|
|
-D)
|
|
# -D: override or add a .dsc field and value
|
|
# if $cur doesn't contain a = yet, suggest variable names
|
|
if [[ "$cur" == *=* ]]; then
|
|
# $cur contains a "="
|
|
COMPREPLY=()
|
|
return 0
|
|
else
|
|
COMPREPLY=( $( compgen -W "$fields" -- "$cur" ) )
|
|
return 0
|
|
fi
|
|
;;
|
|
-U)
|
|
# -U: remove a field
|
|
# Suggest possible fieldnames
|
|
COMPREPLY=( $( compgen -W "$fields" -- "$cur" ) )
|
|
return 0
|
|
;;
|
|
*)
|
|
COMPREPLY=( $( compgen -W "$packopts $unpackopts" -- "$cur" ) )
|
|
return 0
|
|
;;
|
|
esac
|
|
return 0
|
|
;;
|
|
*)
|
|
COMPREPLY=( $( compgen -W "$options" -- "$cur" ) )
|
|
return 0
|
|
;;
|
|
esac
|
|
} &&
|
|
complete -F _dpkg_source dpkg-source
|
|
|
|
# Local variables:
|
|
# mode: shell-script
|
|
# sh-basic-offset: 4
|
|
# sh-indent-comment: t
|
|
# indent-tabs-mode: nil
|
|
# End:
|
|
# ex: ts=4 sw=4 et filetype=sh
|