From 3d6ef88795c0d3aae8fb1c1da519a6c003cdaa81 Mon Sep 17 00:00:00 2001 From: Takafumi Arakaki Date: Sun, 12 May 2013 08:15:48 +0200 Subject: [PATCH] Add simple PYTHONSTARTUP file --- jedi/__main__.py | 2 ++ jedi/replstartup.py | 25 +++++++++++++++++++++++++ jedi/utils.py | 41 +++++++++++++++++++++++++++++++++++++++++ 3 files changed, 68 insertions(+) create mode 100644 jedi/__main__.py create mode 100644 jedi/replstartup.py create mode 100644 jedi/utils.py diff --git a/jedi/__main__.py b/jedi/__main__.py new file mode 100644 index 00000000..73cde226 --- /dev/null +++ b/jedi/__main__.py @@ -0,0 +1,2 @@ +from os import path +print(path.join(path.dirname(path.abspath(__file__)), 'replstartup.py')) diff --git a/jedi/replstartup.py b/jedi/replstartup.py new file mode 100644 index 00000000..40ee77da --- /dev/null +++ b/jedi/replstartup.py @@ -0,0 +1,25 @@ +""" +``PYTHONSTARTUP`` to use Jedi in your Python interpreter. + +To use Jedi completion in Python interpreter, add the following in your shell +setup (e.g., ``.bashrc``):: + + export PYTHONSTARTUP="$(python -m jedi)" + +Then you will be able to use Jedi completer in your Python interpreter:: + + $ python + Python 2.7.2+ (default, Jul 20 2012, 22:15:08) + [GCC 4.6.1] on linux2 + Type "help", "copyright", "credits" or "license" for more information. + >>> import os + >>> os.path.join().split().in # doctest: +SKIP + os.path.join().split().index os.path.join().split().insert + +""" + +import jedi.utils +jedi.utils.setup_readline() +del jedi +# Note: try not to do many things here, as it will contaminate global +# namespace of the interpreter. diff --git a/jedi/utils.py b/jedi/utils.py new file mode 100644 index 00000000..eb617fe7 --- /dev/null +++ b/jedi/utils.py @@ -0,0 +1,41 @@ +""" +Utilities for end-users. +""" + +import sys + +from jedi import Interpreter + + +def readline_complete(text, state): + """ + Function to be passed to :func:`readline.set_completer`. + + Usage:: + + import readline + readline.set_completer(readline_complete) + + """ + ns = vars(sys.modules['__main__']) + completions = Interpreter(text, [ns]).completions() + try: + return text + completions[state].complete + except IndexError: + return None + + +def setup_readline(): + """ + Install Jedi completer to :mod:`readline`. + """ + try: + import readline + except ImportError: + print("Module readline not available.") + else: + readline.set_completer(readline_complete) + readline.parse_and_bind("tab: complete") + + # Default delimiters minus "()": + readline.set_completer_delims(' \t\n`~!@#$%^&*-=+[{]}\\|;:\'",<>/?')