Issue #19198: IDLE: tab after initial whitespace should tab, not autocomplete.

Fixes problem with writing docstrings at lease twice indented.
This commit is contained in:
Terry Jan Reedy 2016-07-24 23:01:28 -04:00
parent 996d72bccf
commit c665dfd73e
3 changed files with 12 additions and 7 deletions

View 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")

View 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():

View 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()