diff options
Diffstat (limited to 'completions/info')
-rw-r--r-- | completions/info | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/completions/info b/completions/info new file mode 100644 index 0000000..f50f842 --- /dev/null +++ b/completions/info @@ -0,0 +1,74 @@ +# 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 |