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