QScintilla/Shell.py

branch
maintenance
changeset 6395
613e37fabd96
parent 6319
df201b9fbad4
parent 6387
a168b5f26a14
child 6487
d3ca83d691e7
--- 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)
     

eric ide

mercurial