# -*- mode: shell-script; sh-basic-offset: 8; indent-tabs-mode: t -*- # ex: ts=8 sw=8 noet filetype=sh # # bash completion for xm have xm && { _xen_domain_names() { COMPREPLY=( $(compgen -W "$( xm list 2>/dev/null | awk '!/Name|Domain-0/ { print $1 }' )" -- $cur) ) } _xen_domain_ids() { COMPREPLY=( $(compgen -W "$( xm list 2>/dev/null | awk '!/Name|Domain-0/ { print $2 }' )" -- $cur) ) } _xm() { # TODO: _split_longopt local cur prev command options COMPREPLY=() cur=`_get_cword` commands='console create new delete destroy domid domname dump-core \ list mem-max mem-set migrate pause reboot rename restore \ resume save shutdown start suspend sysrq trigger top unpause \ uptime vcpu-list vcpu-pin vcpu-set debug-keys dmesg info log \ serve sched-credit sched-sedf block-attach block-detach \ block-list network-attach network-detach network-list \ vtpm-list vnet-list vnet-create vnet-delete labels addlabel \ rmlabel getlabel dry-run resources makepolicy loadpolicy \ cfgbootpolicy dumppolicy help' if [[ $COMP_CWORD -eq 1 ]] ; then COMPREPLY=( $( compgen -W "$commands" -- $cur ) ) else prev=${COMP_WORDS[COMP_CWORD-1]} if [[ "$cur" == *=* ]]; then prev=${cur/=*/} cur=${cur/*=/} fi command=${COMP_WORDS[1]} if [[ "$cur" == -* ]]; then # possible options for the command case $command in create) options='-c' ;; dmesg) options='--clear' ;; list) options='--long' ;; reboot) options='-w -a' ;; shutdown) options='-w -a -R -H' ;; sched-credit) options='-d -w -c' ;; @(block|network|vtpm|vnet)-list) options='-l --long' ;; getpolicy) options='--dumpxml' ;; new) options='-h --help --help_config -q \ --quiet --path= -f= \ --defconfig= -F= --config= \ -b --dryrun -x --xmldryrun \ -s --skipdtd -p --paused -c \ --console_autoconnect' ;; esac COMPREPLY=( $( compgen -W "$options" -- $cur ) ) else case $command in @(console|destroy|domname|domid|list|mem-@(set|max)|pause|reboot|rename|shutdown|unpause|vcpu-@(list|pin|set)|block-list|network-list|vtpm-list)) _count_args case $args in 2) _xen_domain_names ;; esac ;; migrate) _count_args case $args in 2) _xen_domain_names ;; 3) _known_hosts_real -h "$cur" ;; esac ;; @(restore|dry-run|vnet-create)) _filedir ;; save) _count_args case $args in 2) _xen_domain_names ;; 3) _filedir ;; esac ;; sysrq) _count_args case $args in 2) _xen_domain_names ;; 3) COMPREPLY=( $(compgen -W "r s e i u b" -- $cur) ) ;; esac ;; block-attach) _count_args case $args in 2) _xen_domain_names ;; 3) COMPREPLY=( $(compgen -W "phy: file:" -- $cur) ) ;; 5) COMPREPLY=( $(compgen -W "w r" -- $cur) ) ;; 6) _xen_domain_names ;; esac ;; block-detach) _count_args case $args in 2) _xen_domain_names ;; 3) COMPREPLY=( $(compgen -W "$( xm block-list $prev 2>/dev/null | awk '!/Vdev/ { print $1 }' )" -- $cur) ) ;; esac ;; network-attach) _count_args case $args in 2) _xen_domain_names ;; *) COMPREPLY=( $(compgen -W "script= ip= mac= bridge= backend=" -- $cur) ) ;; esac ;; network-detach) _count_args case $args in 2) _xen_domain_names ;; 3) COMPREPLY=( $(compgen -W "$( xm network-list $prev 2>/dev/null | awk '!/Idx/ { print $1 }' )" -- $cur) ) ;; esac ;; sched-credit) case $prev in -d) _xen_domain_names return 0 ;; esac ;; create) _filedir COMPREPLY=( ${COMPREPLY[@]:-} \ $( compgen -W '$( command ls \ /etc/xen 2>/dev/null )' \ -- $cur ) ) ;; new) case $prev in -@(f|F|-defconfig|-config)) _filedir return 0 ;; --path) _filedir -d return 0 ;; esac _count_args case $args in 2) _xen_domain_names ;; esac ;; esac fi fi return 0 } complete -F _xm xm }