From: Fabián Ezequiel Gallina Date: Mon, 6 Jul 2015 04:59:02 +0000 (-0300) Subject: python.el: Fixes for IPython 3.x (Bug#20580) X-Git-Tag: emacs-25.0.90~1549 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=02dc8dac7e9a7d3482d63d554bc20b579c74f072;p=emacs.git python.el: Fixes for IPython 3.x (Bug#20580) * lisp/progmodes/python.el: (python-shell-completion-native-setup): Fix IPython 3.x setup. (python-shell-completion-native-get-completions): Fix timeout logic. --- diff --git a/lisp/progmodes/python.el b/lisp/progmodes/python.el index fbf944f9c68..0fe1aa97cd0 100644 --- a/lisp/progmodes/python.el +++ b/lisp/progmodes/python.el @@ -3171,9 +3171,12 @@ def __PYTHON_EL_native_completion_setup(): if not is_ipython: readline.set_completer(new_completer) else: - # IPython hacks readline such that `readline.set_completer` + # Try both initializations to cope with all IPython versions. + # This works fine for IPython 3.x but not for earlier: + readline.set_completer(new_completer) + # IPython<3 hacks readline such that `readline.set_completer` # won't work. This workaround injects the new completer - # function into the existing instance directly. + # function into the existing instance directly: instance = getattr(completer, 'im_self', completer.__self__) instance.rlcomplete = new_completer if readline.__doc__ and 'libedit' in readline.__doc__: @@ -3304,7 +3307,7 @@ completion." ;; output end marker is found. Output is accepted ;; *very* quickly to keep the shell super-responsive. (while (and (not (re-search-backward "~~~~__dummy_completion__" nil t)) - (< (- current-time (float-time)) + (< (- (float-time) current-time) python-shell-completion-native-output-timeout)) (accept-process-output process 0.01)) (cl-remove-duplicates