# vim:set et ts=4 sts=4: # bash completion for ibus # # ibus - The Input Bus # # Copyright (c) 2007-2010 Peng Huang # Copyright (c) 2007-2010 Red Hat, Inc. # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, or (at your option) any later version. # # This library is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 # USA if ! type _get_comp_words_by_ref >/dev/null 2>&1; then if [[ -z ${ZSH_VERSION:+set} ]]; then _get_comp_words_by_ref () { local exclude cur_ words_ cword_ if [ "$1" = "-n" ]; then exclude=$2 shift 2 fi __git_reassemble_comp_words_by_ref "$exclude" cur_=${words_[cword_]} while [ $# -gt 0 ]; do case "$1" in cur) cur=$cur_ ;; prev) prev=${words_[$cword_-1]} ;; words) words=("${words_[@]}") ;; cword) cword=$cword_ ;; esac shift done } else _get_comp_words_by_ref () { while [ $# -gt 0 ]; do case "$1" in cur) cur=${COMP_WORDS[COMP_CWORD]} ;; prev) prev=${COMP_WORDS[COMP_CWORD-1]} ;; words) words=("${COMP_WORDS[@]}") ;; cword) cword=$COMP_CWORD ;; -n) # assume COMP_WORDBREAKS is already set sanely shift ;; esac shift done } fi fi __ibus_engine() { if [[ "$cmd" == "$prev" ]]; then local imes=$( ibus list-engine --name-only 2>/dev/null ) COMPREPLY=( $( compgen -W "$imes" -- "$cur" | sed "s/^$cur/$cur_/" )) fi } __ibus_list_engine() { if [[ "$cur" == -* ]]; then local options=( --name-only ) COMPREPLY=( $( compgen -W '${options[@]}' -- "$cur" )) fi } __ibus() { COMPREPLY=() local cur_=$2 prev_=$3 cur words cword prev _get_comp_words_by_ref -n =: cur words cword prev # echo # echo "cur='$cur'" # echo "prev='$prev'" # echo "words='${words[@]}'" # echo "cwords='${cwords[@]}'" # Commands local cmds=( engine list-engine watch restart exit ) local i c cmd subcmd for (( i=1; i < ${#words[@]}-1; i++)) ; do [[ -n $cmd ]] && subcmd=${words[i]} && break for c in ${cmds[@]}; do [[ ${words[i]} == $c ]] && cmd=$c && break done done case $cmd in engine) __ibus_engine; return 0 ;; list-engine) __ibus_list_engine; return 0 ;; watch) return 0 ;; *) COMPREPLY=( $( compgen -W '${cmds[@]}' -- "$cur" )) return 0 ;; esac } && complete -o bashdefault -o default -o nospace -F __ibus ibus