split find completion
This commit is contained in:
parent
f60e97d0c2
commit
a8a1529bfe
@ -19,6 +19,7 @@ bashcomp_DATA = contrib/ant \
|
|||||||
contrib/dd \
|
contrib/dd \
|
||||||
contrib/dhclient \
|
contrib/dhclient \
|
||||||
contrib/dsniff \
|
contrib/dsniff \
|
||||||
|
contrib/findutils \
|
||||||
contrib/freeciv \
|
contrib/freeciv \
|
||||||
contrib/gcl \
|
contrib/gcl \
|
||||||
contrib/gdb \
|
contrib/gdb \
|
||||||
|
113
bash_completion
113
bash_completion
@ -1169,119 +1169,6 @@ have pgrep && complete -F _pgrep pgrep
|
|||||||
# Linux pidof(8) completion.
|
# Linux pidof(8) completion.
|
||||||
[ $UNAME = Linux ] && complete -F _pgrep pidof
|
[ $UNAME = Linux ] && complete -F _pgrep pidof
|
||||||
|
|
||||||
# GNU find(1) completion. This makes heavy use of ksh style extended
|
|
||||||
# globs and contains Linux specific code for completing the parameter
|
|
||||||
# to the -fstype option.
|
|
||||||
#
|
|
||||||
_find()
|
|
||||||
{
|
|
||||||
local cur prev i exprfound onlyonce
|
|
||||||
|
|
||||||
COMPREPLY=()
|
|
||||||
cur=`_get_cword`
|
|
||||||
prev=${COMP_WORDS[COMP_CWORD-1]}
|
|
||||||
|
|
||||||
case "$prev" in
|
|
||||||
-@(max|min)depth)
|
|
||||||
COMPREPLY=( $( compgen -W '0 1 2 3 4 5 6 7 8 9' -- $cur ) )
|
|
||||||
return 0
|
|
||||||
;;
|
|
||||||
-?(a|c)newer|-fls|-fprint?(0|f)|-?(i)?(l)name|-?(i)wholename)
|
|
||||||
_filedir
|
|
||||||
return 0
|
|
||||||
;;
|
|
||||||
-fstype)
|
|
||||||
# this is highly non-portable
|
|
||||||
[ -e /proc/filesystems ] &&
|
|
||||||
COMPREPLY=( $( compgen -W "$( cut -d$'\t' -f2 /proc/filesystems )" -- $cur ) )
|
|
||||||
return 0
|
|
||||||
;;
|
|
||||||
-gid)
|
|
||||||
_gids
|
|
||||||
return 0
|
|
||||||
;;
|
|
||||||
-group)
|
|
||||||
if [ -n "$bash205" ]; then
|
|
||||||
COMPREPLY=( $( compgen -g -- $cur 2>/dev/null) )
|
|
||||||
fi
|
|
||||||
return 0
|
|
||||||
;;
|
|
||||||
-?(x)type)
|
|
||||||
COMPREPLY=( $( compgen -W 'b c d p f l s' -- $cur ) )
|
|
||||||
return 0
|
|
||||||
;;
|
|
||||||
-uid)
|
|
||||||
_uids
|
|
||||||
return 0
|
|
||||||
;;
|
|
||||||
-user)
|
|
||||||
COMPREPLY=( $( compgen -u -- $cur ) )
|
|
||||||
return 0
|
|
||||||
;;
|
|
||||||
-exec|-ok)
|
|
||||||
COMP_WORDS=(COMP_WORDS[0] $cur)
|
|
||||||
COMP_CWORD=1
|
|
||||||
_command
|
|
||||||
return 0
|
|
||||||
;;
|
|
||||||
-[acm]min|-[acm]time|-?(i)?(l)?(whole)name|-inum|-?(i)path|-?(i)regex| \
|
|
||||||
-links|-perm|-size|-used|-printf)
|
|
||||||
# do nothing, just wait for a parameter to be given
|
|
||||||
return 0
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
_expand || return 0
|
|
||||||
|
|
||||||
# set exprfound to 1 if there is already an expression present
|
|
||||||
for i in ${COMP_WORDS[@]}; do
|
|
||||||
[[ "$i" = [-\(\),\!]* ]] && exprfound=1 && break
|
|
||||||
done
|
|
||||||
|
|
||||||
# handle case where first parameter is not a dash option
|
|
||||||
if [ "$exprfound" != 1 ] && [[ "$cur" != [-\(\),\!]* ]]; then
|
|
||||||
_filedir -d
|
|
||||||
return 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
# complete using basic options
|
|
||||||
COMPREPLY=( $( compgen -W '-daystart -depth -follow -help -maxdepth \
|
|
||||||
-mindepth -mount -noleaf -version -xdev -amin -anewer \
|
|
||||||
-atime -cmin -cnewer -ctime -empty -false -fstype \
|
|
||||||
-gid -group -ilname -iname -inum -ipath -iregex \
|
|
||||||
-wholename \
|
|
||||||
-links -lname -mmin -mtime -name -newer -nouser \
|
|
||||||
-nogroup -perm -regex -size -true -type -uid -used \
|
|
||||||
-user -xtype -exec -fls -fprint -fprint0 -fprintf -ok \
|
|
||||||
-print -print0 -printf -prune -ls -wholename -iwholename' -- $cur ) )
|
|
||||||
|
|
||||||
# this removes any options from the list of completions that have
|
|
||||||
# already been specified somewhere on the command line, as long as
|
|
||||||
# these options can only be used once (in a word, "options", in
|
|
||||||
# opposition to "tests" and "actions", as in the find(1) manpage).
|
|
||||||
onlyonce=' -daystart -depth -follow -help -maxdepth -mindepth -mount \
|
|
||||||
-noleaf -version -xdev '
|
|
||||||
COMPREPLY=( $( echo "${COMP_WORDS[@]}" | \
|
|
||||||
(while read -d ' ' i; do
|
|
||||||
[ "$i" == "" ] ||
|
|
||||||
[ "${onlyonce/ ${i%% *} / }" == "$onlyonce" ] &&
|
|
||||||
continue
|
|
||||||
# flatten array with spaces on either side,
|
|
||||||
# otherwise we cannot grep on word boundaries of
|
|
||||||
# first and last word
|
|
||||||
COMPREPLY=" ${COMPREPLY[@]} "
|
|
||||||
# remove word from list of completions
|
|
||||||
COMPREPLY=( ${COMPREPLY/ ${i%% *} / } )
|
|
||||||
done
|
|
||||||
echo "${COMPREPLY[@]}")
|
|
||||||
) )
|
|
||||||
|
|
||||||
_filedir
|
|
||||||
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
complete -F _find $filenames find
|
|
||||||
|
|
||||||
# Linux iwconfig(8) completion
|
# Linux iwconfig(8) completion
|
||||||
#
|
#
|
||||||
[ $UNAME = Linux ] && have iwconfig &&
|
[ $UNAME = Linux ] && have iwconfig &&
|
||||||
|
115
contrib/findutils
Normal file
115
contrib/findutils
Normal file
@ -0,0 +1,115 @@
|
|||||||
|
# -*- mode: shell-script; sh-basic-offset: 8; indent-tabs-mode: t -*-
|
||||||
|
# ex: ts=8 sw=8 noet filetype=sh
|
||||||
|
#
|
||||||
|
# bash completion for GNU find. This makes heavy use of ksh style extended
|
||||||
|
# globs and contains Linux specific code for completing the parameter
|
||||||
|
# to the -fstype option.
|
||||||
|
|
||||||
|
_find()
|
||||||
|
{
|
||||||
|
local cur prev i exprfound onlyonce
|
||||||
|
|
||||||
|
COMPREPLY=()
|
||||||
|
cur=`_get_cword`
|
||||||
|
prev=${COMP_WORDS[COMP_CWORD-1]}
|
||||||
|
|
||||||
|
case "$prev" in
|
||||||
|
-@(max|min)depth)
|
||||||
|
COMPREPLY=( $( compgen -W '0 1 2 3 4 5 6 7 8 9' -- $cur ) )
|
||||||
|
return 0
|
||||||
|
;;
|
||||||
|
-?(a|c)newer|-fls|-fprint?(0|f)|-?(i)?(l)name|-?(i)wholename)
|
||||||
|
_filedir
|
||||||
|
return 0
|
||||||
|
;;
|
||||||
|
-fstype)
|
||||||
|
# this is highly non-portable
|
||||||
|
[ -e /proc/filesystems ] &&
|
||||||
|
COMPREPLY=( $( compgen -W "$( cut -d$'\t' -f2 /proc/filesystems )" -- $cur ) )
|
||||||
|
return 0
|
||||||
|
;;
|
||||||
|
-gid)
|
||||||
|
_gids
|
||||||
|
return 0
|
||||||
|
;;
|
||||||
|
-group)
|
||||||
|
if [ -n "$bash205" ]; then
|
||||||
|
COMPREPLY=( $( compgen -g -- $cur 2>/dev/null) )
|
||||||
|
fi
|
||||||
|
return 0
|
||||||
|
;;
|
||||||
|
-?(x)type)
|
||||||
|
COMPREPLY=( $( compgen -W 'b c d p f l s' -- $cur ) )
|
||||||
|
return 0
|
||||||
|
;;
|
||||||
|
-uid)
|
||||||
|
_uids
|
||||||
|
return 0
|
||||||
|
;;
|
||||||
|
-user)
|
||||||
|
COMPREPLY=( $( compgen -u -- $cur ) )
|
||||||
|
return 0
|
||||||
|
;;
|
||||||
|
-exec|-ok)
|
||||||
|
COMP_WORDS=(COMP_WORDS[0] $cur)
|
||||||
|
COMP_CWORD=1
|
||||||
|
_command
|
||||||
|
return 0
|
||||||
|
;;
|
||||||
|
-[acm]min|-[acm]time|-?(i)?(l)?(whole)name|-inum|-?(i)path|-?(i)regex| \
|
||||||
|
-links|-perm|-size|-used|-printf)
|
||||||
|
# do nothing, just wait for a parameter to be given
|
||||||
|
return 0
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
_expand || return 0
|
||||||
|
|
||||||
|
# set exprfound to 1 if there is already an expression present
|
||||||
|
for i in ${COMP_WORDS[@]}; do
|
||||||
|
[[ "$i" = [-\(\),\!]* ]] && exprfound=1 && break
|
||||||
|
done
|
||||||
|
|
||||||
|
# handle case where first parameter is not a dash option
|
||||||
|
if [ "$exprfound" != 1 ] && [[ "$cur" != [-\(\),\!]* ]]; then
|
||||||
|
_filedir -d
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# complete using basic options
|
||||||
|
COMPREPLY=( $( compgen -W '-daystart -depth -follow -help -maxdepth \
|
||||||
|
-mindepth -mount -noleaf -version -xdev -amin -anewer \
|
||||||
|
-atime -cmin -cnewer -ctime -empty -false -fstype \
|
||||||
|
-gid -group -ilname -iname -inum -ipath -iregex \
|
||||||
|
-wholename \
|
||||||
|
-links -lname -mmin -mtime -name -newer -nouser \
|
||||||
|
-nogroup -perm -regex -size -true -type -uid -used \
|
||||||
|
-user -xtype -exec -fls -fprint -fprint0 -fprintf -ok \
|
||||||
|
-print -print0 -printf -prune -ls -wholename -iwholename' -- $cur ) )
|
||||||
|
|
||||||
|
# this removes any options from the list of completions that have
|
||||||
|
# already been specified somewhere on the command line, as long as
|
||||||
|
# these options can only be used once (in a word, "options", in
|
||||||
|
# opposition to "tests" and "actions", as in the find(1) manpage).
|
||||||
|
onlyonce=' -daystart -depth -follow -help -maxdepth -mindepth -mount \
|
||||||
|
-noleaf -version -xdev '
|
||||||
|
COMPREPLY=( $( echo "${COMP_WORDS[@]}" | \
|
||||||
|
(while read -d ' ' i; do
|
||||||
|
[ "$i" == "" ] ||
|
||||||
|
[ "${onlyonce/ ${i%% *} / }" == "$onlyonce" ] &&
|
||||||
|
continue
|
||||||
|
# flatten array with spaces on either side,
|
||||||
|
# otherwise we cannot grep on word boundaries of
|
||||||
|
# first and last word
|
||||||
|
COMPREPLY=" ${COMPREPLY[@]} "
|
||||||
|
# remove word from list of completions
|
||||||
|
COMPREPLY=( ${COMPREPLY/ ${i%% *} / } )
|
||||||
|
done
|
||||||
|
echo "${COMPREPLY[@]}")
|
||||||
|
) )
|
||||||
|
|
||||||
|
_filedir
|
||||||
|
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
complete -F _find $filenames find
|
Loading…
x
Reference in New Issue
Block a user