diff options
Diffstat (limited to 'completions/info')
-rw-r--r-- | completions/info | 57 |
1 files changed, 38 insertions, 19 deletions
diff --git a/completions/info b/completions/info index 367cadef..aa16be69 100644 --- a/completions/info +++ b/completions/info @@ -1,22 +1,47 @@ -# bash completion for info +# bash completion for info -*- shell-script -*- -have info && _info() { - local cur i infopath - - COMPREPLY=() - _get_comp_words_by_ref cur + local cur prev words cword split + _init_completion -s || return _expand || return 0 - # default completion if parameter contains / - if [[ "$cur" == */* ]]; then + # default completion if parameter looks like a path + if [[ "$cur" == @(*/|[.~])* ]]; then _filedir return 0 fi - infopath='/usr/share/info' + 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} @@ -38,8 +63,8 @@ _info() # weed out info dir file for (( i=0 ; i < ${#COMPREPLY[@]} ; ++i )); do if [ "${COMPREPLY[$i]}" == 'dir' ]; then - unset COMPREPLY[$i]; - fi; + unset COMPREPLY[$i] + fi done # strip suffix from info pages COMPREPLY=( ${COMPREPLY[@]%.@(gz|bz2|xz|lzma)} ) @@ -47,12 +72,6 @@ _info() return 0 } && -complete -F _info info - -# Local variables: -# mode: shell-script -# sh-basic-offset: 4 -# sh-indent-comment: t -# indent-tabs-mode: nil -# End: +complete -F _info info pinfo + # ex: ts=4 sw=4 et filetype=sh |