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