\section{\module{rlcompleter} ---
         Completion function for GNU readline}

\declaremodule{standard}{rlcompleter}
  \platform{Unix}
\sectionauthor{Moshe Zadka}{moshez@zadka.site.co.il}
\modulesynopsis{Python identifier completion for the GNU readline library.}

The \module{rlcompleter} module defines a completion function for
the \refmodule{readline} module by completing valid Python identifiers
and keywords.

This module is \UNIX-specific due to its dependence on the
\refmodule{readline} module.

The \module{rlcompleter} module defines the \class{Completer} class.

Example:

\begin{verbatim}
>>> import rlcompleter
>>> import readline
>>> readline.parse_and_bind("tab: complete")
>>> readline. <TAB PRESSED>
readline.__doc__          readline.get_line_buffer  readline.read_init_file
readline.__file__         readline.insert_text      readline.set_completer
readline.__name__         readline.parse_and_bind
>>> readline.
\end{verbatim}

The \module{rlcompleter} module is designed for use with Python's
interactive mode.  A user can add the following lines to his or her
initialization file (identified by the \envvar{PYTHONSTARTUP}
environment variable) to get automatic \kbd{Tab} completion:

\begin{verbatim}
try:
    import readline
except ImportError:
    print "Module readline not available."
else:
    import rlcompleter
    readline.parse_and_bind("tab: complete")
\end{verbatim}


\subsection{Completer Objects \label{completer-objects}}

Completer objects have the following method:

\begin{methoddesc}[Completer]{complete}{text, state}
Return the \var{state}th completion for \var{text}.

If called for \var{text} that doesn't include a period character
(\character{.}), it will complete from names currently defined in
\refmodule[main]{__main__}, \refmodule[builtin]{__builtin__} and
keywords (as defined by the \refmodule{keyword} module).

If called for a dotted name, it will try to evaluate anything without
obvious side-effects (functions will not be evaluated, but it
can generate calls to \method{__getattr__()}) upto the last part, and
find matches for the rest via the \function{dir()} function.
\end{methoddesc}
