diff options
Diffstat (limited to 'Completion')
-rw-r--r-- | Completion/Base/Utility/_values | 12 | ||||
-rw-r--r-- | Completion/Unix/Command/_mount | 4 | ||||
-rw-r--r-- | Completion/Unix/Type/_dir_list | 28 |
3 files changed, 30 insertions, 14 deletions
diff --git a/Completion/Base/Utility/_values b/Completion/Base/Utility/_values index 9a6913dad..bb0337911 100644 --- a/Completion/Base/Utility/_values +++ b/Completion/Base/Utility/_values @@ -1,15 +1,11 @@ #autoload -local subopts opt usecc +local subopts opt usecc garbage subopts=() -while [[ "$1" = -(O*|C) ]]; do - case "$1" in - -C) usecc=yes; shift ;; - -O) subopts=( "${(@P)2}" ); shift 2 ;; - *) subopts=( "${(@P)${1[3,-1]}}" ); shift ;; - esac -done +zparseopts -D -E -a garbage C=usecc O:=subopts M: J: V: 1 2 n F: X: + +(( $#subopts )) && subopts=( "${(@P)subopts[2]}" ) if compvalues -i "$@"; then diff --git a/Completion/Unix/Command/_mount b/Completion/Unix/Command/_mount index 045348707..0083fe9ad 100644 --- a/Completion/Unix/Command/_mount +++ b/Completion/Unix/Command/_mount @@ -444,7 +444,7 @@ if [[ "$service" = mount ]]; then irix*) args=( -s '-a[mount all filesystems in /etc/fstab]' - '-b[mount all filesystems in /etc/fstab except those listed]:list of directories:_files -/ -S,' + '-b[mount all filesystems in /etc/fstab except those listed]:list of directories:_dir_list -s,' '-c[check any dirty filesystems before mounting]' '-f[fake a new /etc/mtab entry, but don'\''t mount any filesystems]' '-h[mount all filesystems associated with host]:hostnames:_hosts' @@ -575,7 +575,7 @@ else irix*) args=( '-a[unmount all mounted file systems]' - '-b[unmount all filesystems in /etc/fstab except those listed]:list of directories:_files -/ -S,' + '-b[unmount all filesystems in /etc/fstab except those listed]:list of directories:_dir_list -s,' '-h[unmount all filesystems associated with host]:hostnames:_hosts' '-k[kill all processes with files open on filesystems before unmounting]' '-t[unmount all filesystems of specified type]:file system type:->fstype' diff --git a/Completion/Unix/Type/_dir_list b/Completion/Unix/Type/_dir_list index 122d7ad94..ecd7c73da 100644 --- a/Completion/Unix/Type/_dir_list +++ b/Completion/Unix/Type/_dir_list @@ -1,7 +1,27 @@ #autoload -local suf +# options: +# -s <sep> to specify the separator (default is a colon) +# -S to say that the separator should be added as a suffix (instead +# of the default slash) -compset -P '*:' -compset -S ':*' || suf=":" -_files -S "$suf" -r ': \t\t\-' -/ +local sep=: dosuf suf + +while [[ "$1" = -(s*|S) ]]; do + case "$1" in + -s) sep="$2"; shift 2;; + -s*) sep="${1[3,-1]}"; shift;; + -S) dosuf=yes; shift;; + esac +done + +compset -P "*${sep}" +compset -S "${sep}*" || suf="$sep" + +if [[ -n "$dosuf" ]]; then + suf=(-S "$suf") +else + suf=() +fi + +_files "$suf[@]" -r "${sep}"' /\t\t\-' -/ "$@" |