src/eric7/QScintilla/Shell.py

branch
server
changeset 10555
08e853c0c77b
parent 10439
21c28b0f9e41
child 10559
64db35c6e335
diff -r d80184d38152 -r 08e853c0c77b src/eric7/QScintilla/Shell.py
--- a/src/eric7/QScintilla/Shell.py	Wed Feb 07 15:28:08 2024 +0100
+++ b/src/eric7/QScintilla/Shell.py	Fri Feb 09 19:54:15 2024 +0100
@@ -12,6 +12,7 @@
 import pathlib
 import re
 import sys
+import time
 
 from PyQt6.Qsci import QsciScintilla
 from PyQt6.QtCore import QEvent, QPoint, Qt, pyqtSignal, pyqtSlot
@@ -388,10 +389,16 @@
         self.lmenu.clear()
         venvManager = ericApp().getObject("VirtualEnvManager")
         for venvName in sorted(venvManager.getVirtualenvNames()):
-            self.lmenu.addAction(venvName)
+            act = self.lmenu.addAction(venvName)
+            act.setData(venvName)
         if self.__project.isOpen():
             self.lmenu.addSeparator()
-            self.lmenu.addAction(self.tr("Project"))
+            act = self.lmenu.addAction(self.tr("Project"))
+            act.setData("<<project>>")
+        if ericApp().getObject("EricServer").isServerConnected():
+            self.lmenu.addSeparator()
+            act = self.lmenu.addAction(self.tr("eric-ide Server"))
+            act.setData("<<eric-server>>")
 
     def __resizeLinenoMargin(self):
         """
@@ -1925,11 +1932,7 @@
                     # Display the banner.
                     self.__getBanner()
                 elif cmd in ["%reset", "%restart"]:
-                    self.dbs.startClient(
-                        False,
-                        venvName=self.__currentVenv,
-                        workingDir=self.__currentWorkingDirectory,
-                    )
+                    self.doRestart()
                 elif cmd in ["%envs", "%environments"]:
                     venvs = (
                         ericApp().getObject("VirtualEnvManager").getVirtualenvNames()
@@ -1981,9 +1984,12 @@
                 self.setFocus(Qt.FocusReason.OtherFocusReason)
             else:
                 self.dbs.remoteStatement(self.__getSelectedDebuggerId(), cmd)
-                while self.inCommandExecution:
+                now = time.monotonic()
+                while self.inCommandExecution and time.monotonic() - now < 10:
+                    # 10 seconds timeout
                     with contextlib.suppress(KeyboardInterrupt):
                         QApplication.processEvents()
+                self.inCommandExecution = False
         else:
             if not self.__echoInput:
                 cmd = self.buff
@@ -2138,13 +2144,15 @@
         @param action context menu action that was triggered
         @type QAction
         """
-        venvName = action.text()
-        if venvName == self.tr("Project"):
+        venvName = action.data()
+        if venvName == "<<project>>":
             if self.__project.isOpen():
                 self.__currentWorkingDirectory = self.__project.getProjectPath()
             self.dbs.startClient(
                 False, forProject=True, workingDir=self.__currentWorkingDirectory
             )
+        elif venvName == "<<eric-server>>":
+            self.dbs.startClient(False, startRemote=True)
         else:
             self.dbs.startClient(False, venvName=venvName)
         self.__getBanner()
@@ -2616,6 +2624,26 @@
             self.dbs.startClient(False)
             self.__getBanner()
 
+    #################################################################
+    ## eric-ide Server Support
+    #################################################################
+
+    @pyqtSlot(bool)
+    def remoteConnectionChanged(self, connected):
+        """
+        Public slot handling a change of the connection state to an eric-ide server.
+
+        @param connected flag indicating the connection state
+        @type bool
+        """
+        if connected:
+            if Preferences.getEricServer("AutostartShell"):
+                self.dbs.startClient(False, startRemote=True)
+        else:
+            if self.__currentVenv == self.dbs.getEricServerEnvironmentString():
+                # start default backend
+                self.dbs.startClient(False)
+                self.__getBanner()
 
 #
 # eflag: noqa = M601

eric ide

mercurial