# gnokii(1) completion -*- shell-script -*- _gnokii_memory_type() { # TODO: reduce the number of choices COMPREPLY=($(compgen -W "IN OU SM ME MT" -- "$cur")) } _gnokii() { local cur prev words cword pprev tprev fprev _init_completion || return case $prev in --config) _filedir return ;; --phone) local config_file for config_file in "$XDG_CONFIG_HOME/gnokii/config" \ "$HOME/.config/gnokii/config" "$HOME/.gnokiirc" \ "$XDG_CONFIG_DIRS/gnokii/config" /etc/gnokiirc; do [[ -f $config_file ]] && break done [[ ! -f $config_file ]] && return COMPREPLY=($(compgen -W \ "$(command sed -n 's/^\[phone_\(.*\)\]/\1/p' $config_file)" \ -- "$cur")) return ;; --help) COMPREPLY=($(compgen -W 'all monitor sms mms phonebook calendar todo dial profile settings wap logo ringtone security file other' -- "$cur")) return ;; --version | --shell | ping) return ;; # MONITOR --monitor) COMPREPLY=($(compgen -W 'delay once' -- "$cur")) return ;; --getdisplaystatus | --displayoutput) return ;; --netmonitor) COMPREPLY=($(compgen -W 'reset off field devel next nr' \ -- "$cur")) return ;; # SMS --sendsms) # (how)TODO ? return ;; --savesms) COMPREPLY=($(compgen -W '--sender --smsc --smscno --folder --location --sent --read --deliver --datetime' -- "$cur")) return ;; --memory-type | --memory | --getsms | --deletesms | --getmms | --deletemms | \ --getphonebook | --deletephonebook) _gnokii_memory_type return ;; --getsmsc | --getcalendarnote | --deletecalendarnote | --gettodo | \ --getspeeddial) # TODO: grab a specific entry ID return ;; --setsmsc | --smsreader | --createsmsfolder | --deletealltodos | \ --showsmsfolderstatus) return ;; --deletesmsfolder | --folder) # TODO: folderid return ;; --writephonebook) COMPREPLY=($(compgen -W '--overwrite --find-free --memory-type --location --vcard --ldif' -- "$cur")) return ;; --writecalendarnote | --writetodo) _filedir vcf return ;; # DIAL --setspeeddial | --dialvoice | --senddtmf | --answercall | --hangup) # TODO return ;; --divert) COMPREPLY=($(compgen -W '--op' -- "$cur")) return ;; # PROFILE --getprofile | --setactiveprofile) # TODO return ;; --setprofile | --getactiveprofile) return ;; # SETTINGS --reset) COMPREPLY=($(compgen -W 'soft hard' -- "$cur")) return ;; --setdatetime | --setalarm) # TODO return ;; --getdatetime | --getalarm) return ;; # WAP --getwapbookmark | --writewapbookmark | --deletewapbookmark | \ --getwapsetting | --writewapsetting | --activatewapsetting) return ;; # LOGOS --sendlogo) COMPREPLY=($(compgen -W 'caller op picture' -- "$cur")) return ;; --setlogo | --getlogo) COMPREPLY=($(compgen -W 'op startup caller dealer text' \ -- "$cur")) return ;; --viewlogo) # TODO: logofile return ;; --entersecuritycode) COMPREPLY=($(compgen -W 'PIN PIN2 PUK PUK2 SEC' -- "$cur")) return ;; # TODO: RINGTONES esac # second level completion if [[ $((cword - 2)) -ge 1 && ${words[cword - 2]} =~ --* ]]; then pprev=${words[cword - 2]} case $pprev in --setspeeddial) _gnokii_memory_type return ;; --getsms | --deletesms | --getmms | --deletemms | --getphonebook | \ --writetodo | --writecalendarnote) # TODO: start number return ;; --gettodo | --getcalendarnote) COMPREPLY=($(compgen -W '{1..9} end --vCal' -- "$cur")) return ;; --deletecalendarnote) COMPREPLY=($(compgen -W '{1..9} end' -- "$cur")) return ;; --divert) COMPREPLY=($(compgen -W 'register enable query disable erasure' -- "$cur")) return ;; esac fi # third level completion if [[ $((cword - 3)) -ge 1 && ${words[cword - 3]} =~ --* ]]; then tprev=${words[cword - 3]} case $tprev in --deletesms | --deletemms) COMPREPLY=($(compgen -W 'end' -- "$cur")) return ;; --getphonebook | --writetodo | --writecalendarnote) COMPREPLY=($(compgen -W '{1..9} end' -- "$cur")) return ;; --gettodo | --getcalendarnote) [[ ${words[cword - 1]} == end ]] && COMPREPLY=($(compgen -W '--vCal' -- "$cur")) return ;; --divert) COMPREPLY=($(compgen -W '--type' -- "$cur")) return ;; esac fi # fourth level completion if [[ $((cword - 4)) -ge 1 && ${words[cword - 4]} =~ --* ]]; then fprev=${words[cword - 4]} case $fprev in --getphonebook) COMPREPLY=($(compgen -W '--raw --vcard --ldif' -- "$cur")) return ;; --divert) COMPREPLY=($(compgen -W 'all busy noans outofreach notavail' \ -- "$cur")) return ;; esac fi # safer to use LANG=C local all_cmd="$(LANG=C _parse_help $1 "--help all")" # these 2 below are allowed in combination with others local main_cmd=$(command grep -v -- '--config\|--phone' <<<"$all_cmd") # don't provide main command completions if one is # already on the command line [[ $COMP_LINE =~ $(tr ' ' '\b|' <<<$main_cmd) ]] && return COMPREPLY=($(compgen -W "$all_cmd" -- "$cur")) } && complete -F _gnokii gnokii # ex: filetype=sh