diff options
author | Daniel Shahaf <d.s@daniel.shahaf.name> | 2017-08-02 15:10:02 +0000 |
---|---|---|
committer | Daniel Shahaf <d.s@daniel.shahaf.name> | 2017-08-08 14:55:02 +0000 |
commit | 5654b905f96720bef285dc92d6b2e2cc31bd971e (patch) | |
tree | 0e9640e4c0088ffaff653fee2aa0318c52b7d500 /Completion/Unix | |
parent | e2124c47193f57bdc5a19061e2e9bc6969fda32e (diff) | |
download | zsh-5654b905f96720bef285dc92d6b2e2cc31bd971e.tar.gz zsh-5654b905f96720bef285dc92d6b2e2cc31bd971e.tar.xz zsh-5654b905f96720bef285dc92d6b2e2cc31bd971e.zip |
41481: _df: Complete mounted device and mount points.
This splits umount's "udevordir" completion from _mount to a new file, without changing it.
Diffstat (limited to 'Completion/Unix')
-rw-r--r-- | Completion/Unix/Command/_df | 6 | ||||
-rw-r--r-- | Completion/Unix/Command/_mount | 43 | ||||
-rw-r--r-- | Completion/Unix/Type/_umountable | 44 |
3 files changed, 48 insertions, 45 deletions
diff --git a/Completion/Unix/Command/_df b/Completion/Unix/Command/_df index 677b8c727..d20ddea7e 100644 --- a/Completion/Unix/Command/_df +++ b/Completion/Unix/Command/_df @@ -16,7 +16,7 @@ if _pick_variant gnu=GNU unix --version; then '-v[(ignored)]' '(- : *)--help[display help and exit]' '(- : *)--version[output version information and exit]' - '*:files:_files' + '*:files:_umountable' - '(format)' {-B+,--block-size=}'[specify block size]:size (bytes)' '-k[like --block-size=1K]' @@ -39,7 +39,7 @@ elif [[ "$OSTYPE" == (darwin|freebsd|dragonfly)* ]]; then '-i[include inode usage statistics (default)]' '-l[only display locally-mounted file systems]' '-n[use previously obtained statistics]' - '*:files:_files' + '*:files:_umountable' ) spec='[only display file systems of specified types]:file system type:->fslist' case "$OSTYPE" in @@ -59,7 +59,7 @@ else '-k[use 1024-byte blocks]' '-P[POSIX compliant output]' '-t[include total allocated-space figures in the output]' - '*:files:_files' + '*:files:_umountable' ) fi diff --git a/Completion/Unix/Command/_mount b/Completion/Unix/Command/_mount index 9a7041dee..03cc01f8d 100644 --- a/Completion/Unix/Command/_mount +++ b/Completion/Unix/Command/_mount @@ -931,48 +931,7 @@ devordir) esac ;; udevordir) - local dev_tmp dpath_tmp mp_tmp mline - - case "$OSTYPE" in - linux*|irix*) - tmp=( "${(@f)$(< /etc/mtab)}" ) - dev_tmp=( "${(@)${(@)tmp%% *}:#none}" ) - mp_tmp=( "${(@)${(@)tmp#* }%% *}" ) - ;; - freebsd*|dragonfly*) - /sbin/mount | while read mline; do - dev_tmp+=( $mline[(w)1] ) - mp_tmp+=( $mline[(w)3] ) - done - ;; - darwin*) - tmp=( "${(@f)$(/sbin/mount)}" ) - dev_tmp=( "${(@)${(@)tmp%% *}:#map}" ) - mp_tmp=( "${(@)${(@)tmp#* on }%% \(*}" ) - ;; - *) - /sbin/mount | while read mline; do - mp_tmp+=( $mline[(w)1] ) - dev_tmp+=( $mline[(w)3] ) - done - ;; - esac - - local MATCH MBEGIN MEND - # The complicated substitution for mount point names is required because - # characters in /etc/mtab that might confuse programs reading the names - # are encoded as exactly 3 octal digits, like for example \040 for space. - # The cleaner-looking ${(g::)mp_tmp} might consume too many digits. - # Both mp_tmp and dev_tmp are derived from /etc/mtab or "mount" output. - mp_tmp=("${(@)mp_tmp//(#m)\\[0-7](#c3)/${(#)$(( 8#${MATCH[2,-1]} ))}}") - dev_tmp=("${(@)dev_tmp//(#m)\\[0-7](#c3)/${(#)$(( 8#${MATCH[2,-1]} ))}}") - dpath_tmp=( "${(@M)dev_tmp:#/*}" ) - dev_tmp=( "${(@)dev_tmp:#/*}" ) - - _alternative \ - 'device-labels:device label:compadd -a dev_tmp' \ - 'device-paths: device path:_canonical_paths -A dpath_tmp -N -M "r:|/=* r:|=*" device-paths device\ path' \ - 'directories:mount point:_canonical_paths -A mp_tmp -N -M "r:|/=* r:|=*" directories mount\ point' && ret=0 + _umountable ;; labels) _wanted labels expl 'disk label' compadd /dev/disk/by-label/*(:t) && ret=0 diff --git a/Completion/Unix/Type/_umountable b/Completion/Unix/Type/_umountable new file mode 100644 index 000000000..2b2567478 --- /dev/null +++ b/Completion/Unix/Type/_umountable @@ -0,0 +1,44 @@ +#autoload +local tmp +local dev_tmp dpath_tmp mp_tmp mline + +case "$OSTYPE" in +linux*|irix*) + tmp=( "${(@f)$(< /etc/mtab)}" ) + dev_tmp=( "${(@)${(@)tmp%% *}:#none}" ) + mp_tmp=( "${(@)${(@)tmp#* }%% *}" ) + ;; +freebsd*|dragonfly*) + /sbin/mount | while read mline; do + dev_tmp+=( $mline[(w)1] ) + mp_tmp+=( $mline[(w)3] ) + done +;; +darwin*) + tmp=( "${(@f)$(/sbin/mount)}" ) + dev_tmp=( "${(@)${(@)tmp%% *}:#map}" ) + mp_tmp=( "${(@)${(@)tmp#* on }%% \(*}" ) + ;; +*) + /sbin/mount | while read mline; do + mp_tmp+=( $mline[(w)1] ) + dev_tmp+=( $mline[(w)3] ) + done + ;; +esac + +local MATCH MBEGIN MEND +# The complicated substitution for mount point names is required because +# characters in /etc/mtab that might confuse programs reading the names +# are encoded as exactly 3 octal digits, like for example \040 for space. +# The cleaner-looking ${(g::)mp_tmp} might consume too many digits. +# Both mp_tmp and dev_tmp are derived from /etc/mtab or "mount" output. +mp_tmp=("${(@)mp_tmp//(#m)\\[0-7](#c3)/${(#)$(( 8#${MATCH[2,-1]} ))}}") +dev_tmp=("${(@)dev_tmp//(#m)\\[0-7](#c3)/${(#)$(( 8#${MATCH[2,-1]} ))}}") +dpath_tmp=( "${(@M)dev_tmp:#/*}" ) +dev_tmp=( "${(@)dev_tmp:#/*}" ) + +_alternative \ + 'device-labels:device label:compadd -a dev_tmp' \ + 'device-paths: device path:_canonical_paths -A dpath_tmp -N -M "r:|/=* r:|=*" device-paths device\ path' \ + 'directories:mount point:_canonical_paths -A mp_tmp -N -M "r:|/=* r:|=*" directories mount\ point' && ret=0 |