Split man completion to contrib/man
This commit is contained in:
parent
b85df3b488
commit
e6b7e5ec64
1
CHANGES
1
CHANGES
@ -27,6 +27,7 @@ bash-completion (1.x)
|
||||
* Split apt-cache and apt-get completions to contrib/apt
|
||||
* Split rpm-related completions to contrib/rpm
|
||||
* Split cvs-related completions to contrib/cvs
|
||||
* Split man completion to contrib/man
|
||||
|
||||
[ Ville Skyttä ]
|
||||
* Split yum and yum-arch completion into contrib/yum.
|
||||
|
@ -60,6 +60,7 @@ bashcomp_DATA = contrib/ant \
|
||||
contrib/lvm \
|
||||
contrib/lzop \
|
||||
contrib/make \
|
||||
contrib/man \
|
||||
contrib/mc \
|
||||
contrib/mailman \
|
||||
contrib/mcrypt \
|
||||
|
@ -1001,82 +1001,6 @@ _insmod()
|
||||
complete -F _insmod $filenames insmod modprobe modinfo
|
||||
}
|
||||
|
||||
# man(1) completion
|
||||
#
|
||||
[ $USERLAND = GNU -o $UNAME = Darwin \
|
||||
-o $UNAME = FreeBSD -o $UNAME = SunOS -o $UNAME = Cygwin \
|
||||
-o $UNAME = OpenBSD ] &&
|
||||
_man()
|
||||
{
|
||||
local cur prev sect manpath manext mansect uname
|
||||
|
||||
manext="@([0-9lnp]|[0-9][px]|man|3pm)?(.@(gz|bz2|lzma))"
|
||||
mansect="@([0-9lnp]|[0-9][px]|3pm)"
|
||||
|
||||
COMPREPLY=()
|
||||
cur=`_get_cword`
|
||||
prev=${COMP_WORDS[COMP_CWORD-1]}
|
||||
|
||||
if [[ "$prev" == -l ]]; then
|
||||
_filedir $manext
|
||||
return 0
|
||||
fi
|
||||
|
||||
_expand || return 0
|
||||
|
||||
# file based completion if parameter contains /
|
||||
if [[ "$cur" == */* ]]; then
|
||||
_filedir $manext
|
||||
return 0
|
||||
fi
|
||||
|
||||
uname=$( uname -s )
|
||||
if [[ $uname == @(Linux|GNU|GNU/*|FreeBSD|Cygwin|CYGWIN_*) ]]; then
|
||||
manpath=$( manpath 2>/dev/null || command man --path )
|
||||
else
|
||||
manpath=$MANPATH
|
||||
fi
|
||||
|
||||
if [ -z "$manpath" ]; then
|
||||
COMPREPLY=( $( compgen -c -- $cur ) )
|
||||
return 0
|
||||
fi
|
||||
|
||||
# determine manual section to search
|
||||
[[ "$prev" == $mansect ]] && sect=$prev || sect='*'
|
||||
|
||||
manpath=$manpath:
|
||||
if [ -n "$cur" ]; then
|
||||
manpath="${manpath//://*man$sect/$cur* } ${manpath//://*cat$sect/$cur* }"
|
||||
else
|
||||
manpath="${manpath//://*man$sect/ } ${manpath//://*cat$sect/ }"
|
||||
fi
|
||||
|
||||
# redirect stderr for when path doesn't exist
|
||||
COMPREPLY=( $( eval command ls "$manpath" 2>/dev/null ) )
|
||||
# weed out directory path names and paths to man pages
|
||||
COMPREPLY=( ${COMPREPLY[@]##*/?(:)} )
|
||||
# strip suffix from man pages
|
||||
COMPREPLY=( ${COMPREPLY[@]%.@(gz|bz2|lzma)} )
|
||||
COMPREPLY=( $( compgen -W '${COMPREPLY[@]%.*}' -- "${cur//\\\\/}" ) )
|
||||
|
||||
if [[ "$prev" != $mansect ]]; then
|
||||
# File based completion for the rest, prepending ./ if needed
|
||||
# (man 1.6f needs that for man pages in current dir)
|
||||
local start=${#COMPREPLY[@]}
|
||||
_filedir $manext
|
||||
for (( i=$start; i < ${#COMPREPLY[@]}; i++ )); do
|
||||
[[ ${COMPREPLY[i]} == */* ]] || COMPREPLY[i]=./${COMPREPLY[i]}
|
||||
done
|
||||
fi
|
||||
|
||||
return 0
|
||||
}
|
||||
[ $USERLAND = GNU -o $UNAME = Darwin \
|
||||
-o $UNAME = FreeBSD -o $UNAME = SunOS -o $UNAME = Cygwin \
|
||||
-o $UNAME = OpenBSD ] && \
|
||||
complete -F _man $filenames man apropos whatis
|
||||
|
||||
# renice(8) completion
|
||||
#
|
||||
_renice()
|
||||
|
75
contrib/man
Normal file
75
contrib/man
Normal file
@ -0,0 +1,75 @@
|
||||
# man(1) completion
|
||||
#
|
||||
[ $USERLAND = GNU -o $UNAME = Darwin \
|
||||
-o $UNAME = FreeBSD -o $UNAME = SunOS -o $UNAME = Cygwin \
|
||||
-o $UNAME = OpenBSD ] &&
|
||||
_man()
|
||||
{
|
||||
local cur prev sect manpath manext mansect uname
|
||||
|
||||
manext="@([0-9lnp]|[0-9][px]|man|3pm)?(.@(gz|bz2|lzma))"
|
||||
mansect="@([0-9lnp]|[0-9][px]|3pm)"
|
||||
|
||||
COMPREPLY=()
|
||||
cur=`_get_cword`
|
||||
prev=${COMP_WORDS[COMP_CWORD-1]}
|
||||
|
||||
if [[ "$prev" == -l ]]; then
|
||||
_filedir $manext
|
||||
return 0
|
||||
fi
|
||||
|
||||
_expand || return 0
|
||||
|
||||
# file based completion if parameter contains /
|
||||
if [[ "$cur" == */* ]]; then
|
||||
_filedir $manext
|
||||
return 0
|
||||
fi
|
||||
|
||||
uname=$( uname -s )
|
||||
if [[ $uname == @(Linux|GNU|GNU/*|FreeBSD|Cygwin|CYGWIN_*) ]]; then
|
||||
manpath=$( manpath 2>/dev/null || command man --path )
|
||||
else
|
||||
manpath=$MANPATH
|
||||
fi
|
||||
|
||||
if [ -z "$manpath" ]; then
|
||||
COMPREPLY=( $( compgen -c -- $cur ) )
|
||||
return 0
|
||||
fi
|
||||
|
||||
# determine manual section to search
|
||||
[[ "$prev" == $mansect ]] && sect=$prev || sect='*'
|
||||
|
||||
manpath=$manpath:
|
||||
if [ -n "$cur" ]; then
|
||||
manpath="${manpath//://*man$sect/$cur* } ${manpath//://*cat$sect/$cur* }"
|
||||
else
|
||||
manpath="${manpath//://*man$sect/ } ${manpath//://*cat$sect/ }"
|
||||
fi
|
||||
|
||||
# redirect stderr for when path doesn't exist
|
||||
COMPREPLY=( $( eval command ls "$manpath" 2>/dev/null ) )
|
||||
# weed out directory path names and paths to man pages
|
||||
COMPREPLY=( ${COMPREPLY[@]##*/?(:)} )
|
||||
# strip suffix from man pages
|
||||
COMPREPLY=( ${COMPREPLY[@]%.@(gz|bz2|lzma)} )
|
||||
COMPREPLY=( $( compgen -W '${COMPREPLY[@]%.*}' -- "${cur//\\\\/}" ) )
|
||||
|
||||
if [[ "$prev" != $mansect ]]; then
|
||||
# File based completion for the rest, prepending ./ if needed
|
||||
# (man 1.6f needs that for man pages in current dir)
|
||||
local start=${#COMPREPLY[@]}
|
||||
_filedir $manext
|
||||
for (( i=$start; i < ${#COMPREPLY[@]}; i++ )); do
|
||||
[[ ${COMPREPLY[i]} == */* ]] || COMPREPLY[i]=./${COMPREPLY[i]}
|
||||
done
|
||||
fi
|
||||
|
||||
return 0
|
||||
}
|
||||
[ $USERLAND = GNU -o $UNAME = Darwin \
|
||||
-o $UNAME = FreeBSD -o $UNAME = SunOS -o $UNAME = Cygwin \
|
||||
-o $UNAME = OpenBSD ] && \
|
||||
complete -F _man $filenames man apropos whatis
|
Loading…
x
Reference in New Issue
Block a user