Index: AutoCompleteWindow.py =================================================================== --- AutoCompleteWindow.py (revision 60721) +++ AutoCompleteWindow.py (working copy) @@ -55,8 +55,8 @@ def _change_start(self, newstart): i = 0 - while i < len(self.start) and i < len(newstart) and \ - self.start[i] == newstart[i]: + min_len = min(len(self.start), len(newstart)) + while i < min_len and self.start[i] == newstart[i]: i += 1 if i < len(self.start): self.widget.delete("%s+%dc" % (self.startindex, i), @@ -98,13 +98,17 @@ i = m + 1 last = i-1 + if first == last: # There is only one possible completion - return it + return self.completions[first] + # We should return the maximum prefix of first and last - i = len(s) - while len(self.completions[first]) > i and \ - len(self.completions[last]) > i and \ - self.completions[first][i] == self.completions[last][i]: + i = len(s) + 1 + first_comp = self.completions[first] + last_comp = self.completions[last] + min_len = min(len(first_comp), len(last_comp)) + while i < min_len and first_comp[i] == last_comp[i]: i += 1 - return self.completions[first][:i] + return first_comp[:i] def _selection_changed(self): """Should be called when the selection of the Listbox has changed. @@ -119,7 +123,8 @@ newstart = lts else: i = 0 - while i < len(lts) and i < len(selstart) and lts[i] == selstart[i]: + min_len = min(len(lts), len(selstart)) + while i < min_len and lts[i] == selstart[i]: i += 1 newstart = selstart[:i] self._change_start(newstart)