From 88546099e37ef5ad34e867267944a24f44d629ef Mon Sep 17 00:00:00 2001 From: liugang0814 Date: Sat, 10 Oct 2020 23:04:44 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E5=96=84=20=E7=BC=96=E8=BE=91?= =?UTF-8?q?=E5=99=A8=E4=B8=AD=E9=80=89=E6=8B=A9=E9=83=A8=E5=88=86=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=E8=BF=90=E8=A1=8C=20=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../code_editor/codeeditor/baseeditor.py | 23 ++++++++++++++++++- .../code_editor/codeeditor/pythoneditor.py | 5 ++-- .../code_editor/codeeditor/tabwidget.py | 11 ++++++++- .../ipython_console/ipythonqtconsole.py | 12 +++++++++- 4 files changed, 46 insertions(+), 5 deletions(-) diff --git a/pyminer2/extensions/packages/code_editor/codeeditor/baseeditor.py b/pyminer2/extensions/packages/code_editor/codeeditor/baseeditor.py index 8d048192..1395d77a 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 186e9a46..12bc63b6 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 09df61bd..6280d868 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 bb8bbc63..058aefba 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: -- Gitee