16.9. rlcompleter — GNU readline向け補完関数

ソースコード: Lib/rlcompleter.py


rlcompleter モジュールではPythonの識別子やキーワードを定義した readline モジュール向けの補完関数を定義しています。

このモジュールが Unixプラットフォームでimportされ、 readline が利用できるときには、 Completer クラスのインスタンスが自動的に作成され、 complete() メソッドが readline 補完に設定されます。

例:

>>> 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.

rlcompleter モジュールは Pythonの対話モードで利用する為にデザインされています。ユーザは以下の命令を初期化ファイル (環境変数 PYTHONSTARTUP によって定義されます)に書き込むことで、 Tab キーによる補完を利用できます:

try:
    import readline
except ImportError:
    print "Module readline not available."
else:
    import rlcompleter
    readline.parse_and_bind("tab: complete")

readline のないプラットフォームでも、このモジュールで定義される Completer クラスは独自の目的に使えます。

16.9.1. Completerオブジェクト

Completerオブジェクトは以下のメソッドを持っています:

Completer.complete(text, state)

textstate 番目の補完候補を返します。

もし text がピリオド('.')を含まない場合、 __main____builtin__ で定義されている名前か、キーワード (keyword モジュールで定義されている) から補完されます。

ピリオドを含む名前の場合、副作用を出さずに名前を最後まで評価しようとします(関数を明示的に呼び出しはしませんが、 __getattr__() を呼んでしまうことはあります)そして、 dir() 関数でマッチする語を見つけます。式を評価中に発生した全ての例外は補足して無視され、 None を返します。