summaryrefslogtreecommitdiff
path: root/completions/smartctl
blob: ecef0b99bd3751bdac2eddf5d98a2427d4e275be (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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
# bash completion for smartctl(8)                          -*- shell-script -*-

_smartctl_quietmode()
{
    COMPREPLY=( $(compgen -W 'errorsonly silent noserial' -- "$cur") )
}
_smartctl_device()
{
    case $cur in
        areca*|3ware*|megaraid*|cciss*)
            COMPREPLY+=( ${cur%%,*},{0..31} )
            COMPREPLY=( $(compgen -W '"${COMPREPLY[@]}"' -- "$cur") )
            ;;
        hpt*)
            COMPREPLY+=( hpt,{1..4}/{1..8} hpt,{1..4}/{1..8}/{1..5} )
            COMPREPLY=( $(compgen -W '"${COMPREPLY[@]}"' -- "$cur") )
            ;;
        *)
            COMPREPLY=( $(compgen -W "ata scsi sat usbcypress usbjmicron
                usbsunplus marvell areca 3ware hpt megaraid cciss auto test" \
                    -- "$cur") )
            case "${COMPREPLY[@]}" in
                areca|3ware|hpt|megaraid|cciss)
                    compopt -o nospace
                    ;;
            esac
            ;;
    esac
}
_smartctl_tolerance()
{
    COMPREPLY=( $(compgen -W 'normal conservative permissive verypermissive' \
        -- "$cur") )
}
_smartctl_badsum()
{
    COMPREPLY=( $(compgen -W 'warn exit ignore' -- "$cur") )
}
_smartctl_report()
{
    COMPREPLY=( $(compgen -W 'ioctl ataioctl scsiioctl' -- "$cur") )
}
_smartctl_powermode()
{
    COMPREPLY=( $(compgen -W 'never sleep standby idle' -- "$cur") )
}
_smartctl_feature()
{
    COMPREPLY=( $(compgen -W 'on off' -- "$cur") )
}
_smartctl_log()
{
    COMPREPLY=( $(compgen -W 'error selftest selective directory background
        sasphy sasphy,reset sataphy sataphy,reset scttemp scttempsts
        scttemphist scterc gplog smartlog xerror xselftest' -- "$cur") )
}
_smartctl_vendorattribute()
{
    COMPREPLY=( $(compgen -W 'help 9,minutes 9,seconds 9,halfminutes 9,temp
        192,emergencyretractcyclect 193,loadunload 194,10xCelsius 194,unknown
        198,offlinescanuncsectorct 200,writeerrorcount 201,detectedtacount
        220,temp' -- "$cur") )
}
_smartctl_firmwarebug()
{
    COMPREPLY=( $(compgen -W 'none samsung samsung2 samsung3 swapid' \
        -- "$cur") )
}
_smartctl_presets()
{
    COMPREPLY=( $(compgen -W 'use ignore show showall' -- "$cur") )
}
_smartctl_test()
{
    [[ $cur == @(pending|scttempint|vendor), ]] && return
    COMPREPLY=( $(compgen -W 'offline short long conveyance select,
        select,redo select,next afterselect,on afterselect,off pending,
        scttempint, vendor,' -- "$cur") )
    [[ $COMPREPLY == *, ]] && compopt -o nospace
}
_smartctl_drivedb()
{
    local prefix=
    if [[ $cur == +* ]]; then
        prefix=+
        cur="${cur#+}"
    fi
    _filedir h
    [[ -n $prefix ]] && COMPREPLY=( "${COMPREPLY[@]/#/$prefix}" )
}

_smartctl()
{
    local cur prev words cword split
    _init_completion -s || return

    case $prev in
        --quietmode|-!(-*)q)
            _smartctl_quietmode
            ;;
        --device|-!(-*)d)
            _smartctl_device
            return
            ;;
        --tolerance|-!(-*)T)
            _smartctl_tolerance
            return
            ;;
        --badsum|-!(-*)b)
            _smartctl_badsum
            return
            ;;
        --report|-!(-*)r)
            _smartctl_report
            return
            ;;
        --nocheck|-!(-*)n)
            _smartctl_powermode
            return
            ;;
        --smart|--offlineauto|--saveauto|-!(-*)[soS])
            _smartctl_feature
            return
            ;;
        --log|-!(-*)l)
            _smartctl_log
            return
            ;;
        --vendorattribute|-!(-*)v)
            _smartctl_vendorattribute
            return
            ;;
        --firmwarebug|-!(-*)F)
            _smartctl_firmwarebug
            return
            ;;
        --presets|-!(-*)P)
            _smartctl_presets
            return
            ;;
        --drivedb|-!(-*)B)
            _smartctl_drivedb
            return
            ;;
        --test|-!(-*)t)
            _smartctl_test
            return
            ;;
    esac

    $split && return

    if [[ "$cur" == -* ]]; then
        COMPREPLY=( $(compgen -W '$(_parse_help "$1")' -- "$cur") )
        [[ $COMPREPLY == *= ]] && compopt -o nospace
    else
        cur=${cur:=/dev/}
        _filedir
    fi
} &&
complete -F _smartctl smartctl

# ex: filetype=sh