def _on_text_keypress(self, event=None): if not self.is_visible(): return None if event.keysym in ["Up", "KP_Up"]: self._move_selection(-1) return "break" elif event.keysym in ["Down", "KP_Down"]: self._move_selection(1) return "break" elif event.keysym in ["Return", "KP_Enter"]: assert self._listbox.size() > 0 self._insert_current_selection() return "break" elif event.keysym == "Tab": assert self._listbox.size() > 0 self._insert_current_selection_replace_suffix() return "break" elif event.keysym in [ "BackSpace", "Left", "Right", "KP_Left", "KP_Right" ]: self.after_idle( lambda: self._completer.request_completions_for_text( self._target_text_widget)) elif (event.char and not _is_python_name_char(event.char) and event.char != "." and not control_is_pressed(event)): self.hide(event) return None
def goto_definition(event): if not control_is_pressed(event.state): return assert isinstance(event.widget, tk.Text) text = event.widget source = text.get("1.0", "end") index = text.index("insert") index_parts = index.split(".") line, column = int(index_parts[0]), int(index_parts[1]) try: editor = text.master.home_widget path = editor.get_filename() except Exception as e: logger.warning("Could not get path", exc_info=e) path = None defs = jedi_utils.get_definitions(source, line, column, path) if len(defs) > 0: # TODO: handle multiple results like PyCharm module_path = str(defs[0].module_path) if not os.path.isfile(module_path): logger.warning("%s is not a file", module_path) return module_name = defs[0].module_name line = defs[0].line if module_path and line is not None: get_workbench().get_editor_notebook().show_file(module_path, line) elif module_name == "" and line is not None: # current editor get_workbench().get_editor_notebook().get_current_editor( ).select_range(line)
def goto_definition(event): if not control_is_pressed(event.state): return assert isinstance(event.widget, tk.Text) text = event.widget source = text.get("1.0", "end") index = text.index("insert") index_parts = index.split(".") line, column = int(index_parts[0]), int(index_parts[1]) # TODO: find current editor filename from jedi import Script script = Script(source, line=line, column=column, path="") defs = script.goto_definitions() if len(defs) > 0: module_path = defs[0].module_path module_name = defs[0].module_name line = defs[0].line if module_path and line is not None: get_workbench().get_editor_notebook().show_file(module_path, line) elif module_name == "" and line is not None: # current editor get_workbench().get_editor_notebook().get_current_editor( ).select_range(line)
def _patched_perform_return(self, event): text = event.widget ranges = text.tag_ranges("CURRENT_CELL") if len(ranges) == 2 and (ui_utils.shift_is_pressed(event.state) or ui_utils.control_is_pressed(event.state)): if run_enabled(): code = text.get(ranges[0], ranges[1]).strip() _submit_code(code) if ui_utils.shift_is_pressed(event.state): # advance to next cell text.mark_set("insert", ranges[1]) return "break" else: return original_perform_return(self, event)
def _check_trigger_keypress(self, event: tk.Event) -> None: runner = get_runner() if not runner or runner.is_running(): return if (control_is_pressed(event) or command_is_pressed(event) or alt_is_pressed_without_char(event)): return widget = event.widget if not widget or not isinstance(widget, SyntaxText): return if not widget.is_python_text(): return if widget.is_read_only(): return if (not get_workbench().get_option("edit.automatic_completions") and not self._box_is_visible()): return if event.keysym == "Escape": # Closing is handled by the box itself return if not event.char: # movement keypresses are handled by the box return if (not self._box_is_visible() and not _is_python_name_char(event.char) and not self._is_start_of_an_attribute(event)): # non-word chars are allowed only while the box is already open return widget.after_idle(lambda: self.request_completions_for_text(widget))
def proper_modifier_is_pressed(self, event: tk.Event) -> bool: if running_on_mac_os(): return command_is_pressed(event) else: return control_is_pressed(event)