diff --git a/pyminer2/extensions/packages/code_editor/codeeditor/baseeditor.py b/pyminer2/extensions/packages/code_editor/codeeditor/baseeditor.py index 8d04819211d0c743dfe1a8bfd134e098de1d4535..1395d77a2ecd63d50597fc30a51d4ecdd6e9fe5f 100644 --- a/pyminer2/extensions/packages/code_editor/codeeditor/baseeditor.py +++ b/pyminer2/extensions/packages/code_editor/codeeditor/baseeditor.py @@ -322,6 +322,7 @@ class PMBaseEditor(QWidget, Ui_FormEditor): self._action_run_code = None # 运行代码 self._shortcut_format = None self._shortcut_run = None + self._shortcut_run_sel = None self._indicator_error = -1 self._indicator_error2 = -1 self._indicator_warn = -1 @@ -573,6 +574,8 @@ class PMBaseEditor(QWidget, Ui_FormEditor): self._shortcut_format.activated.connect(self.slot_code_format) self._action_run_code.triggered.connect(self.slot_code_run) self._shortcut_run.activated.connect(self.slot_code_run) + self._action_run_sel_code.triggered.connect(self.slot_code_sel_run) + self._shortcut_run_sel.activated.connect(self.slot_code_sel_run) self._shortcut_save.activated.connect(self.slot_save) self._action_save.triggered.connect(self.slot_save) @@ -606,6 +609,12 @@ class PMBaseEditor(QWidget, Ui_FormEditor): word += char return word + def current_line_text(self): + current_row = self.textEdit.getCursorPosition()[0] + current_len = self.textEdit.lineLength(current_row) + self.textEdit.setSelection(current_row, 0, current_row, current_len) + return self.text(True) + def text(self, selected: bool = False) -> str: """ 返回编辑器选中或者全部内容 @@ -801,7 +810,8 @@ class PMBaseEditor(QWidget, Ui_FormEditor): enabled = len(self.text().strip()) > 0 self._action_format.setEnabled(enabled) self._action_run_code.setEnabled(enabled) - self._action_run_sel_code.setEnabled(self.textEdit.hasSelectedText()) + # self._action_run_sel_code.setEnabled(self.textEdit.hasSelectedText()) + self._action_run_sel_code.setEnabled(enabled) menu.exec_(self.textEdit.mapToGlobal(pos)) del menu @@ -897,6 +907,9 @@ class PMBaseEditor(QWidget, Ui_FormEditor): self._shortcut_run = QShortcut(QKeySequence('Ctrl+R'), self.textEdit) self._action_run_code.setShortcut(QKeySequence('Ctrl+R')) + self._shortcut_run_sel = QShortcut(Qt.Key_F9, self.textEdit) + self._action_run_sel_code.setShortcut(Qt.Key_F9) + self._action_save.setShortcut(QKeySequence('Ctrl+S')) self._shortcut_save = QShortcut(QKeySequence('Ctrl+S'), self.textEdit) @@ -918,6 +931,14 @@ class PMBaseEditor(QWidget, Ui_FormEditor): logger.warning('不支持在终端运行!') pass + def slot_code_sel_run(self): + """ + 运行选中代码 + + :return: + """ + logger.warning('不支持在ipython运行!') + def slot_code_run(self): """ 运行代码 diff --git a/pyminer2/extensions/packages/code_editor/codeeditor/pythoneditor.py b/pyminer2/extensions/packages/code_editor/codeeditor/pythoneditor.py index 186e9a466b1bf3caf15c702d00cf15031cc2c783..12bc63b6bea20a7322af22bdb57f8e52ccf5eff6 100644 --- a/pyminer2/extensions/packages/code_editor/codeeditor/pythoneditor.py +++ b/pyminer2/extensions/packages/code_editor/codeeditor/pythoneditor.py @@ -319,9 +319,10 @@ class PMPythonEditor(PMBaseEditor): """ text = self.text(True).strip() if not text: - return + text = self.current_line_text().strip() + try: - self._parent.slot_run_script(text) + self._parent.slot_run_sel(text) except Exception as e: logger.warning(str(e)) diff --git a/pyminer2/extensions/packages/code_editor/codeeditor/tabwidget.py b/pyminer2/extensions/packages/code_editor/codeeditor/tabwidget.py index 09df61bd9a917211b0b4635c36abcf090d1cff88..6280d8680512bec532ebae2dc7d5af1cf5596c21 100644 --- a/pyminer2/extensions/packages/code_editor/codeeditor/tabwidget.py +++ b/pyminer2/extensions/packages/code_editor/codeeditor/tabwidget.py @@ -396,7 +396,7 @@ class PMCodeEditTabWidget(QTabWidget, PMDockObject): def slot_run_script(self, text=''): """ - 执行选中代码或者全部代码 + 执行文件 :return: """ @@ -410,6 +410,15 @@ class PMCodeEditTabWidget(QTabWidget, PMDockObject): self.extension_lib.get_interface('ipython_console').run_command(command=text, hint_text=self.tr( 'Run: %s') % self.get_current_filename(), hidden=False) + def slot_run_sel(self, sel_text): + """ + 运行选中代码片段或光标所在行 + :param sel_text: + :return: + """ + self.extension_lib.get_interface('ipython_console').run_command(command=sel_text, hint_text=sel_text, + hidden=False) + def slot_tab_close_request(self, index: int): """ 关闭标签页 diff --git a/pyminer2/extensions/packages/ipython_console/ipythonqtconsole.py b/pyminer2/extensions/packages/ipython_console/ipythonqtconsole.py index bb8bbc6337f305b95197f6c883572514abb293fe..058aefba15a31e5467087183d6cb4f79f681f4d6 100644 --- a/pyminer2/extensions/packages/ipython_console/ipythonqtconsole.py +++ b/pyminer2/extensions/packages/ipython_console/ipythonqtconsole.py @@ -214,7 +214,17 @@ class ConsoleWidget(RichJupyterWidget, PMDockObject): """ cursor: QTextCursor = self._prompt_cursor cursor.movePosition(QTextCursor.End) - cursor.insertText('%s\n' % hint_text) + # 运行文件时,显示文件名,无换行符,执行选中内容时,包含换行符 + # 检测换行符,在ipy console中显示执行脚本内容 + hint_row_list = hint_text.split("\n") + for hint in hint_row_list: + if hint != "": + cursor.insertText('%s\n' % hint) + self._insert_continuation_prompt(cursor) + else: + # 删除多余的continuation_prompt + self.undo() + self._finalize_input_request() # display input string buffer in console. cursor.movePosition(QTextCursor.End) if self.kernel_client is None: