# `cement.ext.ext_argcomplete`

The Argcomplete Extension provides the necessary hooks to utilize the Argcomplete Library, and perform auto-completion of command line arguments/options/sub-parsers/etc.

## Requirements

> - Argcomplete (`pip install argcomplete`)
> - Argparse

This extension currently only works when using `cement.ext.ext_argparse.ArgparseArgumentHandler` (default) and `cement.ext.ext_argparse.ArgparseController` (new in Cement 2.8). It will not work with `cement.core.controller.CementBaseController`.

## Configuration

This extension does not honor any application configuration settings.

## Usage

myapp.py

    #!/usr/bin/env python

    from cement.core.foundation import CementApp
    from cement.ext.ext_argparse import ArgparseController, expose

    class BaseController(ArgparseController):
        class Meta:
            label = 'base'
            arguments = [
                (['-f', '--foo'], dict(help='base foo option', dest='foo'))
            ]

        @expose(hide=True)
        def default(self):
            print('Inside BaseController.default')

        @expose()
        def command1(self):
            print('Inside BaseController.command1')

    class MyApp(CementApp):
        class Meta:
            label = 'myapp'
            extensions = ['argcomplete']
            handlers = [BaseController]

    with MyApp() as app:
        app.run()

Note the `#!` line, which allows us to call our script directly (specifically for this example). The Argcomplete library requires the end-user to modify their environment in order to perform auto-completion. For this example, we are using a non-global option for demonstration purposes only. In the real world you will need to setup Argcomplete for your actual application entry-point name (i.e. `myapp` if installed as `/usr/bin/myapp`, etc).

    $ eval "$(register-python-argcomplete myapp.py)"

    $ ./myapp.py [tab][tab]

    --debug                              -h
    -o                                   --help
    --quiet                              command1
                                         default

See the Argcomplete Documentation on how to properly integrate it’s usage into your application deployment. This extension simply enables Argcomplete to do it’s thing on application startup.