From 3c34db980868057916d6fe2489ad8906660e83d6 Mon Sep 17 00:00:00 2001 From: "Richard W.M. Jones" Date: Thu, 28 Mar 2013 17:13:34 +0000 Subject: [PATCH] Use new-style demand-loaded bash-completion scripts. --- .gitignore | 9 + Makefile.am | 3 + README | 2 + bash/Makefile.am | 68 ++++++++ bash/README | 3 + bash/guestfish | 72 ++++++++ bash/guestmount | 67 ++++++++ bash/virt-alignment-scan | 108 ++++++++++++ bash/virt-rescue | 67 ++++++++ bash/virt-resize | 46 ++++++ configure.ac | 16 ++ fish/Makefile.am | 6 - fish/libguestfs-bash-completion.sh | 326 ------------------------------------- src/guestfs.pod | 4 + 14 files changed, 465 insertions(+), 332 deletions(-) create mode 100644 bash/Makefile.am create mode 100644 bash/README create mode 100644 bash/guestfish create mode 100644 bash/guestmount create mode 100644 bash/virt-alignment-scan create mode 100644 bash/virt-rescue create mode 100644 bash/virt-resize delete mode 100644 fish/libguestfs-bash-completion.sh diff --git a/.gitignore b/.gitignore index fc03cd8..c4f488e 100644 --- a/.gitignore +++ b/.gitignore @@ -45,6 +45,15 @@ Makefile.in /appliance/stamp-supermin /appliance/supermin.d /autom4te.cache +/bash/virt-cat +/bash/virt-df +/bash/virt-edit +/bash/virt-filesystems +/bash/virt-format +/bash/virt-inspector +/bash/virt-ls +/bash/virt-sysprep +/bash/virt-sparsify /build-aux /cat/stamp-virt-*.pod /cat/virt-cat diff --git a/Makefile.am b/Makefile.am index 050c8b6..fef3421 100644 --- a/Makefile.am +++ b/Makefile.am @@ -69,6 +69,9 @@ SUBDIRS += fish # virt-tools in C. SUBDIRS += align cat df edit format inspector rescue +# bash-completion +SUBDIRS += bash + # Language bindings. if HAVE_PERL SUBDIRS += perl perl/examples diff --git a/README b/README index 5284d58..59abc70 100644 --- a/README +++ b/README @@ -207,6 +207,8 @@ The full requirements are described below. | XML::XPath::XMLParser | O | Perl module used by some virt-* tools. | +--------------+-------------+---+-----------------------------------------+ | perl-libintl | | O | Perl module for localization. | ++--------------+-------------+---+-----------------------------------------+ +| bash-completion | O | For tab-completion of commands in bash. | +==============+=============+===+=========================================+ R = Required O = Optional diff --git a/bash/Makefile.am b/bash/Makefile.am new file mode 100644 index 0000000..65f38cb --- /dev/null +++ b/bash/Makefile.am @@ -0,0 +1,68 @@ +# libguestfs +# Copyright (C) 2013 Red Hat Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program 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 General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +include $(top_srcdir)/subdir-rules.mk + +scripts = \ + guestfish \ + guestmount \ + virt-alignment-scan \ + virt-cat \ + virt-df \ + virt-edit \ + virt-filesystems \ + virt-format \ + virt-inspector \ + virt-ls \ + virt-rescue \ + virt-resize \ + virt-sparsify \ + virt-sysprep + +EXTRA_DIST = \ + README \ + $(scripts) + +# Some of the scripts are simply symbolic links. +virt-cat: + ln -sf virt-alignment-scan $@ +virt-df: + ln -sf virt-alignment-scan $@ +virt-edit: + ln -sf virt-alignment-scan $@ +virt-filesystems: + ln -sf virt-alignment-scan $@ +virt-format: + ln -sf virt-alignment-scan $@ +virt-inspector: + ln -sf virt-alignment-scan $@ +virt-ls: + ln -sf virt-alignment-scan $@ +virt-sysprep: + ln -sf virt-alignment-scan $@ + +virt-sparsify: + ln -sf virt-resize $@ + +if HAVE_BASH_COMPLETION + +# Bash completion script. + +bashcompletiondir = $(BASH_COMPLETIONS_DIR) +bashcompletion_DATA = $(scripts) + +endif diff --git a/bash/README b/bash/README new file mode 100644 index 0000000..db7d7bb --- /dev/null +++ b/bash/README @@ -0,0 +1,3 @@ +This directory contains the scripts for tab-completing commands in +bash. Note these new-style demand-loaded scripts require +'bash-completion' >= 1.99. diff --git a/bash/guestfish b/bash/guestfish new file mode 100644 index 0000000..d342578 --- /dev/null +++ b/bash/guestfish @@ -0,0 +1,72 @@ +# guestfish bash completion script -*- shell-script -*- +# Copyright (C) 2010-2013 Red Hat Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program 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 General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +# List all local libvirt domains. +_guestfs_virsh_list () +{ + local flag_ro=$1 flags + + if [ "$flag_ro" -eq 1 ]; then + flags="--all" + else + flags="--inactive" + fi + virsh list $flags | head -n -1 | tail -n +3 | awk '{print $2}' +} + +_guestfish () +{ + local cur prev words cword split + local longopts flag_ro=0 c=1 word cmds doms + + _init_completion -s || return + + longopts="$(guestfish --long-options)" + + # See if user has specified certain options anywhere on the + # command line before the current word. + while [ $c -lt $COMP_CWORD ]; do + word="${COMP_WORDS[c]}" + case "$word" in + -r|--ro) flag_ro=1 ;; + esac + c=$((++c)) + done + + case "$prev" in + -a|--add) + COMPREPLY=( $(compgen "$cur") ) + return ;; + -d|--domain) + doms=$(_guestfs_virsh_list "$flag_ro") + COMPREPLY=( $(compgen -W "$doms" -- "$cur") ) + return ;; + esac + + case "$cur" in + --*) + # --options + COMPREPLY=( $(compgen -W "$longopts" -- "$cur") ) + return ;; + *) + # Might be a guestfish command. + cmds=$(guestfish -h| head -n -1 | tail -n +2 | awk '{print $1}') + COMPREPLY=( $(compgen -W "$cmds" -- "$cur") ) + return ;; + esac +} && +complete -o default -F _guestfish guestfish diff --git a/bash/guestmount b/bash/guestmount new file mode 100644 index 0000000..fa36c60 --- /dev/null +++ b/bash/guestmount @@ -0,0 +1,67 @@ +# guestmount bash completion script -*- shell-script -*- +# Copyright (C) 2010-2013 Red Hat Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program 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 General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +# List all local libvirt domains. +_guestfs_virsh_list () +{ + local flag_ro=$1 flags + + if [ "$flag_ro" -eq 1 ]; then + flags="--all" + else + flags="--inactive" + fi + virsh list $flags | head -n -1 | tail -n +3 | awk '{print $2}' +} + +_guestmount () +{ + local cur prev words cword split + local longopts flag_ro=0 c=1 word doms + + _init_completion -s || return + + longopts="$(guestmount --long-options)" + + # See if user has specified certain options anywhere on the + # command line before the current word. + while [ $c -lt $COMP_CWORD ]; do + word="${COMP_WORDS[c]}" + case "$word" in + -r|--ro) flag_ro=1 ;; + esac + c=$((++c)) + done + + case "$prev" in + -d|--domain) + doms=$(_guestfs_virsh_list "$flag_ro") + COMPREPLY=( $(compgen -W "$doms" -- "$cur") ) + return ;; + esac + + case "$cur" in + --*) + # --options + COMPREPLY=( $(compgen -W "$longopts" -- "$cur") ) + return ;; + *) + COMPREPLY=( $(compgen "$cur") ) + return ;; + esac +} && +complete -o default -F _guestmount guestmount diff --git a/bash/virt-alignment-scan b/bash/virt-alignment-scan new file mode 100644 index 0000000..e9e65bd --- /dev/null +++ b/bash/virt-alignment-scan @@ -0,0 +1,108 @@ +# virt-tools bash completion script -*- shell-script -*- +# Copyright (C) 2010-2013 Red Hat Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program 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 General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +# List all local libvirt domains. +_guestfs_virsh_list () +{ + local flag_ro=$1 flags + + if [ "$flag_ro" -eq 1 ]; then + flags="--all" + else + flags="--inactive" + fi + virsh list $flags | head -n -1 | tail -n +3 | awk '{print $2}' +} + +_guestfs_virttools () +{ + local cur prev words cword split + local longopts="$1" flag_ro="$2" doms + + _init_completion -s || return + + case "$prev" in + -d|--domain) + doms=$(_guestfs_virsh_list "$flag_ro") + COMPREPLY=( $(compgen -W "$doms" -- "$cur") ) + return ;; + esac + + case "$cur" in + --*) + # --options + COMPREPLY=( $(compgen -W "$longopts" -- "$cur") ) + return ;; + *) + COMPREPLY=( $(compgen "$cur") ) + return ;; + esac +} + +_virt_alignment_scan () +{ + _guestfs_virttools "$(virt-alignment-scan --long-options)" 1 +} && +complete -o default -F _virt_alignment_scan virt-alignment-scan + +_virt_cat () +{ + _guestfs_virttools "$(virt-cat --long-options)" 1 +} && +complete -o default -F _virt_cat virt-cat + +_virt_df () +{ + _guestfs_virttools "$(virt-df --long-options)" 1 +} && +complete -o default -F _virt_df virt-df + +_virt_edit () +{ + _guestfs_virttools "$(virt-edit --long-options)" 0 +} && +complete -o default -F _virt_edit virt-edit + +_virt_filesystems () +{ + _guestfs_virttools "$(virt-filesystems --long-options)" 1 +} && +complete -o default -F _virt_filesystems virt-filesystems + +_virt_format () +{ + _guestfs_virttools "$(virt-format --long-options)" 0 +} && +complete -o default -F _virt_format virt-format + +_virt_inspector () +{ + _guestfs_virttools "$(virt-inspector --long-options)" 1 +} && +complete -o default -F _virt_inspector virt-inspector + +_virt_ls () +{ + _guestfs_virttools "$(virt-ls --long-options)" 1 +} && +complete -o default -F _virt_ls virt-ls + +_virt_sysprep () +{ + _guestfs_virttools "$(virt-sysprep --long-options)" 0 +} && +complete -o default -F _virt_sysprep virt-sysprep diff --git a/bash/virt-rescue b/bash/virt-rescue new file mode 100644 index 0000000..5e5cfd0 --- /dev/null +++ b/bash/virt-rescue @@ -0,0 +1,67 @@ +# virt-rescue bash completion script -*- shell-script -*- +# Copyright (C) 2010-2013 Red Hat Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program 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 General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +# List all local libvirt domains. +_guestfs_virsh_list () +{ + local flag_ro=$1 flags + + if [ "$flag_ro" -eq 1 ]; then + flags="--all" + else + flags="--inactive" + fi + virsh list $flags | head -n -1 | tail -n +3 | awk '{print $2}' +} + +_virt_rescue () +{ + local cur prev words cword split + local longopts flag_ro=0 c=1 word doms + + _init_completion -s || return + + longopts="$(virt-rescue --long-options)" + + # See if user has specified certain options anywhere on the + # command line before the current word. + while [ $c -lt $COMP_CWORD ]; do + word="${COMP_WORDS[c]}" + case "$word" in + -r|--ro) flag_ro=1 ;; + esac + c=$((++c)) + done + + case "$prev" in + -d|--domain) + doms=$(_guestfs_virsh_list "$flag_ro") + COMPREPLY=( $(compgen -W "$doms" -- "$cur") ) + return ;; + esac + + case "$cur" in + --*) + # --options + COMPREPLY=( $(compgen -W "$longopts" -- "$cur") ) + return ;; + *) + COMPREPLY=( $(compgen "$cur") ) + return ;; + esac +} && +complete -o default -F _virt_rescue virt-rescue diff --git a/bash/virt-resize b/bash/virt-resize new file mode 100644 index 0000000..d9770dc --- /dev/null +++ b/bash/virt-resize @@ -0,0 +1,46 @@ +# virt-resize, virt-sparsify bash completion script -*- shell-script -*- +# Copyright (C) 2010-2013 Red Hat Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program 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 General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +_guestfs_options_only () +{ + local cur prev words cword split + local longopts="$1" + + _init_completion -s || return + + case "$cur" in + --*) + # --options + COMPREPLY=( $(compgen -W "$longopts" -- "$cur") ) + return ;; + *) + COMPREPLY=( $(compgen "$cur") ) + return ;; + esac +} + +_virt_resize () +{ + _guestfs_options_only "$(virt-resize --long-options)" +} && +complete -o default -F _virt_resize virt-resize + +_virt_sparsify () +{ + _guestfs_options_only "$(virt-sparsify --long-options)" +} && +complete -o default -F _virt_sparsify virt-sparsify diff --git a/configure.ac b/configure.ac index 0c72621..61a9ebb 100644 --- a/configure.ac +++ b/configure.ac @@ -1483,6 +1483,19 @@ m4_ifdef([GTK_DOC_CHECK], [ AM_CONDITIONAL([ENABLE_GTK_DOC], false) ]) +dnl Bash completion. +PKG_CHECK_MODULES([BASH_COMPLETION], [bash-completion >= 2.0], [ + bash_completion=yes + AC_MSG_CHECKING([for bash-completions directory]) + BASH_COMPLETIONS_DIR="`pkg-config --variable=completionsdir bash-completion`" + AC_MSG_RESULT([$BASH_COMPLETIONS_DIR]) + AC_SUBST([BASH_COMPLETIONS_DIR]) +],[ + bash_completion=no + AC_MSG_WARN([bash-completion not installed]) +]) +AM_CONDITIONAL([HAVE_BASH_COMPLETION],[test "x$bash_completion" = "xyes"]) + dnl Library versioning. MAX_PROC_NR=`cat $srcdir/src/MAX_PROC_NR` AC_SUBST(MAX_PROC_NR) @@ -1508,6 +1521,7 @@ AC_CONFIG_FILES([run], AC_CONFIG_FILES([Makefile align/Makefile appliance/Makefile + bash/Makefile cat/Makefile csharp/Makefile daemon/Makefile @@ -1626,6 +1640,8 @@ AS_ECHO_N(["gobject bindings .................... "]) if test "x$HAVE_GOBJECT_TRUE" = "x"; then echo "yes"; else echo "no"; fi AS_ECHO_N(["gobject introspection ............... "]) if test "x$HAVE_INTROSPECTION_TRUE" = "x"; then echo "yes"; else echo "no"; fi +AS_ECHO_N(["bash completion ..................... "]) +if test "x$HAVE_BASH_COMPLETION_TRUE" = "x"; then echo "yes"; else echo "no"; fi echo echo "If any optional component is configured 'no' when you expected 'yes'" echo "then you should check the preceding messages." diff --git a/fish/Makefile.am b/fish/Makefile.am index 5aa6528..d1b4701 100644 --- a/fish/Makefile.am +++ b/fish/Makefile.am @@ -47,7 +47,6 @@ EXTRA_DIST = \ $(BUILT_SOURCES) \ rc_protocol.x \ guestfish.pod \ - libguestfs-bash-completion.sh \ libguestfs-tools.conf \ virt-copy-in \ virt-copy-out \ @@ -243,11 +242,6 @@ stamp-virt-tar-out.pod: virt-tar-out.pod toolsconfdir = $(sysconfdir) toolsconf_DATA = libguestfs-tools.conf -# Bash completion script. - -bashcompletiondir = $(sysconfdir)/bash_completion.d -bashcompletion_DATA = libguestfs-bash-completion.sh - # Tests. TESTS_ENVIRONMENT = $(top_builddir)/run --test diff --git a/fish/libguestfs-bash-completion.sh b/fish/libguestfs-bash-completion.sh deleted file mode 100644 index 452fdc2..0000000 --- a/fish/libguestfs-bash-completion.sh +++ /dev/null @@ -1,326 +0,0 @@ -# guestfish, guestmount and libguestfs tools bash completion script -# Copyright (C) 2010-2013 Red Hat Inc. -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program 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 General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - -# To use this script, copy it into /etc/bash_completion.d/ if -# that directory exists. -# -# If your distro does not have that directory (or if you cannot or -# do not want to install this in /etc) then you can copy this to -# somewhere in your home directory such as -# ~/.libguestfs-bash-completion.sh and add this to your .bashrc: -# source ~/.libguestfs-bash-completion.sh - -# This was "inspired" by the git bash completion script written by -# Shawn O. Pearce. - -_guestfs_complete () -{ - local fn="$1" cmd="$2" - complete -o bashdefault -o default -F "$fn" "$cmd" 2>/dev/null \ - || complete -o default -F "$fn" "$cmd" -} - -# List all local libvirt domains. -_guestfs_virsh_list () -{ - local flag_ro=$1 flags - - if [ "$flag_ro" -eq 1 ]; then - flags="--all" - else - flags="--inactive" - fi - virsh list $flags | head -n -1 | tail -n +3 | awk '{print $2}' -} - -# guestfish -_guestfs_guestfish () -{ - local longopts flag_a=0 flag_d=0 flag_ro=0 c=1 word cmds doms - - longopts="$(guestfish --long-options)" - - # See if user has specified certain options anywhere on the - # command line before the current word. - while [ $c -lt $COMP_CWORD ]; do - word="${COMP_WORDS[c]}" - case "$word" in - -r|--ro) flag_ro=1 ;; - esac - c=$((++c)) - done - - # Check for flags preceeding the current position. - c=$(($COMP_CWORD-1)) - if [ "$c" -gt 0 ]; then - word="${COMP_WORDS[$c]}" - case "$word" in - -a|--add) flag_a=1 ;; - -d|--domain) flag_d=1 ;; - esac - fi - - # Now try to complete the current word. - word="${COMP_WORDS[COMP_CWORD]}" - case "$word" in - --*) - # --options - COMPREPLY=(${COMPREPLY[@]:-} $(compgen -W "$longopts" -- "$word")) ;; - *) - if [ "$flag_d" -eq 1 ]; then - # -d - doms=$(_guestfs_virsh_list "$flag_ro") - COMPREPLY=(${COMPREPLY[@]:-} $(compgen -W "$doms" -- "$word")) - elif [ "$flag_a" -eq 1 ]; then - # -a - COMPREPLY=(${COMPREPLY[@]:-} $(compgen "$word")) - else - # A guestfish command. - cmds=$(guestfish -h| head -n -1 | tail -n +2 | awk '{print $1}') - COMPREPLY=(${COMPREPLY[@]:-} $(compgen -W "$cmds" -- "$word")) - fi ;; - esac -} - -_guestfs_complete _guestfs_guestfish guestfish - -# guestmount -_guestfs_guestmount () -{ - local longopts flag_d=0 flag_ro=0 c=1 word doms - - longopts="$(guestmount --long-options)" - - # See if user has specified certain options anywhere on the - # command line before the current word. - while [ $c -lt $COMP_CWORD ]; do - word="${COMP_WORDS[c]}" - case "$word" in - -r|--ro) flag_ro=1 ;; - esac - c=$((++c)) - done - - # Check for flags preceeding the current position. - c=$(($COMP_CWORD-1)) - if [ "$c" -gt 0 ]; then - word="${COMP_WORDS[$c]}" - case "$word" in - -d|--domain) flag_d=1 ;; - esac - fi - - # Now try to complete the current word. - word="${COMP_WORDS[COMP_CWORD]}" - case "$word" in - --*) - # --options - COMPREPLY=(${COMPREPLY[@]:-} $(compgen -W "$longopts" -- "$word")) ;; - *) - if [ "$flag_d" -eq 1 ]; then - # -d - doms=$(_guestfs_virsh_list "$flag_ro") - COMPREPLY=(${COMPREPLY[@]:-} $(compgen -W "$doms" -- "$word")) - else - COMPREPLY=(${COMPREPLY[@]:-} $(compgen "$word")) - fi ;; - esac -} - -_guestfs_complete _guestfs_guestmount guestmount - -# virt-rescue (similar to guestmount) -_guestfs_virt_rescue () -{ - local longopts flag_d=0 flag_ro=0 c=1 word doms - - longopts="$(virt-rescue --long-options)" - - # See if user has specified certain options anywhere on the - # command line before the current word. - while [ $c -lt $COMP_CWORD ]; do - word="${COMP_WORDS[c]}" - case "$word" in - -r|--ro) flag_ro=1 ;; - esac - c=$((++c)) - done - - # Check for flags preceeding the current position. - c=$(($COMP_CWORD-1)) - if [ "$c" -gt 0 ]; then - word="${COMP_WORDS[$c]}" - case "$word" in - -d|--domain) flag_d=1 ;; - esac - fi - - # Now try to complete the current word. - word="${COMP_WORDS[COMP_CWORD]}" - case "$word" in - --*) - # --options - COMPREPLY=(${COMPREPLY[@]:-} $(compgen -W "$longopts" -- "$word")) ;; - *) - if [ "$flag_d" -eq 1 ]; then - # -d - doms=$(_guestfs_virsh_list "$flag_ro") - COMPREPLY=(${COMPREPLY[@]:-} $(compgen -W "$doms" -- "$word")) - else - COMPREPLY=(${COMPREPLY[@]:-} $(compgen "$word")) - fi ;; - esac -} - -_guestfs_complete _guestfs_virt_rescue virt-rescue - -# Tools like virt-cat, virt-edit etc which have an implicit --ro or --rw. -_guestfs_virttools () -{ - local longopts="$1" flag_ro="$2" flag_d=0 c word doms - - # Check for flags preceeding the current position. - c=$(($COMP_CWORD-1)) - if [ "$c" -gt 0 ]; then - word="${COMP_WORDS[$c]}" - case "$word" in - -d|--domain) flag_d=1 ;; - esac - fi - - # Now try to complete the current word. - word="${COMP_WORDS[COMP_CWORD]}" - case "$word" in - --*) - # --options - COMPREPLY=(${COMPREPLY[@]:-} $(compgen -W "$longopts" -- "$word")) ;; - *) - if [ "$flag_d" -eq 1 ]; then - # -d - doms=$(_guestfs_virsh_list "$flag_ro") - COMPREPLY=(${COMPREPLY[@]:-} $(compgen -W "$doms" -- "$word")) - else - COMPREPLY=(${COMPREPLY[@]:-} $(compgen "$word")) - fi ;; - esac -} - -_guestfs_virt_alignment_scan () -{ - _guestfs_virttools "$(virt-alignment-scan --long-options)" 1 -} - -_guestfs_complete _guestfs_virt_alignment_scan virt-alignment-scan - -_guestfs_virt_cat () -{ - _guestfs_virttools "$(virt-cat --long-options)" 1 -} - -_guestfs_complete _guestfs_virt_cat virt-cat - -_guestfs_virt_df () -{ - _guestfs_virttools "$(virt-df --long-options)" 1 -} - -_guestfs_complete _guestfs_virt_df virt-df - -_guestfs_virt_edit () -{ - _guestfs_virttools "$(virt-edit --long-options)" 0 -} - -_guestfs_complete _guestfs_virt_edit virt-edit - -_guestfs_virt_filesystems () -{ - _guestfs_virttools "$(virt-filesystems --long-options)" 1 -} - -_guestfs_complete _guestfs_virt_filesystems virt-filesystems - -_guestfs_virt_format () -{ - _guestfs_virttools "$(virt-format --long-options)" 0 -} - -_guestfs_complete _guestfs_virt_format virt-format - -_guestfs_virt_inspector () -{ - _guestfs_virttools "$(virt-inspector --long-options)" 1 -} - -_guestfs_complete _guestfs_virt_inspector virt-inspector - -_guestfs_virt_ls () -{ - _guestfs_virttools "$(virt-ls --long-options)" 1 -} - -_guestfs_complete _guestfs_virt_ls virt-ls - -_guestfs_virt_sysprep () -{ - _guestfs_virttools "$(virt-sysprep --long-options)" 0 -} - -_guestfs_complete _guestfs_virt_sysprep virt-sysprep - -# Where we can only complete --options. -_guestfs_options_only () -{ - local longopts="$1" word - - # Try to complete the current word. - word="${COMP_WORDS[COMP_CWORD]}" - case "$word" in - --*) - # --options - COMPREPLY=(${COMPREPLY[@]:-} $(compgen -W "$longopts" -- "$word")) ;; - *) - COMPREPLY=(${COMPREPLY[@]:-} $(compgen "$word")) - esac -} - -_guestfs_virt_resize () -{ - _guestfs_options_only "$(virt-resize --long-options)" -} - -_guestfs_complete _guestfs_virt_resize virt-resize - -_guestfs_virt_sparsify () -{ - _guestfs_options_only "$(virt-sparsify --long-options)" -} - -_guestfs_complete _guestfs_virt_sparsify virt-sparsify - -# Not done: -# - virt-copy-in -# - virt-copy-out -# - virt-list-filesystems -# - virt-list-partitions -# - virt-make-fs -# - virt-tar -# - virt-tar-in -# - virt-tar-out -# - virt-win-reg - -# EOF diff --git a/src/guestfs.pod b/src/guestfs.pod index 53cabde..263fccd 100644 --- a/src/guestfs.pod +++ b/src/guestfs.pod @@ -3894,6 +3894,10 @@ L command and documentation. The libguestfs appliance, build scripts and so on. +=item C + +Bash tab-completion scripts. + =item C Various build scripts used by autotools. -- 1.8.1.4