# $Id$ # bash-completion script for enlightenment_remote # By Justin Rocha (Xenith) # Additions by Sebastian Dransfeld # TODO: # Add here: # -binding-mouse-add, -binding-mouse-del # -binding-signal-add, -binding-signal-del # -binding-wheel-add, -binding-wheel-del # -desktop-bg-add, -desktop-bg-del # -desktop-name-add, -desktop-name-del _enlightenment_remote() { local cur prev opts COMPREPLY=() cur=${COMP_WORDS[COMP_CWORD]} prev=${COMP_WORDS[COMP_CWORD-1]} action=${COMP_WORDS[1]} opts=`enlightenment_remote -h | awk '{print $1}' | grep -v "OPTIONS:" | xargs` BINDING_CONTEXT="NONE BORDER ZONE CONTAINER MANAGER MENU WINLIST POPUP ANY" ENGINE_CONTEXT="INIT CONTAINER ZONE BORDER MENU ERROR WIN POPUP DRAG" MODIFIERS="NONE SHIFT| SHIFT CONTROL| CONTROL ALT| ALT WIN| WIN" DIRS="data images fonts themes init icons modules backgrounds" case "${action}" in -h|-help|--help) COMPREPLY=($(compgen -W "${opts/-h -help --help}" -- "${cur}")) return 0 ;; -always-click-to-focus-set| \ -always-click-to-raise-set| \ -border-shade-animate-set| \ -edge-flip-set| \ -focus-last-focused-per-desktop-set| \ -focus-revert-on-hide-or-close-set| \ -kill-if-close-not-possible-set| \ -kill-process-set| \ -modal-windows-set| \ -move-info-follows-set| \ -pass-click-on-set| \ -ping-clients-set| \ -resize-info-follows-set| \ -transient-*-set| \ -use-*-set| \ -winlist-list-*-set| \ -winlist-scroll-animate-set| \ -winlist-warp-at-end-set| \ -winlist-warp-while-selecting-set) COMPREPLY=($(compgen -W " 0 1" -- "${cur}")) return 0 ;; -binding-key-add) if [[ ${COMP_CWORD} -eq 2 ]]; then COMPREPLY=($(compgen -W "${BINDING_CONTEXT}" -- "${cur}")) elif [[ ${COMP_CWORD} -eq 3 ]]; then COMPREPLY=() elif [[ ${COMP_CWORD} -eq 4 ]]; then # Find the selected modifiers selected=${cur#\'} selected=$(echo $selected | sed -e 's/\(.*|\)\?.*/\1/') # create updated modifier list if [[ "${selected}" ]]; then for modifier in ${MODIFIERS}; do if ! echo $selected | grep -q $modifier; then curmod="${curmod} ${selected}${modifier}" fi done else curmod=${MODIFIERS} fi COMPREPLY=($(compgen -P "'" -S "'" -W "${curmod}" -- "${cur}")) elif [[ ${COMP_CWORD} -eq 5 ]]; then COMPREPLY=($(compgen -W "0 1" -- "${cur}")) elif [[ ${COMP_CWORD} -eq 6 ]]; then actions=$(enlightenment_remote -action-list|grep REPLY:|awk '{print $2}') COMPREPLY=($(compgen -W "${actions}" -- "${cur}")) elif [[ ${COMP_CWORD} -eq 7 ]]; then COMPREPLY=() fi return 0 ;; -binding-key-del) context=${COMP_WORDS[2]} key=${COMP_WORDS[3]} modifiers=${COMP_WORDS[4]} modifiers=${modifiers#\'} modifiers=${modifiers%\'} any_mod=${COMP_WORDS[5]} action=${COMP_WORDS[6]} params=${COMP_WORDS[7]} SIFS=$IFS IFS=$'\n' if [[ ${COMP_CWORD} -eq 2 ]]; then binding=$(enlightenment_remote -binding-key-list|grep 'REPLY:'|sed -e "s/.*CONTEXT=\(\S\+\)\s\+KEY=\"\(\S\+\)\"\s\+MODIFIERS=\(\S\+\)\s\+ANY_MOD=\(\S\+\)\s\+ACTION=\"\(\S\+\)\"\s\+PARAMS=\"\(\S\+\)\".*/'\1 \2 \3 \4 \5 \6'/"|grep -v 'REPLY:') COMPREPLY=($(compgen -W "${binding}" -- "${cur}")) elif [[ ${COMP_CWORD} -eq 3 ]]; then binding=$(enlightenment_remote -binding-key-list|grep 'REPLY:'|sed -e "s/.*CONTEXT=${context}\s\+KEY=\"\(\S\+\)\"\s\+MODIFIERS=\(\S\+\)\s\+ANY_MOD=\(\S\+\)\s\+ACTION=\"\(\S\+\)\"\s\+PARAMS=\"\(\S\+\)\".*/'\1 \2 \3 \4 \5'/"|grep -v 'REPLY:') COMPREPLY=($(compgen -W "${binding}" -- "${cur}")) elif [[ ${COMP_CWORD} -eq 4 ]]; then binding=$(enlightenment_remote -binding-key-list|grep 'REPLY:'|sed -e "s/.*CONTEXT=${context}\s\+KEY=\"${key}\"\s\+MODIFIERS=\(\S\+\)\s\+ANY_MOD=\(\S\+\)\s\+ACTION=\"\(\S\+\)\"\s\+PARAMS=\"\(\S\+\)\".*/'\1 \2 \3 \4'/"|grep -v 'REPLY:') COMPREPLY=($(compgen -W "${binding}" -- "${cur}")) elif [[ ${COMP_CWORD} -eq 5 ]]; then binding=$(enlightenment_remote -binding-key-list|grep 'REPLY:'|sed -e "s/.*CONTEXT=${context}\s\+KEY=\"${key}\"\s\+MODIFIERS=${modifiers}\s\+ANY_MOD=\(\S\+\)\s\+ACTION=\"\(\S\+\)\"\s\+PARAMS=\"\(\S\+\)\".*/'\1 \2 \3'/"|grep -v 'REPLY:') COMPREPLY=($(compgen -W "${binding}" -- "${cur}")) elif [[ ${COMP_CWORD} -eq 6 ]]; then binding=$(enlightenment_remote -binding-key-list|grep 'REPLY:'|sed -e "s/.*CONTEXT=${context}\s\+KEY=\"${key}\"\s\+MODIFIERS=${modifiers}\s\+ANY_MOD=${any_mod}\s\+ACTION=\"\(\S\+\)\"\s\+PARAMS=\"\(\S\+\)\".*/'\1 \2'/"|grep -v 'REPLY:') COMPREPLY=($(compgen -W "${binding}" -- "${cur}")) elif [[ ${COMP_CWORD} -eq 7 ]]; then binding=$(enlightenment_remote -binding-key-list|grep 'REPLY:'|sed -e "s/.*CONTEXT=${context}\s\+KEY=\"${key}\"\s\+MODIFIERS=${modifiers}\s\+ANY_MOD=${any_mod}\s\+ACTION=\"${action}\"\s\+PARAMS=\"\(\S\+\)\".*/'\1'/"|grep -v 'REPLY:') COMPREPLY=($(compgen -W "${binding}" -- "${cur}")) fi IFS=$SIFS return 0 ;; -border-shade-transition-set) COMPREPLY=($(compgen -W " 0 1 2 3" -- "${cur}")) return 0 ;; -default-bg-set) # TODO Add filename expansion, and only match dirs and .edj files return 0 ;; -default-engine-set) engines=$(enlightenment_remote -engine-list|grep REPLY:|awk '{print $2}') COMPREPLY=($(compgen -W "${engines}" -- "${cur}")) return 0 ;; -default-profile-set) profiles=$(enlightenment_remote -profile-list|grep REPLY:|awk '{print $2}') COMPREPLY=($(compgen -W "${profiles}" -- "${cur}")) return 0 ;; -dirs-list) COMPREPLY=($(compgen -W "${DIRS}" -- "${cur}")) return 0 ;; -dirs-list-append|-dirs-list-prepend) if [[ ${COMP_CWORD} -eq 2 ]]; then COMPREPLY=($(compgen -W "${DIRS}" -- "${cur}")) elif [[ ${COMP_CWORD} -eq 3 ]]; then # TODO Add filename expansion, and only match dirs COMPREPLY=() fi return 0 ;; -dirs-list-remove) dir=${COMP_WORDS[2]} if [[ ${COMP_CWORD} -eq 2 ]]; then COMPREPLY=($(compgen -W "${DIRS}" -- "${cur}")) elif [[ ${COMP_CWORD} -eq 3 ]]; then dirs=$(enlightenment_remote -dirs-list ${dir}|grep REPLY:|awk '{print $2}') COMPREPLY=($(compgen -W "${dirs}" -- "${cur}")) fi return 0 ;; -display) displays=$(/bin/ls $HOME/.ecore/enlightenment-\(*\)/0|sed -e 's+.*enlightenment-(\(.*\))/.*+\1+') COMPREPLY=($(compgen -W "${displays}" -- "${cur}")) return 0 ;; -engine-set) if [[ ${COMP_CWORD} -eq 2 ]]; then COMPREPLY=($(compgen -W "${ENGINE_CONTEXT}" -- "${cur}")) elif [[ ${COMP_CWORD} -eq 3 ]]; then engines=$(enlightenment_remote -engine-list|grep REPLY:|awk '{print $2}') COMPREPLY=($(compgen -W "DEFAULT ${engines}" -- "${cur}")) fi return 0 ;; -exec-action) if [[ ${COMP_CWORD} -eq 2 ]]; then actions=$(enlightenment_remote -action-list|grep REPLY:|awk '{print $2}') COMPREPLY=($(compgen -W "${actions}" -- "${cur}")) elif [[ ${COMP_CWORD} -eq 3 ]]; then COMPREPLY=() fi return 0 ;; -focus-policy-set) COMPREPLY=($(compgen -W "CLICK MOUSE SLOPPY" -- "${cur}")) return 0 ;; -focus-setting-set) COMPREPLY=($(compgen -W "NONE NEW_WINDOW NEW_DIALOG NEW_DIALOG_IF_OWNER_FOCUSED" -- "${cur}")) return 0 ;; -font-default-get|-font-default-remove) classes=$(enlightenment_remote -font-default-list|grep REPLY:|sed -e 's/.*TEXT_CLASS=\"\(\S\+\)\".*/\1/') COMPREPLY=($(compgen -W "${classes}" -- "${cur}")) return 0 ;; -font-default-set) if [[ ${COMP_CWORD} -eq 2 ]]; then classes=$(enlightenment_remote -font-default-list|grep REPLY:|sed -e 's/.*TEXT_CLASS=\"\(\S\+\)\".*/\1/') COMPREPLY=($(compgen -W "${classes}" -- "${cur}")) elif [[ ${COMP_CWORD} -eq 3 ]]; then fonts=$(enlightenment_remote -font-available-list|grep REPLY:|awk '{print $2}') COMPREPLY=($(compgen -W "${fonts}" -- "${cur}")) elif [[ ${COMP_CWORD} -eq 4 ]]; then COMPREPLY=() fi return 0 ;; -font-fallback-remove) fonts=$(enlightenment_remote -font-fallback-list|grep REPLY:|awk '{print $2}') COMPREPLY=($(compgen -W "${fonts}" -- "${cur}")) return 0 ;; -fullscreen-policy-set) COMPREPLY=($(compgen -W "RESIZE ZOOM" -- "${cur}")) return 0 ;; -lang-set) languages=$(enlightenment_remote -lang-list|grep REPLY:|awk '{print $2}') COMPREPLY=($(compgen -W "${languages}" -- "${cur}")) return 0 ;; -maximize-policy-set) COMPREPLY=($(compgen -W "FULLSCREEN SMART EXPAND FILL" -- "${cur}")) return 0 ;; -module-enable) modules=$(enlightenment_remote -module-list|grep REPLY:|grep 0$|awk '{print $2}') COMPREPLY=($(compgen -W "${modules}" -- "${cur}")) return 0 ;; -module-disable) modules=$(enlightenment_remote -module-list|grep REPLY:|grep 1$|awk '{print $2}') COMPREPLY=($(compgen -W "${modules}" -- "${cur}")) return 0 ;; -module-load) extra_dir=$(pkg-config --variable=modules enlightenment) # This is a hack. pkg-config should return extra dir and standard dir dir=${extra_dir%_extra} modules=$(cd ${dir} && /bin/ls && cd ${extra_dir} && /bin/ls) COMPREPLY=($(compgen -W "${modules}" -- "${cur}")) return 0 ;; -module-unload) modules=$(enlightenment_remote -module-list|grep REPLY:|awk '{print $2}') COMPREPLY=($(compgen -W "${modules}" -- "${cur}")) return 0 ;; -profile-del) profiles=$(enlightenment_remote -profile-list|grep REPLY:|awk '{print $2}') COMPREPLY=($(compgen -W "${profiles}" -- "${cur}")) return 0 ;; -theme-get|-theme-remove) theme_categories=$(enlightenment_remote -theme-category-list|grep REPLY:|awk '{print $2}') COMPREPLY=($(compgen -W "${theme_categories}" -- "${cur}")) return 0 ;; -theme-set) if [[ ${COMP_CWORD} -eq 2 ]]; then theme_categories=$(enlightenment_remote -theme-category-list|grep REPLY:|awk '{print $2}') COMPREPLY=($(compgen -W "${theme_categories}" -- "${cur}")) elif [[ ${COMP_CWORD} -eq 3 ]]; then # TODO Add filename expansion, and only match dirs and .edj files COMPREPLY=() fi return 0 ;; -transition-*-set) transitions=$(enlightenment_remote -transition-list|grep REPLY:|awk '{print $2}') COMPREPLY=($(compgen -W "${transitions}" -- "${cur}")) return 0 ;; -window-placement-policy-set) COMPREPLY=($(compgen -W "SMART CURSOR MANUAL" -- "${cur}")) return 0 ;; esac if [[ "${cur}" == -* ]] || [[ ${COMP_CWORD} -eq 1 ]]; then COMPREPLY=($(compgen -W "${opts}" -- "${cur}")) fi } complete -F _enlightenment_remote enlightenment_remote