about summary refs log tree commit diff
path: root/Completion/Unix/Command/_readlink
diff options
context:
space:
mode:
authordana <dana@dana.is>2018-06-04 10:04:27 -0500
committerOliver Kiddle <okiddle@yahoo.co.uk>2018-06-07 18:19:55 +0200
commit64ef1eddfd4fa79a0720945e189cf7c3a44bde9c (patch)
tree9237ef4615c0643b783d5fac4f007f9cb4fc693d /Completion/Unix/Command/_readlink
parent594f2ff06e85bf27b154dd703ee3b2dd7f168bc0 (diff)
downloadzsh-64ef1eddfd4fa79a0720945e189cf7c3a44bde9c.tar.gz
zsh-64ef1eddfd4fa79a0720945e189cf7c3a44bde9c.tar.xz
zsh-64ef1eddfd4fa79a0720945e189cf7c3a44bde9c.zip
42931: completion for several utilities especially for checksums across a variety of systems
Diffstat (limited to 'Completion/Unix/Command/_readlink')
-rw-r--r--Completion/Unix/Command/_readlink48
1 files changed, 48 insertions, 0 deletions
diff --git a/Completion/Unix/Command/_readlink b/Completion/Unix/Command/_readlink
new file mode 100644
index 000000000..36bd43752
--- /dev/null
+++ b/Completion/Unix/Command/_readlink
@@ -0,0 +1,48 @@
+#compdef readlink greadlink
+
+local variant ret=1
+local -a context line state state_descr args copts aopts=( -A '-*' )
+local -A opt_args
+
+# We can't use groups here because it would complicate the option filtering
+copts=( -e -f -m --canonicalize --canonicalize-existing --canonicalize-missing )
+
+args=(
+  '(: -)--help[display help information]'
+  '(: -)--version[display version information]'
+  # Delimiter options
+  # (Note: GNU `readlink` won't let you use -n with multiple files)
+  '(-n -z --no-newline --zero)'{-n,--no-newline}'[suppress trailing newline]'
+  '(-n -z --no-newline --zero)'{-z,--zero}'[use NUL as output delimiter]'
+  # Verbosity options
+  '(-q -s -v --quiet --silent --verbose)'{-q,-s,--quiet,--silent}'[suppress most error messages]'
+  '(-q -s -v --quiet --silent --verbose)'{-v,--verbose}'[show error messages]'
+  # Canonicalisation options
+  "(${(j< >)copts})"{-e,--canonicalize-existing}'[canonicalize paths (all components must exist)]'
+  "(${(j< >)copts})"{-f,--canonicalize}'[canonicalize paths]'
+  "(${(j< >)copts})"{-m,--canonicalize-missing}'[canonicalize paths (components may be missing)]'
+)
+
+# Filter out non-GNU options if applicable
+if _pick_variant gnu='Free Soft' unix --version; then
+  aopts=( )
+else
+  case $OSTYPE in
+    darwin*)          args=( ${(@M)args:#(|*\))-[n]\[*} ) ;;
+    netbsd*)          args=( ${(@M)args:#(|*\))-[fnqsv]\[*} ) ;;
+    dragonfly*|*bsd*) args=( ${(@M)args:#(|*\))-[fn]\[*} ) ;;
+    *) args=( ) ;;
+  esac
+fi
+
+_arguments -s -S $aopts : $args '*: :->files' && ret=0
+
+# File arguments must be symlinks unless a canonicalisation option is given
+[[ $state == files ]] &&
+if [[ ${opt_args[(i)(${~${(j<|>)copts}})]} ]]; then
+  _files && ret=0
+else
+  _files -g '*(@)' && ret=0
+fi
+
+return ret