# bash completion for info -*- shell-script -*- _info() { local cur prev words cword split _init_completion -s || return # default completion if parameter looks like a path if [[ $cur == @(*/|[.~])* ]]; then _filedir return fi case $prev in --apropos | --index-search | --node | --help | --version | -!(-*)[knhv]) return ;; -!(-*)d) if [[ ${1##*/} == info ]]; then _filedir -d return fi ;; --directory) _filedir -d return ;; --dribble | --file | --output | --restore | --raw-filename | --rcfile | -!(-*)[for]) _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-} == *: ]]; then infopath=${INFOPATH}${infopath} elif [[ ${INFOPATH:+set} ]]; then infopath=$INFOPATH fi _expand || return 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 in ${!COMPREPLY[*]}; do [[ ${COMPREPLY[i]} == dir ]] && unset "COMPREPLY[i]" done # strip suffix from info pages COMPREPLY=(${COMPREPLY[@]%.@(gz|bz2|xz|lzma)}) COMPREPLY=($(compgen -W '${COMPREPLY[@]%.*}' -- "${cur//\\\\/}")) } && complete -F _info info pinfo # ex: filetype=sh