On Mon, Jul 14, 2008 at 11:57:07AM +0100, Daniel P. Berrange wrote: > Everyone[1] seems to be doing funky bash auto-completion for commands these > days, so I thought I'd make a stab at doing something for virsh. > > First of all I needed the command line help in an easier format to deal > with, so I've added This is an additive patch to make it preserve the '--connect URI' arg when auto-completing domains, network and storage pool objects, instead of using the default connection URI. It will explicitly disable this completion if its a remote URI - ie one with a hostname, since we don't want the completion function prompting for auth! Daniel diff -r 63b8398c302e src/virsh.bash --- a/src/virsh.bash Mon Jul 14 12:18:23 2008 +0100 +++ b/src/virsh.bash Mon Jul 14 12:29:44 2008 +0100 @@ -1,7 +1,7 @@ _virsh() { - local cur prev cmd cmd_index arg arg_index i results + local cur prev cmd cmd_index arg arg_index i results skipconn local virsh="$1" local canonical=0 @@ -10,14 +10,19 @@ prev="$3" if [[ $COMP_CWORD > 1 && ${COMP_WORDS[COMP_CWORD-1]} = '--connect' ]]; then - results="$("$virsh" _complete-uri)" || nets="" + results="$($virsh _complete-uri)" || nets="" fi + skipconn=0 if [ -z "$results" ]; then # searching for the command name for ((i=1; $i<=$COMP_CWORD; i++)); do if [[ ${COMP_WORDS[i]} != -* ]]; then - if [[ ${COMP_WORDS[i-1]} != '--connect' ]]; then + if [[ ${COMP_WORDS[i-1]} = '--connect' ]]; then + echo "${COMP_WORDS[i]}" | grep '///' >/dev/null 2>&1 + test "$?" = 1 && skipconn=1 + test "$skipconn" = 0 && virsh="$virsh ${COMP_WORDS[i-1]} ${COMP_WORDS[i]}" + else if [[ $i < $COMP_CWORD ]]; then cmd="${COMP_WORDS[i]}" cmd_index=$i @@ -30,15 +35,15 @@ if [[ "$cur" == -* ]]; then # Generate args - global or command specific - results="$("$virsh" _complete-command options "$cmd")" + results="$($virsh _complete-command options "$cmd")" else if [ -z "$cmd" ]; then # No command set, so generate list of all commands - results="$("$virsh" _complete-command commands)" || commands="" + results="$($virsh _complete-command commands)" || commands="" else # Command set, to generate command specific args n=0 - for i in "$("$virsh" _complete-command arguments "$cmd")" + for i in "$($virsh _complete-command arguments "$cmd")" do n=`expr $n + 1` if [ $n = $arg_index ]; then @@ -53,19 +58,19 @@ ;; domain) - results="$("$virsh" _complete-domain)" || doms="" + test "$skipconn" = 0 && results="$($virsh _complete-domain)" || doms="" ;; network) - results="$("$virsh" _complete-network)" || nets="" + test "$skipconn" = 0 && results="$($virsh _complete-network)" || nets="" ;; pool) - results="$("$virsh" _complete-pool)" || nets="" + test "$skipconn" = 0 && results="$($virsh _complete-pool)" || nets="" ;; uri) - results="$("$virsh" _complete-uri)" || nets="" + results="$($virsh _complete-uri)" || nets="" ;; esac fi -- |: Red Hat, Engineering, London -o- http://people.redhat.com/berrange/ :| |: http://libvirt.org -o- http://virt-manager.org -o- http://ovirt.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: GnuPG: 7D3B9505 -o- F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :| -- Libvir-list mailing list Libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list