[IPython-dev] Function specific hooks into the ipython tab completion system

Aaron Meurer asmeurer at gmail.com
Thu Nov 29 04:27:44 EST 2012


I've often thought this as well.  Probably a full-blown IPEP is in
order here.  Perhaps __annotations__ would be the correct way to go
here.

Aaron Meurer

On Thu, Nov 29, 2012 at 12:58 AM, Robert McGibbon <rmcgibbo at gmail.com> wrote:
> Hey,
>
> Tab completion in IPython is one of the things that makes it so useful,
> especially the context specific tab completion for things like "from ..."
> where only packages, or obviously the special completion for attributes when
> the line contains a dot.
>
> I use IPython for interactive data analysis a lot, and one of the most
> frequent operations is loading up data with something like numpy.loadtxt()
> or various related functions.
>
> It would be really awesome if we could annotate functions to interact with
> the tab completion system, perhaps for instance saying that argument 0 to
> numpy.loadtxt() is supposed to be a filename, so let's give tab-complete
> suggestions that try to look for directories/files. Some functions only
> files with specific extensions, so you could filter based on that or
> whatever.
>
> By hacking on the code for completerlib.py:cd_completer, I sketched out a
> little demo of what you could do with this: https://gist.github.com/4167151.
> The architecture is totally wrong, but it lets you get behavior like:
>
> ```
> In [1]: ls
> datfile.dat  dir1/        dir2/        file.gz      random_junk  test.py
>
> In [2]: directory_as_a_variable = 'sdfsfsd'
>
> In [3]: f = np.loadtxt(<TAB>
> datfile.dat  dir1/        dir2/        file.gz
>
> In [4]: normal_function(<TAB>
> Display all 330 possibilities? (y or n)
>
> In [5]: g = np.loadtxt(di<TAB>
> dict                      dir1/                     directory_as_a_variable
> divmod
> dir                       dir2/                     directory_of_my_choosing
> ```
>
> Basically hitting the tab completion, when np.loadtxt is on the input line,
> only shows directories and files that end with a certain extension. If you
> start to type in the name of an object in your namespace, it'll show up too,
> but only once you've typed in more than 1 matching character.
>
> The implementation in my gist is pretty lame. The way I've coded it up, the
> special behavior is based on simply finding the string "np.loadtxt" on the
> input line, not on the actual function. This means you can't really make the
> behavior specific to your position in the argument list (i.e. I know that
> the first arg is a filename, and so should be tab completed like this, but
> the other ones are not). I suspect the right way to do the implementation is
> via function decorators to specify the behavior and then adding to
> IPCompleter instead.
>
> I think I'm up for giving this a shot.
>
> Thoughts? Is this a feature anyone else would find interesting?
>
> -Robert
>
>
>
> _______________________________________________
> IPython-dev mailing list
> IPython-dev at scipy.org
> http://mail.scipy.org/mailman/listinfo/ipython-dev
>



More information about the IPython-dev mailing list