]> granicus.if.org Git - python/commitdiff
Improved AutoCompleteWindow logic. Patch 2062 Tal Einat.
authorKurt B. Kaiser <kbk@shore.net>
Sun, 27 Apr 2008 21:38:05 +0000 (21:38 +0000)
committerKurt B. Kaiser <kbk@shore.net>
Sun, 27 Apr 2008 21:38:05 +0000 (21:38 +0000)
Lib/idlelib/AutoCompleteWindow.py
Lib/idlelib/NEWS.txt

index f7bd42311ba51699e6eb198831f94dd3eaf8ddab..635775d954a514f9af296a1f24e94683e4425ffe 100644 (file)
@@ -54,9 +54,9 @@ class AutoCompleteWindow:
         self.lastkey_was_tab = False
 
     def _change_start(self, newstart):
+        min_len = min(len(self.start), len(newstart))
         i = 0
-        while i < len(self.start) and i < len(newstart) and \
-              self.start[i] == newstart[i]:
+        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 @@ class AutoCompleteWindow:
                 i = m + 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
+        first_comp = self.completions[first]
+        last_comp = self.completions[last]
+        min_len = min(len(first_comp), len(last_comp))
         i = len(s)
-        while len(self.completions[first]) > i and \
-              len(self.completions[last]) > i and \
-              self.completions[first][i] == self.completions[last][i]:
+        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.
@@ -118,8 +122,9 @@ class AutoCompleteWindow:
         if self._binary_search(lts) == cursel:
             newstart = lts
         else:
+            min_len = min(len(lts), len(selstart))
             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
             newstart = selstart[:i]
         self._change_start(newstart)
index c809cc3de73cc3ed6aceae3bc4ac7ce0e6f8e1d1..c574d001133560c61cca152a2037f7d2c0cd1642 100644 (file)
@@ -9,6 +9,8 @@ What's New in IDLE 2.6a3?
 - Home / Control-A toggles between left margin and end of leading white
   space.  Patch 1196903 Jeff Shute.
 
+- Improved AutoCompleteWindow logic.  Patch 2062 Tal Einat.  
+
 What's New in IDLE 2.6a1?
 =========================