GNU bug report logs -
#19736
python.el: native completion breaks ipython magic completion
Previous Next
Reported by: Carlos Pita <carlosjosepita <at> gmail.com>
Date: Fri, 30 Jan 2015 22:31:01 UTC
Severity: normal
Tags: patch
Found in version 24.4
Done: fgallina <at> gnu.org (Fabián Ezequiel Gallina)
Bug is archived. No further changes may be made.
Full log
View this message in rfc822 format
Just in case, here is the modified code for both completion setups
(I'm not listing the minor changes to
python-shell-completion-native-get-completions below):
(defcustom python-shell-completion-setup-code
"def __PYTHON_EL_get_completions(text):
try:
import __builtin__
except ImportError: # Python 3
import builtins as __builtin__
builtins = dir(__builtin__)
is_ipython = ('__IPYTHON__' in builtins or
'__IPYTHON__active' in builtins)
completions = []
try:
if is_ipython:
splits = text.split()
is_module = splits and splits[0] in ('from', 'import')
if is_module:
from IPython.core.completerlib import module_completion
completions = module_completion(text.strip())
elif '__IP' in builtins:
completions = __IP.complete(text)
elif 'get_ipython' in builtins:
completions = get_ipython().Completer.all_completions(text)
else: # Never do this in IPython as it overrides the completer!
import readline, rlcompleter
i = 0
while True:
res = readline.get_completer()(text, i)
if not res:
break
i += 1
completions.append(res)
except:
pass
return completions"
"Code used to setup completion in inferior Python processes."
:type 'string
:group 'python)
(defun python-shell-completion-native-setup ()
"Try to setup native completion, return non-nil on success."
(let ((process (python-shell-get-process)))
(python-shell-send-string
(funcall
'mapconcat
#'identity
(list
"try:"
" import readline"
" def completer(text, state, c=readline.get_completer()):"
" completion = c(text, state)"
" if not completion and state == 1:"
" return text + '__dummy_completion__'"
" else:"
" return completion"
" readline.set_completer(completer)"
" if readline.__doc__ and 'libedit' in readline.__doc__:"
" readline.parse_and_bind('bind ^I rl_complete')"
" else:"
" readline.parse_and_bind('tab: complete')"
" print ('python.el: readline is available')"
" del completer, readline # Some cleanup"
"except:"
" print ('python.el: readline not available')")
"\n")
process)
(python-shell-accept-process-output process)
(when (save-excursion
(re-search-backward
(regexp-quote "python.el: readline is available") nil t 1))
(python-shell-completion-native-try))))
This bug report was last modified 10 years and 50 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.