summaryrefslogtreecommitdiff
path: root/completions/info
diff options
context:
space:
mode:
Diffstat (limited to 'completions/info')
-rw-r--r--completions/info57
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