#compdef coredumpctl

_coredumpctl_command(){
    local -a _coredumpctl_cmds
    _coredumpctl_cmds=(
            'list:List available coredumps'
            'dump:Print coredump to stdout'
            'gdb:Start gdb on a coredump'
    )
    if (( CURRENT == 1 )); then
        _describe -t commands 'coredumpctl command' _coredumpctl_cmds
    else
        local curcontext="$curcontext"
        local -a _dumps
        cmd="${${_coredumpctl_cmds[(r)$words[1]:*]%%:*}}"
        if (( $#cmd  )); then
            # user can set zstyle ':completion:*:*:coredumpctl:*' sort no for coredumps to be ordered by date, otherwise they get ordered by pid
            _dumps=( "${(foa)$(coredumpctl list | awk 'BEGIN{OFS=":"} /^\s/ {sub(/[[ \t]+/, ""); print $5,$0}' 2>/dev/null)}" )
            if [[ -n "$_dumps" ]]; then
                _describe -t pids 'coredumps' _dumps
            else
                _message "no coredumps"
            fi
        else
            _message "no more options"
        fi
    fi
}

_arguments \
    {-o+,--output=}'[Write output to FILE]:output file:_files' \
    {-F+,--field=}'[Show field in list output]:field' \
    '--no-pager[Do not pipe output into a pager]' \
    {-h,--help}'[Show this help]' \
    '--version[Show package version]' \
    '*::coredumpctl commands:_coredumpctl_command'
