Configuring the REPL's tab completion

Chris Angelico rosuav at gmail.com
Sun Mar 10 10:20:24 EDT 2019


I have absolutely no idea how to do this or even where to go looking,
so I'd appreciate a starting pointer :)

When you're in the Python REPL (just the basic core one, not IDLE or
anything), you can tab-complete global and built-in names, attributes
of known objects, etc. But quoted strings work kinda weirdly - they
try to tab-complete a global or keyword:

Python 3.8.0a0 (heads/master:8b9c33ea9c, Nov 20 2018, 02:18:50)
[GCC 6.3.0 20170516] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> "in
in      input(  int(
>>> "input("
'input('

I typed "in and hit tab twice, then typed p and hit tab, enter. It
filled in the function name *input*, added an open parenthesis... and
then closed the quote. Which doesn't make a lot of sense, but then,
tab completing globals and keywords inside a text string doesn't make
that much sense either.

What would be more useful would be tab-completing file names from the
current directory.

open("Foo<tab>

to fill in the name of a file. Sure, not every quoted string is a file
name (in fact, very few are), but I don't know of anything else that
would feel natural. (Also, Pike's REPL behaves this way, so presumably
it's of use to more people than me.)

Where would I start looking to try to make this happen? Doesn't
necessarily have to be pushed upstream as a core Python feature; I'm
guessing this can probably be done in sitecustomize.py. Anyone have
tutorials on messing with tab completion? There's not a lot of info in
the rlcompleter module docs.

ChrisA



More information about the Python-list mailing list