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