# bash completion for info -*- shell-script -*- _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|-h|--help|-v|--version) return ;; -d) if [[ ${1##*/} == info ]]; then _filedir -d return fi ;; --directory) _filedir -d return ;; --dribble|-f|--file|-o|--output|--restore|-r|--raw-filename|--rcfile) _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 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 [[ ${COMPREPLY[$i]} == dir ]] && unset "COMPREPLY[$i]" done # strip suffix from info pages COMPREPLY=( ${COMPREPLY[@]%.@(gz|bz2|xz|lzma)} ) COMPREPLY=( $( compgen -W '${COMPREPLY[@]%.*}' -- "${cur//\\\\/}" ) ) return 0 } && complete -F _info info pinfo # ex: ts=4 sw=4 et filetype=sh