mirror of
https://github.com/python/cpython.git
synced 2024-12-24 01:05:10 +08:00
de4f05b741
site.USER_BASE and site.USER_SITE are now fully documented. PEP 370 is outdated with respects to the Mac framework situation, but the code in sysconfig and the example in the 3.2 What’s New document helped me find the right values to document for Mac OS X. The command-line interface of the site module, partly documented in the 3.2 What’s New, is fully described in the module docs. The purpose of the usercustomize module is explained in the site docs, with a gentle introduction in the tutorial (right after the section that talks about PYTHONSTARTUP; a comment mentions it should be moved from the tutorial to another file, but that will be another bug). Various markup and wording improvements were made along the way in the site module docs. Duplicate and incomplete declarations of environment variables have also been removed (the original bug report was actually about these entries :). The site module docs are still a bit messy; I’ll see about improving them for #11553. All these sections are copiously interlinked and findable from the doc indexes.
176 lines
6.6 KiB
ReStructuredText
176 lines
6.6 KiB
ReStructuredText
.. _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 Emacs-style and vi-style editing. This library has its own
|
|
documentation which I won't duplicate here; however, the basics are easily
|
|
explained. The interactive editing and history described here are optionally
|
|
available in the Unix and Cygwin versions of the interpreter.
|
|
|
|
This chapter does *not* document the editing facilities of Mark Hammond's
|
|
PythonWin package or the Tk-based environment, IDLE, distributed with Python.
|
|
The command line history recall which operates within DOS boxes on NT and some
|
|
other DOS and Windows flavors is yet another beast.
|
|
|
|
|
|
.. _tut-lineediting:
|
|
|
|
Line Editing
|
|
============
|
|
|
|
If supported, input line editing is active whenever the interpreter prints a
|
|
primary or secondary prompt. The current line can be edited using the
|
|
conventional Emacs control characters. The most important of these are:
|
|
:kbd:`C-A` (Control-A) moves the cursor to the beginning of the line, :kbd:`C-E`
|
|
to the end, :kbd:`C-B` moves it one position to the left, :kbd:`C-F` to the
|
|
right. Backspace erases the character to the left of the cursor, :kbd:`C-D` the
|
|
character to its right. :kbd:`C-K` kills (erases) the rest of the line to the
|
|
right of the cursor, :kbd:`C-Y` yanks back the last killed string.
|
|
:kbd:`C-underscore` undoes the last change you made; it can be repeated for
|
|
cumulative effect.
|
|
|
|
|
|
.. _tut-history:
|
|
|
|
History Substitution
|
|
====================
|
|
|
|
History substitution works as follows. All non-empty input lines issued are
|
|
saved in a history buffer, and when a new prompt is given you are positioned on
|
|
a new line at the bottom of this buffer. :kbd:`C-P` moves one line up (back) in
|
|
the history buffer, :kbd:`C-N` moves one down. Any line in the history buffer
|
|
can be edited; an asterisk appears in front of the prompt to mark a line as
|
|
modified. Pressing the :kbd:`Return` key passes the current line to the
|
|
interpreter. :kbd:`C-R` starts an incremental reverse search; :kbd:`C-S` starts
|
|
a forward search.
|
|
|
|
|
|
.. _tut-keybindings:
|
|
|
|
Key Bindings
|
|
============
|
|
|
|
The key bindings and some other parameters of the Readline library can be
|
|
customized by placing commands in an initialization file called
|
|
:file:`~/.inputrc`. Key bindings have the form ::
|
|
|
|
key-name: function-name
|
|
|
|
or ::
|
|
|
|
"string": function-name
|
|
|
|
and options can be set with ::
|
|
|
|
set option-name value
|
|
|
|
For example::
|
|
|
|
# I prefer vi-style editing:
|
|
set editing-mode vi
|
|
|
|
# Edit using a single line:
|
|
set horizontal-scroll-mode On
|
|
|
|
# Rebind some keys:
|
|
Meta-h: backward-kill-word
|
|
"\C-u": universal-argument
|
|
"\C-x\C-r": re-read-init-file
|
|
|
|
Note that the default binding for :kbd:`Tab` in Python is to insert a :kbd:`Tab`
|
|
character instead of Readline's default filename completion function. If you
|
|
insist, you can override this by putting ::
|
|
|
|
Tab: complete
|
|
|
|
in your :file:`~/.inputrc`. (Of course, this makes it harder to type indented
|
|
continuation lines if you're accustomed to using :kbd:`Tab` for that purpose.)
|
|
|
|
.. index::
|
|
module: rlcompleter
|
|
module: readline
|
|
|
|
Automatic completion of variable and module names is optionally available. To
|
|
enable it in the interpreter's interactive mode, add the following to your
|
|
startup file: [#]_ ::
|
|
|
|
import rlcompleter, readline
|
|
readline.parse_and_bind('tab: complete')
|
|
|
|
This binds the :kbd:`Tab` key to the completion function, so hitting the
|
|
:kbd:`Tab` key twice suggests completions; 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.
|
|
|
|
A more capable startup file might look like this example. Note that this
|
|
deletes the names it creates once they are no longer needed; this is done since
|
|
the startup file is executed in the same namespace as the interactive commands,
|
|
and removing the names avoids creating side effects in the interactive
|
|
environment. You may find it convenient to keep some of the imported modules,
|
|
such as :mod:`os`, which turn out to be needed in most sessions with the
|
|
interpreter. ::
|
|
|
|
# Add auto-completion and a stored history file of commands to your Python
|
|
# interactive interpreter. Requires Python 2.0+, readline. Autocomplete is
|
|
# bound to the Esc key by default (you can change it - see readline docs).
|
|
#
|
|
# Store the file in ~/.pystartup, and set an environment variable to point
|
|
# to it: "export PYTHONSTARTUP=~/.pystartup" in bash.
|
|
|
|
import atexit
|
|
import os
|
|
import readline
|
|
import rlcompleter
|
|
|
|
historyPath = os.path.expanduser("~/.pyhistory")
|
|
|
|
def save_history(historyPath=historyPath):
|
|
import readline
|
|
readline.write_history_file(historyPath)
|
|
|
|
if os.path.exists(historyPath):
|
|
readline.read_history_file(historyPath)
|
|
|
|
atexit.register(save_history)
|
|
del os, atexit, readline, rlcompleter, save_history, historyPath
|
|
|
|
|
|
.. _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_.
|
|
|
|
|
|
.. rubric:: Footnotes
|
|
|
|
.. [#] Python will execute the contents of a file identified by the
|
|
:envvar:`PYTHONSTARTUP` environment variable when you start an interactive
|
|
interpreter. To customize Python even for non-interactive mode, see
|
|
:ref:`tut-customize`.
|
|
|
|
|
|
.. _GNU Readline: http://tiswww.case.edu/php/chet/readline/rltop.html
|
|
.. _IPython: http://ipython.scipy.org/
|
|
.. _bpython: http://www.bpython-interpreter.org/
|