about summary refs log tree commit diff
path: root/Completion/Unix/Command
diff options
context:
space:
mode:
Diffstat (limited to 'Completion/Unix/Command')
-rw-r--r--Completion/Unix/Command/.distfiles1
-rw-r--r--Completion/Unix/Command/_rm41
2 files changed, 42 insertions, 0 deletions
diff --git a/Completion/Unix/Command/.distfiles b/Completion/Unix/Command/.distfiles
index c8d935bd5..2a96ad6b1 100644
--- a/Completion/Unix/Command/.distfiles
+++ b/Completion/Unix/Command/.distfiles
@@ -164,6 +164,7 @@ _rcs
 _renice
 _ri
 _rlogin
+_rm
 _rrdtool
 _rsync
 _rubber
diff --git a/Completion/Unix/Command/_rm b/Completion/Unix/Command/_rm
new file mode 100644
index 000000000..4209134b0
--- /dev/null
+++ b/Completion/Unix/Command/_rm
@@ -0,0 +1,41 @@
+#compdef rm
+
+declare -a opts args
+args=(
+  '(-f --force)'{-f,--force}'[ignore nonexistent files, never prompt]'
+  '(-I --interactive)-i[prompt before every removal]'
+  '(-r -R --recursive)'{-r,-R,--recursive}'[remove directories and their contents recursively]'
+  '*:files:->file'
+)
+if _pick_variant gnu=gnu unix --help; then
+  opts+=(-S)
+  args+=(
+    '(-i --interactive)-I[prompt when removing many files]'
+    '(-i -I)--interactive=-[prompt under given condition (defaulting to always)]::when:((once\:"prompt when removing many files"
+                                                                                         always\:"prompt before every removal"))'
+    '--one-file-system[stay within filesystems of files given as arguments]'
+    '(                   --preserve-root)--no-preserve-root[do not treat / specially]'
+    '(--no-preserve-root                )--preserve-root[do not remove / (default)]'
+    '(-v --verbose)'{-v,--verbose}'[explain what is being done]'
+    '(- *)--help[display help message and exit]'
+    '(- *)--version[output version information and exit]'
+  )
+else
+  args=(${args:#*--(force|recursive)\[*})
+fi
+
+local curcontext=$curcontext state line ret=1
+declare -A opt_args
+
+_arguments -C $opts \
+  $args && ret=0
+
+case $state in
+  (file)
+    declare -a ignored
+    ignored=(${line//(#m)[\[\]()\\*?#<>~\^]/\\$MATCH})
+    _path_files -F ignored && ret=0
+    ;;
+esac
+
+return $ret