c875723bef
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.
80 lines
1.8 KiB
Bash
80 lines
1.8 KiB
Bash
# bash completion for info
|
|
|
|
have info || return
|
|
|
|
_info()
|
|
{
|
|
local cur prev words cword split
|
|
_init_completion -s || return
|
|
|
|
_expand || return 0
|
|
|
|
# default completion if parameter looks like a path
|
|
if [[ "$cur" == @(*/|[.~])* ]]; then
|
|
_filedir
|
|
return 0
|
|
fi
|
|
|
|
case $prev in
|
|
-k|--apropos|--index-search|-n|--node)
|
|
return
|
|
;;
|
|
-d|--directory)
|
|
_filedir -d
|
|
return
|
|
;;
|
|
--dribble|-f|--file|-o|--output|--restore)
|
|
_filedir
|
|
return
|
|
;;
|
|
esac
|
|
|
|
$split && return
|
|
|
|
if [[ $cur == -* ]]; then
|
|
COMPREPLY=( $( compgen -W '$( _parse_help "$1" )' -- "$cur" ) )
|
|
[[ $COMPREPLY == *= ]] && compopt -o nospace
|
|
return
|
|
fi
|
|
|
|
local i infopath=/usr/share/info
|
|
|
|
if [ "${INFOPATH: -1:1}" == ':' ]; then
|
|
infopath=${INFOPATH}${infopath}
|
|
elif [ ${INFOPATH:+set} ]; then
|
|
infopath=$INFOPATH
|
|
fi
|
|
|
|
infopath=$infopath:
|
|
if [ -n "$cur" ]; then
|
|
infopath="${infopath//://$cur* }"
|
|
else
|
|
infopath="${infopath//:// }"
|
|
fi
|
|
|
|
# redirect stderr for when path doesn't exist
|
|
COMPREPLY=( $( eval command ls "$infopath" 2>/dev/null ) )
|
|
# weed out directory path names and paths to info pages
|
|
COMPREPLY=( ${COMPREPLY[@]##*/?(:)} )
|
|
# weed out info dir file
|
|
for (( i=0 ; i < ${#COMPREPLY[@]} ; ++i )); do
|
|
if [ "${COMPREPLY[$i]}" == 'dir' ]; then
|
|
unset COMPREPLY[$i];
|
|
fi;
|
|
done
|
|
# strip suffix from info pages
|
|
COMPREPLY=( ${COMPREPLY[@]%.@(gz|bz2|xz|lzma)} )
|
|
COMPREPLY=( $( compgen -W '${COMPREPLY[@]%.*}' -- "${cur//\\\\/}" ) )
|
|
|
|
return 0
|
|
} &&
|
|
complete -F _info info
|
|
|
|
# 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
|