summaryrefslogtreecommitdiffstats
path: root/completions/firefly.bash
blob: c118f52c7d95ba97057a00400da5d015baaad27b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# bash completion for firefly (firefly-cli)
# Install: source this file, or drop it in /etc/bash_completion.d/ or
# /usr/share/bash-completion/completions/firefly
#
# Generated by scripts/gen_completion.py -- do not edit by hand.
# Regenerate when commands change (see CLAUDE.md):
#   python scripts/gen_completion.py > completions/firefly.bash

_firefly() {
    local cur prev words cword
    _init_completion 2>/dev/null || {
        cur="${COMP_WORDS[COMP_CWORD]}"
        prev="${COMP_WORDS[COMP_CWORD-1]}"
        words=("${COMP_WORDS[@]}")
        cword=$COMP_CWORD
    }

    local global_opts="--human --url --token -h --help"
    local groups="auth account category tag tx"

    # Find the group and leaf among the words (skip the program name at 0).
    local group="" leaf="" i
    for ((i=1; i < cword; i++)); do
        local w="${words[i]}"
        case "$w" in
            -*) ;;                      # an option, skip
            --url|--token) ((i++));;    # option that takes a value
            *)
                if [[ -z $group ]]; then group="$w"
                elif [[ -z $leaf ]]; then leaf="$w"
                fi
                ;;
        esac
    done

    # Leaf-specific options.
    local leaf_opts=""
    case "$group $leaf" in
        "auth set")         leaf_opts="--token --url";;
        "account create")   leaf_opts="--currency --opening-balance --type";;
        "account list")     leaf_opts="--type";;
        "tx add")           leaf_opts="--category --date --desc --from --tags --to --type";;
        "tx list")          leaf_opts="--account --limit --since --until";;
    esac

    # Leaves per group.
    local leaves=""
    case "$group" in
        auth) leaves="set test";;
        account) leaves="balance create get list";;
        category) leaves="list";;
        tag) leaves="list";;
        tx) leaves="add get list search";;
    esac

    if [[ -z $group ]]; then
        COMPREPLY=($(compgen -W "$groups $global_opts" -- "$cur"))
    elif [[ -z $leaf ]]; then
        COMPREPLY=($(compgen -W "$leaves" -- "$cur"))
    else
        COMPREPLY=($(compgen -W "$leaf_opts --help" -- "$cur"))
    fi
}
complete -F _firefly firefly