Kaydet (Commit) 9c5c0af8 authored tarafından Kurt B. Kaiser's avatar Kurt B. Kaiser

Improved AutoCompleteWindow logic. Patch 2062 Tal Einat.

üst 93cdae5f
...@@ -54,9 +54,9 @@ class AutoCompleteWindow: ...@@ -54,9 +54,9 @@ class AutoCompleteWindow:
self.lastkey_was_tab = False self.lastkey_was_tab = False
def _change_start(self, newstart): def _change_start(self, newstart):
min_len = min(len(self.start), len(newstart))
i = 0 i = 0
while i < len(self.start) and i < len(newstart) and \ while i < min_len and self.start[i] == newstart[i]:
self.start[i] == newstart[i]:
i += 1 i += 1
if i < len(self.start): if i < len(self.start):
self.widget.delete("%s+%dc" % (self.startindex, i), self.widget.delete("%s+%dc" % (self.startindex, i),
...@@ -98,13 +98,17 @@ class AutoCompleteWindow: ...@@ -98,13 +98,17 @@ class AutoCompleteWindow:
i = m + 1 i = m + 1
last = i-1 last = i-1
if first == last: # only one possible completion
return self.completions[first]
# We should return the maximum prefix of first and last # We should return the maximum prefix of first and last
first_comp = self.completions[first]
last_comp = self.completions[last]
min_len = min(len(first_comp), len(last_comp))
i = len(s) i = len(s)
while len(self.completions[first]) > i and \ while i < min_len and first_comp[i] == last_comp[i]:
len(self.completions[last]) > i and \
self.completions[first][i] == self.completions[last][i]:
i += 1 i += 1
return self.completions[first][:i] return first_comp[:i]
def _selection_changed(self): def _selection_changed(self):
"""Should be called when the selection of the Listbox has changed. """Should be called when the selection of the Listbox has changed.
...@@ -118,8 +122,9 @@ class AutoCompleteWindow: ...@@ -118,8 +122,9 @@ class AutoCompleteWindow:
if self._binary_search(lts) == cursel: if self._binary_search(lts) == cursel:
newstart = lts newstart = lts
else: else:
min_len = min(len(lts), len(selstart))
i = 0 i = 0
while i < len(lts) and i < len(selstart) and lts[i] == selstart[i]: while i < min_len and lts[i] == selstart[i]:
i += 1 i += 1
newstart = selstart[:i] newstart = selstart[:i]
self._change_start(newstart) self._change_start(newstart)
......
...@@ -9,6 +9,8 @@ What's New in IDLE 2.6a3? ...@@ -9,6 +9,8 @@ What's New in IDLE 2.6a3?
- Home / Control-A toggles between left margin and end of leading white - Home / Control-A toggles between left margin and end of leading white
space. Patch 1196903 Jeff Shute. space. Patch 1196903 Jeff Shute.
- Improved AutoCompleteWindow logic. Patch 2062 Tal Einat.
What's New in IDLE 2.6a1? What's New in IDLE 2.6a1?
========================= =========================
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment