1*4882a593Smuzhiyun# -*- shell-script -*- 2*4882a593Smuzhiyun# bash completion script for cpupower 3*4882a593Smuzhiyun# Taken from git.git's completion script. 4*4882a593Smuzhiyun 5*4882a593Smuzhiyun_cpupower_commands="frequency-info frequency-set idle-info idle-set set info monitor" 6*4882a593Smuzhiyun 7*4882a593Smuzhiyun_frequency_info () 8*4882a593Smuzhiyun{ 9*4882a593Smuzhiyun local flags="-f -w -l -d -p -g -a -s -y -o -m -n --freq --hwfreq --hwlimits --driver --policy --governors --related-cpus --affected-cpus --stats --latency --proc --human --no-rounding" 10*4882a593Smuzhiyun local prev="${COMP_WORDS[COMP_CWORD-1]}" 11*4882a593Smuzhiyun local cur="${COMP_WORDS[COMP_CWORD]}" 12*4882a593Smuzhiyun case "$prev" in 13*4882a593Smuzhiyun frequency-info) COMPREPLY=($(compgen -W "$flags" -- "$cur")) ;; 14*4882a593Smuzhiyun esac 15*4882a593Smuzhiyun} 16*4882a593Smuzhiyun 17*4882a593Smuzhiyun_frequency_set () 18*4882a593Smuzhiyun{ 19*4882a593Smuzhiyun local flags="-f -g --freq --governor -d --min -u --max -r --related" 20*4882a593Smuzhiyun local prev="${COMP_WORDS[COMP_CWORD-1]}" 21*4882a593Smuzhiyun local cur="${COMP_WORDS[COMP_CWORD]}" 22*4882a593Smuzhiyun case "$prev" in 23*4882a593Smuzhiyun -f| --freq | -d | --min | -u | --max) 24*4882a593Smuzhiyun if [ -d /sys/devices/system/cpu/cpufreq/ ] ; then 25*4882a593Smuzhiyun COMPREPLY=($(compgen -W '$(cat $(ls -d /sys/devices/system/cpu/cpufreq/policy* | head -1)/scaling_available_frequencies)' -- "$cur")) 26*4882a593Smuzhiyun fi ;; 27*4882a593Smuzhiyun -g| --governor) 28*4882a593Smuzhiyun if [ -d /sys/devices/system/cpu/cpufreq/ ] ; then 29*4882a593Smuzhiyun COMPREPLY=($(compgen -W '$(cat $(ls -d /sys/devices/system/cpu/cpufreq/policy* | head -1)/scaling_available_governors)' -- "$cur")) 30*4882a593Smuzhiyun fi;; 31*4882a593Smuzhiyun frequency-set) COMPREPLY=($(compgen -W "$flags" -- "$cur")) ;; 32*4882a593Smuzhiyun esac 33*4882a593Smuzhiyun} 34*4882a593Smuzhiyun 35*4882a593Smuzhiyun_idle_info() 36*4882a593Smuzhiyun{ 37*4882a593Smuzhiyun local flags="-f --silent" 38*4882a593Smuzhiyun local prev="${COMP_WORDS[COMP_CWORD-1]}" 39*4882a593Smuzhiyun local cur="${COMP_WORDS[COMP_CWORD]}" 40*4882a593Smuzhiyun case "$prev" in 41*4882a593Smuzhiyun idle-info) COMPREPLY=($(compgen -W "$flags" -- "$cur")) ;; 42*4882a593Smuzhiyun esac 43*4882a593Smuzhiyun} 44*4882a593Smuzhiyun 45*4882a593Smuzhiyun_idle_set() 46*4882a593Smuzhiyun{ 47*4882a593Smuzhiyun local flags="-d --disable -e --enable -D --disable-by-latency -E --enable-all" 48*4882a593Smuzhiyun local prev="${COMP_WORDS[COMP_CWORD-1]}" 49*4882a593Smuzhiyun local cur="${COMP_WORDS[COMP_CWORD]}" 50*4882a593Smuzhiyun case "$prev" in 51*4882a593Smuzhiyun idle-set) COMPREPLY=($(compgen -W "$flags" -- "$cur")) ;; 52*4882a593Smuzhiyun esac 53*4882a593Smuzhiyun} 54*4882a593Smuzhiyun 55*4882a593Smuzhiyun_set() 56*4882a593Smuzhiyun{ 57*4882a593Smuzhiyun local flags="--perf-bias, -b" 58*4882a593Smuzhiyun local prev="${COMP_WORDS[COMP_CWORD-1]}" 59*4882a593Smuzhiyun local cur="${COMP_WORDS[COMP_CWORD]}" 60*4882a593Smuzhiyun case "$prev" in 61*4882a593Smuzhiyun set) COMPREPLY=($(compgen -W "$flags" -- "$cur")) ;; 62*4882a593Smuzhiyun esac 63*4882a593Smuzhiyun} 64*4882a593Smuzhiyun 65*4882a593Smuzhiyun_monitor() 66*4882a593Smuzhiyun{ 67*4882a593Smuzhiyun local flags="-l -m -i -c -v" 68*4882a593Smuzhiyun local prev="${COMP_WORDS[COMP_CWORD-1]}" 69*4882a593Smuzhiyun local cur="${COMP_WORDS[COMP_CWORD]}" 70*4882a593Smuzhiyun case "$prev" in 71*4882a593Smuzhiyun monitor) COMPREPLY=($(compgen -W "$flags" -- "$cur")) ;; 72*4882a593Smuzhiyun esac 73*4882a593Smuzhiyun} 74*4882a593Smuzhiyun 75*4882a593Smuzhiyun_taskset() 76*4882a593Smuzhiyun{ 77*4882a593Smuzhiyun local prev_to_prev="${COMP_WORDS[COMP_CWORD-2]}" 78*4882a593Smuzhiyun local prev="${COMP_WORDS[COMP_CWORD-1]}" 79*4882a593Smuzhiyun local cur="${COMP_WORDS[COMP_CWORD]}" 80*4882a593Smuzhiyun case "$prev_to_prev" in 81*4882a593Smuzhiyun -c|--cpu) COMPREPLY=($(compgen -W "$_cpupower_commands" -- "$cur")) ;; 82*4882a593Smuzhiyun esac 83*4882a593Smuzhiyun case "$prev" in 84*4882a593Smuzhiyun frequency-info) _frequency_info ;; 85*4882a593Smuzhiyun frequency-set) _frequency_set ;; 86*4882a593Smuzhiyun idle-info) _idle_info ;; 87*4882a593Smuzhiyun idle-set) _idle_set ;; 88*4882a593Smuzhiyun set) _set ;; 89*4882a593Smuzhiyun monitor) _monitor ;; 90*4882a593Smuzhiyun esac 91*4882a593Smuzhiyun 92*4882a593Smuzhiyun} 93*4882a593Smuzhiyun 94*4882a593Smuzhiyun_cpupower () 95*4882a593Smuzhiyun{ 96*4882a593Smuzhiyun local i 97*4882a593Smuzhiyun local c=1 98*4882a593Smuzhiyun local command 99*4882a593Smuzhiyun 100*4882a593Smuzhiyun while test $c -lt $COMP_CWORD; do 101*4882a593Smuzhiyun if test $c == 1; then 102*4882a593Smuzhiyun command="${COMP_WORDS[c]}" 103*4882a593Smuzhiyun fi 104*4882a593Smuzhiyun c=$((++c)) 105*4882a593Smuzhiyun done 106*4882a593Smuzhiyun 107*4882a593Smuzhiyun # Complete name of subcommand if the user has not finished typing it yet. 108*4882a593Smuzhiyun if test $c -eq $COMP_CWORD -a -z "$command"; then 109*4882a593Smuzhiyun COMPREPLY=($(compgen -W "help -v --version -c --cpu $_cpupower_commands" -- "${COMP_WORDS[COMP_CWORD]}")) 110*4882a593Smuzhiyun return 111*4882a593Smuzhiyun fi 112*4882a593Smuzhiyun 113*4882a593Smuzhiyun # Complete arguments to subcommands. 114*4882a593Smuzhiyun case "$command" in 115*4882a593Smuzhiyun -v|--version) return ;; 116*4882a593Smuzhiyun -c|--cpu) _taskset ;; 117*4882a593Smuzhiyun help) COMPREPLY=($(compgen -W "$_cpupower_commands" -- "${COMP_WORDS[COMP_CWORD]}")) ;; 118*4882a593Smuzhiyun frequency-info) _frequency_info ;; 119*4882a593Smuzhiyun frequency-set) _frequency_set ;; 120*4882a593Smuzhiyun idle-info) _idle_info ;; 121*4882a593Smuzhiyun idle-set) _idle_set ;; 122*4882a593Smuzhiyun set) _set ;; 123*4882a593Smuzhiyun monitor) _monitor ;; 124*4882a593Smuzhiyun esac 125*4882a593Smuzhiyun} 126*4882a593Smuzhiyun 127*4882a593Smuzhiyuncomplete -o bashdefault -o default -F _cpupower cpupower 2>/dev/null \ 128*4882a593Smuzhiyun || complete -o default -F _cpupower cpupower 129