]> granicus.if.org Git - python/commitdiff
Issue #19198: IDLE: tab after initial whitespace should tab, not autocomplete.
authorTerry Jan Reedy <tjreedy@udel.edu>
Mon, 25 Jul 2016 03:01:28 +0000 (23:01 -0400)
committerTerry Jan Reedy <tjreedy@udel.edu>
Mon, 25 Jul 2016 03:01:28 +0000 (23:01 -0400)
Fixes problem with writing docstrings at lease twice indented.

Lib/idlelib/autocomplete.py
Lib/idlelib/autocomplete_w.py
Lib/idlelib/idle_test/test_autocomplete.py

index 1c0b12d908fd3bf818258938bc6a7c3b9e9cea60..1200008ba9a5185f751e5d4b1f1865d30e3ccd9b 100644 (file)
@@ -78,16 +78,17 @@ class AutoComplete:
         open a completion list after that (if there is more than one
         completion)
         """
-        if hasattr(event, "mc_state") and event.mc_state:
-            # A modifier was pressed along with the tab, continue as usual.
+        if hasattr(event, "mc_state") and event.mc_state or\
+                not self.text.get("insert linestart", "insert").strip():
+            # A modifier was pressed along with the tab or
+            # there is only previous whitespace on this line, so tab.
             return None
         if self.autocompletewindow and self.autocompletewindow.is_active():
             self.autocompletewindow.complete()
             return "break"
         else:
             opened = self.open_completions(False, True, True)
-            if opened:
-                return "break"
+            return "break" if opened else None
 
     def _open_completions_later(self, *args):
         self._delayed_completion_index = self.text.index("insert")
index 37d89289a1191356c5eb0ab0c88c02eead487d50..31837e074022bc21ce90f46079fb84ead6f9a545 100644 (file)
@@ -240,9 +240,8 @@ class AutoCompleteWindow:
         acw.wm_geometry("+%d+%d" % (new_x, new_y))
 
     def hide_event(self, event):
-        if not self.is_active():
-            return
-        self.hide_window()
+        if self.is_active():
+            self.hide_window()
 
     def listselect_event(self, event):
         if self.is_active():
index a14c6db349a6667b83f7c6f4710bb6da42c68bec..97bfab5a569b28d32f88709d0f041de554c78332 100644 (file)
@@ -97,6 +97,11 @@ class AutoCompleteTest(unittest.TestCase):
         self.assertIsNone(autocomplete.autocomplete_event(ev))
         del ev.mc_state
 
+        # Test that tab after whitespace is ignored.
+        self.text.insert('1.0', '        """Docstring.\n    ')
+        self.assertIsNone(autocomplete.autocomplete_event(ev))
+        self.text.delete('1.0', 'end')
+
         # If autocomplete window is open, complete() method is called
         self.text.insert('1.0', 're.')
         # This must call autocomplete._make_autocomplete_window()