[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