Skip to content

Commit ef6de1f

Browse files
YoannQDQnyalldawson
authored andcommittedMar 17, 2023
Add format code action in Python Console Editor
1 parent 6e551db commit ef6de1f

File tree

4 files changed

+84
-0
lines changed

4 files changed

+84
-0
lines changed
 

‎images/images.qrc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,7 @@
165165
<file>themes/default/console/iconNewTabEditorConsole.svg</file>
166166
<file>themes/default/console/iconRestoreTabsConsole.svg</file>
167167
<file>themes/default/console/iconFileTabsMenuConsole.svg</file>
168+
<file>themes/default/console/iconFormatCode.svg</file>
168169
<file>themes/default/console/iconShowEditorConsole.svg</file>
169170
<file>themes/default/console/iconCommentEditorConsole.svg</file>
170171
<file>themes/default/console/iconUncommentEditorConsole.svg</file>
Lines changed: 47 additions & 0 deletions
Loading

‎python/console/console.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -289,6 +289,18 @@ def __init__(self, parent=None):
289289
self.toggleCommentEditorButton.setToolTip(toggleText + " <b>Ctrl+:</b>")
290290
self.toggleCommentEditorButton.setText(toggleText)
291291

292+
# Action Format code
293+
formatCodeText = QCoreApplication.translate("PythonConsole", "Format Code")
294+
self.formatCodeEditorButton = QAction(self)
295+
self.formatCodeEditorButton.setCheckable(False)
296+
self.formatCodeEditorButton.setEnabled(True)
297+
self.formatCodeEditorButton.setIcon(QgsApplication.getThemeIcon("console/iconFormatCode.svg"))
298+
self.formatCodeEditorButton.setMenuRole(QAction.PreferencesRole)
299+
self.formatCodeEditorButton.setIconVisibleInMenu(True)
300+
self.formatCodeEditorButton.setToolTip(formatCodeText + " <b>Ctrl+Alt+F</b>")
301+
self.formatCodeEditorButton.setShortcut("Ctrl+Alt+F")
302+
self.formatCodeEditorButton.setText(formatCodeText)
303+
292304
# Action for Object browser
293305
objList = QCoreApplication.translate("PythonConsole", "Object Inspector…")
294306
self.objectListButton = QAction(self)
@@ -417,6 +429,7 @@ def __init__(self, parent=None):
417429
self.toolBarEditor.addAction(self.findTextButton)
418430
self.toolBarEditor.addSeparator()
419431
self.toolBarEditor.addAction(self.toggleCommentEditorButton)
432+
self.toolBarEditor.addAction(self.formatCodeEditorButton)
420433
self.toolBarEditor.addSeparator()
421434
self.toolBarEditor.addAction(self.objectListButton)
422435

@@ -510,6 +523,7 @@ def __init__(self, parent=None):
510523
self.findTextButton.triggered.connect(self._toggleFind)
511524
self.objectListButton.toggled.connect(self.toggleObjectListWidget)
512525
self.toggleCommentEditorButton.triggered.connect(self.toggleComment)
526+
self.formatCodeEditorButton.triggered.connect(self.formatCode)
513527
self.runScriptEditorButton.triggered.connect(self.runScriptEditor)
514528
self.cutEditorButton.triggered.connect(self.cutEditor)
515529
self.copyEditorButton.triggered.connect(self.copyEditor)
@@ -641,6 +655,9 @@ def runScriptEditor(self):
641655
def toggleComment(self):
642656
self.tabEditorWidget.currentWidget().toggleComment()
643657

658+
def formatCode(self):
659+
self.tabEditorWidget.currentWidget().newEditor.formatCode()
660+
644661
def openScriptFileExtEditor(self):
645662
tabWidget = self.tabEditorWidget.currentWidget()
646663
path = tabWidget.path

‎python/console/console_editor.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@
3030
from operator import itemgetter
3131
from pathlib import Path
3232

33+
import autopep8
34+
3335
from qgis.core import Qgis, QgsApplication, QgsBlockingNetworkRequest, QgsFileUtils, QgsSettings
3436
from qgis.gui import QgsCodeEditorPython, QgsMessageBar
3537
from qgis.PyQt.Qsci import QsciScintilla
@@ -229,6 +231,23 @@ def findNext(self):
229231
def findPrevious(self):
230232
self.findText(False)
231233

234+
def formatCode(self):
235+
236+
new_text = autopep8.fix_code(self.text())
237+
if new_text == self.text():
238+
return
239+
240+
# Try to preserve the cursor position and scroll position
241+
old_pos = self.getCursorPosition()
242+
old_scroll_value = self.verticalScrollBar().value()
243+
self.beginUndoAction()
244+
self.selectAll()
245+
self.removeSelectedText()
246+
self.insert(new_text)
247+
self.setCursorPosition(*old_pos)
248+
self.verticalScrollBar().setValue(old_scroll_value)
249+
self.endUndoAction()
250+
232251
def objectListEditor(self):
233252
listObj = self.pythonconsole.listClassMethod
234253
if listObj.isVisible():

0 commit comments

Comments
 (0)
Please sign in to comment.