diff options
Diffstat (limited to '')
-rw-r--r-- | completions/crontab | 48 |
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 |