summaryrefslogtreecommitdiffstats
path: root/completions/crontab
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--completions/crontab48
1 files changed, 48 insertions, 0 deletions
diff --git a/completions/crontab b/completions/crontab
new file mode 100644
index 0000000..cac7853
--- /dev/null
+++ b/completions/crontab
@@ -0,0 +1,48 @@
+# crontab(1) completion -*- shell-script -*-
+
+_crontab()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ case $prev in
+ -*u)
+ _allowed_users
+ return
+ ;;
+ esac
+
+ local -A opts=([-u]="" [-l]="" [-r]="" [-e]="")
+ [[ $OSTYPE == *linux* ]] && opts[-i]=
+ [[ -d /sys/fs/selinux || -d /selinux ]] && opts[-s]=
+
+ local i
+ for i in "${!words[@]}"; do
+ [[ ${words[i]} && $i -ne $cword ]] && unset "opts[${words[i]}]"
+ case "${words[i]}" in
+ -l)
+ unset 'opts[-r]' 'opts[-e]' 'opts[-i]' 'opts[-s]'
+ ;;
+ -e)
+ unset 'opts[-l]' 'opts[-r]' 'opts[-i]'
+ ;;
+ -r)
+ unset 'opts[-l]' 'opts[-e]'
+ ;;
+ -u)
+ unset 'opts[-i]'
+ ;;
+ esac
+ done
+
+ if [[ $cur == -* ]]; then
+ COMPREPLY=($(compgen -W '${!opts[@]}' -- "$cur"))
+ return
+ fi
+
+ # do filenames only if we did not have -l, -r, or -e
+ [[ ${words[*]} == *\ -[lre]* ]] || _filedir
+} &&
+ complete -F _crontab crontab
+
+# ex: filetype=sh