[lxc-devel] [PATCH] Add bash auto completion

Serge Hallyn serge.hallyn at ubuntu.com
Wed Jan 22 17:19:09 UTC 2014


Quoting Stéphane Graber (stgraber at ubuntu.com):
> This adds a basic bash auto-completion profile.
> 
> It supports 3 things at this time:
>  - Auto-complete of container name (-n or -o)
>  - Auto-complete of template name (-t)
>  - Auto-complete of state names (-s)
> 
> It's configured in a way to be as little disruptive as possible, any
> argument that's not explicitly handled by the profile will fallack to
> bash's default completion.
> 
> Signed-off-by: Stéphane Graber <stgraber at ubuntu.com>

Acked-by: Serge E. Hallyn <serge.hallyn at ubuntu.com>

> ---
>  config/Makefile.am      |   2 +-
>  config/bash/Makefile.am |  14 +++++++
>  config/bash/lxc.in      | 105 ++++++++++++++++++++++++++++++++++++++++++++++++
>  configure.ac            |   9 +++++
>  4 files changed, 129 insertions(+), 1 deletion(-)
>  create mode 100644 config/bash/Makefile.am
>  create mode 100644 config/bash/lxc.in
> 
> diff --git a/config/Makefile.am b/config/Makefile.am
> index f9ce6fb..9515965 100644
> --- a/config/Makefile.am
> +++ b/config/Makefile.am
> @@ -1 +1 @@
> -SUBDIRS = apparmor etc init templates
> +SUBDIRS = apparmor bash etc init templates
> diff --git a/config/bash/Makefile.am b/config/bash/Makefile.am
> new file mode 100644
> index 0000000..b1768c9
> --- /dev/null
> +++ b/config/bash/Makefile.am
> @@ -0,0 +1,14 @@
> +EXTRA_DIST = lxc
> +
> +if ENABLE_BASH
> +install-bash:
> +	$(MKDIR_P) $(DESTDIR)$(sysconfdir)/bash_completion.d/
> +	$(INSTALL_DATA) lxc $(DESTDIR)$(sysconfdir)/bash_completion.d/
> +
> +uninstall-bash:
> +	rm -f $(DESTDIR)$(sysconfdir)/bash_completion.d/lxc
> +	rmdir $(DESTDIR)$(sysconfdir)/bash_completion.d/ || :
> +
> +install-data-local: install-bash
> +uninstall-local: uninstall-bash
> +endif
> diff --git a/config/bash/lxc.in b/config/bash/lxc.in
> new file mode 100644
> index 0000000..c1c9041
> --- /dev/null
> +++ b/config/bash/lxc.in
> @@ -0,0 +1,105 @@
> +#!bash
> +
> +have lxc-start && {
> +    _lxc_names() {
> +        COMPREPLY=( $( compgen -W "$( lxc-ls )" "$cur" ) )
> +    }
> +
> +    _lxc_states() {
> +        COMPREPLY=( $( compgen -W "STOPPED STARTING RUNNING STOPPING ABORTING FREEZING FROZEN THAWED" "$cur" ) )
> +    }
> +
> +    _lxc_templates() {
> +        COMPREPLY=( $( compgen -W "$(ls @LXCTEMPLATEDIR@/ | sed -e 's|^lxc-||' )" "$cur" ) )
> +    }
> +
> +    _lxc-generic-n() {
> +        local cur prev
> +
> +        COMPREPLY=()
> +        _get_comp_words_by_ref cur prev
> +
> +        case $prev in
> +            -n)
> +                _lxc_names "$cur"
> +                return 0
> +            ;;
> +        esac
> +
> +        return 1
> +    }
> +
> +    _lxc-generic-ns() {
> +        local cur prev
> +
> +        COMPREPLY=()
> +        _get_comp_words_by_ref cur prev
> +
> +        case $prev in
> +            -n)
> +                _lxc_names "$cur"
> +                return 0
> +            ;;
> +
> +            -s)
> +                _lxc_states "$cur"
> +                return 0
> +            ;;
> +        esac
> +
> +        return 1
> +    }
> +
> +    _lxc-generic-t() {
> +        local cur prev
> +
> +        COMPREPLY=()
> +        _get_comp_words_by_ref cur prev
> +
> +        case $prev in
> +            -t)
> +                _lxc_templates "$cur"
> +                return 0
> +            ;;
> +        esac
> +
> +        return 1
> +    }
> +
> +    _lxc-generic-o() {
> +        local cur prev
> +
> +        COMPREPLY=()
> +        _get_comp_words_by_ref cur prev
> +
> +        case $prev in
> +            -o)
> +                _lxc_names "$cur"
> +                return 0
> +            ;;
> +        esac
> +
> +        return 1
> +    }
> +
> +    complete -o default -F _lxc-generic-n lxc-attach
> +    complete -o default -F _lxc-generic-n lxc-cgroup
> +    complete -o default -F _lxc-generic-n lxc-console
> +    complete -o default -F _lxc-generic-n lxc-destroy
> +    complete -o default -F _lxc-generic-n lxc-device
> +    complete -o default -F _lxc-generic-n lxc-execute
> +    complete -o default -F _lxc-generic-n lxc-freeze
> +    complete -o default -F _lxc-generic-n lxc-info
> +    complete -o default -F _lxc-generic-n lxc-monitor
> +    complete -o default -F _lxc-generic-n lxc-snapshot
> +    complete -o default -F _lxc-generic-n lxc-start
> +    complete -o default -F _lxc-generic-n lxc-stop
> +    complete -o default -F _lxc-generic-n lxc-unfreeze
> +
> +    complete -o default -F _lxc-generic-ns lxc-wait
> +
> +    complete -o default -F _lxc-generic-t lxc-create
> +
> +    complete -o default -F _lxc-generic-o lxc-clone
> +    complete -o default -F _lxc-generic-o lxc-start-ephemeral
> +}
> diff --git a/configure.ac b/configure.ac
> index 4179dcf..aad5760 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -385,6 +385,12 @@ AM_COND_IF([ENABLE_LUA],
>  		[LUA_INSTALL_LMOD=$datadir/lua/$LUA_VERSION])
>  	])
>  
> +# Optional bash integration
> +AC_ARG_ENABLE([bash],
> +	[AC_HELP_STRING([--enable-bash], [build bash integration [default=yes]])],
> +	[], [enable_bash=yes])
> +AM_CONDITIONAL([ENABLE_BASH], [test "x$enable_bash" = "xyes"])
> +
>  # Optional test binaries
>  AC_ARG_ENABLE([tests],
>  	[AC_HELP_STRING([--enable-tests], [build test/example binaries [default=no]])],
> @@ -548,6 +554,8 @@ AC_CONFIG_FILES([
>  
>  	config/Makefile
>  	config/apparmor/Makefile
> +	config/bash/Makefile
> +	config/bash/lxc
>  	config/init/Makefile
>  	config/init/sysvinit/Makefile
>  	config/init/systemd/Makefile
> @@ -701,6 +709,7 @@ Environment:
>   - init script type(s): $init_script
>   - rpath: $enable_rpath
>   - GnuTLS: $enable_gnutls
> + - Bash integration: $enable_bash
>  
>  Security features:
>   - Apparmor: $enable_apparmor
> -- 
> 1.8.5.3
> 
> _______________________________________________
> lxc-devel mailing list
> lxc-devel at lists.linuxcontainers.org
> http://lists.linuxcontainers.org/listinfo/lxc-devel


More information about the lxc-devel mailing list