[Python-checkins] r62548 - in python/trunk/Lib/idlelib: AutoCompleteWindow.py NEWS.txt

kurt.kaiser python-checkins at python.org
Sun Apr 27 23:38:06 CEST 2008


Author: kurt.kaiser
Date: Sun Apr 27 23:38:05 2008
New Revision: 62548

Log:
Improved AutoCompleteWindow logic.  Patch 2062 Tal Einat. 


Modified:
   python/trunk/Lib/idlelib/AutoCompleteWindow.py
   python/trunk/Lib/idlelib/NEWS.txt

Modified: python/trunk/Lib/idlelib/AutoCompleteWindow.py
==============================================================================
--- python/trunk/Lib/idlelib/AutoCompleteWindow.py	(original)
+++ python/trunk/Lib/idlelib/AutoCompleteWindow.py	Sun Apr 27 23:38:05 2008
@@ -54,9 +54,9 @@
         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 @@
                 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 @@
         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)

Modified: python/trunk/Lib/idlelib/NEWS.txt
==============================================================================
--- python/trunk/Lib/idlelib/NEWS.txt	(original)
+++ python/trunk/Lib/idlelib/NEWS.txt	Sun Apr 27 23:38:05 2008
@@ -9,6 +9,8 @@
 - 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?
 =========================
 


More information about the Python-checkins mailing list