diff -r 4c45d163c6ac -r 613e37fabd96 QScintilla/Shell.py --- a/QScintilla/Shell.py Sat Jun 02 12:46:57 2018 +0200 +++ b/QScintilla/Shell.py Mon Jul 02 18:59:30 2018 +0200 @@ -20,7 +20,7 @@ from PyQt5.QtCore import pyqtSignal, QFileInfo, Qt, QEvent from PyQt5.QtGui import QClipboard, QPalette, QFont from PyQt5.QtWidgets import QDialog, QInputDialog, QApplication, QMenu, \ - QWidget, QHBoxLayout, QVBoxLayout, QShortcut + QWidget, QHBoxLayout, QVBoxLayout, QShortcut, QSizePolicy from PyQt5.Qsci import QsciScintilla from E5Gui.E5Application import e5App @@ -56,6 +56,8 @@ from UI.SearchWidget import SearchWidget self.__searchWidget = SearchWidget(self.__shell, self, horizontal) + self.__searchWidget.setSizePolicy(QSizePolicy.Fixed, + QSizePolicy.Preferred) self.__searchWidget.hide() if horizontal: @@ -108,9 +110,11 @@ result @signal historyStyleChanged(ShellHistoryStyle) emitted to indicate a change of the history style + @signal queueText(str) emitted to queue some text for processing """ searchStringFound = pyqtSignal(bool) historyStyleChanged = pyqtSignal(ShellHistoryStyle) + queueText = pyqtSignal(str) def __init__(self, dbs, vm, windowedVariant, parent=None): """ @@ -343,6 +347,10 @@ self.__historyNavigateByCursor = \ Preferences.getShell("HistoryNavigateByCursor") + self.__queuedText = '' + self.__blockTextProcessing = False + self.queueText.connect(self.__concatenateText, Qt.QueuedConnection) + self.grabGesture(Qt.PinchGesture) def __showLanguageMenu(self): @@ -904,13 +912,34 @@ @param s text to be displayed (string) """ + self.queueText.emit(s) + + def __concatenateText(self, text): + """ + Private slot to get all available text and process it in one step. + + @param text text to be appended + @type str + """ + self.__queuedText += text + if self.__blockTextProcessing: + return + + self.__blockTextProcessing = True + # Get all text which is still waiting for output + QApplication.processEvents() + + # Finally process the accumulated text line, col = self.__getEndPos() self.setCursorPosition(line, col) - self.insert(Utilities.filterAnsiSequences(s)) + self.insert(Utilities.filterAnsiSequences(self.__queuedText)) self.prline, self.prcol = self.getCursorPosition() self.ensureCursorVisible() self.ensureLineVisible(self.prline) + self.__queuedText = '' + self.__blockTextProcessing = False + def __writeStdOut(self, s): """ Private method to display some text with StdOut label. @@ -1864,6 +1893,7 @@ """ language = action.data() self.dbs.startClient(False, language) + self.__getBanner() def handlePreferencesChanged(self): """ @@ -2020,15 +2050,16 @@ self.addActions(self.vm.editorActGrp.actions()) self.addActions(self.vm.copyActGrp.actions()) self.addActions(self.vm.viewActGrp.actions()) - self.__searchShortcut = QShortcut( - self.vm.searchAct.shortcut(), self, - self.__find, self.__find) - self.__searchNextShortcut = QShortcut( - self.vm.searchNextAct.shortcut(), self, - self.__searchNext, self.__searchNext) - self.__searchPrevShortcut = QShortcut( - self.vm.searchPrevAct.shortcut(), self, - self.__searchPrev, self.__searchPrev) + if not self.__windowed: + self.__searchShortcut = QShortcut( + self.vm.searchAct.shortcut(), self, + self.__find, self.__find) + self.__searchNextShortcut = QShortcut( + self.vm.searchNextAct.shortcut(), self, + self.__searchNext, self.__searchNext) + self.__searchPrevShortcut = QShortcut( + self.vm.searchPrevAct.shortcut(), self, + self.__searchPrev, self.__searchPrev) try: self.vm.editActGrp.setEnabled(False) @@ -2038,9 +2069,10 @@ self.vm.searchActGrp.setEnabled(False) except AttributeError: pass - self.__searchShortcut.setEnabled(True) - self.__searchNextShortcut.setEnabled(True) - self.__searchPrevShortcut.setEnabled(True) + if not self.__windowed: + self.__searchShortcut.setEnabled(True) + self.__searchNextShortcut.setEnabled(True) + self.__searchPrevShortcut.setEnabled(True) self.setCaretWidth(self.caretWidth) self.setCursorFlashTime(QApplication.cursorFlashTime()) @@ -2056,9 +2088,10 @@ self.vm.editorActGrp.setEnabled(False) except AttributeError: pass - self.__searchShortcut.setEnabled(False) - self.__searchNextShortcut.setEnabled(False) - self.__searchPrevShortcut.setEnabled(False) + if not self.__windowed: + self.__searchShortcut.setEnabled(False) + self.__searchNextShortcut.setEnabled(False) + self.__searchPrevShortcut.setEnabled(False) self.setCaretWidth(0) super(Shell, self).focusOutEvent(event) @@ -2110,7 +2143,7 @@ """ self.__lastSearch = (txt, caseSensitive, wholeWord) ok = self.findFirst( - txt, False, caseSensitive, wholeWord, False, forward=True) + txt, False, caseSensitive, wholeWord, True, forward=True) self.searchStringFound.emit(ok) def __searchPrev(self): @@ -2136,7 +2169,7 @@ else: line, index = -1, -1 ok = self.findFirst( - txt, False, caseSensitive, wholeWord, False, + txt, False, caseSensitive, wholeWord, True, forward=False, line=line, index=index) self.searchStringFound.emit(ok)