Show More
@@ -77,6 +77,8 b' from IPython.utils.process import arg_split' | |||
|
77 | 77 | from IPython.utils.py3compat import builtin_mod, string_types, PY3, cast_unicode_py2 |
|
78 | 78 | from traitlets import Bool, Enum, observe |
|
79 | 79 | |
|
80 | from functools import wraps | |
|
81 | ||
|
80 | 82 | #----------------------------------------------------------------------------- |
|
81 | 83 | # Globals |
|
82 | 84 | #----------------------------------------------------------------------------- |
@@ -91,6 +93,44 b' else:' | |||
|
91 | 93 | |
|
92 | 94 | |
|
93 | 95 | #----------------------------------------------------------------------------- |
|
96 | # Work around BUG decorators. | |
|
97 | #----------------------------------------------------------------------------- | |
|
98 | ||
|
99 | def _strip_single_trailing_space(complete): | |
|
100 | """ | |
|
101 | This is a workaround for a weird IPython/Prompt_toolkit behavior, | |
|
102 | that can be removed once we rely on a slightly more recent prompt_toolkit | |
|
103 | version (likely > 1.0.3). So this can likely be removed in IPython 6.0 | |
|
104 | ||
|
105 | cf https://github.com/ipython/ipython/issues/9658 | |
|
106 | and https://github.com/jonathanslenders/python-prompt-toolkit/pull/328 | |
|
107 | ||
|
108 | The bug is due to the fact that in PTK the completer will reinvoke itself | |
|
109 | after trying to completer to the longuest common prefix of all the | |
|
110 | completions, unless only one completion is available. | |
|
111 | ||
|
112 | This logic is faulty if the completion ends with space, which can happen in | |
|
113 | case like:: | |
|
114 | ||
|
115 | from foo import im<ta> | |
|
116 | ||
|
117 | which only matching completion is `import `. Note the leading space at the | |
|
118 | end. So leaving a space at the end is a reasonable request, but for now | |
|
119 | we'll strip it. | |
|
120 | """ | |
|
121 | ||
|
122 | @wraps(complete) | |
|
123 | def comp(*args, **kwargs): | |
|
124 | text, matches = complete(*args, **kwargs) | |
|
125 | if len(matches) == 1: | |
|
126 | return text, [matches[0].rstrip()] | |
|
127 | return text, matches | |
|
128 | ||
|
129 | return comp | |
|
130 | ||
|
131 | ||
|
132 | ||
|
133 | #----------------------------------------------------------------------------- | |
|
94 | 134 | # Main functions and classes |
|
95 | 135 | #----------------------------------------------------------------------------- |
|
96 | 136 | |
@@ -1121,6 +1161,7 b' class IPCompleter(Completer):' | |||
|
1121 | 1161 | |
|
1122 | 1162 | return None |
|
1123 | 1163 | |
|
1164 | @_strip_single_trailing_space | |
|
1124 | 1165 | def complete(self, text=None, line_buffer=None, cursor_pos=None): |
|
1125 | 1166 | """Find completions for the given text and line context. |
|
1126 | 1167 |
General Comments 0
You need to be logged in to leave comments.
Login now