Package: zsh
Version: 4.3.2-17
Severity: wishlist
Tags: patch
Hi!
This patch provides a generic completion setup for FUSE
programs. Currently fusermount and sshfs are completed by zsh, and
there is a huge list of programs in this category
(http://fuse.sourceforge.net/wiki/index.php/FileSystems). These
completion scripts should reduce redundancy in the completion
functions of these programs as they all use a common library which
supports some generic options. This code is similar to the approach
taken by _x_arguments.
(Patches to _fusermount and _sshfs to follow soon! :) )
Regards,
Ramkumar.
#autoload
local ret long rawret nm=${compstate[nmatches]} fsopt cvalsvar
typeset -a fargs opts
fargs=(
'(-d -f)-d[enable debug output]'
'-f[enable foreground operation]'
'-r[mount filesystem read-only]'
'-s[disable multi-threaded operation]'
'(-h --help)'{-h,--help}'[display help and exit]'
'(-V --version)'{-V,--version}'[show version information and exit]'
)
(( $# )) || fargs+='*:default: _default'
long=$argv[(I)--]
if (( long )); then
argv[long]=($fargs --)
else
set -- $@ $fargs
fi
while [[ $1 == -(O*|F*|[CRWsw]) ]]; do
if [[ $1 == -F?* ]]; then
cvalsvar=${1[3,-1]}
elif [[ $1 == -F ]]; then
cvalsvar=$2
shift
else
opts+=$1
[[ $1 == -R ]] && rawret=yes
fi
shift
done
if [[ $cvalsvar != - ]]; then
fsopt='*-o[specify mount options]:mount option:_fuse_values'
[[ -n $cvalsvar ]] && fsopt+=" -A $cvalsvar"
fsopt+=' mount\ option'
set -- $@ $fsopt
fi
_arguments -R $opts $@
ret=$?
if [[ $ret == 300 ]]; then
compstate[restore]=
[[ -z $rawret ]] && ret=$(( nm == $compstate[nmatches] ))
fi
return ret
#autoload
local ret stateset fvals cvalsvar cvalind
typeset -a fvals opts
if [[ $1 = -O* ]]; then
opts+=$1
shift
fi
opts+=(-s , -S =)
cvalind=$argv[(I)-A*]
while (( cvalind )); do
if [[ ${(P)cvalind} = -A?* ]]; then
cvalsvar=${(P)cvalind[3,-1]}
argv[cvalind]=()
else
cvalsvar=$argv[cvalind+1]
argv[cvalind,cvalind+1]=()
fi
cvalind=$argv[(I)-A*]
done
fvals=(
'ro[mount filesystem read-only]'
'allow_other[allow access to other users]'
'allow_root[allow access to root]'
'nonempty[allow mounts over non-empty file/dir]'
'default_permissions[enable permission checking by kernel]'
'fsname[set filesystem name]:name'
'large_read[issue large read requests (linux v2.4 only)]'
'max_read[set maximum size of read requests]:size'
'hard_remove[immediate removal (do not hide files)]'
'use_ino[let filesystem set inode numbers]'
'readdir_ino[try to fill in d_ino in readdir]'
'direct_io[use direct I/O]'
'kernel_cache[cache files in kernel]'
'umask[set file permissions]:permission mask (octal)'
'uid[set file owner]:user id:'
'gid[set file group]:group id:'
'entry_timeout[cache timeout for names]:timeout (s)'
'negative_timeout[cache timeout for deleted names]:timeout (s)'
'attr_timeout[cache timeout for attributes]:timeout (s)'
)
[[ -n $cvalsvar ]] && set -- $@ ${(P)cvalsvar}
if [[ $# -eq 0 ]]; then
set -- 'mount options' $fvals
else
set -- $@ $fvals
fi
if [[ -n $state ]]; then
stateset=$state
state=
fi
_values $opts $@ && ret=0
if [[ -n $state ]]; then
compstate[restore]=
elif [[ -n $stateset ]]; then
state=$stateset
else
unset state
fi
return $ret
-- System Information:
Debian Release: testing/unstable
APT prefers testing
APT policy: (101, 'testing')
Architecture: i386 (i686)
Shell: /bin/sh linked to /bin/dash
Kernel: Linux 2.6.16-beyond2
Locale: LANG=en_IN, LC_CTYPE=en_IN (charmap=UTF-8)
Versions of packages zsh depends on:
ii debconf [debconf-2.0] 1.5.4 Debian configuration management sy
ii libc6 2.3.6.ds1-4 GNU C Library: Shared libraries
ii libncurses5 5.5-3 Shared libraries for terminal hand
Versions of packages zsh recommends:
ii libcap1 1:1.10-14 support for getting/setting POSIX.
ii libpcre3 6.4-2 Perl 5 Compatible Regular Expressi
-- no debconf information
--
WARN_(accel)("msg null; should hang here to be win compatible\n");
-- WINE source code