diff --git a/plugin/listeners.py b/plugin/listeners.py index 1bcd58d7..92374aa8 100644 --- a/plugin/listeners.py +++ b/plugin/listeners.py @@ -34,7 +34,8 @@ def on_modified_async(self) -> None: return vcm = ViewCompletionManager(self.view) - vcm.handle_text_change() + if vcm.handle_text_change(): + return if not self._is_saving and get_session_setting(session, "auto_ask_completions") and not vcm.is_waiting: plugin.request_get_completions(self.view) diff --git a/plugin/ui/completion.py b/plugin/ui/completion.py index 781b0ee7..fb1b0ba2 100644 --- a/plugin/ui/completion.py +++ b/plugin/ui/completion.py @@ -115,11 +115,31 @@ def handle_selection_change(self) -> None: self.hide() - def handle_text_change(self) -> None: + def handle_text_change(self) -> bool: if not (self.is_phantom and self.is_visible): - return + return False - self.hide() + if self.current_completion and len(self.view.sel()) == 1 and self.view.sel()[0].empty(): + current_completion = self.current_completion + point = self.view.sel()[0].begin() + region = sublime.Region(current_completion["point"], point) + text = self.view.substr(region) + + if current_completion["displayText"].startswith(text): + current_completion["displayText"] = current_completion["displayText"][len(region) :] + self.completion_style_type( + self.view, current_completion, self.completion_index, len(self.completions) + ).show() + + return True + else: + self.hide() + + return False + else: + self.hide() + + return False def handle_close(self) -> None: if not self.is_phantom: