aboutsummaryrefslogtreecommitdiffhomepage
path: root/share/completions/dd.fish
blob: cad9ef80dc7267710c118dab01a6c6f24ea08e24 (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
65
66
67
68
69
70
71
72
73
74
75
complete -c dd -xa '(__fish_complete_dd)'
complete -c dd -d 'display help and exit' -xa '--help'
complete -c dd -d 'output version information and exit' -xa '--version'

function __fish_complete_dd --description 'Complete dd operands'

    # set operand_string as a local variable containing the current command-line token.
    set -l operand_string (commandline -t)

    switch $operand_string

        case 'if=*' 'of=*'
            # the read command uses $IFS to tokenise stdin input
            set -l IFS =
            # $operand now contains the left side of the operator, $value the right
            echo $operand_string | read -l operand value

            for entry in $value*
                # if $entry is a directory, append a '/'
                if test -d $entry
                    echo $operand"="$entry/
                else
                    echo $operand"="$entry
                end
            end

        case 'iflag=*' 'oflag=*'
            set -l flags append direct directory dsync sync fullblock nonblock noatime nocache noctty nofollow

            set -l IFS =
            echo $operand_string | read -l operand value

            set -l IFS ' '
            echo $value | sed -e 's/\(.*\)\(,\)/\1 \2/' | read -l complete comma

            # check if there is only one option
            if test $comma = ''
                set complete ''
            else
                set complete $complete,
            end

            for flag in $flags
                echo $operand"="$complete$flag
            end

        case 'conv=*'
            set -l convs ascii ebcdic ibm block unblock lcase ucase swab sync excl nocreat notrunc noerror fdatasync fsync

            set -l IFS =
            echo $operand_string | read -l operand value

            set -l IFS ' '
            echo $value | sed -e 's/\(.*\)\(,\)/\1 \2/' | read -l complete comma

            if test $comma = ''
                set complete ''
            else
                set complete $complete,
            end

            for conv in $convs
                echo $operand"="$complete$conv
            end

        case 'status=*'
            echo status=noxfer

        case '*'
            set -l operands bs cbs conv count ibs if iflag obs of oflag seek skip status
            for operand in $operands
                echo $operand=
            end
    end
end