##// END OF EJS Templates
Improve order of completions
Thomas Kluyver -
Show More
@@ -170,41 +170,38 b' def compress_user(path, tilde_expand, tilde_val):'
170
170
171
171
172
172
173 def penalize_magics_key(word):
173 def completions_sorting_key(word):
174 """key for sorting that penalizes magic commands in the ordering
174 """key for sorting completions
175
175
176 Normal words are left alone.
176 This does several things:
177
178 Magic commands have the initial % moved to the end, e.g.
179 %matplotlib is transformed as follows:
180
181 %matplotlib -> matplotlib%
182
183 [The choice of the final % is arbitrary.]
184
185 Since "matplotlib" < "matplotlib%" as strings,
186 "timeit" will appear before the magic "%timeit" in the ordering
187
188 For consistency, move "%%" to the end, so cell magics appear *after*
189 line magics with the same name.
190
191 A check is performed that there are no other "%" in the string;
192 if there are, then the string is not a magic command and is left unchanged.
193
177
178 - Lowercase all completions, so they are sorted alphabetically with
179 upper and lower case words mingled
180 - Demote any completions starting with underscores to the end
181 - Insert any %magic and %%cellmagic completions in the alphabetical order
182 by their name
194 """
183 """
184 # Case insensitive sort
185 word = word.lower()
195
186
196 # Move any % signs from start to end of the key
187 prio1, prio2 = 0, 0
197 # provided there are no others elsewhere in the string
198
188
199 if word[:2] == "%%":
189 if word.startswith('__'):
200 if not "%" in word[2:]:
190 prio1 = 2
201 return word[2:] + "%%"
191 elif word.startswith('_'):
192 prio1 = 1
202
193
203 if word[:1] == "%":
194 if word.startswith('%%'):
195 # If there's another % in there, this is something else, so leave it alone
196 if not "%" in word[2:]:
197 word = word[2:]
198 prio2 = 2
199 elif word.startswith('%'):
204 if not "%" in word[1:]:
200 if not "%" in word[1:]:
205 return word[1:] + "%"
201 word = word[1:]
206
202 prio2 = 1
207 return word
203
204 return prio1, word, prio2
208
205
209
206
210 @undoc
207 @undoc
@@ -1206,8 +1203,7 b' class IPCompleter(Completer):'
1206 # simply collapse the dict into a list for readline, but we'd have
1203 # simply collapse the dict into a list for readline, but we'd have
1207 # richer completion semantics in other evironments.
1204 # richer completion semantics in other evironments.
1208
1205
1209 # use penalize_magics_key to put magics after variables with same name
1206 self.matches = sorted(set(self.matches), key=completions_sorting_key)
1210 self.matches = sorted(set(self.matches), key=penalize_magics_key)
1211
1207
1212 #io.rprint('COMP TEXT, MATCHES: %r, %r' % (text, self.matches)) # dbg
1208 #io.rprint('COMP TEXT, MATCHES: %r, %r' % (text, self.matches)) # dbg
1213 return text, self.matches
1209 return text, self.matches
General Comments 0
You need to be logged in to leave comments. Login now