# bash completion for info have info || have pinfo || 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|-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: -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 pinfo # 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