summary refs log tree commit diff
diff options
context:
space:
mode:
authorDaniel Shahaf <d.s@daniel.shahaf.name>2017-08-02 15:10:02 +0000
committerDaniel Shahaf <d.s@daniel.shahaf.name>2017-08-08 14:55:02 +0000
commit5654b905f96720bef285dc92d6b2e2cc31bd971e (patch)
tree0e9640e4c0088ffaff653fee2aa0318c52b7d500
parente2124c47193f57bdc5a19061e2e9bc6969fda32e (diff)
downloadzsh-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.
-rw-r--r--ChangeLog4
-rw-r--r--Completion/Unix/Command/_df6
-rw-r--r--Completion/Unix/Command/_mount43
-rw-r--r--Completion/Unix/Type/_umountable44
4 files changed, 52 insertions, 45 deletions
diff --git a/ChangeLog b/ChangeLog
index e6709f316..dac44b18f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,9 @@
 2017-08-08  Daniel Shahaf  <d.s@daniel.shahaf.name>
 
+	* 41481: Completion/Unix/Command/_df,
+	Completion/Unix/Command/_mount, Completion/Unix/Type/_umountable:
+	_df: Complete mounted device and mount points.
+
 	* 41486: Completion/Unix/Command/_tmux: Correct completions of
 	new-window, split-window, respawn-window, respawn-pane.
 
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