Variable: python-shell-completion-setup-code

python-shell-completion-setup-code is a customizable variable defined in python.el.gz.

Value

"\ndef __PYTHON_EL_get_completions(text):\n    completions = []\n    completer = None\n\n    import json\n    try:\n        import readline, re\n\n        try:\n            import __builtin__\n        except ImportError:\n            # Python 3\n            import builtins as __builtin__\n        builtins = dir(__builtin__)\n\n        is_ipython = ('__IPYTHON__' in builtins or\n                      '__IPYTHON__active' in builtins)\n\n        if is_ipython and 'get_ipython' in builtins:\n            def filter_c(prefix, c):\n                if re.match('_+(i?[0-9]+)?$', c):\n                    return False\n                elif c[0] == '%' and not re.match('[%a-zA-Z]+$', prefix):\n                    return False\n                return True\n\n            import IPython\n            try:\n                if IPython.version_info[0] >= 6:\n                    from IPython.core.completer import provisionalcompleter\n                    with provisionalcompleter():\n                        completions = [\n                            [c.text, c.start, c.end, c.type or '?', c.signature or '']\n                             for c in get_ipython().Completer.completions(text, len(text))\n                             if filter_c(text, c.text)]\n                else:\n                    part, matches = get_ipython().Completer.complete(line_buffer=text)\n                    completions = [text + m[len(part):] for m in matches if filter_c(text, m)]\n            except:\n                pass\n        else:\n            # Try to reuse current completer.\n            completer = readline.get_completer()\n            if not completer:\n                # importing rlcompleter sets the completer, use it as a\n                # last resort to avoid breaking customizations.\n                import rlcompleter\n                completer = readline.get_completer()\n            if getattr(completer, 'PYTHON_EL_WRAPPED', False):\n                completer.print_mode = False\n            i = 0\n            while True:\n                completion = completer(text, i)\n                if not completion:\n                    break\n                i += 1\n                completions.append(completion)\n    except:\n        pass\n    finally:\n        if getattr(completer, 'PYTHON_EL_WRAPPED', False):\n            completer.print_mode = True\n    return json.dumps(completions)"

Documentation

Code used to setup completion in inferior Python processes.

Source Code

;; Defined in /usr/src/emacs/lisp/progmodes/python.el.gz
;;; Shell completion

(defcustom python-shell-completion-setup-code
  "
def __PYTHON_EL_get_completions(text):
    completions = []
    completer = None

    import json
    try:
        import readline, re

        try:
            import __builtin__
        except ImportError:
            # Python 3
            import builtins as __builtin__
        builtins = dir(__builtin__)

        is_ipython = ('__IPYTHON__' in builtins or
                      '__IPYTHON__active' in builtins)

        if is_ipython and 'get_ipython' in builtins:
            def filter_c(prefix, c):
                if re.match('_+(i?[0-9]+)?$', c):
                    return False
                elif c[0] == '%' and not re.match('[%a-zA-Z]+$', prefix):
                    return False
                return True

            import IPython
            try:
                if IPython.version_info[0] >= 6:
                    from IPython.core.completer import provisionalcompleter
                    with provisionalcompleter():
                        completions = [
                            [c.text, c.start, c.end, c.type or '?', c.signature or '']
                             for c in get_ipython().Completer.completions(text, len(text))
                             if filter_c(text, c.text)]
                else:
                    part, matches = get_ipython().Completer.complete(line_buffer=text)
                    completions = [text + m[len(part):] for m in matches if filter_c(text, m)]
            except:
                pass
        else:
            # Try to reuse current completer.
            completer = readline.get_completer()
            if not completer:
                # importing rlcompleter sets the completer, use it as a
                # last resort to avoid breaking customizations.
                import rlcompleter
                completer = readline.get_completer()
            if getattr(completer, 'PYTHON_EL_WRAPPED', False):
                completer.print_mode = False
            i = 0
            while True:
                completion = completer(text, i)
                if not completion:
                    break
                i += 1
                completions.append(completion)
    except:
        pass
    finally:
        if getattr(completer, 'PYTHON_EL_WRAPPED', False):
            completer.print_mode = True
    return json.dumps(completions)"
  "Code used to setup completion in inferior Python processes."
  :type 'string)