| .. _tut-interacting: | 
 |  | 
 | ************************************************** | 
 | Interactive Input Editing and History Substitution | 
 | ************************************************** | 
 |  | 
 | Some versions of the Python interpreter support editing of the current input | 
 | line and history substitution, similar to facilities found in the Korn shell and | 
 | the GNU Bash shell.  This is implemented using the `GNU Readline`_ library, | 
 | which supports various styles of editing.  This library has its own | 
 | documentation which we won't duplicate here. | 
 |  | 
 |  | 
 | .. _tut-keybindings: | 
 |  | 
 | Tab Completion and History Editing | 
 | ================================== | 
 |  | 
 | Completion of variable and module names is | 
 | :ref:`automatically enabled <rlcompleter-config>` at interpreter startup so | 
 | that the :kbd:`Tab` key invokes the completion function; it looks at | 
 | Python statement names, the current local variables, and the available | 
 | module names.  For dotted expressions such as ``string.a``, it will evaluate | 
 | the expression up to the final ``'.'`` and then suggest completions from | 
 | the attributes of the resulting object.  Note that this may execute | 
 | application-defined code if an object with a :meth:`__getattr__` method | 
 | is part of the expression.  The default configuration also saves your | 
 | history into a file named :file:`.python_history` in your user directory. | 
 | The history will be available again during the next interactive interpreter | 
 | session. | 
 |  | 
 |  | 
 | .. _tut-commentary: | 
 |  | 
 | Alternatives to the Interactive Interpreter | 
 | =========================================== | 
 |  | 
 | This facility is an enormous step forward compared to earlier versions of the | 
 | interpreter; however, some wishes are left: It would be nice if the proper | 
 | indentation were suggested on continuation lines (the parser knows if an indent | 
 | token is required next).  The completion mechanism might use the interpreter's | 
 | symbol table.  A command to check (or even suggest) matching parentheses, | 
 | quotes, etc., would also be useful. | 
 |  | 
 | One alternative enhanced interactive interpreter that has been around for quite | 
 | some time is IPython_, which features tab completion, object exploration and | 
 | advanced history management.  It can also be thoroughly customized and embedded | 
 | into other applications.  Another similar enhanced interactive environment is | 
 | bpython_. | 
 |  | 
 |  | 
 | .. _GNU Readline: https://tiswww.case.edu/php/chet/readline/rltop.html | 
 | .. _IPython: https://ipython.org/ | 
 | .. _bpython: http://www.bpython-interpreter.org/ |