Skip to content

Commit dc1824f

Browse files
committed
[pyqgis-console] added some typing setting:
- auto insertion "import" string - auto insertion "):" for classes and methods
1 parent cb1090f commit dc1824f

File tree

5 files changed

+310
-236
lines changed

5 files changed

+310
-236
lines changed

python/console/console.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -684,6 +684,7 @@ def openHelp(self):
684684
QgsContextHelp.run( "PythonConsole" )
685685

686686
def openSettings(self):
687+
self.options.restoreSettings()
687688
self.options.exec_()
688689

689690
def prefChanged(self):

python/console/console_editor.py

Lines changed: 46 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
from operator import itemgetter
3737
import traceback
3838
import codecs
39+
import re
3940

4041
class KeyFilter(QObject):
4142
SHORTCUTS = {
@@ -654,45 +655,51 @@ def syntaxCheck(self, filename=None, fromContextMenu=True):
654655
return True
655656

656657
def keyPressEvent(self, e):
657-
if self.settings.value("pythonConsole/autoCloseBracketEditor", False, type=bool):
658-
startLine, _, endLine, endPos = self.getSelection()
659-
t = unicode(e.text())
660-
## Close bracket automatically
661-
if t in self.opening:
662-
self.beginUndoAction()
663-
i = self.opening.index(t)
664-
if self.hasSelectedText():
665-
selText = self.selectedText()
666-
self.removeSelectedText()
667-
if startLine == endLine:
668-
self.insert(self.opening[i] + selText + self.closing[i])
669-
self.setCursorPosition(endLine, endPos+2)
670-
self.endUndoAction()
671-
return
672-
elif startLine < endLine and self.opening[i] in ("'", '"'):
673-
self.insert("'''" + selText + "'''")
674-
self.setCursorPosition(endLine, endPos+3)
675-
self.endUndoAction()
676-
return
677-
else:
678-
self.insert(self.closing[i])
679-
else:
680-
self.insert(self.closing[i])
681-
self.endUndoAction()
682-
## FIXES #8392 (automatically removes the redundant char
683-
## when autoclosing brackets option is enabled)
684-
if t in [')', ']', '}']:
685-
l, pos = self.getCursorPosition()
686-
txt = self.text(l)
687-
try:
688-
if txt[pos-1] in self.opening:
689-
self.setCursorPosition(l, pos+1)
690-
self.SendScintilla(QsciScintilla.SCI_DELETEBACK)
691-
except IndexError:
692-
pass
693-
QsciScintilla.keyPressEvent(self, e)
694-
else:
695-
QsciScintilla.keyPressEvent(self, e)
658+
t = unicode(e.text())
659+
startLine, _, endLine, endPos = self.getSelection()
660+
line, pos = self.getCursorPosition()
661+
self.autoCloseBracket = self.settings.value("pythonConsole/autoCloseBracketEditor", False, type=bool)
662+
self.autoImport = self.settings.value("pythonConsole/autoInsertionImportEditor", True, type=bool)
663+
txt = self.text(line)[:pos]
664+
## Close bracket automatically
665+
if t in self.opening and self.autoCloseBracket:
666+
self.beginUndoAction()
667+
i = self.opening.index(t)
668+
if self.hasSelectedText():
669+
selText = self.selectedText()
670+
self.removeSelectedText()
671+
if startLine == endLine:
672+
self.insert(self.opening[i] + selText + self.closing[i])
673+
self.setCursorPosition(endLine, endPos+2)
674+
self.endUndoAction()
675+
return
676+
elif startLine < endLine and self.opening[i] in ("'", '"'):
677+
self.insert("'''" + selText + "'''")
678+
self.setCursorPosition(endLine, endPos+3)
679+
self.endUndoAction()
680+
return
681+
elif t == '(' and (re.match(r'^[ \t]*def \w+$', txt) \
682+
or re.match(r'^[ \t]*class \w+$', txt)):
683+
self.insert('):')
684+
else:
685+
self.insert(self.closing[i])
686+
self.endUndoAction()
687+
## FIXES #8392 (automatically removes the redundant char
688+
## when autoclosing brackets option is enabled)
689+
elif t in [')', ']', '}'] and self.autoCloseBracket:
690+
txt = self.text(line)
691+
try:
692+
if txt[pos-1] in self.opening and t == txt[pos]:
693+
self.setCursorPosition(line, pos+1)
694+
self.SendScintilla(QsciScintilla.SCI_DELETEBACK)
695+
except IndexError:
696+
pass
697+
elif t == ' ' and self.autoImport:
698+
ptrn = r'^[ \t]*from [\w.]+$'
699+
if re.match(ptrn, txt):
700+
self.insert(' import')
701+
self.setCursorPosition(line, pos + 7)
702+
QsciScintilla.keyPressEvent(self, e)
696703

697704
def focusInEvent(self, e):
698705
pathfile = self.parent.path

python/console/console_sci.py

Lines changed: 34 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
import os
3131
import code
3232
import codecs
33+
import re
3334

3435
from qgis.core import QgsApplication
3536
from ui_console_history_dlg import Ui_HistoryDialogPythonConsole
@@ -414,30 +415,39 @@ def keyPressEvent(self, e):
414415
self.showNext()
415416
## TODO: press event for auto-completion file directory
416417
else:
417-
if self.settings.value("pythonConsole/autoCloseBracket", False, type=bool):
418-
t = unicode(e.text())
419-
## Close bracket automatically
420-
if t in self.opening:
421-
i = self.opening.index(t)
422-
if self.hasSelectedText() and startPos != 0:
423-
selText = self.selectedText()
424-
self.removeSelectedText()
425-
self.insert(self.opening[i] + selText + self.closing[i])
426-
self.setCursorPosition(endLine, endPos+2)
427-
return
428-
else:
429-
self.insert(self.closing[i])
430-
## FIXES #8392 (automatically removes the redundant char
431-
## when autoclosing brackets option is enabled)
432-
if t in [')', ']', '}']:
433-
l, pos = self.getCursorPosition()
434-
txt = self.text(l)
435-
try:
436-
if txt[pos-1] in self.opening:
437-
self.setCursorPosition(l, pos+1)
438-
self.SendScintilla(QsciScintilla.SCI_DELETEBACK)
439-
except IndexError:
440-
pass
418+
t = unicode(e.text())
419+
self.autoCloseBracket = self.settings.value("pythonConsole/autoCloseBracket", False, type=bool)
420+
self.autoImport = self.settings.value("pythonConsole/autoInsertionImport", True, type=bool)
421+
txt = cmd[:index].replace('>>> ', '').replace('... ', '')
422+
## Close bracket automatically
423+
if t in self.opening and self.autoCloseBracket:
424+
i = self.opening.index(t)
425+
if self.hasSelectedText() and startPos != 0:
426+
selText = self.selectedText()
427+
self.removeSelectedText()
428+
self.insert(self.opening[i] + selText + self.closing[i])
429+
self.setCursorPosition(endLine, endPos+2)
430+
return
431+
elif t == '(' and (re.match(r'^[ \t]*def \w+$', txt) \
432+
or re.match(r'^[ \t]*class \w+$', txt)):
433+
self.insert('):')
434+
else:
435+
self.insert(self.closing[i])
436+
## FIXES #8392 (automatically removes the redundant char
437+
## when autoclosing brackets option is enabled)
438+
elif t in [')', ']', '}'] and self.autoCloseBracket:
439+
txt = self.text(line)
440+
try:
441+
if txt[index-1] in self.opening and t == txt[index]:
442+
self.setCursorPosition(line, index+1)
443+
self.SendScintilla(QsciScintilla.SCI_DELETEBACK)
444+
except IndexError:
445+
pass
446+
elif t == ' ' and self.autoImport:
447+
ptrn = r'^[ \t]*from [\w.]+$'
448+
if re.match(ptrn, txt):
449+
self.insert(' import')
450+
self.setCursorPosition(line, index + 7)
441451
QsciScintilla.keyPressEvent(self, e)
442452

443453
def contextMenuEvent(self, e):

python/console/console_settings.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ def __init__(self, parent):
3535
self.listPath = []
3636
self.lineEdit.setReadOnly(True)
3737

38-
self.restoreSettings()
38+
#self.restoreSettings()
3939
self.initialCheck()
4040

4141
self.addAPIpath.setIcon(QIcon(":/images/themes/default/symbologyAdd.png"))
@@ -180,6 +180,8 @@ def saveSettings(self):
180180
settings.setValue("pythonConsole/enableObjectInsp", self.enableObjectInspector.isChecked())
181181
settings.setValue("pythonConsole/autoCloseBracket", self.autoCloseBracket.isChecked())
182182
settings.setValue("pythonConsole/autoCloseBracketEditor", self.autoCloseBracketEditor.isChecked())
183+
settings.setValue("pythonConsole/autoInsertionImport", self.autoInsertionImport.isChecked())
184+
settings.setValue("pythonConsole/autoInsertionImportEditor", self.autoInsertionImportEditor.isChecked())
183185

184186
settings.setValue("pythonConsole/defaultFontColor", self.defaultFontColor.color())
185187
settings.setValue("pythonConsole/keywordFontColor", self.keywordFontColor.color())
@@ -223,6 +225,8 @@ def restoreSettings(self):
223225
self.enableObjectInspector.setChecked(settings.value("pythonConsole/enableObjectInsp", False, type=bool))
224226
self.autoCloseBracketEditor.setChecked(settings.value("pythonConsole/autoCloseBracketEditor", False, type=bool))
225227
self.autoCloseBracket.setChecked(settings.value("pythonConsole/autoCloseBracket", False, type=bool))
228+
self.autoInsertionImportEditor.setChecked(settings.value("pythonConsole/autoInsertionImportEditor", True, type=bool))
229+
self.autoInsertionImport.setChecked(settings.value("pythonConsole/autoInsertionImport", True, type=bool))
226230

227231
if settings.value("pythonConsole/autoCompleteSource") == 'fromDoc':
228232
self.autoCompFromDoc.setChecked(True)

0 commit comments

Comments
 (0)