Merged with branch 'mpy_network' to get the latest MicroPython related additions. eric7

Thu, 04 May 2023 17:58:52 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Thu, 04 May 2023 17:58:52 +0200
branch
eric7
changeset 10018
53315c3db26b
parent 10007
f42cb90ea7dc (current diff)
parent 10017
6d5ba2c97a8a (diff)
child 10019
e56089d00750

Merged with branch 'mpy_network' to get the latest MicroPython related additions.

--- a/Dictionaries/words.dic	Tue May 02 11:39:09 2023 +0200
+++ b/Dictionaries/words.dic	Thu May 04 17:58:52 2023 +0200
@@ -8,3 +8,4 @@
 param
 keyparam
 rtype
+instantiation
--- a/docs/changelog.md	Tue May 02 11:39:09 2023 +0200
+++ b/docs/changelog.md	Thu May 04 17:58:52 2023 +0200
@@ -2,6 +2,9 @@
 
 ### Version 23.6
 - bug fixes
+- MicroPython
+    - Added support of th WebREPL device interface available on some boards with
+      builtin network capability.
 
 ### Version 23.5
 - bug fixes
--- a/eric7.epj	Tue May 02 11:39:09 2023 +0200
+++ b/eric7.epj	Thu May 04 17:58:52 2023 +0200
@@ -352,6 +352,9 @@
       "src/eric7/MicroPython/IgnoredDevicesDialog.ui",
       "src/eric7/MicroPython/MicroPythonFileManagerWidget.ui",
       "src/eric7/MicroPython/MicroPythonProgressInfoDialog.ui",
+      "src/eric7/MicroPython/MicroPythonWebreplConnectionDialog.ui",
+      "src/eric7/MicroPython/MicroPythonWebreplUrlAddEditDialog.ui",
+      "src/eric7/MicroPython/MicroPythonWebreplUrlsConfigDialog.ui",
       "src/eric7/MicroPython/MicroPythonWidget.ui",
       "src/eric7/MicroPython/MipPackageDialog.ui",
       "src/eric7/MicroPython/NtpParametersDialog.ui",
@@ -1347,7 +1350,14 @@
       "src/eric7/MicroPython/MicroPythonFileSystemUtilities.py",
       "src/eric7/MicroPython/MicroPythonGraphWidget.py",
       "src/eric7/MicroPython/MicroPythonProgressInfoDialog.py",
+      "src/eric7/MicroPython/MicroPythonReplWidget.py",
+      "src/eric7/MicroPython/MicroPythonSerialDeviceInterface.py",
       "src/eric7/MicroPython/MicroPythonSerialPort.py",
+      "src/eric7/MicroPython/MicroPythonWebreplConnectionDialog.py",
+      "src/eric7/MicroPython/MicroPythonWebreplDeviceInterface.py",
+      "src/eric7/MicroPython/MicroPythonWebreplSocket.py",
+      "src/eric7/MicroPython/MicroPythonWebreplUrlAddEditDialog.py",
+      "src/eric7/MicroPython/MicroPythonWebreplUrlsConfigDialog.py",
       "src/eric7/MicroPython/MicroPythonWidget.py",
       "src/eric7/MicroPython/MipLocalInstaller.py",
       "src/eric7/MicroPython/MipPackageDialog.py",
--- a/src/eric7/APIs/Python3/eric7.api	Tue May 02 11:39:09 2023 +0200
+++ b/src/eric7/APIs/Python3/eric7.api	Thu May 04 17:58:52 2023 +0200
@@ -2692,6 +2692,7 @@
 eric7.MicroPython.Devices.DeviceBase.BaseDevice.disconnectWifi?4()
 eric7.MicroPython.Devices.DeviceBase.BaseDevice.downloadFirmware?4()
 eric7.MicroPython.Devices.DeviceBase.BaseDevice.ensurePath?4(target)
+eric7.MicroPython.Devices.DeviceBase.BaseDevice.executeCommands?4(commands, *, mode="raw", timeout=0)
 eric7.MicroPython.Devices.DeviceBase.BaseDevice.exists?4(pathname)
 eric7.MicroPython.Devices.DeviceBase.BaseDevice.fileSystemInfo?4()
 eric7.MicroPython.Devices.DeviceBase.BaseDevice.forceInterrupt?4()
@@ -2956,15 +2957,15 @@
 eric7.MicroPython.IgnoredDevicesDialog.IgnoredDevicesDialog?1(deviceList, parent=None)
 eric7.MicroPython.MicroPythonDeviceInterface.MicroPythonDeviceInterface.PasteModePrompt?7
 eric7.MicroPython.MicroPythonDeviceInterface.MicroPythonDeviceInterface.TracebackMarker?7
-eric7.MicroPython.MicroPythonDeviceInterface.MicroPythonDeviceInterface.connectToDevice?4(port)
+eric7.MicroPython.MicroPythonDeviceInterface.MicroPythonDeviceInterface.connectToDevice?4(connection)
 eric7.MicroPython.MicroPythonDeviceInterface.MicroPythonDeviceInterface.dataReceived?7
 eric7.MicroPython.MicroPythonDeviceInterface.MicroPythonDeviceInterface.disconnectFromDevice?4()
 eric7.MicroPython.MicroPythonDeviceInterface.MicroPythonDeviceInterface.execute?4(commands, *, mode="raw", timeout=0)
-eric7.MicroPython.MicroPythonDeviceInterface.MicroPythonDeviceInterface.executeAsync?4(commandsList)
+eric7.MicroPython.MicroPythonDeviceInterface.MicroPythonDeviceInterface.executeAsync?4(commandsList, submitMode)
 eric7.MicroPython.MicroPythonDeviceInterface.MicroPythonDeviceInterface.executeAsyncFinished?7
-eric7.MicroPython.MicroPythonDeviceInterface.MicroPythonDeviceInterface.executeAsyncPaste?4(commandsList)
 eric7.MicroPython.MicroPythonDeviceInterface.MicroPythonDeviceInterface.handlePreferencesChanged?4()
 eric7.MicroPython.MicroPythonDeviceInterface.MicroPythonDeviceInterface.isConnected?4()
+eric7.MicroPython.MicroPythonDeviceInterface.MicroPythonDeviceInterface.osdInfo?7
 eric7.MicroPython.MicroPythonDeviceInterface.MicroPythonDeviceInterface.probeDevice?4()
 eric7.MicroPython.MicroPythonDeviceInterface.MicroPythonDeviceInterface.write?4(data)
 eric7.MicroPython.MicroPythonDeviceInterface.MicroPythonDeviceInterface?1(parent=None)
@@ -3037,6 +3038,30 @@
 eric7.MicroPython.MicroPythonGraphWidget.MicroPythonGraphWidget?1(parent=None)
 eric7.MicroPython.MicroPythonProgressInfoDialog.MicroPythonProgressInfoDialog.addMessage?4(message)
 eric7.MicroPython.MicroPythonProgressInfoDialog.MicroPythonProgressInfoDialog?1(parent=None)
+eric7.MicroPython.MicroPythonReplWidget.AnsiColorSchemes?7
+eric7.MicroPython.MicroPythonReplWidget.MicroPythonReplEdit.doZoom?4(value)
+eric7.MicroPython.MicroPythonReplWidget.MicroPythonReplEdit.handlePreferencesChanged?4()
+eric7.MicroPython.MicroPythonReplWidget.MicroPythonReplEdit.keyPressEvent?4(evt)
+eric7.MicroPython.MicroPythonReplWidget.MicroPythonReplEdit.mouseReleaseEvent?4(evt)
+eric7.MicroPython.MicroPythonReplWidget.MicroPythonReplEdit.osdInfo?7
+eric7.MicroPython.MicroPythonReplWidget.MicroPythonReplEdit.processData?4(data)
+eric7.MicroPython.MicroPythonReplWidget.MicroPythonReplEdit.setInterface?4(deviceInterface)
+eric7.MicroPython.MicroPythonReplWidget.MicroPythonReplEdit?1(parent=None)
+eric7.MicroPython.MicroPythonReplWidget.MicroPythonReplWidget.ZoomMax?7
+eric7.MicroPython.MicroPythonReplWidget.MicroPythonReplWidget.ZoomMin?7
+eric7.MicroPython.MicroPythonReplWidget.MicroPythonReplWidget.clearOSD?4()
+eric7.MicroPython.MicroPythonReplWidget.MicroPythonReplWidget.replEdit?4()
+eric7.MicroPython.MicroPythonReplWidget.MicroPythonReplWidget.setOSDInfo?4(infoStr)
+eric7.MicroPython.MicroPythonReplWidget.MicroPythonReplWidget?1(parent=None)
+eric7.MicroPython.MicroPythonSerialDeviceInterface.MicroPythonSerialDeviceInterface.connectToDevice?4(connection)
+eric7.MicroPython.MicroPythonSerialDeviceInterface.MicroPythonSerialDeviceInterface.disconnectFromDevice?4()
+eric7.MicroPython.MicroPythonSerialDeviceInterface.MicroPythonSerialDeviceInterface.execute?4(commands, *, mode="raw", timeout=0)
+eric7.MicroPython.MicroPythonSerialDeviceInterface.MicroPythonSerialDeviceInterface.executeAsync?4(commandsList, submitMode)
+eric7.MicroPython.MicroPythonSerialDeviceInterface.MicroPythonSerialDeviceInterface.handlePreferencesChanged?4()
+eric7.MicroPython.MicroPythonSerialDeviceInterface.MicroPythonSerialDeviceInterface.isConnected?4()
+eric7.MicroPython.MicroPythonSerialDeviceInterface.MicroPythonSerialDeviceInterface.probeDevice?4()
+eric7.MicroPython.MicroPythonSerialDeviceInterface.MicroPythonSerialDeviceInterface.write?4(data)
+eric7.MicroPython.MicroPythonSerialDeviceInterface.MicroPythonSerialDeviceInterface?1(parent=None)
 eric7.MicroPython.MicroPythonSerialPort.MicroPythonSerialPort.closeSerialLink?4()
 eric7.MicroPython.MicroPythonSerialPort.MicroPythonSerialPort.hasTimedOut?4()
 eric7.MicroPython.MicroPythonSerialPort.MicroPythonSerialPort.isConnected?4()
@@ -3044,21 +3069,51 @@
 eric7.MicroPython.MicroPythonSerialPort.MicroPythonSerialPort.readUntil?4(expected=b"\n", size=None, timeout=0)
 eric7.MicroPython.MicroPythonSerialPort.MicroPythonSerialPort.setTimeout?4(timeout)
 eric7.MicroPython.MicroPythonSerialPort.MicroPythonSerialPort?1(timeout=10000, parent=None)
-eric7.MicroPython.MicroPythonWidget.AnsiColorSchemes?7
+eric7.MicroPython.MicroPythonWebreplConnectionDialog.MicroPythonWebreplConnectionDialog.getWebreplConnectionParameters?4()
+eric7.MicroPython.MicroPythonWebreplConnectionDialog.MicroPythonWebreplConnectionDialog.on_showPasswordButton_clicked?4(checked)
+eric7.MicroPython.MicroPythonWebreplConnectionDialog.MicroPythonWebreplConnectionDialog?1(currentWebreplUrl, currentType, parent=None)
+eric7.MicroPython.MicroPythonWebreplDeviceInterface.MicroPythonWebreplDeviceInterface.connectToDevice?4(connection)
+eric7.MicroPython.MicroPythonWebreplDeviceInterface.MicroPythonWebreplDeviceInterface.disconnectFromDevice?4()
+eric7.MicroPython.MicroPythonWebreplDeviceInterface.MicroPythonWebreplDeviceInterface.execute?4(commands, *, mode="raw", timeout=0)
+eric7.MicroPython.MicroPythonWebreplDeviceInterface.MicroPythonWebreplDeviceInterface.executeAsync?4(commandsList, submitMode)
+eric7.MicroPython.MicroPythonWebreplDeviceInterface.MicroPythonWebreplDeviceInterface.handlePreferencesChanged?4()
+eric7.MicroPython.MicroPythonWebreplDeviceInterface.MicroPythonWebreplDeviceInterface.isConnected?4()
+eric7.MicroPython.MicroPythonWebreplDeviceInterface.MicroPythonWebreplDeviceInterface.probeDevice?4()
+eric7.MicroPython.MicroPythonWebreplDeviceInterface.MicroPythonWebreplDeviceInterface.write?4(data)
+eric7.MicroPython.MicroPythonWebreplDeviceInterface.MicroPythonWebreplDeviceInterface?1(parent=None)
+eric7.MicroPython.MicroPythonWebreplSocket.MicroPythonWebreplSocket.connectToDevice?4(host, port)
+eric7.MicroPython.MicroPythonWebreplSocket.MicroPythonWebreplSocket.disconnect?4()
+eric7.MicroPython.MicroPythonWebreplSocket.MicroPythonWebreplSocket.hasTimedOut?4()
+eric7.MicroPython.MicroPythonWebreplSocket.MicroPythonWebreplSocket.isConnected?4()
+eric7.MicroPython.MicroPythonWebreplSocket.MicroPythonWebreplSocket.login?4(password)
+eric7.MicroPython.MicroPythonWebreplSocket.MicroPythonWebreplSocket.readAll?4(timeout=0)
+eric7.MicroPython.MicroPythonWebreplSocket.MicroPythonWebreplSocket.readUntil?4(expected=b"\n", size=None, timeout=0)
+eric7.MicroPython.MicroPythonWebreplSocket.MicroPythonWebreplSocket.readyRead?7
+eric7.MicroPython.MicroPythonWebreplSocket.MicroPythonWebreplSocket.setTimeout?4(timeout)
+eric7.MicroPython.MicroPythonWebreplSocket.MicroPythonWebreplSocket.timeout?4()
+eric7.MicroPython.MicroPythonWebreplSocket.MicroPythonWebreplSocket.waitForConnected?4()
+eric7.MicroPython.MicroPythonWebreplSocket.MicroPythonWebreplSocket.writeTextMessage?4(data)
+eric7.MicroPython.MicroPythonWebreplSocket.MicroPythonWebreplSocket?1(timeout=10000, parent=None)
+eric7.MicroPython.MicroPythonWebreplUrlAddEditDialog.MicroPythonWebreplUrlAddEditDialog.getWebreplUrl?4()
+eric7.MicroPython.MicroPythonWebreplUrlAddEditDialog.MicroPythonWebreplUrlAddEditDialog?1(definedNames, connectionParams=None, parent=None)
+eric7.MicroPython.MicroPythonWebreplUrlsConfigDialog.MicroPythonWebreplUrlsConfigDialog.getWebreplDict?4()
+eric7.MicroPython.MicroPythonWebreplUrlsConfigDialog.MicroPythonWebreplUrlsConfigDialog.on_addButton_clicked?4()
+eric7.MicroPython.MicroPythonWebreplUrlsConfigDialog.MicroPythonWebreplUrlsConfigDialog.on_editButton_clicked?4()
+eric7.MicroPython.MicroPythonWebreplUrlsConfigDialog.MicroPythonWebreplUrlsConfigDialog.on_removeAllButton_clicked?4()
+eric7.MicroPython.MicroPythonWebreplUrlsConfigDialog.MicroPythonWebreplUrlsConfigDialog.on_removeButton_clicked?4()
+eric7.MicroPython.MicroPythonWebreplUrlsConfigDialog.MicroPythonWebreplUrlsConfigDialog?1(webreplDict, parent=None)
 eric7.MicroPython.MicroPythonWidget.MicroPythonWidget.DeviceBoardRole?7
+eric7.MicroPython.MicroPythonWidget.MicroPythonWidget.DeviceInterfaceTypeRole?7
 eric7.MicroPython.MicroPythonWidget.MicroPythonWidget.DevicePidRole?7
 eric7.MicroPython.MicroPythonWidget.MicroPythonWidget.DevicePortRole?7
 eric7.MicroPython.MicroPythonWidget.MicroPythonWidget.DeviceSerNoRole?7
 eric7.MicroPython.MicroPythonWidget.MicroPythonWidget.DeviceTypeRole?7
 eric7.MicroPython.MicroPythonWidget.MicroPythonWidget.DeviceVidRole?7
+eric7.MicroPython.MicroPythonWidget.MicroPythonWidget.DeviceWebreplUrlRole?7
 eric7.MicroPython.MicroPythonWidget.MicroPythonWidget.ManualMarker?7
-eric7.MicroPython.MicroPythonWidget.MicroPythonWidget.ZoomMax?7
-eric7.MicroPython.MicroPythonWidget.MicroPythonWidget.ZoomMin?7
 eric7.MicroPython.MicroPythonWidget.MicroPythonWidget.dataReceived?7
 eric7.MicroPython.MicroPythonWidget.MicroPythonWidget.deviceInterface?4()
 eric7.MicroPython.MicroPythonWidget.MicroPythonWidget.deviceSupportsLocalFileAccess?4()
-eric7.MicroPython.MicroPythonWidget.MicroPythonWidget.eventFilter?4(obj, evt)
-eric7.MicroPython.MicroPythonWidget.MicroPythonWidget.getCurrentBoard?4()
 eric7.MicroPython.MicroPythonWidget.MicroPythonWidget.getCurrentPort?4()
 eric7.MicroPython.MicroPythonWidget.MicroPythonWidget.getDevice?4()
 eric7.MicroPython.MicroPythonWidget.MicroPythonWidget.getDeviceWorkspace?4()
@@ -3068,7 +3123,6 @@
 eric7.MicroPython.MicroPythonWidget.MicroPythonWidget.isLinkConnected?4()
 eric7.MicroPython.MicroPythonWidget.MicroPythonWidget.isMicrobit?4()
 eric7.MicroPython.MicroPythonWidget.MicroPythonWidget.on_chartButton_clicked?4(checked)
-eric7.MicroPython.MicroPythonWidget.MicroPythonWidget.on_checkButton_clicked?4()
 eric7.MicroPython.MicroPythonWidget.MicroPythonWidget.on_connectButton_clicked?4()
 eric7.MicroPython.MicroPythonWidget.MicroPythonWidget.on_deviceTypeComboBox_activated?4(index)
 eric7.MicroPython.MicroPythonWidget.MicroPythonWidget.on_filesButton_clicked?4(checked)
@@ -7963,7 +8017,6 @@
 eric7.Project.AddLanguageDialog.AddLanguageDialog.getSelectedLanguage?4()
 eric7.Project.AddLanguageDialog.AddLanguageDialog?1(parent=None, name=None)
 eric7.Project.CreateDialogCodeDialog.CreateDialogCodeDialog.DialogClasses?7
-eric7.Project.CreateDialogCodeDialog.CreateDialogCodeDialog.Separator?7
 eric7.Project.CreateDialogCodeDialog.CreateDialogCodeDialog.initError?4()
 eric7.Project.CreateDialogCodeDialog.CreateDialogCodeDialog.on_buttonBox_clicked?4(button)
 eric7.Project.CreateDialogCodeDialog.CreateDialogCodeDialog.on_classNameCombo_activated?4(index)
@@ -7975,7 +8028,6 @@
 eric7.Project.CreateDialogCodeDialog.pyqtSignatureRole?7
 eric7.Project.CreateDialogCodeDialog.pythonSignatureRole?7
 eric7.Project.CreateDialogCodeDialog.returnTypeRole?7
-eric7.Project.CreateDialogCodeDialog.rubySignatureRole?7
 eric7.Project.DebuggerPropertiesDialog.DebuggerPropertiesDialog.on_debugClientClearHistoryButton_clicked?4()
 eric7.Project.DebuggerPropertiesDialog.DebuggerPropertiesDialog.on_debugClientPicker_aboutToShowPathPickerDialog?4()
 eric7.Project.DebuggerPropertiesDialog.DebuggerPropertiesDialog.storeData?4()
@@ -8329,7 +8381,6 @@
 eric7.Project.ProjectOthersBrowser.ProjectOthersBrowser.showMenu?7
 eric7.Project.ProjectOthersBrowser.ProjectOthersBrowser?1(project, projectBrowser, parent=None)
 eric7.Project.ProjectResourcesBrowser.ProjectResourcesBrowser.RCFilenameFormatPython?7
-eric7.Project.ProjectResourcesBrowser.ProjectResourcesBrowser.RCFilenameFormatRuby?7
 eric7.Project.ProjectResourcesBrowser.ProjectResourcesBrowser._contextMenuRequested?5(coord)
 eric7.Project.ProjectResourcesBrowser.ProjectResourcesBrowser._createPopupMenus?5()
 eric7.Project.ProjectResourcesBrowser.ProjectResourcesBrowser._initHookMethods?5()
@@ -8404,10 +8455,12 @@
 eric7.Project.TranslationPropertiesDialog.TranslationPropertiesDialog?1(project, new, parent)
 eric7.Project.UicCompilerOptionsDialog.UicCompilerOptionsDialog.getData?4()
 eric7.Project.UicCompilerOptionsDialog.UicCompilerOptionsDialog?1(compilerOptions, compiler, parent=None)
+eric7.Project.UicLoadUi5._printerr?5(dataString)
 eric7.Project.UicLoadUi5._printout?5(dataString)
 eric7.Project.UicLoadUi5.className?4(formFile, projectPath)
 eric7.Project.UicLoadUi5.objectName?4(formFile, projectPath)
 eric7.Project.UicLoadUi5.signatures?4(formFile, projectPath)
+eric7.Project.UicLoadUi6._printerr?5(dataString)
 eric7.Project.UicLoadUi6._printout?5(dataString)
 eric7.Project.UicLoadUi6.className?4(formFile, projectPath)
 eric7.Project.UicLoadUi6.objectName?4(formFile, projectPath)
--- a/src/eric7/APIs/Python3/eric7.bas	Tue May 02 11:39:09 2023 +0200
+++ b/src/eric7/APIs/Python3/eric7.bas	Thu May 04 17:58:52 2023 +0200
@@ -664,7 +664,15 @@
 MicroPythonGraphWidget QWidget
 MicroPythonPage ConfigurationPageBase Ui_MicroPythonPage
 MicroPythonProgressInfoDialog QDialog Ui_MicroPythonProgressInfoDialog
+MicroPythonReplEdit QTextEdit
+MicroPythonReplWidget QWidget
+MicroPythonSerialDeviceInterface MicroPythonDeviceInterface
 MicroPythonSerialPort QSerialPort
+MicroPythonWebreplConnectionDialog QDialog Ui_MicroPythonWebreplConnectionDialog
+MicroPythonWebreplDeviceInterface MicroPythonDeviceInterface
+MicroPythonWebreplSocket QWebSocket
+MicroPythonWebreplUrlAddEditDialog QDialog Ui_MicroPythonWebreplUrlAddEditDialog
+MicroPythonWebreplUrlsConfigDialog QDialog Ui_MicroPythonWebreplUrlsConfigDialog
 MicroPythonWidget QWidget Ui_MicroPythonWidget
 MicrobitDevice BaseDevice
 MicrosoftEngine TranslationEngine
Binary file src/eric7/Documentation/Help/source.qch has changed
--- a/src/eric7/Documentation/Help/source.qhp	Tue May 02 11:39:09 2023 +0200
+++ b/src/eric7/Documentation/Help/source.qhp	Thu May 04 17:58:52 2023 +0200
@@ -327,7 +327,14 @@
             <section title="eric7.MicroPython.MicroPythonFileSystemUtilities" ref="eric7.MicroPython.MicroPythonFileSystemUtilities.html" />
             <section title="eric7.MicroPython.MicroPythonGraphWidget" ref="eric7.MicroPython.MicroPythonGraphWidget.html" />
             <section title="eric7.MicroPython.MicroPythonProgressInfoDialog" ref="eric7.MicroPython.MicroPythonProgressInfoDialog.html" />
+            <section title="eric7.MicroPython.MicroPythonReplWidget" ref="eric7.MicroPython.MicroPythonReplWidget.html" />
+            <section title="eric7.MicroPython.MicroPythonSerialDeviceInterface" ref="eric7.MicroPython.MicroPythonSerialDeviceInterface.html" />
             <section title="eric7.MicroPython.MicroPythonSerialPort" ref="eric7.MicroPython.MicroPythonSerialPort.html" />
+            <section title="eric7.MicroPython.MicroPythonWebreplConnectionDialog" ref="eric7.MicroPython.MicroPythonWebreplConnectionDialog.html" />
+            <section title="eric7.MicroPython.MicroPythonWebreplDeviceInterface" ref="eric7.MicroPython.MicroPythonWebreplDeviceInterface.html" />
+            <section title="eric7.MicroPython.MicroPythonWebreplSocket" ref="eric7.MicroPython.MicroPythonWebreplSocket.html" />
+            <section title="eric7.MicroPython.MicroPythonWebreplUrlAddEditDialog" ref="eric7.MicroPython.MicroPythonWebreplUrlAddEditDialog.html" />
+            <section title="eric7.MicroPython.MicroPythonWebreplUrlsConfigDialog" ref="eric7.MicroPython.MicroPythonWebreplUrlsConfigDialog.html" />
             <section title="eric7.MicroPython.MicroPythonWidget" ref="eric7.MicroPython.MicroPythonWidget.html" />
             <section title="eric7.MicroPython.MipLocalInstaller" ref="eric7.MicroPython.MipLocalInstaller.html" />
             <section title="eric7.MicroPython.MipPackageDialog" ref="eric7.MicroPython.MipPackageDialog.html" />
@@ -2097,6 +2104,7 @@
       <keyword name="BaseDevice.disconnectWifi" id="BaseDevice.disconnectWifi" ref="eric7.MicroPython.Devices.DeviceBase.html#BaseDevice.disconnectWifi" />
       <keyword name="BaseDevice.downloadFirmware" id="BaseDevice.downloadFirmware" ref="eric7.MicroPython.Devices.DeviceBase.html#BaseDevice.downloadFirmware" />
       <keyword name="BaseDevice.ensurePath" id="BaseDevice.ensurePath" ref="eric7.MicroPython.Devices.DeviceBase.html#BaseDevice.ensurePath" />
+      <keyword name="BaseDevice.executeCommands" id="BaseDevice.executeCommands" ref="eric7.MicroPython.Devices.DeviceBase.html#BaseDevice.executeCommands" />
       <keyword name="BaseDevice.exists" id="BaseDevice.exists" ref="eric7.MicroPython.Devices.DeviceBase.html#BaseDevice.exists" />
       <keyword name="BaseDevice.fileSystemInfo" id="BaseDevice.fileSystemInfo" ref="eric7.MicroPython.Devices.DeviceBase.html#BaseDevice.fileSystemInfo" />
       <keyword name="BaseDevice.forceInterrupt" id="BaseDevice.forceInterrupt" ref="eric7.MicroPython.Devices.DeviceBase.html#BaseDevice.forceInterrupt" />
@@ -3642,7 +3650,6 @@
       <keyword name="CreateDialogCodeDialog (Module)" id="CreateDialogCodeDialog (Module)" ref="eric7.Project.CreateDialogCodeDialog.html" />
       <keyword name="CreateDialogCodeDialog.__className" id="CreateDialogCodeDialog.__className" ref="eric7.Project.CreateDialogCodeDialog.html#CreateDialogCodeDialog.__className" />
       <keyword name="CreateDialogCodeDialog.__generateCode" id="CreateDialogCodeDialog.__generateCode" ref="eric7.Project.CreateDialogCodeDialog.html#CreateDialogCodeDialog.__generateCode" />
-      <keyword name="CreateDialogCodeDialog.__generatePythonCode" id="CreateDialogCodeDialog.__generatePythonCode" ref="eric7.Project.CreateDialogCodeDialog.html#CreateDialogCodeDialog.__generatePythonCode" />
       <keyword name="CreateDialogCodeDialog.__mapType" id="CreateDialogCodeDialog.__mapType" ref="eric7.Project.CreateDialogCodeDialog.html#CreateDialogCodeDialog.__mapType" />
       <keyword name="CreateDialogCodeDialog.__objectName" id="CreateDialogCodeDialog.__objectName" ref="eric7.Project.CreateDialogCodeDialog.html#CreateDialogCodeDialog.__objectName" />
       <keyword name="CreateDialogCodeDialog.__runUicLoadUi" id="CreateDialogCodeDialog.__runUicLoadUi" ref="eric7.Project.CreateDialogCodeDialog.html#CreateDialogCodeDialog.__runUicLoadUi" />
@@ -10793,18 +10800,10 @@
       <keyword name="MicroPythonDeviceInterface" id="MicroPythonDeviceInterface" ref="eric7.MicroPython.MicroPythonDeviceInterface.html#MicroPythonDeviceInterface" />
       <keyword name="MicroPythonDeviceInterface (Constructor)" id="MicroPythonDeviceInterface (Constructor)" ref="eric7.MicroPython.MicroPythonDeviceInterface.html#MicroPythonDeviceInterface.__init__" />
       <keyword name="MicroPythonDeviceInterface (Module)" id="MicroPythonDeviceInterface (Module)" ref="eric7.MicroPython.MicroPythonDeviceInterface.html" />
-      <keyword name="MicroPythonDeviceInterface.__execute_paste" id="MicroPythonDeviceInterface.__execute_paste" ref="eric7.MicroPython.MicroPythonDeviceInterface.html#MicroPythonDeviceInterface.__execute_paste" />
-      <keyword name="MicroPythonDeviceInterface.__execute_raw" id="MicroPythonDeviceInterface.__execute_raw" ref="eric7.MicroPython.MicroPythonDeviceInterface.html#MicroPythonDeviceInterface.__execute_raw" />
-      <keyword name="MicroPythonDeviceInterface.__pasteOff" id="MicroPythonDeviceInterface.__pasteOff" ref="eric7.MicroPython.MicroPythonDeviceInterface.html#MicroPythonDeviceInterface.__pasteOff" />
-      <keyword name="MicroPythonDeviceInterface.__pasteOn" id="MicroPythonDeviceInterface.__pasteOn" ref="eric7.MicroPython.MicroPythonDeviceInterface.html#MicroPythonDeviceInterface.__pasteOn" />
-      <keyword name="MicroPythonDeviceInterface.__rawOff" id="MicroPythonDeviceInterface.__rawOff" ref="eric7.MicroPython.MicroPythonDeviceInterface.html#MicroPythonDeviceInterface.__rawOff" />
-      <keyword name="MicroPythonDeviceInterface.__rawOn" id="MicroPythonDeviceInterface.__rawOn" ref="eric7.MicroPython.MicroPythonDeviceInterface.html#MicroPythonDeviceInterface.__rawOn" />
-      <keyword name="MicroPythonDeviceInterface.__readSerial" id="MicroPythonDeviceInterface.__readSerial" ref="eric7.MicroPython.MicroPythonDeviceInterface.html#MicroPythonDeviceInterface.__readSerial" />
       <keyword name="MicroPythonDeviceInterface.connectToDevice" id="MicroPythonDeviceInterface.connectToDevice" ref="eric7.MicroPython.MicroPythonDeviceInterface.html#MicroPythonDeviceInterface.connectToDevice" />
       <keyword name="MicroPythonDeviceInterface.disconnectFromDevice" id="MicroPythonDeviceInterface.disconnectFromDevice" ref="eric7.MicroPython.MicroPythonDeviceInterface.html#MicroPythonDeviceInterface.disconnectFromDevice" />
       <keyword name="MicroPythonDeviceInterface.execute" id="MicroPythonDeviceInterface.execute" ref="eric7.MicroPython.MicroPythonDeviceInterface.html#MicroPythonDeviceInterface.execute" />
       <keyword name="MicroPythonDeviceInterface.executeAsync" id="MicroPythonDeviceInterface.executeAsync" ref="eric7.MicroPython.MicroPythonDeviceInterface.html#MicroPythonDeviceInterface.executeAsync" />
-      <keyword name="MicroPythonDeviceInterface.executeAsyncPaste" id="MicroPythonDeviceInterface.executeAsyncPaste" ref="eric7.MicroPython.MicroPythonDeviceInterface.html#MicroPythonDeviceInterface.executeAsyncPaste" />
       <keyword name="MicroPythonDeviceInterface.handlePreferencesChanged" id="MicroPythonDeviceInterface.handlePreferencesChanged" ref="eric7.MicroPython.MicroPythonDeviceInterface.html#MicroPythonDeviceInterface.handlePreferencesChanged" />
       <keyword name="MicroPythonDeviceInterface.isConnected" id="MicroPythonDeviceInterface.isConnected" ref="eric7.MicroPython.MicroPythonDeviceInterface.html#MicroPythonDeviceInterface.isConnected" />
       <keyword name="MicroPythonDeviceInterface.probeDevice" id="MicroPythonDeviceInterface.probeDevice" ref="eric7.MicroPython.MicroPythonDeviceInterface.html#MicroPythonDeviceInterface.probeDevice" />
@@ -10902,6 +10901,44 @@
       <keyword name="MicroPythonProgressInfoDialog (Constructor)" id="MicroPythonProgressInfoDialog (Constructor)" ref="eric7.MicroPython.MicroPythonProgressInfoDialog.html#MicroPythonProgressInfoDialog.__init__" />
       <keyword name="MicroPythonProgressInfoDialog (Module)" id="MicroPythonProgressInfoDialog (Module)" ref="eric7.MicroPython.MicroPythonProgressInfoDialog.html" />
       <keyword name="MicroPythonProgressInfoDialog.addMessage" id="MicroPythonProgressInfoDialog.addMessage" ref="eric7.MicroPython.MicroPythonProgressInfoDialog.html#MicroPythonProgressInfoDialog.addMessage" />
+      <keyword name="MicroPythonReplEdit" id="MicroPythonReplEdit" ref="eric7.MicroPython.MicroPythonReplWidget.html#MicroPythonReplEdit" />
+      <keyword name="MicroPythonReplEdit (Constructor)" id="MicroPythonReplEdit (Constructor)" ref="eric7.MicroPython.MicroPythonReplWidget.html#MicroPythonReplEdit.__init__" />
+      <keyword name="MicroPythonReplEdit.__clear" id="MicroPythonReplEdit.__clear" ref="eric7.MicroPython.MicroPythonReplWidget.html#MicroPythonReplEdit.__clear" />
+      <keyword name="MicroPythonReplEdit.__paste" id="MicroPythonReplEdit.__paste" ref="eric7.MicroPython.MicroPythonReplWidget.html#MicroPythonReplEdit.__paste" />
+      <keyword name="MicroPythonReplEdit.__setCharFormat" id="MicroPythonReplEdit.__setCharFormat" ref="eric7.MicroPython.MicroPythonReplWidget.html#MicroPythonReplEdit.__setCharFormat" />
+      <keyword name="MicroPythonReplEdit.__showContextMenu" id="MicroPythonReplEdit.__showContextMenu" ref="eric7.MicroPython.MicroPythonReplWidget.html#MicroPythonReplEdit.__showContextMenu" />
+      <keyword name="MicroPythonReplEdit.doZoom" id="MicroPythonReplEdit.doZoom" ref="eric7.MicroPython.MicroPythonReplWidget.html#MicroPythonReplEdit.doZoom" />
+      <keyword name="MicroPythonReplEdit.handlePreferencesChanged" id="MicroPythonReplEdit.handlePreferencesChanged" ref="eric7.MicroPython.MicroPythonReplWidget.html#MicroPythonReplEdit.handlePreferencesChanged" />
+      <keyword name="MicroPythonReplEdit.keyPressEvent" id="MicroPythonReplEdit.keyPressEvent" ref="eric7.MicroPython.MicroPythonReplWidget.html#MicroPythonReplEdit.keyPressEvent" />
+      <keyword name="MicroPythonReplEdit.mouseReleaseEvent" id="MicroPythonReplEdit.mouseReleaseEvent" ref="eric7.MicroPython.MicroPythonReplWidget.html#MicroPythonReplEdit.mouseReleaseEvent" />
+      <keyword name="MicroPythonReplEdit.processData" id="MicroPythonReplEdit.processData" ref="eric7.MicroPython.MicroPythonReplWidget.html#MicroPythonReplEdit.processData" />
+      <keyword name="MicroPythonReplEdit.setInterface" id="MicroPythonReplEdit.setInterface" ref="eric7.MicroPython.MicroPythonReplWidget.html#MicroPythonReplEdit.setInterface" />
+      <keyword name="MicroPythonReplWidget" id="MicroPythonReplWidget" ref="eric7.MicroPython.MicroPythonReplWidget.html#MicroPythonReplWidget" />
+      <keyword name="MicroPythonReplWidget (Constructor)" id="MicroPythonReplWidget (Constructor)" ref="eric7.MicroPython.MicroPythonReplWidget.html#MicroPythonReplWidget.__init__" />
+      <keyword name="MicroPythonReplWidget (Module)" id="MicroPythonReplWidget (Module)" ref="eric7.MicroPython.MicroPythonReplWidget.html" />
+      <keyword name="MicroPythonReplWidget.clearOSD" id="MicroPythonReplWidget.clearOSD" ref="eric7.MicroPython.MicroPythonReplWidget.html#MicroPythonReplWidget.clearOSD" />
+      <keyword name="MicroPythonReplWidget.replEdit" id="MicroPythonReplWidget.replEdit" ref="eric7.MicroPython.MicroPythonReplWidget.html#MicroPythonReplWidget.replEdit" />
+      <keyword name="MicroPythonReplWidget.setOSDInfo" id="MicroPythonReplWidget.setOSDInfo" ref="eric7.MicroPython.MicroPythonReplWidget.html#MicroPythonReplWidget.setOSDInfo" />
+      <keyword name="MicroPythonSerialDeviceInterface" id="MicroPythonSerialDeviceInterface" ref="eric7.MicroPython.MicroPythonSerialDeviceInterface.html#MicroPythonSerialDeviceInterface" />
+      <keyword name="MicroPythonSerialDeviceInterface (Constructor)" id="MicroPythonSerialDeviceInterface (Constructor)" ref="eric7.MicroPython.MicroPythonSerialDeviceInterface.html#MicroPythonSerialDeviceInterface.__init__" />
+      <keyword name="MicroPythonSerialDeviceInterface (Module)" id="MicroPythonSerialDeviceInterface (Module)" ref="eric7.MicroPython.MicroPythonSerialDeviceInterface.html" />
+      <keyword name="MicroPythonSerialDeviceInterface.__executeAsyncPaste" id="MicroPythonSerialDeviceInterface.__executeAsyncPaste" ref="eric7.MicroPython.MicroPythonSerialDeviceInterface.html#MicroPythonSerialDeviceInterface.__executeAsyncPaste" />
+      <keyword name="MicroPythonSerialDeviceInterface.__executeAsyncRaw" id="MicroPythonSerialDeviceInterface.__executeAsyncRaw" ref="eric7.MicroPython.MicroPythonSerialDeviceInterface.html#MicroPythonSerialDeviceInterface.__executeAsyncRaw" />
+      <keyword name="MicroPythonSerialDeviceInterface.__execute_paste" id="MicroPythonSerialDeviceInterface.__execute_paste" ref="eric7.MicroPython.MicroPythonSerialDeviceInterface.html#MicroPythonSerialDeviceInterface.__execute_paste" />
+      <keyword name="MicroPythonSerialDeviceInterface.__execute_raw" id="MicroPythonSerialDeviceInterface.__execute_raw" ref="eric7.MicroPython.MicroPythonSerialDeviceInterface.html#MicroPythonSerialDeviceInterface.__execute_raw" />
+      <keyword name="MicroPythonSerialDeviceInterface.__pasteOff" id="MicroPythonSerialDeviceInterface.__pasteOff" ref="eric7.MicroPython.MicroPythonSerialDeviceInterface.html#MicroPythonSerialDeviceInterface.__pasteOff" />
+      <keyword name="MicroPythonSerialDeviceInterface.__pasteOn" id="MicroPythonSerialDeviceInterface.__pasteOn" ref="eric7.MicroPython.MicroPythonSerialDeviceInterface.html#MicroPythonSerialDeviceInterface.__pasteOn" />
+      <keyword name="MicroPythonSerialDeviceInterface.__rawOff" id="MicroPythonSerialDeviceInterface.__rawOff" ref="eric7.MicroPython.MicroPythonSerialDeviceInterface.html#MicroPythonSerialDeviceInterface.__rawOff" />
+      <keyword name="MicroPythonSerialDeviceInterface.__rawOn" id="MicroPythonSerialDeviceInterface.__rawOn" ref="eric7.MicroPython.MicroPythonSerialDeviceInterface.html#MicroPythonSerialDeviceInterface.__rawOn" />
+      <keyword name="MicroPythonSerialDeviceInterface.__readSerial" id="MicroPythonSerialDeviceInterface.__readSerial" ref="eric7.MicroPython.MicroPythonSerialDeviceInterface.html#MicroPythonSerialDeviceInterface.__readSerial" />
+      <keyword name="MicroPythonSerialDeviceInterface.connectToDevice" id="MicroPythonSerialDeviceInterface.connectToDevice" ref="eric7.MicroPython.MicroPythonSerialDeviceInterface.html#MicroPythonSerialDeviceInterface.connectToDevice" />
+      <keyword name="MicroPythonSerialDeviceInterface.disconnectFromDevice" id="MicroPythonSerialDeviceInterface.disconnectFromDevice" ref="eric7.MicroPython.MicroPythonSerialDeviceInterface.html#MicroPythonSerialDeviceInterface.disconnectFromDevice" />
+      <keyword name="MicroPythonSerialDeviceInterface.execute" id="MicroPythonSerialDeviceInterface.execute" ref="eric7.MicroPython.MicroPythonSerialDeviceInterface.html#MicroPythonSerialDeviceInterface.execute" />
+      <keyword name="MicroPythonSerialDeviceInterface.executeAsync" id="MicroPythonSerialDeviceInterface.executeAsync" ref="eric7.MicroPython.MicroPythonSerialDeviceInterface.html#MicroPythonSerialDeviceInterface.executeAsync" />
+      <keyword name="MicroPythonSerialDeviceInterface.handlePreferencesChanged" id="MicroPythonSerialDeviceInterface.handlePreferencesChanged" ref="eric7.MicroPython.MicroPythonSerialDeviceInterface.html#MicroPythonSerialDeviceInterface.handlePreferencesChanged" />
+      <keyword name="MicroPythonSerialDeviceInterface.isConnected" id="MicroPythonSerialDeviceInterface.isConnected" ref="eric7.MicroPython.MicroPythonSerialDeviceInterface.html#MicroPythonSerialDeviceInterface.isConnected" />
+      <keyword name="MicroPythonSerialDeviceInterface.probeDevice" id="MicroPythonSerialDeviceInterface.probeDevice" ref="eric7.MicroPython.MicroPythonSerialDeviceInterface.html#MicroPythonSerialDeviceInterface.probeDevice" />
+      <keyword name="MicroPythonSerialDeviceInterface.write" id="MicroPythonSerialDeviceInterface.write" ref="eric7.MicroPython.MicroPythonSerialDeviceInterface.html#MicroPythonSerialDeviceInterface.write" />
       <keyword name="MicroPythonSerialPort" id="MicroPythonSerialPort" ref="eric7.MicroPython.MicroPythonSerialPort.html#MicroPythonSerialPort" />
       <keyword name="MicroPythonSerialPort (Constructor)" id="MicroPythonSerialPort (Constructor)" ref="eric7.MicroPython.MicroPythonSerialPort.html#MicroPythonSerialPort.__init__" />
       <keyword name="MicroPythonSerialPort (Module)" id="MicroPythonSerialPort (Module)" ref="eric7.MicroPython.MicroPythonSerialPort.html" />
@@ -10911,20 +10948,73 @@
       <keyword name="MicroPythonSerialPort.openSerialLink" id="MicroPythonSerialPort.openSerialLink" ref="eric7.MicroPython.MicroPythonSerialPort.html#MicroPythonSerialPort.openSerialLink" />
       <keyword name="MicroPythonSerialPort.readUntil" id="MicroPythonSerialPort.readUntil" ref="eric7.MicroPython.MicroPythonSerialPort.html#MicroPythonSerialPort.readUntil" />
       <keyword name="MicroPythonSerialPort.setTimeout" id="MicroPythonSerialPort.setTimeout" ref="eric7.MicroPython.MicroPythonSerialPort.html#MicroPythonSerialPort.setTimeout" />
+      <keyword name="MicroPythonWebreplConnectionDialog" id="MicroPythonWebreplConnectionDialog" ref="eric7.MicroPython.MicroPythonWebreplConnectionDialog.html#MicroPythonWebreplConnectionDialog" />
+      <keyword name="MicroPythonWebreplConnectionDialog (Constructor)" id="MicroPythonWebreplConnectionDialog (Constructor)" ref="eric7.MicroPython.MicroPythonWebreplConnectionDialog.html#MicroPythonWebreplConnectionDialog.__init__" />
+      <keyword name="MicroPythonWebreplConnectionDialog (Module)" id="MicroPythonWebreplConnectionDialog (Module)" ref="eric7.MicroPython.MicroPythonWebreplConnectionDialog.html" />
+      <keyword name="MicroPythonWebreplConnectionDialog.__updateOkButton" id="MicroPythonWebreplConnectionDialog.__updateOkButton" ref="eric7.MicroPython.MicroPythonWebreplConnectionDialog.html#MicroPythonWebreplConnectionDialog.__updateOkButton" />
+      <keyword name="MicroPythonWebreplConnectionDialog.getWebreplConnectionParameters" id="MicroPythonWebreplConnectionDialog.getWebreplConnectionParameters" ref="eric7.MicroPython.MicroPythonWebreplConnectionDialog.html#MicroPythonWebreplConnectionDialog.getWebreplConnectionParameters" />
+      <keyword name="MicroPythonWebreplConnectionDialog.on_showPasswordButton_clicked" id="MicroPythonWebreplConnectionDialog.on_showPasswordButton_clicked" ref="eric7.MicroPython.MicroPythonWebreplConnectionDialog.html#MicroPythonWebreplConnectionDialog.on_showPasswordButton_clicked" />
+      <keyword name="MicroPythonWebreplDeviceInterface" id="MicroPythonWebreplDeviceInterface" ref="eric7.MicroPython.MicroPythonWebreplDeviceInterface.html#MicroPythonWebreplDeviceInterface" />
+      <keyword name="MicroPythonWebreplDeviceInterface (Constructor)" id="MicroPythonWebreplDeviceInterface (Constructor)" ref="eric7.MicroPython.MicroPythonWebreplDeviceInterface.html#MicroPythonWebreplDeviceInterface.__init__" />
+      <keyword name="MicroPythonWebreplDeviceInterface (Module)" id="MicroPythonWebreplDeviceInterface (Module)" ref="eric7.MicroPython.MicroPythonWebreplDeviceInterface.html" />
+      <keyword name="MicroPythonWebreplDeviceInterface.__pasteOff" id="MicroPythonWebreplDeviceInterface.__pasteOff" ref="eric7.MicroPython.MicroPythonWebreplDeviceInterface.html#MicroPythonWebreplDeviceInterface.__pasteOff" />
+      <keyword name="MicroPythonWebreplDeviceInterface.__pasteOn" id="MicroPythonWebreplDeviceInterface.__pasteOn" ref="eric7.MicroPython.MicroPythonWebreplDeviceInterface.html#MicroPythonWebreplDeviceInterface.__pasteOn" />
+      <keyword name="MicroPythonWebreplDeviceInterface.__readAll" id="MicroPythonWebreplDeviceInterface.__readAll" ref="eric7.MicroPython.MicroPythonWebreplDeviceInterface.html#MicroPythonWebreplDeviceInterface.__readAll" />
+      <keyword name="MicroPythonWebreplDeviceInterface.__readSocket" id="MicroPythonWebreplDeviceInterface.__readSocket" ref="eric7.MicroPython.MicroPythonWebreplDeviceInterface.html#MicroPythonWebreplDeviceInterface.__readSocket" />
+      <keyword name="MicroPythonWebreplDeviceInterface.connectToDevice" id="MicroPythonWebreplDeviceInterface.connectToDevice" ref="eric7.MicroPython.MicroPythonWebreplDeviceInterface.html#MicroPythonWebreplDeviceInterface.connectToDevice" />
+      <keyword name="MicroPythonWebreplDeviceInterface.disconnectFromDevice" id="MicroPythonWebreplDeviceInterface.disconnectFromDevice" ref="eric7.MicroPython.MicroPythonWebreplDeviceInterface.html#MicroPythonWebreplDeviceInterface.disconnectFromDevice" />
+      <keyword name="MicroPythonWebreplDeviceInterface.execute" id="MicroPythonWebreplDeviceInterface.execute" ref="eric7.MicroPython.MicroPythonWebreplDeviceInterface.html#MicroPythonWebreplDeviceInterface.execute" />
+      <keyword name="MicroPythonWebreplDeviceInterface.executeAsync" id="MicroPythonWebreplDeviceInterface.executeAsync" ref="eric7.MicroPython.MicroPythonWebreplDeviceInterface.html#MicroPythonWebreplDeviceInterface.executeAsync" />
+      <keyword name="MicroPythonWebreplDeviceInterface.handlePreferencesChanged" id="MicroPythonWebreplDeviceInterface.handlePreferencesChanged" ref="eric7.MicroPython.MicroPythonWebreplDeviceInterface.html#MicroPythonWebreplDeviceInterface.handlePreferencesChanged" />
+      <keyword name="MicroPythonWebreplDeviceInterface.isConnected" id="MicroPythonWebreplDeviceInterface.isConnected" ref="eric7.MicroPython.MicroPythonWebreplDeviceInterface.html#MicroPythonWebreplDeviceInterface.isConnected" />
+      <keyword name="MicroPythonWebreplDeviceInterface.probeDevice" id="MicroPythonWebreplDeviceInterface.probeDevice" ref="eric7.MicroPython.MicroPythonWebreplDeviceInterface.html#MicroPythonWebreplDeviceInterface.probeDevice" />
+      <keyword name="MicroPythonWebreplDeviceInterface.write" id="MicroPythonWebreplDeviceInterface.write" ref="eric7.MicroPython.MicroPythonWebreplDeviceInterface.html#MicroPythonWebreplDeviceInterface.write" />
+      <keyword name="MicroPythonWebreplSocket" id="MicroPythonWebreplSocket" ref="eric7.MicroPython.MicroPythonWebreplSocket.html#MicroPythonWebreplSocket" />
+      <keyword name="MicroPythonWebreplSocket (Constructor)" id="MicroPythonWebreplSocket (Constructor)" ref="eric7.MicroPython.MicroPythonWebreplSocket.html#MicroPythonWebreplSocket.__init__" />
+      <keyword name="MicroPythonWebreplSocket (Module)" id="MicroPythonWebreplSocket (Module)" ref="eric7.MicroPython.MicroPythonWebreplSocket.html" />
+      <keyword name="MicroPythonWebreplSocket.__textDataReceived" id="MicroPythonWebreplSocket.__textDataReceived" ref="eric7.MicroPython.MicroPythonWebreplSocket.html#MicroPythonWebreplSocket.__textDataReceived" />
+      <keyword name="MicroPythonWebreplSocket.connectToDevice" id="MicroPythonWebreplSocket.connectToDevice" ref="eric7.MicroPython.MicroPythonWebreplSocket.html#MicroPythonWebreplSocket.connectToDevice" />
+      <keyword name="MicroPythonWebreplSocket.disconnect" id="MicroPythonWebreplSocket.disconnect" ref="eric7.MicroPython.MicroPythonWebreplSocket.html#MicroPythonWebreplSocket.disconnect" />
+      <keyword name="MicroPythonWebreplSocket.hasTimedOut" id="MicroPythonWebreplSocket.hasTimedOut" ref="eric7.MicroPython.MicroPythonWebreplSocket.html#MicroPythonWebreplSocket.hasTimedOut" />
+      <keyword name="MicroPythonWebreplSocket.isConnected" id="MicroPythonWebreplSocket.isConnected" ref="eric7.MicroPython.MicroPythonWebreplSocket.html#MicroPythonWebreplSocket.isConnected" />
+      <keyword name="MicroPythonWebreplSocket.login" id="MicroPythonWebreplSocket.login" ref="eric7.MicroPython.MicroPythonWebreplSocket.html#MicroPythonWebreplSocket.login" />
+      <keyword name="MicroPythonWebreplSocket.readAll" id="MicroPythonWebreplSocket.readAll" ref="eric7.MicroPython.MicroPythonWebreplSocket.html#MicroPythonWebreplSocket.readAll" />
+      <keyword name="MicroPythonWebreplSocket.readUntil" id="MicroPythonWebreplSocket.readUntil" ref="eric7.MicroPython.MicroPythonWebreplSocket.html#MicroPythonWebreplSocket.readUntil" />
+      <keyword name="MicroPythonWebreplSocket.setTimeout" id="MicroPythonWebreplSocket.setTimeout" ref="eric7.MicroPython.MicroPythonWebreplSocket.html#MicroPythonWebreplSocket.setTimeout" />
+      <keyword name="MicroPythonWebreplSocket.timeout" id="MicroPythonWebreplSocket.timeout" ref="eric7.MicroPython.MicroPythonWebreplSocket.html#MicroPythonWebreplSocket.timeout" />
+      <keyword name="MicroPythonWebreplSocket.waitForConnected" id="MicroPythonWebreplSocket.waitForConnected" ref="eric7.MicroPython.MicroPythonWebreplSocket.html#MicroPythonWebreplSocket.waitForConnected" />
+      <keyword name="MicroPythonWebreplSocket.writeTextMessage" id="MicroPythonWebreplSocket.writeTextMessage" ref="eric7.MicroPython.MicroPythonWebreplSocket.html#MicroPythonWebreplSocket.writeTextMessage" />
+      <keyword name="MicroPythonWebreplUrlAddEditDialog" id="MicroPythonWebreplUrlAddEditDialog" ref="eric7.MicroPython.MicroPythonWebreplUrlAddEditDialog.html#MicroPythonWebreplUrlAddEditDialog" />
+      <keyword name="MicroPythonWebreplUrlAddEditDialog (Constructor)" id="MicroPythonWebreplUrlAddEditDialog (Constructor)" ref="eric7.MicroPython.MicroPythonWebreplUrlAddEditDialog.html#MicroPythonWebreplUrlAddEditDialog.__init__" />
+      <keyword name="MicroPythonWebreplUrlAddEditDialog (Module)" id="MicroPythonWebreplUrlAddEditDialog (Module)" ref="eric7.MicroPython.MicroPythonWebreplUrlAddEditDialog.html" />
+      <keyword name="MicroPythonWebreplUrlAddEditDialog.__populateFields" id="MicroPythonWebreplUrlAddEditDialog.__populateFields" ref="eric7.MicroPython.MicroPythonWebreplUrlAddEditDialog.html#MicroPythonWebreplUrlAddEditDialog.__populateFields" />
+      <keyword name="MicroPythonWebreplUrlAddEditDialog.__updateOkButton" id="MicroPythonWebreplUrlAddEditDialog.__updateOkButton" ref="eric7.MicroPython.MicroPythonWebreplUrlAddEditDialog.html#MicroPythonWebreplUrlAddEditDialog.__updateOkButton" />
+      <keyword name="MicroPythonWebreplUrlAddEditDialog.getWebreplUrl" id="MicroPythonWebreplUrlAddEditDialog.getWebreplUrl" ref="eric7.MicroPython.MicroPythonWebreplUrlAddEditDialog.html#MicroPythonWebreplUrlAddEditDialog.getWebreplUrl" />
+      <keyword name="MicroPythonWebreplUrlsConfigDialog" id="MicroPythonWebreplUrlsConfigDialog" ref="eric7.MicroPython.MicroPythonWebreplUrlsConfigDialog.html#MicroPythonWebreplUrlsConfigDialog" />
+      <keyword name="MicroPythonWebreplUrlsConfigDialog (Constructor)" id="MicroPythonWebreplUrlsConfigDialog (Constructor)" ref="eric7.MicroPython.MicroPythonWebreplUrlsConfigDialog.html#MicroPythonWebreplUrlsConfigDialog.__init__" />
+      <keyword name="MicroPythonWebreplUrlsConfigDialog (Module)" id="MicroPythonWebreplUrlsConfigDialog (Module)" ref="eric7.MicroPython.MicroPythonWebreplUrlsConfigDialog.html" />
+      <keyword name="MicroPythonWebreplUrlsConfigDialog.__definedNames" id="MicroPythonWebreplUrlsConfigDialog.__definedNames" ref="eric7.MicroPython.MicroPythonWebreplUrlsConfigDialog.html#MicroPythonWebreplUrlsConfigDialog.__definedNames" />
+      <keyword name="MicroPythonWebreplUrlsConfigDialog.__resizeColumns" id="MicroPythonWebreplUrlsConfigDialog.__resizeColumns" ref="eric7.MicroPython.MicroPythonWebreplUrlsConfigDialog.html#MicroPythonWebreplUrlsConfigDialog.__resizeColumns" />
+      <keyword name="MicroPythonWebreplUrlsConfigDialog.__sortItems" id="MicroPythonWebreplUrlsConfigDialog.__sortItems" ref="eric7.MicroPython.MicroPythonWebreplUrlsConfigDialog.html#MicroPythonWebreplUrlsConfigDialog.__sortItems" />
+      <keyword name="MicroPythonWebreplUrlsConfigDialog.__updateActionButtons" id="MicroPythonWebreplUrlsConfigDialog.__updateActionButtons" ref="eric7.MicroPython.MicroPythonWebreplUrlsConfigDialog.html#MicroPythonWebreplUrlsConfigDialog.__updateActionButtons" />
+      <keyword name="MicroPythonWebreplUrlsConfigDialog.getWebreplDict" id="MicroPythonWebreplUrlsConfigDialog.getWebreplDict" ref="eric7.MicroPython.MicroPythonWebreplUrlsConfigDialog.html#MicroPythonWebreplUrlsConfigDialog.getWebreplDict" />
+      <keyword name="MicroPythonWebreplUrlsConfigDialog.on_addButton_clicked" id="MicroPythonWebreplUrlsConfigDialog.on_addButton_clicked" ref="eric7.MicroPython.MicroPythonWebreplUrlsConfigDialog.html#MicroPythonWebreplUrlsConfigDialog.on_addButton_clicked" />
+      <keyword name="MicroPythonWebreplUrlsConfigDialog.on_editButton_clicked" id="MicroPythonWebreplUrlsConfigDialog.on_editButton_clicked" ref="eric7.MicroPython.MicroPythonWebreplUrlsConfigDialog.html#MicroPythonWebreplUrlsConfigDialog.on_editButton_clicked" />
+      <keyword name="MicroPythonWebreplUrlsConfigDialog.on_removeAllButton_clicked" id="MicroPythonWebreplUrlsConfigDialog.on_removeAllButton_clicked" ref="eric7.MicroPython.MicroPythonWebreplUrlsConfigDialog.html#MicroPythonWebreplUrlsConfigDialog.on_removeAllButton_clicked" />
+      <keyword name="MicroPythonWebreplUrlsConfigDialog.on_removeButton_clicked" id="MicroPythonWebreplUrlsConfigDialog.on_removeButton_clicked" ref="eric7.MicroPython.MicroPythonWebreplUrlsConfigDialog.html#MicroPythonWebreplUrlsConfigDialog.on_removeButton_clicked" />
       <keyword name="MicroPythonWidget" id="MicroPythonWidget" ref="eric7.MicroPython.MicroPythonWidget.html#MicroPythonWidget" />
       <keyword name="MicroPythonWidget (Constructor)" id="MicroPythonWidget (Constructor)" ref="eric7.MicroPython.MicroPythonWidget.html#MicroPythonWidget.__init__" />
       <keyword name="MicroPythonWidget (Module)" id="MicroPythonWidget (Module)" ref="eric7.MicroPython.MicroPythonWidget.html" />
       <keyword name="MicroPythonWidget.__aboutToShowSuperMenu" id="MicroPythonWidget.__aboutToShowSuperMenu" ref="eric7.MicroPython.MicroPythonWidget.html#MicroPythonWidget.__aboutToShowSuperMenu" />
       <keyword name="MicroPythonWidget.__addUnknownDevices" id="MicroPythonWidget.__addUnknownDevices" ref="eric7.MicroPython.MicroPythonWidget.html#MicroPythonWidget.__addUnknownDevices" />
-      <keyword name="MicroPythonWidget.__clear" id="MicroPythonWidget.__clear" ref="eric7.MicroPython.MicroPythonWidget.html#MicroPythonWidget.__clear" />
       <keyword name="MicroPythonWidget.__compileEditor2Mpy" id="MicroPythonWidget.__compileEditor2Mpy" ref="eric7.MicroPython.MicroPythonWidget.html#MicroPythonWidget.__compileEditor2Mpy" />
       <keyword name="MicroPythonWidget.__compileFile2Mpy" id="MicroPythonWidget.__compileFile2Mpy" ref="eric7.MicroPython.MicroPythonWidget.html#MicroPythonWidget.__compileFile2Mpy" />
       <keyword name="MicroPythonWidget.__configure" id="MicroPythonWidget.__configure" ref="eric7.MicroPython.MicroPythonWidget.html#MicroPythonWidget.__configure" />
+      <keyword name="MicroPythonWidget.__configureWebreplUrls" id="MicroPythonWidget.__configureWebreplUrls" ref="eric7.MicroPython.MicroPythonWidget.html#MicroPythonWidget.__configureWebreplUrls" />
       <keyword name="MicroPythonWidget.__connectToDevice" id="MicroPythonWidget.__connectToDevice" ref="eric7.MicroPython.MicroPythonWidget.html#MicroPythonWidget.__connectToDevice" />
       <keyword name="MicroPythonWidget.__convertToUF2" id="MicroPythonWidget.__convertToUF2" ref="eric7.MicroPython.MicroPythonWidget.html#MicroPythonWidget.__convertToUF2" />
       <keyword name="MicroPythonWidget.__crossCompile" id="MicroPythonWidget.__crossCompile" ref="eric7.MicroPython.MicroPythonWidget.html#MicroPythonWidget.__crossCompile" />
       <keyword name="MicroPythonWidget.__disconnectFromDevice" id="MicroPythonWidget.__disconnectFromDevice" ref="eric7.MicroPython.MicroPythonWidget.html#MicroPythonWidget.__disconnectFromDevice" />
-      <keyword name="MicroPythonWidget.__doZoom" id="MicroPythonWidget.__doZoom" ref="eric7.MicroPython.MicroPythonWidget.html#MicroPythonWidget.__doZoom" />
       <keyword name="MicroPythonWidget.__downloadFirmware" id="MicroPythonWidget.__downloadFirmware" ref="eric7.MicroPython.MicroPythonWidget.html#MicroPythonWidget.__downloadFirmware" />
       <keyword name="MicroPythonWidget.__downloadFromUrl" id="MicroPythonWidget.__downloadFromUrl" ref="eric7.MicroPython.MicroPythonWidget.html#MicroPythonWidget.__downloadFromUrl" />
       <keyword name="MicroPythonWidget.__flashUF2" id="MicroPythonWidget.__flashUF2" ref="eric7.MicroPython.MicroPythonWidget.html#MicroPythonWidget.__flashUF2" />
@@ -10934,15 +11024,10 @@
       <keyword name="MicroPythonWidget.__manageIgnored" id="MicroPythonWidget.__manageIgnored" ref="eric7.MicroPython.MicroPythonWidget.html#MicroPythonWidget.__manageIgnored" />
       <keyword name="MicroPythonWidget.__manageUnknownDevices" id="MicroPythonWidget.__manageUnknownDevices" ref="eric7.MicroPython.MicroPythonWidget.html#MicroPythonWidget.__manageUnknownDevices" />
       <keyword name="MicroPythonWidget.__mpyCrossAvailable" id="MicroPythonWidget.__mpyCrossAvailable" ref="eric7.MicroPython.MicroPythonWidget.html#MicroPythonWidget.__mpyCrossAvailable" />
-      <keyword name="MicroPythonWidget.__paste" id="MicroPythonWidget.__paste" ref="eric7.MicroPython.MicroPythonWidget.html#MicroPythonWidget.__paste" />
       <keyword name="MicroPythonWidget.__populateDeviceTypeComboBox" id="MicroPythonWidget.__populateDeviceTypeComboBox" ref="eric7.MicroPython.MicroPythonWidget.html#MicroPythonWidget.__populateDeviceTypeComboBox" />
-      <keyword name="MicroPythonWidget.__processData" id="MicroPythonWidget.__processData" ref="eric7.MicroPython.MicroPythonWidget.html#MicroPythonWidget.__processData" />
-      <keyword name="MicroPythonWidget.__replEditMouseReleaseEvent" id="MicroPythonWidget.__replEditMouseReleaseEvent" ref="eric7.MicroPython.MicroPythonWidget.html#MicroPythonWidget.__replEditMouseReleaseEvent" />
-      <keyword name="MicroPythonWidget.__setCharFormat" id="MicroPythonWidget.__setCharFormat" ref="eric7.MicroPython.MicroPythonWidget.html#MicroPythonWidget.__setCharFormat" />
       <keyword name="MicroPythonWidget.__setConnected" id="MicroPythonWidget.__setConnected" ref="eric7.MicroPython.MicroPythonWidget.html#MicroPythonWidget.__setConnected" />
       <keyword name="MicroPythonWidget.__showBoardInformation" id="MicroPythonWidget.__showBoardInformation" ref="eric7.MicroPython.MicroPythonWidget.html#MicroPythonWidget.__showBoardInformation" />
       <keyword name="MicroPythonWidget.__showBuiltinModules" id="MicroPythonWidget.__showBuiltinModules" ref="eric7.MicroPython.MicroPythonWidget.html#MicroPythonWidget.__showBuiltinModules" />
-      <keyword name="MicroPythonWidget.__showContextMenu" id="MicroPythonWidget.__showContextMenu" ref="eric7.MicroPython.MicroPythonWidget.html#MicroPythonWidget.__showContextMenu" />
       <keyword name="MicroPythonWidget.__showDeviceTime" id="MicroPythonWidget.__showDeviceTime" ref="eric7.MicroPython.MicroPythonWidget.html#MicroPythonWidget.__showDeviceTime" />
       <keyword name="MicroPythonWidget.__showDeviceVersion" id="MicroPythonWidget.__showDeviceVersion" ref="eric7.MicroPython.MicroPythonWidget.html#MicroPythonWidget.__showDeviceVersion" />
       <keyword name="MicroPythonWidget.__showDocumentation" id="MicroPythonWidget.__showDocumentation" ref="eric7.MicroPython.MicroPythonWidget.html#MicroPythonWidget.__showDocumentation" />
@@ -10953,8 +11038,6 @@
       <keyword name="MicroPythonWidget.__synchronizeTime" id="MicroPythonWidget.__synchronizeTime" ref="eric7.MicroPython.MicroPythonWidget.html#MicroPythonWidget.__synchronizeTime" />
       <keyword name="MicroPythonWidget.deviceInterface" id="MicroPythonWidget.deviceInterface" ref="eric7.MicroPython.MicroPythonWidget.html#MicroPythonWidget.deviceInterface" />
       <keyword name="MicroPythonWidget.deviceSupportsLocalFileAccess" id="MicroPythonWidget.deviceSupportsLocalFileAccess" ref="eric7.MicroPython.MicroPythonWidget.html#MicroPythonWidget.deviceSupportsLocalFileAccess" />
-      <keyword name="MicroPythonWidget.eventFilter" id="MicroPythonWidget.eventFilter" ref="eric7.MicroPython.MicroPythonWidget.html#MicroPythonWidget.eventFilter" />
-      <keyword name="MicroPythonWidget.getCurrentBoard" id="MicroPythonWidget.getCurrentBoard" ref="eric7.MicroPython.MicroPythonWidget.html#MicroPythonWidget.getCurrentBoard" />
       <keyword name="MicroPythonWidget.getCurrentPort" id="MicroPythonWidget.getCurrentPort" ref="eric7.MicroPython.MicroPythonWidget.html#MicroPythonWidget.getCurrentPort" />
       <keyword name="MicroPythonWidget.getDevice" id="MicroPythonWidget.getDevice" ref="eric7.MicroPython.MicroPythonWidget.html#MicroPythonWidget.getDevice" />
       <keyword name="MicroPythonWidget.getDeviceWorkspace" id="MicroPythonWidget.getDeviceWorkspace" ref="eric7.MicroPython.MicroPythonWidget.html#MicroPythonWidget.getDeviceWorkspace" />
@@ -10964,7 +11047,6 @@
       <keyword name="MicroPythonWidget.isLinkConnected" id="MicroPythonWidget.isLinkConnected" ref="eric7.MicroPython.MicroPythonWidget.html#MicroPythonWidget.isLinkConnected" />
       <keyword name="MicroPythonWidget.isMicrobit" id="MicroPythonWidget.isMicrobit" ref="eric7.MicroPython.MicroPythonWidget.html#MicroPythonWidget.isMicrobit" />
       <keyword name="MicroPythonWidget.on_chartButton_clicked" id="MicroPythonWidget.on_chartButton_clicked" ref="eric7.MicroPython.MicroPythonWidget.html#MicroPythonWidget.on_chartButton_clicked" />
-      <keyword name="MicroPythonWidget.on_checkButton_clicked" id="MicroPythonWidget.on_checkButton_clicked" ref="eric7.MicroPython.MicroPythonWidget.html#MicroPythonWidget.on_checkButton_clicked" />
       <keyword name="MicroPythonWidget.on_connectButton_clicked" id="MicroPythonWidget.on_connectButton_clicked" ref="eric7.MicroPython.MicroPythonWidget.html#MicroPythonWidget.on_connectButton_clicked" />
       <keyword name="MicroPythonWidget.on_deviceTypeComboBox_activated" id="MicroPythonWidget.on_deviceTypeComboBox_activated" ref="eric7.MicroPython.MicroPythonWidget.html#MicroPythonWidget.on_deviceTypeComboBox_activated" />
       <keyword name="MicroPythonWidget.on_filesButton_clicked" id="MicroPythonWidget.on_filesButton_clicked" ref="eric7.MicroPython.MicroPythonWidget.html#MicroPythonWidget.on_filesButton_clicked" />
@@ -19188,6 +19270,8 @@
       <keyword name="_percentReplacementFunc" id="_percentReplacementFunc" ref="eric7.Utilities.__init__.html#_percentReplacementFunc" />
       <keyword name="_prettifyJSON" id="_prettifyJSON" ref="eric7.CycloneDXInterface.CycloneDXUtilities.html#_prettifyJSON" />
       <keyword name="_prettifyXML" id="_prettifyXML" ref="eric7.CycloneDXInterface.CycloneDXUtilities.html#_prettifyXML" />
+      <keyword name="_printerr" id="_printerr" ref="eric7.Project.UicLoadUi5.html#_printerr" />
+      <keyword name="_printerr" id="_printerr" ref="eric7.Project.UicLoadUi6.html#_printerr" />
       <keyword name="_printout" id="_printout" ref="eric7.Project.UicLoadUi5.html#_printout" />
       <keyword name="_printout" id="_printout" ref="eric7.Project.UicLoadUi6.html#_printout" />
       <keyword name="_shallPatch" id="_shallPatch" ref="eric7.DebugClients.Python.MultiProcessDebugExtension.html#_shallPatch" />
@@ -20566,7 +20650,14 @@
       <file>eric7.MicroPython.MicroPythonFileSystemUtilities.html</file>
       <file>eric7.MicroPython.MicroPythonGraphWidget.html</file>
       <file>eric7.MicroPython.MicroPythonProgressInfoDialog.html</file>
+      <file>eric7.MicroPython.MicroPythonReplWidget.html</file>
+      <file>eric7.MicroPython.MicroPythonSerialDeviceInterface.html</file>
       <file>eric7.MicroPython.MicroPythonSerialPort.html</file>
+      <file>eric7.MicroPython.MicroPythonWebreplConnectionDialog.html</file>
+      <file>eric7.MicroPython.MicroPythonWebreplDeviceInterface.html</file>
+      <file>eric7.MicroPython.MicroPythonWebreplSocket.html</file>
+      <file>eric7.MicroPython.MicroPythonWebreplUrlAddEditDialog.html</file>
+      <file>eric7.MicroPython.MicroPythonWebreplUrlsConfigDialog.html</file>
       <file>eric7.MicroPython.MicroPythonWidget.html</file>
       <file>eric7.MicroPython.MipLocalInstaller.html</file>
       <file>eric7.MicroPython.MipPackageDialog.html</file>
--- a/src/eric7/Documentation/Source/eric7.MicroPython.Devices.DeviceBase.html	Tue May 02 11:39:09 2023 +0200
+++ b/src/eric7/Documentation/Source/eric7.MicroPython.Devices.DeviceBase.html	Thu May 04 17:58:52 2023 +0200
@@ -251,6 +251,10 @@
 <td>Public method to ensure, that the given target path exists.</td>
 </tr>
 <tr>
+<td><a href="#BaseDevice.executeCommands">executeCommands</a></td>
+<td>Public method to send commands to the connected device and return the result.</td>
+</tr>
+<tr>
 <td><a href="#BaseDevice.exists">exists</a></td>
 <td>Public method to check the existence of a file or directory.</td>
 </tr>
@@ -1070,6 +1074,46 @@
 target directory
 </dd>
 </dl>
+<a NAME="BaseDevice.executeCommands" ID="BaseDevice.executeCommands"></a>
+<h4>BaseDevice.executeCommands</h4>
+<b>executeCommands</b>(<i>commands, *, mode="raw", timeout=0</i>)
+
+<p>
+        Public method to send commands to the connected device and return the
+        result.
+</p>
+<p>
+        If no connected interface is available, empty results will be returned.
+</p>
+<dl>
+
+<dt><i>commands</i> (str or list of str)</dt>
+<dd>
+list of commands to be executed
+</dd>
+<dt><i>mode=</i> (str)</dt>
+<dd>
+submit mode to be used (one of 'raw' or 'paste') (defaults to
+            'raw')
+</dd>
+<dt><i>timeout=</i> (int (optional))</dt>
+<dd>
+per command timeout in milliseconds (0 for configured default)
+            (defaults to 0)
+</dd>
+</dl>
+<dl>
+<dt>Return:</dt>
+<dd>
+tuple containing stdout and stderr output of the device
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+tuple of (bytes, bytes)
+</dd>
+</dl>
 <a NAME="BaseDevice.exists" ID="BaseDevice.exists"></a>
 <h4>BaseDevice.exists</h4>
 <b>exists</b>(<i>pathname</i>)
--- a/src/eric7/Documentation/Source/eric7.MicroPython.MicroPythonDeviceInterface.html	Tue May 02 11:39:09 2023 +0200
+++ b/src/eric7/Documentation/Source/eric7.MicroPython.MicroPythonDeviceInterface.html	Thu May 04 17:58:52 2023 +0200
@@ -9,7 +9,7 @@
 <h1>eric7.MicroPython.MicroPythonDeviceInterface</h1>
 
 <p>
-Module implementing some file system commands for MicroPython.
+Module  implementing an interface base class to talk to a connected MicroPython device.
 </p>
 <h3>Global Attributes</h3>
 
@@ -43,14 +43,18 @@
 
 <dt>dataReceived(data)</dt>
 <dd>
-emitted to send data received via the serial
-        connection for further processing
+emitted to send data received via the connection
+        for further processing
 </dd>
 <dt>executeAsyncFinished()</dt>
 <dd>
 emitted to indicate the end of an
         asynchronously executed list of commands (e.g. a script)
 </dd>
+<dt>osdInfo(str)</dt>
+<dd>
+emitted when some OSD data was received from the device
+</dd>
 </dl>
 <h3>Derived from</h3>
 QObject
@@ -73,40 +77,12 @@
 <td>Constructor</td>
 </tr>
 <tr>
-<td><a href="#MicroPythonDeviceInterface.__execute_paste">__execute_paste</a></td>
-<td>Private method to send commands to the connected device using 'paste' mode and return the result.</td>
-</tr>
-<tr>
-<td><a href="#MicroPythonDeviceInterface.__execute_raw">__execute_raw</a></td>
-<td>Private method to send commands to the connected device using 'raw REPL' mode and return the result.</td>
-</tr>
-<tr>
-<td><a href="#MicroPythonDeviceInterface.__pasteOff">__pasteOff</a></td>
-<td>Private method to switch 'paste' mode off.</td>
-</tr>
-<tr>
-<td><a href="#MicroPythonDeviceInterface.__pasteOn">__pasteOn</a></td>
-<td>Private method to switch the connected device to 'paste' mode.</td>
-</tr>
-<tr>
-<td><a href="#MicroPythonDeviceInterface.__rawOff">__rawOff</a></td>
-<td>Private method to switch 'raw' mode off.</td>
-</tr>
-<tr>
-<td><a href="#MicroPythonDeviceInterface.__rawOn">__rawOn</a></td>
-<td>Private method to switch the connected device to 'raw' mode.</td>
-</tr>
-<tr>
-<td><a href="#MicroPythonDeviceInterface.__readSerial">__readSerial</a></td>
-<td>Private slot to read all available serial data and emit it with the "dataReceived" signal for further processing.</td>
-</tr>
-<tr>
 <td><a href="#MicroPythonDeviceInterface.connectToDevice">connectToDevice</a></td>
-<td>Public slot to start the manager.</td>
+<td>Public slot to connect to the device.</td>
 </tr>
 <tr>
 <td><a href="#MicroPythonDeviceInterface.disconnectFromDevice">disconnectFromDevice</a></td>
-<td>Public slot to stop the thread.</td>
+<td>Public slot to disconnect from the device.</td>
 </tr>
 <tr>
 <td><a href="#MicroPythonDeviceInterface.execute">execute</a></td>
@@ -117,10 +93,6 @@
 <td>Public method to execute a series of commands over a period of time without returning any result (asynchronous execution).</td>
 </tr>
 <tr>
-<td><a href="#MicroPythonDeviceInterface.executeAsyncPaste">executeAsyncPaste</a></td>
-<td>Public method to execute a series of commands over a period of time without returning any result (asynchronous execution).</td>
-</tr>
-<tr>
 <td><a href="#MicroPythonDeviceInterface.handlePreferencesChanged">handlePreferencesChanged</a></td>
 <td>Public slot to handle a change of the preferences.</td>
 </tr>
@@ -157,154 +129,18 @@
 reference to the parent object
 </dd>
 </dl>
-<a NAME="MicroPythonDeviceInterface.__execute_paste" ID="MicroPythonDeviceInterface.__execute_paste"></a>
-<h4>MicroPythonDeviceInterface.__execute_paste</h4>
-<b>__execute_paste</b>(<i>commands, timeout=0</i>)
+<a NAME="MicroPythonDeviceInterface.connectToDevice" ID="MicroPythonDeviceInterface.connectToDevice"></a>
+<h4>MicroPythonDeviceInterface.connectToDevice</h4>
+<b>connectToDevice</b>(<i>connection</i>)
 
 <p>
-        Private method to send commands to the connected device using 'paste' mode
-        and return the result.
-</p>
-<p>
-        If no serial connection is available, empty results will be returned.
-</p>
-<dl>
-
-<dt><i>commands</i> (str or list of str)</dt>
-<dd>
-list of commands to be executed
-</dd>
-<dt><i>timeout</i> (int (optional))</dt>
-<dd>
-per command timeout in milliseconds (0 for configured default)
-            (defaults to 0)
-</dd>
-</dl>
-<dl>
-<dt>Return:</dt>
-<dd>
-tuple containing stdout and stderr output of the device
-</dd>
-</dl>
-<dl>
-<dt>Return Type:</dt>
-<dd>
-tuple of (bytes, bytes)
-</dd>
-</dl>
-<a NAME="MicroPythonDeviceInterface.__execute_raw" ID="MicroPythonDeviceInterface.__execute_raw"></a>
-<h4>MicroPythonDeviceInterface.__execute_raw</h4>
-<b>__execute_raw</b>(<i>commands, timeout=0</i>)
-
-<p>
-        Private method to send commands to the connected device using 'raw REPL' mode
-        and return the result.
-</p>
-<p>
-        If no serial connection is available, empty results will be returned.
+        Public slot to connect to the device.
 </p>
 <dl>
 
-<dt><i>commands</i> (str or list of str)</dt>
-<dd>
-list of commands to be executed
-</dd>
-<dt><i>timeout</i> (int (optional))</dt>
-<dd>
-per command timeout in milliseconds (0 for configured default)
-            (defaults to 0)
-</dd>
-</dl>
-<dl>
-<dt>Return:</dt>
-<dd>
-tuple containing stdout and stderr output of the device
-</dd>
-</dl>
-<dl>
-<dt>Return Type:</dt>
-<dd>
-tuple of (bytes, bytes)
-</dd>
-</dl>
-<a NAME="MicroPythonDeviceInterface.__pasteOff" ID="MicroPythonDeviceInterface.__pasteOff"></a>
-<h4>MicroPythonDeviceInterface.__pasteOff</h4>
-<b>__pasteOff</b>(<i></i>)
-
-<p>
-        Private method to switch 'paste' mode off.
-</p>
-<a NAME="MicroPythonDeviceInterface.__pasteOn" ID="MicroPythonDeviceInterface.__pasteOn"></a>
-<h4>MicroPythonDeviceInterface.__pasteOn</h4>
-<b>__pasteOn</b>(<i></i>)
-
-<p>
-        Private method to switch the connected device to 'paste' mode.
-</p>
-<p>
-        Note: switching to paste mode is done with synchronous writes.
-</p>
-<dl>
-<dt>Return:</dt>
-<dd>
-flag indicating success
-</dd>
-</dl>
-<dl>
-<dt>Return Type:</dt>
+<dt><i>connection</i> (str)</dt>
 <dd>
-bool
-</dd>
-</dl>
-<a NAME="MicroPythonDeviceInterface.__rawOff" ID="MicroPythonDeviceInterface.__rawOff"></a>
-<h4>MicroPythonDeviceInterface.__rawOff</h4>
-<b>__rawOff</b>(<i></i>)
-
-<p>
-        Private method to switch 'raw' mode off.
-</p>
-<a NAME="MicroPythonDeviceInterface.__rawOn" ID="MicroPythonDeviceInterface.__rawOn"></a>
-<h4>MicroPythonDeviceInterface.__rawOn</h4>
-<b>__rawOn</b>(<i></i>)
-
-<p>
-        Private method to switch the connected device to 'raw' mode.
-</p>
-<p>
-        Note: switching to raw mode is done with synchronous writes.
-</p>
-<dl>
-<dt>Return:</dt>
-<dd>
-flag indicating success
-</dd>
-</dl>
-<dl>
-<dt>Return Type:</dt>
-<dd>
-bool
-</dd>
-</dl>
-<a NAME="MicroPythonDeviceInterface.__readSerial" ID="MicroPythonDeviceInterface.__readSerial"></a>
-<h4>MicroPythonDeviceInterface.__readSerial</h4>
-<b>__readSerial</b>(<i></i>)
-
-<p>
-        Private slot to read all available serial data and emit it with the
-        "dataReceived" signal for further processing.
-</p>
-<a NAME="MicroPythonDeviceInterface.connectToDevice" ID="MicroPythonDeviceInterface.connectToDevice"></a>
-<h4>MicroPythonDeviceInterface.connectToDevice</h4>
-<b>connectToDevice</b>(<i>port</i>)
-
-<p>
-        Public slot to start the manager.
-</p>
-<dl>
-
-<dt><i>port</i> (str)</dt>
-<dd>
-name of the port to be used
+name of the connection to be used
 </dd>
 </dl>
 <dl>
@@ -319,13 +155,29 @@
 bool
 </dd>
 </dl>
+<dl>
+
+<dt>Raises <b>NotImplementedError</b>:</dt>
+<dd>
+raised to indicate that this method needs to
+            be implemented in a derived class
+</dd>
+</dl>
 <a NAME="MicroPythonDeviceInterface.disconnectFromDevice" ID="MicroPythonDeviceInterface.disconnectFromDevice"></a>
 <h4>MicroPythonDeviceInterface.disconnectFromDevice</h4>
 <b>disconnectFromDevice</b>(<i></i>)
 
 <p>
-        Public slot to stop the thread.
+        Public slot to disconnect from the device.
 </p>
+<dl>
+
+<dt>Raises <b>NotImplementedError</b>:</dt>
+<dd>
+raised to indicate that this method needs to
+            be implemented in a derived class
+</dd>
+</dl>
 <a NAME="MicroPythonDeviceInterface.execute" ID="MicroPythonDeviceInterface.execute"></a>
 <h4>MicroPythonDeviceInterface.execute</h4>
 <b>execute</b>(<i>commands, *, mode="raw", timeout=0</i>)
@@ -335,7 +187,7 @@
         result.
 </p>
 <p>
-        If no serial connection is available, empty results will be returned.
+        If no connection is available, empty results will be returned.
 </p>
 <dl>
 
@@ -368,6 +220,11 @@
 </dl>
 <dl>
 
+<dt>Raises <b>NotImplementedError</b>:</dt>
+<dd>
+raised to indicate that this method needs to
+            be implemented in a derived class
+</dd>
 <dt>Raises <b>ValueError</b>:</dt>
 <dd>
 raised in case of an unsupported submit mode
@@ -375,7 +232,7 @@
 </dl>
 <a NAME="MicroPythonDeviceInterface.executeAsync" ID="MicroPythonDeviceInterface.executeAsync"></a>
 <h4>MicroPythonDeviceInterface.executeAsync</h4>
-<b>executeAsync</b>(<i>commandsList</i>)
+<b>executeAsync</b>(<i>commandsList, submitMode</i>)
 
 <p>
         Public method to execute a series of commands over a period of time
@@ -383,24 +240,26 @@
 </p>
 <dl>
 
-<dt><i>commandsList</i> (list of bytes)</dt>
+<dt><i>commandsList</i> (list of str)</dt>
 <dd>
 list of commands to be execute on the device
 </dd>
+<dt><i>submitMode</i> (str)</dt>
+<dd>
+mode to be used to submit the commands (one of 'raw'
+            or 'paste')
+</dd>
 </dl>
-<a NAME="MicroPythonDeviceInterface.executeAsyncPaste" ID="MicroPythonDeviceInterface.executeAsyncPaste"></a>
-<h4>MicroPythonDeviceInterface.executeAsyncPaste</h4>
-<b>executeAsyncPaste</b>(<i>commandsList</i>)
-
-<p>
-        Public method to execute a series of commands over a period of time
-        without returning any result (asynchronous execution).
-</p>
 <dl>
 
-<dt><i>commandsList</i> (list of bytes)</dt>
+<dt>Raises <b>NotImplementedError</b>:</dt>
 <dd>
-list of commands to be execute on the device
+raised to indicate that this method needs to
+            be implemented in a derived class
+</dd>
+<dt>Raises <b>ValueError</b>:</dt>
+<dd>
+raised to indicate an unknown submit mode
 </dd>
 </dl>
 <a NAME="MicroPythonDeviceInterface.handlePreferencesChanged" ID="MicroPythonDeviceInterface.handlePreferencesChanged"></a>
@@ -429,6 +288,14 @@
 bool
 </dd>
 </dl>
+<dl>
+
+<dt>Raises <b>NotImplementedError</b>:</dt>
+<dd>
+raised to indicate that this method needs to
+            be implemented in a derived class
+</dd>
+</dl>
 <a NAME="MicroPythonDeviceInterface.probeDevice" ID="MicroPythonDeviceInterface.probeDevice"></a>
 <h4>MicroPythonDeviceInterface.probeDevice</h4>
 <b>probeDevice</b>(<i></i>)
@@ -437,7 +304,7 @@
         Public method to check the device is responding.
 </p>
 <p>
-        If the device has not been flashed with a MicroPython formware, the
+        If the device has not been flashed with a MicroPython firmware, the
         probe will fail.
 </p>
 <dl>
@@ -452,6 +319,14 @@
 bool
 </dd>
 </dl>
+<dl>
+
+<dt>Raises <b>NotImplementedError</b>:</dt>
+<dd>
+raised to indicate that this method needs to
+            be implemented in a derived class
+</dd>
+</dl>
 <a NAME="MicroPythonDeviceInterface.write" ID="MicroPythonDeviceInterface.write"></a>
 <h4>MicroPythonDeviceInterface.write</h4>
 <b>write</b>(<i>data</i>)
@@ -466,6 +341,14 @@
 data to be written
 </dd>
 </dl>
+<dl>
+
+<dt>Raises <b>NotImplementedError</b>:</dt>
+<dd>
+raised to indicate that this method needs to
+            be implemented in a derived class
+</dd>
+</dl>
 <div align="right"><a href="#top">Up</a></div>
 <hr />
 </body></html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/eric7/Documentation/Source/eric7.MicroPython.MicroPythonReplWidget.html	Thu May 04 17:58:52 2023 +0200
@@ -0,0 +1,421 @@
+<!DOCTYPE html>
+<html><head>
+<title>eric7.MicroPython.MicroPythonReplWidget</title>
+<meta charset="UTF-8">
+<link rel="stylesheet" href="styles.css">
+</head>
+<body>
+<a NAME="top" ID="top"></a>
+<h1>eric7.MicroPython.MicroPythonReplWidget</h1>
+
+<p>
+Module implementing the MicroPython REPL widget.
+</p>
+<h3>Global Attributes</h3>
+
+<table>
+<tr><td>AnsiColorSchemes</td></tr>
+</table>
+<h3>Classes</h3>
+
+<table>
+
+<tr>
+<td><a href="#MicroPythonReplEdit">MicroPythonReplEdit</a></td>
+<td>Class implementing the REPL edit pane.</td>
+</tr>
+<tr>
+<td><a href="#MicroPythonReplWidget">MicroPythonReplWidget</a></td>
+<td>Class implementing the MicroPython REPL widget.</td>
+</tr>
+</table>
+<h3>Functions</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+<hr />
+<hr />
+<a NAME="MicroPythonReplEdit" ID="MicroPythonReplEdit"></a>
+<h2>MicroPythonReplEdit</h2>
+
+<p>
+    Class implementing the REPL edit pane.
+</p>
+<h3>Signals</h3>
+<dl>
+
+<dt>osdInfo(str)</dt>
+<dd>
+emitted when some OSD data was received from the device
+</dd>
+</dl>
+<h3>Derived from</h3>
+QTextEdit
+<h3>Class Attributes</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Class Methods</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Methods</h3>
+
+<table>
+
+<tr>
+<td><a href="#MicroPythonReplEdit.__init__">MicroPythonReplEdit</a></td>
+<td>Constructor</td>
+</tr>
+<tr>
+<td><a href="#MicroPythonReplEdit.__clear">__clear</a></td>
+<td>Private slot to clear the REPL pane.</td>
+</tr>
+<tr>
+<td><a href="#MicroPythonReplEdit.__paste">__paste</a></td>
+<td>Private slot to perform a paste operation.</td>
+</tr>
+<tr>
+<td><a href="#MicroPythonReplEdit.__setCharFormat">__setCharFormat</a></td>
+<td>Private method setting the current text format of the REPL pane based on the passed ANSI codes.</td>
+</tr>
+<tr>
+<td><a href="#MicroPythonReplEdit.__showContextMenu">__showContextMenu</a></td>
+<td>Private slot to show the REPL context menu.</td>
+</tr>
+<tr>
+<td><a href="#MicroPythonReplEdit.doZoom">doZoom</a></td>
+<td>Public slot to zoom in or out.</td>
+</tr>
+<tr>
+<td><a href="#MicroPythonReplEdit.handlePreferencesChanged">handlePreferencesChanged</a></td>
+<td>Public slot to handle a change in preferences.</td>
+</tr>
+<tr>
+<td><a href="#MicroPythonReplEdit.keyPressEvent">keyPressEvent</a></td>
+<td>Protected method to handle key press events.</td>
+</tr>
+<tr>
+<td><a href="#MicroPythonReplEdit.mouseReleaseEvent">mouseReleaseEvent</a></td>
+<td>Protected method to handle mouse release events.</td>
+</tr>
+<tr>
+<td><a href="#MicroPythonReplEdit.processData">processData</a></td>
+<td>Public slot to process the data received from the device.</td>
+</tr>
+<tr>
+<td><a href="#MicroPythonReplEdit.setInterface">setInterface</a></td>
+<td>Public method to set the reference to the device interface object.</td>
+</tr>
+</table>
+<h3>Static Methods</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+
+<a NAME="MicroPythonReplEdit.__init__" ID="MicroPythonReplEdit.__init__"></a>
+<h4>MicroPythonReplEdit (Constructor)</h4>
+<b>MicroPythonReplEdit</b>(<i>parent=None</i>)
+
+<p>
+        Constructor
+</p>
+<dl>
+
+<dt><i>parent</i> (QWidget (optional))</dt>
+<dd>
+reference to the parent widget (defaults to None)
+</dd>
+</dl>
+<a NAME="MicroPythonReplEdit.__clear" ID="MicroPythonReplEdit.__clear"></a>
+<h4>MicroPythonReplEdit.__clear</h4>
+<b>__clear</b>(<i></i>)
+
+<p>
+        Private slot to clear the REPL pane.
+</p>
+<a NAME="MicroPythonReplEdit.__paste" ID="MicroPythonReplEdit.__paste"></a>
+<h4>MicroPythonReplEdit.__paste</h4>
+<b>__paste</b>(<i>mode=QClipboard.Mode.Clipboard</i>)
+
+<p>
+        Private slot to perform a paste operation.
+</p>
+<dl>
+
+<dt><i>mode</i> (QClipboard.Mode (optional))</dt>
+<dd>
+paste mode (defaults to QClipboard.Mode.Clipboard)
+</dd>
+</dl>
+<a NAME="MicroPythonReplEdit.__setCharFormat" ID="MicroPythonReplEdit.__setCharFormat"></a>
+<h4>MicroPythonReplEdit.__setCharFormat</h4>
+<b>__setCharFormat</b>(<i>formatCodes, textCursor</i>)
+
+<p>
+        Private method setting the current text format of the REPL pane based
+        on the passed ANSI codes.
+</p>
+<p>
+        Following codes are used:
+        <ul>
+        <li>0: Reset</li>
+        <li>1: Bold font (weight 75)</li>
+        <li>2: Light font (weight 25)</li>
+        <li>3: Italic font</li>
+        <li>4: Underlined font</li>
+        <li>9: Strikeout font</li>
+        <li>21: Bold off (weight 50)</li>
+        <li>22: Light off (weight 50)</li>
+        <li>23: Italic off</li>
+        <li>24: Underline off</li>
+        <li>29: Strikeout off</li>
+        <li>30: foreground Black</li>
+        <li>31: foreground Dark Red</li>
+        <li>32: foreground Dark Green</li>
+        <li>33: foreground Dark Yellow</li>
+        <li>34: foreground Dark Blue</li>
+        <li>35: foreground Dark Magenta</li>
+        <li>36: foreground Dark Cyan</li>
+        <li>37: foreground Light Gray</li>
+        <li>39: reset foreground to default</li>
+        <li>40: background Black</li>
+        <li>41: background Dark Red</li>
+        <li>42: background Dark Green</li>
+        <li>43: background Dark Yellow</li>
+        <li>44: background Dark Blue</li>
+        <li>45: background Dark Magenta</li>
+        <li>46: background Dark Cyan</li>
+        <li>47: background Light Gray</li>
+        <li>49: reset background to default</li>
+        <li>53: Overlined font</li>
+        <li>55: Overline off</li>
+        <li>90: bright foreground Dark Gray</li>
+        <li>91: bright foreground Red</li>
+        <li>92: bright foreground Green</li>
+        <li>93: bright foreground Yellow</li>
+        <li>94: bright foreground Blue</li>
+        <li>95: bright foreground Magenta</li>
+        <li>96: bright foreground Cyan</li>
+        <li>97: bright foreground White</li>
+        <li>100: bright background Dark Gray</li>
+        <li>101: bright background Red</li>
+        <li>102: bright background Green</li>
+        <li>103: bright background Yellow</li>
+        <li>104: bright background Blue</li>
+        <li>105: bright background Magenta</li>
+        <li>106: bright background Cyan</li>
+        <li>107: bright background White</li>
+        </ul>
+</p>
+<dl>
+
+<dt><i>formatCodes</i> (list of str)</dt>
+<dd>
+list of format codes
+</dd>
+<dt><i>textCursor</i> (QTextCursor)</dt>
+<dd>
+reference to the text cursor
+</dd>
+</dl>
+<a NAME="MicroPythonReplEdit.__showContextMenu" ID="MicroPythonReplEdit.__showContextMenu"></a>
+<h4>MicroPythonReplEdit.__showContextMenu</h4>
+<b>__showContextMenu</b>(<i>pos</i>)
+
+<p>
+        Private slot to show the REPL context menu.
+</p>
+<dl>
+
+<dt><i>pos</i> (QPoint)</dt>
+<dd>
+position to show the menu at
+</dd>
+</dl>
+<a NAME="MicroPythonReplEdit.doZoom" ID="MicroPythonReplEdit.doZoom"></a>
+<h4>MicroPythonReplEdit.doZoom</h4>
+<b>doZoom</b>(<i>value</i>)
+
+<p>
+        Public slot to zoom in or out.
+</p>
+<dl>
+
+<dt><i>value</i> (int)</dt>
+<dd>
+zoom value
+</dd>
+</dl>
+<a NAME="MicroPythonReplEdit.handlePreferencesChanged" ID="MicroPythonReplEdit.handlePreferencesChanged"></a>
+<h4>MicroPythonReplEdit.handlePreferencesChanged</h4>
+<b>handlePreferencesChanged</b>(<i></i>)
+
+<p>
+        Public slot to handle a change in preferences.
+</p>
+<a NAME="MicroPythonReplEdit.keyPressEvent" ID="MicroPythonReplEdit.keyPressEvent"></a>
+<h4>MicroPythonReplEdit.keyPressEvent</h4>
+<b>keyPressEvent</b>(<i>evt</i>)
+
+<p>
+        Protected method to handle key press events.
+</p>
+<dl>
+
+<dt><i>evt</i> (QKeyEvent)</dt>
+<dd>
+reference to the key press event
+</dd>
+</dl>
+<a NAME="MicroPythonReplEdit.mouseReleaseEvent" ID="MicroPythonReplEdit.mouseReleaseEvent"></a>
+<h4>MicroPythonReplEdit.mouseReleaseEvent</h4>
+<b>mouseReleaseEvent</b>(<i>evt</i>)
+
+<p>
+        Protected method to handle mouse release events.
+</p>
+<dl>
+
+<dt><i>evt</i> (QMouseEvent)</dt>
+<dd>
+reference to the event object
+</dd>
+</dl>
+<a NAME="MicroPythonReplEdit.processData" ID="MicroPythonReplEdit.processData"></a>
+<h4>MicroPythonReplEdit.processData</h4>
+<b>processData</b>(<i>data</i>)
+
+<p>
+        Public slot to process the data received from the device.
+</p>
+<dl>
+
+<dt><i>data</i> (bytes)</dt>
+<dd>
+data received from the device
+</dd>
+</dl>
+<a NAME="MicroPythonReplEdit.setInterface" ID="MicroPythonReplEdit.setInterface"></a>
+<h4>MicroPythonReplEdit.setInterface</h4>
+<b>setInterface</b>(<i>deviceInterface</i>)
+
+<p>
+        Public method to set the reference to the device interface object.
+</p>
+<dl>
+
+<dt><i>deviceInterface</i> (MicroPythonDeviceInterface)</dt>
+<dd>
+reference to the device interface object
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+<hr />
+<a NAME="MicroPythonReplWidget" ID="MicroPythonReplWidget"></a>
+<h2>MicroPythonReplWidget</h2>
+
+<p>
+    Class implementing the MicroPython REPL widget.
+</p>
+<h3>Derived from</h3>
+QWidget
+<h3>Class Attributes</h3>
+
+<table>
+<tr><td>ZoomMax</td></tr><tr><td>ZoomMin</td></tr>
+</table>
+<h3>Class Methods</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Methods</h3>
+
+<table>
+
+<tr>
+<td><a href="#MicroPythonReplWidget.__init__">MicroPythonReplWidget</a></td>
+<td>Constructor</td>
+</tr>
+<tr>
+<td><a href="#MicroPythonReplWidget.clearOSD">clearOSD</a></td>
+<td>Public slot to clear the OSD info.</td>
+</tr>
+<tr>
+<td><a href="#MicroPythonReplWidget.replEdit">replEdit</a></td>
+<td>Public method to get a reference to the REPL edit.</td>
+</tr>
+<tr>
+<td><a href="#MicroPythonReplWidget.setOSDInfo">setOSDInfo</a></td>
+<td>Public slot to set the OSD information.</td>
+</tr>
+</table>
+<h3>Static Methods</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+
+<a NAME="MicroPythonReplWidget.__init__" ID="MicroPythonReplWidget.__init__"></a>
+<h4>MicroPythonReplWidget (Constructor)</h4>
+<b>MicroPythonReplWidget</b>(<i>parent=None</i>)
+
+<p>
+        Constructor
+</p>
+<dl>
+
+<dt><i>parent</i> (QWidget (optional))</dt>
+<dd>
+reference to the parent widget (defaults to None)
+</dd>
+</dl>
+<a NAME="MicroPythonReplWidget.clearOSD" ID="MicroPythonReplWidget.clearOSD"></a>
+<h4>MicroPythonReplWidget.clearOSD</h4>
+<b>clearOSD</b>(<i></i>)
+
+<p>
+        Public slot to clear the OSD info.
+</p>
+<a NAME="MicroPythonReplWidget.replEdit" ID="MicroPythonReplWidget.replEdit"></a>
+<h4>MicroPythonReplWidget.replEdit</h4>
+<b>replEdit</b>(<i></i>)
+
+<p>
+        Public method to get a reference to the REPL edit.
+</p>
+<dl>
+<dt>Return:</dt>
+<dd>
+reference to the REPL edit
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+MicroPythonReplEdit
+</dd>
+</dl>
+<a NAME="MicroPythonReplWidget.setOSDInfo" ID="MicroPythonReplWidget.setOSDInfo"></a>
+<h4>MicroPythonReplWidget.setOSDInfo</h4>
+<b>setOSDInfo</b>(<i>infoStr</i>)
+
+<p>
+        Public slot to set the OSD information.
+</p>
+<dl>
+
+<dt><i>infoStr</i> (str)</dt>
+<dd>
+string to be shown
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+</body></html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/eric7/Documentation/Source/eric7.MicroPython.MicroPythonSerialDeviceInterface.html	Thu May 04 17:58:52 2023 +0200
@@ -0,0 +1,489 @@
+<!DOCTYPE html>
+<html><head>
+<title>eric7.MicroPython.MicroPythonSerialDeviceInterface</title>
+<meta charset="UTF-8">
+<link rel="stylesheet" href="styles.css">
+</head>
+<body>
+<a NAME="top" ID="top"></a>
+<h1>eric7.MicroPython.MicroPythonSerialDeviceInterface</h1>
+
+<p>
+Module  implementing an interface to talk to a connected MicroPython device via
+a serial link.
+</p>
+<h3>Global Attributes</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Classes</h3>
+
+<table>
+
+<tr>
+<td><a href="#MicroPythonSerialDeviceInterface">MicroPythonSerialDeviceInterface</a></td>
+<td>Class implementing an interface to talk to a connected MicroPython device via a serial link.</td>
+</tr>
+</table>
+<h3>Functions</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+<hr />
+<hr />
+<a NAME="MicroPythonSerialDeviceInterface" ID="MicroPythonSerialDeviceInterface"></a>
+<h2>MicroPythonSerialDeviceInterface</h2>
+
+<p>
+    Class implementing an interface to talk to a connected MicroPython device via
+    a serial link.
+</p>
+<h3>Derived from</h3>
+MicroPythonDeviceInterface
+<h3>Class Attributes</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Class Methods</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Methods</h3>
+
+<table>
+
+<tr>
+<td><a href="#MicroPythonSerialDeviceInterface.__init__">MicroPythonSerialDeviceInterface</a></td>
+<td>Constructor</td>
+</tr>
+<tr>
+<td><a href="#MicroPythonSerialDeviceInterface.__executeAsyncPaste">__executeAsyncPaste</a></td>
+<td>Private method to execute a series of commands over a period of time without returning any result (asynchronous execution).</td>
+</tr>
+<tr>
+<td><a href="#MicroPythonSerialDeviceInterface.__executeAsyncRaw">__executeAsyncRaw</a></td>
+<td>Private method to execute a series of commands over a period of time without returning any result (asynchronous execution).</td>
+</tr>
+<tr>
+<td><a href="#MicroPythonSerialDeviceInterface.__execute_paste">__execute_paste</a></td>
+<td>Private method to send commands to the connected device using 'paste' mode and return the result.</td>
+</tr>
+<tr>
+<td><a href="#MicroPythonSerialDeviceInterface.__execute_raw">__execute_raw</a></td>
+<td>Private method to send commands to the connected device using 'raw REPL' mode and return the result.</td>
+</tr>
+<tr>
+<td><a href="#MicroPythonSerialDeviceInterface.__pasteOff">__pasteOff</a></td>
+<td>Private method to switch 'paste' mode off.</td>
+</tr>
+<tr>
+<td><a href="#MicroPythonSerialDeviceInterface.__pasteOn">__pasteOn</a></td>
+<td>Private method to switch the connected device to 'paste' mode.</td>
+</tr>
+<tr>
+<td><a href="#MicroPythonSerialDeviceInterface.__rawOff">__rawOff</a></td>
+<td>Private method to switch 'raw' mode off.</td>
+</tr>
+<tr>
+<td><a href="#MicroPythonSerialDeviceInterface.__rawOn">__rawOn</a></td>
+<td>Private method to switch the connected device to 'raw' mode.</td>
+</tr>
+<tr>
+<td><a href="#MicroPythonSerialDeviceInterface.__readSerial">__readSerial</a></td>
+<td>Private slot to read all available serial data and emit it with the "dataReceived" signal for further processing.</td>
+</tr>
+<tr>
+<td><a href="#MicroPythonSerialDeviceInterface.connectToDevice">connectToDevice</a></td>
+<td>Public slot to connect to the device.</td>
+</tr>
+<tr>
+<td><a href="#MicroPythonSerialDeviceInterface.disconnectFromDevice">disconnectFromDevice</a></td>
+<td>Public slot to disconnect from the device.</td>
+</tr>
+<tr>
+<td><a href="#MicroPythonSerialDeviceInterface.execute">execute</a></td>
+<td>Public method to send commands to the connected device and return the result.</td>
+</tr>
+<tr>
+<td><a href="#MicroPythonSerialDeviceInterface.executeAsync">executeAsync</a></td>
+<td>Public method to execute a series of commands over a period of time without returning any result (asynchronous execution).</td>
+</tr>
+<tr>
+<td><a href="#MicroPythonSerialDeviceInterface.handlePreferencesChanged">handlePreferencesChanged</a></td>
+<td>Public slot to handle a change of the preferences.</td>
+</tr>
+<tr>
+<td><a href="#MicroPythonSerialDeviceInterface.isConnected">isConnected</a></td>
+<td>Public method to get the connection status.</td>
+</tr>
+<tr>
+<td><a href="#MicroPythonSerialDeviceInterface.probeDevice">probeDevice</a></td>
+<td>Public method to check the device is responding.</td>
+</tr>
+<tr>
+<td><a href="#MicroPythonSerialDeviceInterface.write">write</a></td>
+<td>Public method to write data to the connected device.</td>
+</tr>
+</table>
+<h3>Static Methods</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+
+<a NAME="MicroPythonSerialDeviceInterface.__init__" ID="MicroPythonSerialDeviceInterface.__init__"></a>
+<h4>MicroPythonSerialDeviceInterface (Constructor)</h4>
+<b>MicroPythonSerialDeviceInterface</b>(<i>parent=None</i>)
+
+<p>
+        Constructor
+</p>
+<dl>
+
+<dt><i>parent</i> (QObject)</dt>
+<dd>
+reference to the parent object
+</dd>
+</dl>
+<a NAME="MicroPythonSerialDeviceInterface.__executeAsyncPaste" ID="MicroPythonSerialDeviceInterface.__executeAsyncPaste"></a>
+<h4>MicroPythonSerialDeviceInterface.__executeAsyncPaste</h4>
+<b>__executeAsyncPaste</b>(<i>commandsList</i>)
+
+<p>
+        Private method to execute a series of commands over a period of time
+        without returning any result (asynchronous execution).
+</p>
+<dl>
+
+<dt><i>commandsList</i> (list of str)</dt>
+<dd>
+list of commands to be execute on the device
+</dd>
+</dl>
+<a NAME="MicroPythonSerialDeviceInterface.__executeAsyncRaw" ID="MicroPythonSerialDeviceInterface.__executeAsyncRaw"></a>
+<h4>MicroPythonSerialDeviceInterface.__executeAsyncRaw</h4>
+<b>__executeAsyncRaw</b>(<i>commandsList</i>)
+
+<p>
+        Private method to execute a series of commands over a period of time
+        without returning any result (asynchronous execution).
+</p>
+<dl>
+
+<dt><i>commandsList</i> (list of bytes)</dt>
+<dd>
+list of commands to be execute on the device
+</dd>
+</dl>
+<a NAME="MicroPythonSerialDeviceInterface.__execute_paste" ID="MicroPythonSerialDeviceInterface.__execute_paste"></a>
+<h4>MicroPythonSerialDeviceInterface.__execute_paste</h4>
+<b>__execute_paste</b>(<i>commands, timeout=0</i>)
+
+<p>
+        Private method to send commands to the connected device using 'paste' mode
+        and return the result.
+</p>
+<p>
+        If no serial connection is available, empty results will be returned.
+</p>
+<dl>
+
+<dt><i>commands</i> (str or list of str)</dt>
+<dd>
+list of commands to be executed
+</dd>
+<dt><i>timeout</i> (int (optional))</dt>
+<dd>
+per command timeout in milliseconds (0 for configured default)
+            (defaults to 0)
+</dd>
+</dl>
+<dl>
+<dt>Return:</dt>
+<dd>
+tuple containing stdout and stderr output of the device
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+tuple of (bytes, bytes)
+</dd>
+</dl>
+<a NAME="MicroPythonSerialDeviceInterface.__execute_raw" ID="MicroPythonSerialDeviceInterface.__execute_raw"></a>
+<h4>MicroPythonSerialDeviceInterface.__execute_raw</h4>
+<b>__execute_raw</b>(<i>commands, timeout=0</i>)
+
+<p>
+        Private method to send commands to the connected device using 'raw REPL' mode
+        and return the result.
+</p>
+<p>
+        If no serial connection is available, empty results will be returned.
+</p>
+<dl>
+
+<dt><i>commands</i> (str or list of str)</dt>
+<dd>
+list of commands to be executed
+</dd>
+<dt><i>timeout</i> (int (optional))</dt>
+<dd>
+per command timeout in milliseconds (0 for configured default)
+            (defaults to 0)
+</dd>
+</dl>
+<dl>
+<dt>Return:</dt>
+<dd>
+tuple containing stdout and stderr output of the device
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+tuple of (bytes, bytes)
+</dd>
+</dl>
+<a NAME="MicroPythonSerialDeviceInterface.__pasteOff" ID="MicroPythonSerialDeviceInterface.__pasteOff"></a>
+<h4>MicroPythonSerialDeviceInterface.__pasteOff</h4>
+<b>__pasteOff</b>(<i></i>)
+
+<p>
+        Private method to switch 'paste' mode off.
+</p>
+<a NAME="MicroPythonSerialDeviceInterface.__pasteOn" ID="MicroPythonSerialDeviceInterface.__pasteOn"></a>
+<h4>MicroPythonSerialDeviceInterface.__pasteOn</h4>
+<b>__pasteOn</b>(<i></i>)
+
+<p>
+        Private method to switch the connected device to 'paste' mode.
+</p>
+<p>
+        Note: switching to paste mode is done with synchronous writes.
+</p>
+<dl>
+<dt>Return:</dt>
+<dd>
+flag indicating success
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+bool
+</dd>
+</dl>
+<a NAME="MicroPythonSerialDeviceInterface.__rawOff" ID="MicroPythonSerialDeviceInterface.__rawOff"></a>
+<h4>MicroPythonSerialDeviceInterface.__rawOff</h4>
+<b>__rawOff</b>(<i></i>)
+
+<p>
+        Private method to switch 'raw' mode off.
+</p>
+<a NAME="MicroPythonSerialDeviceInterface.__rawOn" ID="MicroPythonSerialDeviceInterface.__rawOn"></a>
+<h4>MicroPythonSerialDeviceInterface.__rawOn</h4>
+<b>__rawOn</b>(<i></i>)
+
+<p>
+        Private method to switch the connected device to 'raw' mode.
+</p>
+<p>
+        Note: switching to raw mode is done with synchronous writes.
+</p>
+<dl>
+<dt>Return:</dt>
+<dd>
+flag indicating success
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+bool
+</dd>
+</dl>
+<a NAME="MicroPythonSerialDeviceInterface.__readSerial" ID="MicroPythonSerialDeviceInterface.__readSerial"></a>
+<h4>MicroPythonSerialDeviceInterface.__readSerial</h4>
+<b>__readSerial</b>(<i></i>)
+
+<p>
+        Private slot to read all available serial data and emit it with the
+        "dataReceived" signal for further processing.
+</p>
+<a NAME="MicroPythonSerialDeviceInterface.connectToDevice" ID="MicroPythonSerialDeviceInterface.connectToDevice"></a>
+<h4>MicroPythonSerialDeviceInterface.connectToDevice</h4>
+<b>connectToDevice</b>(<i>connection</i>)
+
+<p>
+        Public slot to connect to the device.
+</p>
+<dl>
+
+<dt><i>connection</i> (str)</dt>
+<dd>
+name of the connection to be used
+</dd>
+</dl>
+<dl>
+<dt>Return:</dt>
+<dd>
+flag indicating success
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+bool
+</dd>
+</dl>
+<a NAME="MicroPythonSerialDeviceInterface.disconnectFromDevice" ID="MicroPythonSerialDeviceInterface.disconnectFromDevice"></a>
+<h4>MicroPythonSerialDeviceInterface.disconnectFromDevice</h4>
+<b>disconnectFromDevice</b>(<i></i>)
+
+<p>
+        Public slot to disconnect from the device.
+</p>
+<a NAME="MicroPythonSerialDeviceInterface.execute" ID="MicroPythonSerialDeviceInterface.execute"></a>
+<h4>MicroPythonSerialDeviceInterface.execute</h4>
+<b>execute</b>(<i>commands, *, mode="raw", timeout=0</i>)
+
+<p>
+        Public method to send commands to the connected device and return the
+        result.
+</p>
+<p>
+        If no serial connection is available, empty results will be returned.
+</p>
+<dl>
+
+<dt><i>commands</i> (str or list of str)</dt>
+<dd>
+list of commands to be executed
+</dd>
+<dt><i>mode=</i> (str)</dt>
+<dd>
+submit mode to be used (one of 'raw' or 'paste') (defaults to
+            'raw')
+</dd>
+<dt><i>timeout=</i> (int (optional))</dt>
+<dd>
+per command timeout in milliseconds (0 for configured default)
+            (defaults to 0)
+</dd>
+</dl>
+<dl>
+<dt>Return:</dt>
+<dd>
+tuple containing stdout and stderr output of the device
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+tuple of (bytes, bytes)
+</dd>
+</dl>
+<dl>
+
+<dt>Raises <b>ValueError</b>:</dt>
+<dd>
+raised in case of an unsupported submit mode
+</dd>
+</dl>
+<a NAME="MicroPythonSerialDeviceInterface.executeAsync" ID="MicroPythonSerialDeviceInterface.executeAsync"></a>
+<h4>MicroPythonSerialDeviceInterface.executeAsync</h4>
+<b>executeAsync</b>(<i>commandsList, submitMode</i>)
+
+<p>
+        Public method to execute a series of commands over a period of time
+        without returning any result (asynchronous execution).
+</p>
+<dl>
+
+<dt><i>commandsList</i> (list of str)</dt>
+<dd>
+list of commands to be execute on the device
+</dd>
+<dt><i>submitMode</i> (str (one of 'raw' or 'paste'))</dt>
+<dd>
+mode to be used to submit the commands
+</dd>
+</dl>
+<dl>
+
+<dt>Raises <b>ValueError</b>:</dt>
+<dd>
+raised to indicate an unknown submit mode
+</dd>
+</dl>
+<a NAME="MicroPythonSerialDeviceInterface.handlePreferencesChanged" ID="MicroPythonSerialDeviceInterface.handlePreferencesChanged"></a>
+<h4>MicroPythonSerialDeviceInterface.handlePreferencesChanged</h4>
+<b>handlePreferencesChanged</b>(<i></i>)
+
+<p>
+        Public slot to handle a change of the preferences.
+</p>
+<a NAME="MicroPythonSerialDeviceInterface.isConnected" ID="MicroPythonSerialDeviceInterface.isConnected"></a>
+<h4>MicroPythonSerialDeviceInterface.isConnected</h4>
+<b>isConnected</b>(<i></i>)
+
+<p>
+        Public method to get the connection status.
+</p>
+<dl>
+<dt>Return:</dt>
+<dd>
+flag indicating the connection status
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+bool
+</dd>
+</dl>
+<a NAME="MicroPythonSerialDeviceInterface.probeDevice" ID="MicroPythonSerialDeviceInterface.probeDevice"></a>
+<h4>MicroPythonSerialDeviceInterface.probeDevice</h4>
+<b>probeDevice</b>(<i></i>)
+
+<p>
+        Public method to check the device is responding.
+</p>
+<p>
+        If the device has not been flashed with a MicroPython firmware, the
+        probe will fail.
+</p>
+<dl>
+<dt>Return:</dt>
+<dd>
+flag indicating a communicating MicroPython device
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+bool
+</dd>
+</dl>
+<a NAME="MicroPythonSerialDeviceInterface.write" ID="MicroPythonSerialDeviceInterface.write"></a>
+<h4>MicroPythonSerialDeviceInterface.write</h4>
+<b>write</b>(<i>data</i>)
+
+<p>
+        Public method to write data to the connected device.
+</p>
+<dl>
+
+<dt><i>data</i> (bytes or bytearray)</dt>
+<dd>
+data to be written
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+</body></html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/eric7/Documentation/Source/eric7.MicroPython.MicroPythonWebreplConnectionDialog.html	Thu May 04 17:58:52 2023 +0200
@@ -0,0 +1,144 @@
+<!DOCTYPE html>
+<html><head>
+<title>eric7.MicroPython.MicroPythonWebreplConnectionDialog</title>
+<meta charset="UTF-8">
+<link rel="stylesheet" href="styles.css">
+</head>
+<body>
+<a NAME="top" ID="top"></a>
+<h1>eric7.MicroPython.MicroPythonWebreplConnectionDialog</h1>
+
+<p>
+Module implementing a dialog to enter the WebREPL connection parameters.
+</p>
+<h3>Global Attributes</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Classes</h3>
+
+<table>
+
+<tr>
+<td><a href="#MicroPythonWebreplConnectionDialog">MicroPythonWebreplConnectionDialog</a></td>
+<td>Class implementing a dialog to enter the WebREPL connection parameters.</td>
+</tr>
+</table>
+<h3>Functions</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+<hr />
+<hr />
+<a NAME="MicroPythonWebreplConnectionDialog" ID="MicroPythonWebreplConnectionDialog"></a>
+<h2>MicroPythonWebreplConnectionDialog</h2>
+
+<p>
+    Class implementing a dialog to enter the WebREPL connection parameters.
+</p>
+<h3>Derived from</h3>
+QDialog, Ui_MicroPythonWebreplConnectionDialog
+<h3>Class Attributes</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Class Methods</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Methods</h3>
+
+<table>
+
+<tr>
+<td><a href="#MicroPythonWebreplConnectionDialog.__init__">MicroPythonWebreplConnectionDialog</a></td>
+<td>Constructor</td>
+</tr>
+<tr>
+<td><a href="#MicroPythonWebreplConnectionDialog.__updateOkButton">__updateOkButton</a></td>
+<td>Private slot to update the enabled state of the OK button.</td>
+</tr>
+<tr>
+<td><a href="#MicroPythonWebreplConnectionDialog.getWebreplConnectionParameters">getWebreplConnectionParameters</a></td>
+<td>Public method to retrieve the entered WebREPL connection data.</td>
+</tr>
+<tr>
+<td><a href="#MicroPythonWebreplConnectionDialog.on_showPasswordButton_clicked">on_showPasswordButton_clicked</a></td>
+<td>Private slot to show or hide the password.</td>
+</tr>
+</table>
+<h3>Static Methods</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+
+<a NAME="MicroPythonWebreplConnectionDialog.__init__" ID="MicroPythonWebreplConnectionDialog.__init__"></a>
+<h4>MicroPythonWebreplConnectionDialog (Constructor)</h4>
+<b>MicroPythonWebreplConnectionDialog</b>(<i>currentWebreplUrl, currentType, parent=None</i>)
+
+<p>
+        Constructor
+</p>
+<dl>
+
+<dt><i>currentWebreplUrl</i> (str)</dt>
+<dd>
+WebREPL URL most recently configured
+</dd>
+<dt><i>currentType</i> (str)</dt>
+<dd>
+device type most recently selected
+</dd>
+<dt><i>parent</i> (QWidget (optional))</dt>
+<dd>
+reference to the parent widget (defaults to None)
+</dd>
+</dl>
+<a NAME="MicroPythonWebreplConnectionDialog.__updateOkButton" ID="MicroPythonWebreplConnectionDialog.__updateOkButton"></a>
+<h4>MicroPythonWebreplConnectionDialog.__updateOkButton</h4>
+<b>__updateOkButton</b>(<i></i>)
+
+<p>
+        Private slot to update the enabled state of the OK button.
+</p>
+<a NAME="MicroPythonWebreplConnectionDialog.getWebreplConnectionParameters" ID="MicroPythonWebreplConnectionDialog.getWebreplConnectionParameters"></a>
+<h4>MicroPythonWebreplConnectionDialog.getWebreplConnectionParameters</h4>
+<b>getWebreplConnectionParameters</b>(<i></i>)
+
+<p>
+        Public method to retrieve the entered WebREPL connection data.
+</p>
+<dl>
+<dt>Return:</dt>
+<dd>
+tuple containing the URL and device type for the WebREPL connection
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+tuple of (str, str)
+</dd>
+</dl>
+<a NAME="MicroPythonWebreplConnectionDialog.on_showPasswordButton_clicked" ID="MicroPythonWebreplConnectionDialog.on_showPasswordButton_clicked"></a>
+<h4>MicroPythonWebreplConnectionDialog.on_showPasswordButton_clicked</h4>
+<b>on_showPasswordButton_clicked</b>(<i>checked</i>)
+
+<p>
+        Private slot to show or hide the password.
+</p>
+<dl>
+
+<dt><i>checked</i> (bool)</dt>
+<dd>
+state of the button
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+</body></html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/eric7/Documentation/Source/eric7.MicroPython.MicroPythonWebreplDeviceInterface.html	Thu May 04 17:58:52 2023 +0200
@@ -0,0 +1,331 @@
+<!DOCTYPE html>
+<html><head>
+<title>eric7.MicroPython.MicroPythonWebreplDeviceInterface</title>
+<meta charset="UTF-8">
+<link rel="stylesheet" href="styles.css">
+</head>
+<body>
+<a NAME="top" ID="top"></a>
+<h1>eric7.MicroPython.MicroPythonWebreplDeviceInterface</h1>
+
+<p>
+Module  implementing an interface to talk to a connected MicroPython device via
+a webrepl connection.
+</p>
+<h3>Global Attributes</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Classes</h3>
+
+<table>
+
+<tr>
+<td><a href="#MicroPythonWebreplDeviceInterface">MicroPythonWebreplDeviceInterface</a></td>
+<td>Class implementing an interface to talk to a connected MicroPython device via a webrepl connection.</td>
+</tr>
+</table>
+<h3>Functions</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+<hr />
+<hr />
+<a NAME="MicroPythonWebreplDeviceInterface" ID="MicroPythonWebreplDeviceInterface"></a>
+<h2>MicroPythonWebreplDeviceInterface</h2>
+
+<p>
+    Class implementing an interface to talk to a connected MicroPython device via
+    a webrepl connection.
+</p>
+<h3>Derived from</h3>
+MicroPythonDeviceInterface
+<h3>Class Attributes</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Class Methods</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Methods</h3>
+
+<table>
+
+<tr>
+<td><a href="#MicroPythonWebreplDeviceInterface.__init__">MicroPythonWebreplDeviceInterface</a></td>
+<td>Constructor</td>
+</tr>
+<tr>
+<td><a href="#MicroPythonWebreplDeviceInterface.__pasteOff">__pasteOff</a></td>
+<td>Private method to switch 'paste' mode off.</td>
+</tr>
+<tr>
+<td><a href="#MicroPythonWebreplDeviceInterface.__pasteOn">__pasteOn</a></td>
+<td>Private method to switch the connected device to 'paste' mode.</td>
+</tr>
+<tr>
+<td><a href="#MicroPythonWebreplDeviceInterface.__readAll">__readAll</a></td>
+<td>Private method to read all data and emit it for further processing.</td>
+</tr>
+<tr>
+<td><a href="#MicroPythonWebreplDeviceInterface.__readSocket">__readSocket</a></td>
+<td>Private slot to read all available data and emit it with the "dataReceived" signal for further processing.</td>
+</tr>
+<tr>
+<td><a href="#MicroPythonWebreplDeviceInterface.connectToDevice">connectToDevice</a></td>
+<td>Public slot to connect to the device.</td>
+</tr>
+<tr>
+<td><a href="#MicroPythonWebreplDeviceInterface.disconnectFromDevice">disconnectFromDevice</a></td>
+<td>Public slot to disconnect from the device.</td>
+</tr>
+<tr>
+<td><a href="#MicroPythonWebreplDeviceInterface.execute">execute</a></td>
+<td>Public method to send commands to the connected device and return the result.</td>
+</tr>
+<tr>
+<td><a href="#MicroPythonWebreplDeviceInterface.executeAsync">executeAsync</a></td>
+<td>Public method to execute a series of commands over a period of time without returning any result (asynchronous execution).</td>
+</tr>
+<tr>
+<td><a href="#MicroPythonWebreplDeviceInterface.handlePreferencesChanged">handlePreferencesChanged</a></td>
+<td>Public slot to handle a change of the preferences.</td>
+</tr>
+<tr>
+<td><a href="#MicroPythonWebreplDeviceInterface.isConnected">isConnected</a></td>
+<td>Public method to get the connection status.</td>
+</tr>
+<tr>
+<td><a href="#MicroPythonWebreplDeviceInterface.probeDevice">probeDevice</a></td>
+<td>Public method to check the device is responding.</td>
+</tr>
+<tr>
+<td><a href="#MicroPythonWebreplDeviceInterface.write">write</a></td>
+<td>Public method to write data to the connected device.</td>
+</tr>
+</table>
+<h3>Static Methods</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+
+<a NAME="MicroPythonWebreplDeviceInterface.__init__" ID="MicroPythonWebreplDeviceInterface.__init__"></a>
+<h4>MicroPythonWebreplDeviceInterface (Constructor)</h4>
+<b>MicroPythonWebreplDeviceInterface</b>(<i>parent=None</i>)
+
+<p>
+        Constructor
+</p>
+<dl>
+
+<dt><i>parent</i> (QObject)</dt>
+<dd>
+reference to the parent object
+</dd>
+</dl>
+<a NAME="MicroPythonWebreplDeviceInterface.__pasteOff" ID="MicroPythonWebreplDeviceInterface.__pasteOff"></a>
+<h4>MicroPythonWebreplDeviceInterface.__pasteOff</h4>
+<b>__pasteOff</b>(<i></i>)
+
+<p>
+        Private method to switch 'paste' mode off.
+</p>
+<a NAME="MicroPythonWebreplDeviceInterface.__pasteOn" ID="MicroPythonWebreplDeviceInterface.__pasteOn"></a>
+<h4>MicroPythonWebreplDeviceInterface.__pasteOn</h4>
+<b>__pasteOn</b>(<i></i>)
+
+<p>
+        Private method to switch the connected device to 'paste' mode.
+</p>
+<p>
+        Note: switching to paste mode is done with synchronous writes.
+</p>
+<dl>
+<dt>Return:</dt>
+<dd>
+flag indicating success
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+bool
+</dd>
+</dl>
+<a NAME="MicroPythonWebreplDeviceInterface.__readAll" ID="MicroPythonWebreplDeviceInterface.__readAll"></a>
+<h4>MicroPythonWebreplDeviceInterface.__readAll</h4>
+<b>__readAll</b>(<i></i>)
+
+<p>
+        Private method to read all data and emit it for further processing.
+</p>
+<a NAME="MicroPythonWebreplDeviceInterface.__readSocket" ID="MicroPythonWebreplDeviceInterface.__readSocket"></a>
+<h4>MicroPythonWebreplDeviceInterface.__readSocket</h4>
+<b>__readSocket</b>(<i></i>)
+
+<p>
+        Private slot to read all available data and emit it with the
+        "dataReceived" signal for further processing.
+</p>
+<a NAME="MicroPythonWebreplDeviceInterface.connectToDevice" ID="MicroPythonWebreplDeviceInterface.connectToDevice"></a>
+<h4>MicroPythonWebreplDeviceInterface.connectToDevice</h4>
+<b>connectToDevice</b>(<i>connection</i>)
+
+<p>
+        Public slot to connect to the device.
+</p>
+<dl>
+
+<dt><i>connection</i> (str)</dt>
+<dd>
+name of the connection to be used in the form of an URL string
+            (ws://password@host:port)
+</dd>
+</dl>
+<dl>
+<dt>Return:</dt>
+<dd>
+flag indicating success
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+bool
+</dd>
+</dl>
+<a NAME="MicroPythonWebreplDeviceInterface.disconnectFromDevice" ID="MicroPythonWebreplDeviceInterface.disconnectFromDevice"></a>
+<h4>MicroPythonWebreplDeviceInterface.disconnectFromDevice</h4>
+<b>disconnectFromDevice</b>(<i></i>)
+
+<p>
+        Public slot to disconnect from the device.
+</p>
+<a NAME="MicroPythonWebreplDeviceInterface.execute" ID="MicroPythonWebreplDeviceInterface.execute"></a>
+<h4>MicroPythonWebreplDeviceInterface.execute</h4>
+<b>execute</b>(<i>commands, *, mode="raw", timeout=0</i>)
+
+<p>
+        Public method to send commands to the connected device and return the
+        result.
+</p>
+<dl>
+
+<dt><i>commands</i> (str or list of str)</dt>
+<dd>
+list of commands to be executed
+</dd>
+<dt><i>mode=</i> (str)</dt>
+<dd>
+submit mode to be used (one of 'raw' or 'paste') (defaults to
+            'raw'). This is ignored because webrepl always uses 'paste' mode.
+</dd>
+<dt><i>timeout=</i> (int (optional))</dt>
+<dd>
+per command timeout in milliseconds (0 for configured default)
+            (defaults to 0)
+</dd>
+</dl>
+<dl>
+<dt>Return:</dt>
+<dd>
+tuple containing stdout and stderr output of the device
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+tuple of (bytes, bytes)
+</dd>
+</dl>
+<a NAME="MicroPythonWebreplDeviceInterface.executeAsync" ID="MicroPythonWebreplDeviceInterface.executeAsync"></a>
+<h4>MicroPythonWebreplDeviceInterface.executeAsync</h4>
+<b>executeAsync</b>(<i>commandsList, submitMode</i>)
+
+<p>
+        Public method to execute a series of commands over a period of time
+        without returning any result (asynchronous execution).
+</p>
+<dl>
+
+<dt><i>commandsList</i> (list of str)</dt>
+<dd>
+list of commands to be execute on the device
+</dd>
+<dt><i>submitMode</i> (str (one of 'raw' or 'paste'))</dt>
+<dd>
+mode to be used to submit the commands
+</dd>
+</dl>
+<a NAME="MicroPythonWebreplDeviceInterface.handlePreferencesChanged" ID="MicroPythonWebreplDeviceInterface.handlePreferencesChanged"></a>
+<h4>MicroPythonWebreplDeviceInterface.handlePreferencesChanged</h4>
+<b>handlePreferencesChanged</b>(<i></i>)
+
+<p>
+        Public slot to handle a change of the preferences.
+</p>
+<a NAME="MicroPythonWebreplDeviceInterface.isConnected" ID="MicroPythonWebreplDeviceInterface.isConnected"></a>
+<h4>MicroPythonWebreplDeviceInterface.isConnected</h4>
+<b>isConnected</b>(<i></i>)
+
+<p>
+        Public method to get the connection status.
+</p>
+<dl>
+<dt>Return:</dt>
+<dd>
+flag indicating the connection status
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+bool
+</dd>
+</dl>
+<a NAME="MicroPythonWebreplDeviceInterface.probeDevice" ID="MicroPythonWebreplDeviceInterface.probeDevice"></a>
+<h4>MicroPythonWebreplDeviceInterface.probeDevice</h4>
+<b>probeDevice</b>(<i></i>)
+
+<p>
+        Public method to check the device is responding.
+</p>
+<p>
+        If the device has not been flashed with a MicroPython firmware, the
+        probe will fail.
+</p>
+<dl>
+<dt>Return:</dt>
+<dd>
+flag indicating a communicating MicroPython device
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+bool
+</dd>
+</dl>
+<a NAME="MicroPythonWebreplDeviceInterface.write" ID="MicroPythonWebreplDeviceInterface.write"></a>
+<h4>MicroPythonWebreplDeviceInterface.write</h4>
+<b>write</b>(<i>data</i>)
+
+<p>
+        Public method to write data to the connected device.
+</p>
+<dl>
+
+<dt><i>data</i> (bytes or bytearray)</dt>
+<dd>
+data to be written
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+</body></html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/eric7/Documentation/Source/eric7.MicroPython.MicroPythonWebreplSocket.html	Thu May 04 17:58:52 2023 +0200
@@ -0,0 +1,371 @@
+<!DOCTYPE html>
+<html><head>
+<title>eric7.MicroPython.MicroPythonWebreplSocket</title>
+<meta charset="UTF-8">
+<link rel="stylesheet" href="styles.css">
+</head>
+<body>
+<a NAME="top" ID="top"></a>
+<h1>eric7.MicroPython.MicroPythonWebreplSocket</h1>
+
+<p>
+Module implementing a websocket class to be connect to the MicroPython webrepl
+interface.
+</p>
+<h3>Global Attributes</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Classes</h3>
+
+<table>
+
+<tr>
+<td><a href="#MicroPythonWebreplSocket">MicroPythonWebreplSocket</a></td>
+<td>Class implementing a websocket client to be connected to the MicroPython webrepl interface.</td>
+</tr>
+</table>
+<h3>Functions</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+<hr />
+<hr />
+<a NAME="MicroPythonWebreplSocket" ID="MicroPythonWebreplSocket"></a>
+<h2>MicroPythonWebreplSocket</h2>
+
+<p>
+    Class implementing a websocket client to be connected to the MicroPython webrepl
+    interface.
+</p>
+<h3>Signals</h3>
+<dl>
+
+<dt>readyRead()</dt>
+<dd>
+emitted to signal the availability of data
+</dd>
+</dl>
+<h3>Derived from</h3>
+QWebSocket
+<h3>Class Attributes</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Class Methods</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Methods</h3>
+
+<table>
+
+<tr>
+<td><a href="#MicroPythonWebreplSocket.__init__">MicroPythonWebreplSocket</a></td>
+<td>Constructor</td>
+</tr>
+<tr>
+<td><a href="#MicroPythonWebreplSocket.__textDataReceived">__textDataReceived</a></td>
+<td>Private slot handling a received text message.</td>
+</tr>
+<tr>
+<td><a href="#MicroPythonWebreplSocket.connectToDevice">connectToDevice</a></td>
+<td>Public method to connect to the given host and port.</td>
+</tr>
+<tr>
+<td><a href="#MicroPythonWebreplSocket.disconnect">disconnect</a></td>
+<td>Public method to disconnect the websocket.</td>
+</tr>
+<tr>
+<td><a href="#MicroPythonWebreplSocket.hasTimedOut">hasTimedOut</a></td>
+<td>Public method to check, if the last 'readUntil()' has timed out.</td>
+</tr>
+<tr>
+<td><a href="#MicroPythonWebreplSocket.isConnected">isConnected</a></td>
+<td>Public method to check the connected state of the websocket.</td>
+</tr>
+<tr>
+<td><a href="#MicroPythonWebreplSocket.login">login</a></td>
+<td>Public method to login to the webrepl console of the device.</td>
+</tr>
+<tr>
+<td><a href="#MicroPythonWebreplSocket.readAll">readAll</a></td>
+<td>Public method to read all available data.</td>
+</tr>
+<tr>
+<td><a href="#MicroPythonWebreplSocket.readUntil">readUntil</a></td>
+<td>Public method to read data until an expected sequence is found (default: \n) or a specific size is exceeded.</td>
+</tr>
+<tr>
+<td><a href="#MicroPythonWebreplSocket.setTimeout">setTimeout</a></td>
+<td>Public method to set the socket timeout value.</td>
+</tr>
+<tr>
+<td><a href="#MicroPythonWebreplSocket.timeout">timeout</a></td>
+<td></td>
+</tr>
+<tr>
+<td><a href="#MicroPythonWebreplSocket.waitForConnected">waitForConnected</a></td>
+<td>Public method to wait for the websocket being connected.</td>
+</tr>
+<tr>
+<td><a href="#MicroPythonWebreplSocket.writeTextMessage">writeTextMessage</a></td>
+<td>Public method write some text data to the webrepl server of the connected device.</td>
+</tr>
+</table>
+<h3>Static Methods</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+
+<a NAME="MicroPythonWebreplSocket.__init__" ID="MicroPythonWebreplSocket.__init__"></a>
+<h4>MicroPythonWebreplSocket (Constructor)</h4>
+<b>MicroPythonWebreplSocket</b>(<i>timeout=10000, parent=None</i>)
+
+<p>
+        Constructor
+</p>
+<dl>
+
+<dt><i>timeout</i> (int)</dt>
+<dd>
+timout in milliseconds to be set
+</dd>
+<dt><i>parent</i> (QObject)</dt>
+<dd>
+reference to the parent object
+</dd>
+</dl>
+<a NAME="MicroPythonWebreplSocket.__textDataReceived" ID="MicroPythonWebreplSocket.__textDataReceived"></a>
+<h4>MicroPythonWebreplSocket.__textDataReceived</h4>
+<b>__textDataReceived</b>(<i>strMessage</i>)
+
+<p>
+        Private slot handling a received text message.
+</p>
+<dl>
+
+<dt><i>strMessage</i> (str)</dt>
+<dd>
+received text message
+</dd>
+</dl>
+<a NAME="MicroPythonWebreplSocket.connectToDevice" ID="MicroPythonWebreplSocket.connectToDevice"></a>
+<h4>MicroPythonWebreplSocket.connectToDevice</h4>
+<b>connectToDevice</b>(<i>host, port</i>)
+
+<p>
+        Public method to connect to the given host and port.
+</p>
+<dl>
+
+<dt><i>host</i> (str)</dt>
+<dd>
+host name or IP address
+</dd>
+<dt><i>port</i> (int)</dt>
+<dd>
+port number
+</dd>
+</dl>
+<dl>
+<dt>Return:</dt>
+<dd>
+flag indicating success
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+bool
+</dd>
+</dl>
+<a NAME="MicroPythonWebreplSocket.disconnect" ID="MicroPythonWebreplSocket.disconnect"></a>
+<h4>MicroPythonWebreplSocket.disconnect</h4>
+<b>disconnect</b>(<i></i>)
+
+<p>
+        Public method to disconnect the websocket.
+</p>
+<a NAME="MicroPythonWebreplSocket.hasTimedOut" ID="MicroPythonWebreplSocket.hasTimedOut"></a>
+<h4>MicroPythonWebreplSocket.hasTimedOut</h4>
+<b>hasTimedOut</b>(<i></i>)
+
+<p>
+        Public method to check, if the last 'readUntil()' has timed out.
+</p>
+<dl>
+<dt>Return:</dt>
+<dd>
+flag indicating a timeout
+@rtype bool
+</dd>
+</dl>
+<a NAME="MicroPythonWebreplSocket.isConnected" ID="MicroPythonWebreplSocket.isConnected"></a>
+<h4>MicroPythonWebreplSocket.isConnected</h4>
+<b>isConnected</b>(<i></i>)
+
+<p>
+        Public method to check the connected state of the websocket.
+</p>
+<dl>
+<dt>Return:</dt>
+<dd>
+flag indicating the connected state
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+bool
+</dd>
+</dl>
+<a NAME="MicroPythonWebreplSocket.login" ID="MicroPythonWebreplSocket.login"></a>
+<h4>MicroPythonWebreplSocket.login</h4>
+<b>login</b>(<i>password</i>)
+
+<p>
+        Public method to login to the webrepl console of the device.
+</p>
+<dl>
+
+<dt><i>password</i> (str)</dt>
+<dd>
+password
+</dd>
+</dl>
+<dl>
+<dt>Return:</dt>
+<dd>
+flag indicating a successful login
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+bool
+</dd>
+</dl>
+<a NAME="MicroPythonWebreplSocket.readAll" ID="MicroPythonWebreplSocket.readAll"></a>
+<h4>MicroPythonWebreplSocket.readAll</h4>
+<b>readAll</b>(<i>timeout=0</i>)
+
+<p>
+        Public method to read all available data.
+</p>
+<dl>
+
+<dt><i>timeout</i> (int (optional))</dt>
+<dd>
+timeout in milliseconds (0 for no timeout)
+            (defaults to 0)
+</dd>
+</dl>
+<dl>
+<dt>Return:</dt>
+<dd>
+received data
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+bytes
+</dd>
+</dl>
+<a NAME="MicroPythonWebreplSocket.readUntil" ID="MicroPythonWebreplSocket.readUntil"></a>
+<h4>MicroPythonWebreplSocket.readUntil</h4>
+<b>readUntil</b>(<i>expected=b"\n", size=None, timeout=0</i>)
+
+<p>
+        Public method to read data until an expected sequence is found
+        (default: \n) or a specific size is exceeded.
+</p>
+<dl>
+
+<dt><i>expected</i> (bytes)</dt>
+<dd>
+expected bytes sequence
+</dd>
+<dt><i>size</i> (int (optional))</dt>
+<dd>
+maximum data to be read (defaults to None)
+</dd>
+<dt><i>timeout</i> (int (optional))</dt>
+<dd>
+timeout in milliseconds (0 for configured default)
+            (defaults to 0)
+</dd>
+</dl>
+<dl>
+<dt>Return:</dt>
+<dd>
+bytes read from the device including the expected sequence
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+bytes
+</dd>
+</dl>
+<a NAME="MicroPythonWebreplSocket.setTimeout" ID="MicroPythonWebreplSocket.setTimeout"></a>
+<h4>MicroPythonWebreplSocket.setTimeout</h4>
+<b>setTimeout</b>(<i>timeout</i>)
+
+<p>
+        Public method to set the socket timeout value.
+</p>
+<dl>
+
+<dt><i>timeout</i> (int)</dt>
+<dd>
+timout in milliseconds to be set
+</dd>
+</dl>
+<a NAME="MicroPythonWebreplSocket.timeout" ID="MicroPythonWebreplSocket.timeout"></a>
+<h4>MicroPythonWebreplSocket.timeout</h4>
+<b>timeout</b>(<i></i>)
+
+<a NAME="MicroPythonWebreplSocket.waitForConnected" ID="MicroPythonWebreplSocket.waitForConnected"></a>
+<h4>MicroPythonWebreplSocket.waitForConnected</h4>
+<b>waitForConnected</b>(<i></i>)
+
+<p>
+        Public method to wait for the websocket being connected.
+</p>
+<dl>
+<dt>Return:</dt>
+<dd>
+flag indicating the connect result
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+bool
+</dd>
+</dl>
+<a NAME="MicroPythonWebreplSocket.writeTextMessage" ID="MicroPythonWebreplSocket.writeTextMessage"></a>
+<h4>MicroPythonWebreplSocket.writeTextMessage</h4>
+<b>writeTextMessage</b>(<i>data</i>)
+
+<p>
+        Public method write some text data to the webrepl server of the connected
+        device.
+</p>
+<dl>
+
+<dt><i>data</i> (bytes)</dt>
+<dd>
+text data to be sent
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+</body></html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/eric7/Documentation/Source/eric7.MicroPython.MicroPythonWebreplUrlAddEditDialog.html	Thu May 04 17:58:52 2023 +0200
@@ -0,0 +1,146 @@
+<!DOCTYPE html>
+<html><head>
+<title>eric7.MicroPython.MicroPythonWebreplUrlAddEditDialog</title>
+<meta charset="UTF-8">
+<link rel="stylesheet" href="styles.css">
+</head>
+<body>
+<a NAME="top" ID="top"></a>
+<h1>eric7.MicroPython.MicroPythonWebreplUrlAddEditDialog</h1>
+
+<p>
+Module implementing a dialog to edit the parameters for a WebREPL connection.
+</p>
+<h3>Global Attributes</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Classes</h3>
+
+<table>
+
+<tr>
+<td><a href="#MicroPythonWebreplUrlAddEditDialog">MicroPythonWebreplUrlAddEditDialog</a></td>
+<td>Class implementing a dialog to edit the parameters for a WebREPL connection.</td>
+</tr>
+</table>
+<h3>Functions</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+<hr />
+<hr />
+<a NAME="MicroPythonWebreplUrlAddEditDialog" ID="MicroPythonWebreplUrlAddEditDialog"></a>
+<h2>MicroPythonWebreplUrlAddEditDialog</h2>
+
+<p>
+    Class implementing a dialog to edit the parameters for a WebREPL connection.
+</p>
+<h3>Derived from</h3>
+QDialog, Ui_MicroPythonWebreplUrlAddEditDialog
+<h3>Class Attributes</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Class Methods</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Methods</h3>
+
+<table>
+
+<tr>
+<td><a href="#MicroPythonWebreplUrlAddEditDialog.__init__">MicroPythonWebreplUrlAddEditDialog</a></td>
+<td>Constructor</td>
+</tr>
+<tr>
+<td><a href="#MicroPythonWebreplUrlAddEditDialog.__populateFields">__populateFields</a></td>
+<td>Private method to populate the various dialog fields with the given parameters.</td>
+</tr>
+<tr>
+<td><a href="#MicroPythonWebreplUrlAddEditDialog.__updateOkButton">__updateOkButton</a></td>
+<td>Private slot to update the enabled state of the OK button.</td>
+</tr>
+<tr>
+<td><a href="#MicroPythonWebreplUrlAddEditDialog.getWebreplUrl">getWebreplUrl</a></td>
+<td>Public method to retrieve the entered WebREPL connection data.</td>
+</tr>
+</table>
+<h3>Static Methods</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+
+<a NAME="MicroPythonWebreplUrlAddEditDialog.__init__" ID="MicroPythonWebreplUrlAddEditDialog.__init__"></a>
+<h4>MicroPythonWebreplUrlAddEditDialog (Constructor)</h4>
+<b>MicroPythonWebreplUrlAddEditDialog</b>(<i>definedNames, connectionParams=None, parent=None</i>)
+
+<p>
+        Constructor
+</p>
+<dl>
+
+<dt><i>definedNames</i> (list of str)</dt>
+<dd>
+list of already define WebREPL connection names
+</dd>
+<dt><i>connectionParams</i> (tuple of (str, str, str) (optional))</dt>
+<dd>
+parameters for the WebREPL connection to be edited
+            (default to None)
+</dd>
+<dt><i>parent</i> (QWidget (optional))</dt>
+<dd>
+reference to the parent widget (defaults to None)
+</dd>
+</dl>
+<a NAME="MicroPythonWebreplUrlAddEditDialog.__populateFields" ID="MicroPythonWebreplUrlAddEditDialog.__populateFields"></a>
+<h4>MicroPythonWebreplUrlAddEditDialog.__populateFields</h4>
+<b>__populateFields</b>(<i>params</i>)
+
+<p>
+        Private method to populate the various dialog fields with the given parameters.
+</p>
+<dl>
+
+<dt><i>params</i> (tuple of (str, str, str))</dt>
+<dd>
+arameters for the WebREPL connection to be edited
+</dd>
+</dl>
+<a NAME="MicroPythonWebreplUrlAddEditDialog.__updateOkButton" ID="MicroPythonWebreplUrlAddEditDialog.__updateOkButton"></a>
+<h4>MicroPythonWebreplUrlAddEditDialog.__updateOkButton</h4>
+<b>__updateOkButton</b>(<i></i>)
+
+<p>
+        Private slot to update the enabled state of the OK button.
+</p>
+<a NAME="MicroPythonWebreplUrlAddEditDialog.getWebreplUrl" ID="MicroPythonWebreplUrlAddEditDialog.getWebreplUrl"></a>
+<h4>MicroPythonWebreplUrlAddEditDialog.getWebreplUrl</h4>
+<b>getWebreplUrl</b>(<i></i>)
+
+<p>
+        Public method to retrieve the entered WebREPL connection data.
+</p>
+<dl>
+<dt>Return:</dt>
+<dd>
+tuple containing the name, description, URL and device type for
+            the WebREPL connection
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+tuple of (str, str, str, str)
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+</body></html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/eric7/Documentation/Source/eric7.MicroPython.MicroPythonWebreplUrlsConfigDialog.html	Thu May 04 17:58:52 2023 +0200
@@ -0,0 +1,211 @@
+<!DOCTYPE html>
+<html><head>
+<title>eric7.MicroPython.MicroPythonWebreplUrlsConfigDialog</title>
+<meta charset="UTF-8">
+<link rel="stylesheet" href="styles.css">
+</head>
+<body>
+<a NAME="top" ID="top"></a>
+<h1>eric7.MicroPython.MicroPythonWebreplUrlsConfigDialog</h1>
+
+<p>
+Module implementing a dialog to edit the list of configured WebREPL URLs.
+</p>
+<h3>Global Attributes</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Classes</h3>
+
+<table>
+
+<tr>
+<td><a href="#MicroPythonWebreplUrlsConfigDialog">MicroPythonWebreplUrlsConfigDialog</a></td>
+<td>Class implementing a dialog to edit the list of configured WebREPL URLs.</td>
+</tr>
+</table>
+<h3>Functions</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+<hr />
+<hr />
+<a NAME="MicroPythonWebreplUrlsConfigDialog" ID="MicroPythonWebreplUrlsConfigDialog"></a>
+<h2>MicroPythonWebreplUrlsConfigDialog</h2>
+
+<p>
+    Class implementing a dialog to edit the list of configured WebREPL URLs.
+</p>
+<h3>Derived from</h3>
+QDialog, Ui_MicroPythonWebreplUrlsConfigDialog
+<h3>Class Attributes</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Class Methods</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Methods</h3>
+
+<table>
+
+<tr>
+<td><a href="#MicroPythonWebreplUrlsConfigDialog.__init__">MicroPythonWebreplUrlsConfigDialog</a></td>
+<td>Constructor</td>
+</tr>
+<tr>
+<td><a href="#MicroPythonWebreplUrlsConfigDialog.__definedNames">__definedNames</a></td>
+<td>Private method to get a list of defined connection names.</td>
+</tr>
+<tr>
+<td><a href="#MicroPythonWebreplUrlsConfigDialog.__resizeColumns">__resizeColumns</a></td>
+<td>Private slot to resize the columns to their contents.</td>
+</tr>
+<tr>
+<td><a href="#MicroPythonWebreplUrlsConfigDialog.__sortItems">__sortItems</a></td>
+<td>Private slot to sort the list by name column (i.e.</td>
+</tr>
+<tr>
+<td><a href="#MicroPythonWebreplUrlsConfigDialog.__updateActionButtons">__updateActionButtons</a></td>
+<td>Private slot to change the enabled state of the action buttons.</td>
+</tr>
+<tr>
+<td><a href="#MicroPythonWebreplUrlsConfigDialog.getWebreplDict">getWebreplDict</a></td>
+<td>Public method to retrieve a dictionary containing the configured WebREPL URLs.</td>
+</tr>
+<tr>
+<td><a href="#MicroPythonWebreplUrlsConfigDialog.on_addButton_clicked">on_addButton_clicked</a></td>
+<td>Private slot to add a new WebREPL connection.</td>
+</tr>
+<tr>
+<td><a href="#MicroPythonWebreplUrlsConfigDialog.on_editButton_clicked">on_editButton_clicked</a></td>
+<td>Private slot to edit the selected WebREPL connection.</td>
+</tr>
+<tr>
+<td><a href="#MicroPythonWebreplUrlsConfigDialog.on_removeAllButton_clicked">on_removeAllButton_clicked</a></td>
+<td>Private slot to remove all entries.</td>
+</tr>
+<tr>
+<td><a href="#MicroPythonWebreplUrlsConfigDialog.on_removeButton_clicked">on_removeButton_clicked</a></td>
+<td>Private slot to remove the selected entries.</td>
+</tr>
+</table>
+<h3>Static Methods</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+
+<a NAME="MicroPythonWebreplUrlsConfigDialog.__init__" ID="MicroPythonWebreplUrlsConfigDialog.__init__"></a>
+<h4>MicroPythonWebreplUrlsConfigDialog (Constructor)</h4>
+<b>MicroPythonWebreplUrlsConfigDialog</b>(<i>webreplDict, parent=None</i>)
+
+<p>
+        Constructor
+</p>
+<dl>
+
+<dt><i>webreplDict</i> (dict)</dt>
+<dd>
+dictionary containing the configured WebREPL URLs
+</dd>
+<dt><i>parent</i> (QWidget (optional))</dt>
+<dd>
+reference to the parent widget (defaults to None)
+</dd>
+</dl>
+<a NAME="MicroPythonWebreplUrlsConfigDialog.__definedNames" ID="MicroPythonWebreplUrlsConfigDialog.__definedNames"></a>
+<h4>MicroPythonWebreplUrlsConfigDialog.__definedNames</h4>
+<b>__definedNames</b>(<i></i>)
+
+<p>
+        Private method to get a list of defined connection names.
+</p>
+<dl>
+<dt>Return:</dt>
+<dd>
+list of defined connection names
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+list of str
+</dd>
+</dl>
+<a NAME="MicroPythonWebreplUrlsConfigDialog.__resizeColumns" ID="MicroPythonWebreplUrlsConfigDialog.__resizeColumns"></a>
+<h4>MicroPythonWebreplUrlsConfigDialog.__resizeColumns</h4>
+<b>__resizeColumns</b>(<i></i>)
+
+<p>
+        Private slot to resize the columns to their contents.
+</p>
+<a NAME="MicroPythonWebreplUrlsConfigDialog.__sortItems" ID="MicroPythonWebreplUrlsConfigDialog.__sortItems"></a>
+<h4>MicroPythonWebreplUrlsConfigDialog.__sortItems</h4>
+<b>__sortItems</b>(<i></i>)
+
+<p>
+        Private slot to sort the list by name column (i.e. column 0).
+</p>
+<a NAME="MicroPythonWebreplUrlsConfigDialog.__updateActionButtons" ID="MicroPythonWebreplUrlsConfigDialog.__updateActionButtons"></a>
+<h4>MicroPythonWebreplUrlsConfigDialog.__updateActionButtons</h4>
+<b>__updateActionButtons</b>(<i></i>)
+
+<p>
+        Private slot to change the enabled state of the action buttons.
+</p>
+<a NAME="MicroPythonWebreplUrlsConfigDialog.getWebreplDict" ID="MicroPythonWebreplUrlsConfigDialog.getWebreplDict"></a>
+<h4>MicroPythonWebreplUrlsConfigDialog.getWebreplDict</h4>
+<b>getWebreplDict</b>(<i></i>)
+
+<p>
+        Public method to retrieve a dictionary containing the configured WebREPL URLs.
+</p>
+<dl>
+<dt>Return:</dt>
+<dd>
+dictionary containing the configured WebREPL URLs
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+dict
+</dd>
+</dl>
+<a NAME="MicroPythonWebreplUrlsConfigDialog.on_addButton_clicked" ID="MicroPythonWebreplUrlsConfigDialog.on_addButton_clicked"></a>
+<h4>MicroPythonWebreplUrlsConfigDialog.on_addButton_clicked</h4>
+<b>on_addButton_clicked</b>(<i></i>)
+
+<p>
+        Private slot to add a new WebREPL connection.
+</p>
+<a NAME="MicroPythonWebreplUrlsConfigDialog.on_editButton_clicked" ID="MicroPythonWebreplUrlsConfigDialog.on_editButton_clicked"></a>
+<h4>MicroPythonWebreplUrlsConfigDialog.on_editButton_clicked</h4>
+<b>on_editButton_clicked</b>(<i></i>)
+
+<p>
+        Private slot to edit the selected WebREPL connection.
+</p>
+<a NAME="MicroPythonWebreplUrlsConfigDialog.on_removeAllButton_clicked" ID="MicroPythonWebreplUrlsConfigDialog.on_removeAllButton_clicked"></a>
+<h4>MicroPythonWebreplUrlsConfigDialog.on_removeAllButton_clicked</h4>
+<b>on_removeAllButton_clicked</b>(<i></i>)
+
+<p>
+        Private slot to remove all entries.
+</p>
+<a NAME="MicroPythonWebreplUrlsConfigDialog.on_removeButton_clicked" ID="MicroPythonWebreplUrlsConfigDialog.on_removeButton_clicked"></a>
+<h4>MicroPythonWebreplUrlsConfigDialog.on_removeButton_clicked</h4>
+<b>on_removeButton_clicked</b>(<i></i>)
+
+<p>
+        Private slot to remove the selected entries.
+</p>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+</body></html>
\ No newline at end of file
--- a/src/eric7/Documentation/Source/eric7.MicroPython.MicroPythonWidget.html	Tue May 02 11:39:09 2023 +0200
+++ b/src/eric7/Documentation/Source/eric7.MicroPython.MicroPythonWidget.html	Thu May 04 17:58:52 2023 +0200
@@ -14,7 +14,7 @@
 <h3>Global Attributes</h3>
 
 <table>
-<tr><td>AnsiColorSchemes</td></tr>
+<tr><td>None</td></tr>
 </table>
 <h3>Classes</h3>
 
@@ -52,7 +52,7 @@
 <h3>Class Attributes</h3>
 
 <table>
-<tr><td>DeviceBoardRole</td></tr><tr><td>DevicePidRole</td></tr><tr><td>DevicePortRole</td></tr><tr><td>DeviceSerNoRole</td></tr><tr><td>DeviceTypeRole</td></tr><tr><td>DeviceVidRole</td></tr><tr><td>ManualMarker</td></tr><tr><td>ZoomMax</td></tr><tr><td>ZoomMin</td></tr>
+<tr><td>DeviceBoardRole</td></tr><tr><td>DeviceInterfaceTypeRole</td></tr><tr><td>DevicePidRole</td></tr><tr><td>DevicePortRole</td></tr><tr><td>DeviceSerNoRole</td></tr><tr><td>DeviceTypeRole</td></tr><tr><td>DeviceVidRole</td></tr><tr><td>DeviceWebreplUrlRole</td></tr><tr><td>ManualMarker</td></tr>
 </table>
 <h3>Class Methods</h3>
 
@@ -76,10 +76,6 @@
 <td>Private method to add devices to the list of manually added boards.</td>
 </tr>
 <tr>
-<td><a href="#MicroPythonWidget.__clear">__clear</a></td>
-<td>Private slot to clear the REPL pane.</td>
-</tr>
-<tr>
 <td><a href="#MicroPythonWidget.__compileEditor2Mpy">__compileEditor2Mpy</a></td>
 <td>Private slot to cross compile the current editor to a .mpy file.</td>
 </tr>
@@ -92,6 +88,10 @@
 <td>Private slot to open the MicroPython configuration page.</td>
 </tr>
 <tr>
+<td><a href="#MicroPythonWidget.__configureWebreplUrls">__configureWebreplUrls</a></td>
+<td>Private slot to configure the list of selectable WebREPL URLs.</td>
+</tr>
+<tr>
 <td><a href="#MicroPythonWidget.__connectToDevice">__connectToDevice</a></td>
 <td>Private method to connect to the selected device.</td>
 </tr>
@@ -108,10 +108,6 @@
 <td>Private method to disconnect from the device.</td>
 </tr>
 <tr>
-<td><a href="#MicroPythonWidget.__doZoom">__doZoom</a></td>
-<td>Private slot to zoom the REPL pane.</td>
-</tr>
-<tr>
 <td><a href="#MicroPythonWidget.__downloadFirmware">__downloadFirmware</a></td>
 <td>Private slot to open the firmware download page.</td>
 </tr>
@@ -148,26 +144,10 @@
 <td>Private method to check the availability of mpy-cross.</td>
 </tr>
 <tr>
-<td><a href="#MicroPythonWidget.__paste">__paste</a></td>
-<td>Private slot to perform a paste operation.</td>
-</tr>
-<tr>
 <td><a href="#MicroPythonWidget.__populateDeviceTypeComboBox">__populateDeviceTypeComboBox</a></td>
 <td>Private method to populate the device type selector.</td>
 </tr>
 <tr>
-<td><a href="#MicroPythonWidget.__processData">__processData</a></td>
-<td>Private slot to process bytes received from the device.</td>
-</tr>
-<tr>
-<td><a href="#MicroPythonWidget.__replEditMouseReleaseEvent">__replEditMouseReleaseEvent</a></td>
-<td>Private method handling mouse release events for the replEdit widget.</td>
-</tr>
-<tr>
-<td><a href="#MicroPythonWidget.__setCharFormat">__setCharFormat</a></td>
-<td>Private method setting the current text format of the REPL pane based on the passed ANSI codes.</td>
-</tr>
-<tr>
 <td><a href="#MicroPythonWidget.__setConnected">__setConnected</a></td>
 <td>Private method to set the connection status LED.</td>
 </tr>
@@ -180,10 +160,6 @@
 <td>Private slot to show a list of builtin modules.</td>
 </tr>
 <tr>
-<td><a href="#MicroPythonWidget.__showContextMenu">__showContextMenu</a></td>
-<td>Private slot to show the REPL context menu.</td>
-</tr>
-<tr>
 <td><a href="#MicroPythonWidget.__showDeviceTime">__showDeviceTime</a></td>
 <td>Private slot to show the date and time of the connected device.</td>
 </tr>
@@ -224,14 +200,6 @@
 <td>Public method to indicate that the device access the device file system via a local directory.</td>
 </tr>
 <tr>
-<td><a href="#MicroPythonWidget.eventFilter">eventFilter</a></td>
-<td>Public method to process events for the REPL pane.</td>
-</tr>
-<tr>
-<td><a href="#MicroPythonWidget.getCurrentBoard">getCurrentBoard</a></td>
-<td>Public method to get the board name of the selected device.</td>
-</tr>
-<tr>
 <td><a href="#MicroPythonWidget.getCurrentPort">getCurrentPort</a></td>
 <td>Public method to determine the port path of the selected device.</td>
 </tr>
@@ -268,10 +236,6 @@
 <td>Private slot to open a chart view to plot data received from the connected device.</td>
 </tr>
 <tr>
-<td><a href="#MicroPythonWidget.on_checkButton_clicked">on_checkButton_clicked</a></td>
-<td>Private slot to check for connected devices.</td>
-</tr>
-<tr>
 <td><a href="#MicroPythonWidget.on_connectButton_clicked">on_connectButton_clicked</a></td>
 <td>Private slot to connect to the selected device or disconnect from the currently connected device.</td>
 </tr>
@@ -345,13 +309,6 @@
 list of not ignored but unknown devices
 </dd>
 </dl>
-<a NAME="MicroPythonWidget.__clear" ID="MicroPythonWidget.__clear"></a>
-<h4>MicroPythonWidget.__clear</h4>
-<b>__clear</b>(<i></i>)
-
-<p>
-        Private slot to clear the REPL pane.
-</p>
 <a NAME="MicroPythonWidget.__compileEditor2Mpy" ID="MicroPythonWidget.__compileEditor2Mpy"></a>
 <h4>MicroPythonWidget.__compileEditor2Mpy</h4>
 <b>__compileEditor2Mpy</b>(<i></i>)
@@ -373,6 +330,13 @@
 <p>
         Private slot to open the MicroPython configuration page.
 </p>
+<a NAME="MicroPythonWidget.__configureWebreplUrls" ID="MicroPythonWidget.__configureWebreplUrls"></a>
+<h4>MicroPythonWidget.__configureWebreplUrls</h4>
+<b>__configureWebreplUrls</b>(<i></i>)
+
+<p>
+        Private slot to configure the list of selectable WebREPL URLs.
+</p>
 <a NAME="MicroPythonWidget.__connectToDevice" ID="MicroPythonWidget.__connectToDevice"></a>
 <h4>MicroPythonWidget.__connectToDevice</h4>
 <b>__connectToDevice</b>(<i>withAutostart=False</i>)
@@ -388,6 +352,13 @@
             automatically
 </dd>
 </dl>
+<dl>
+
+<dt>Raises <b>ValueError</b>:</dt>
+<dd>
+raised to indicate an unsupported interface type
+</dd>
+</dl>
 <a NAME="MicroPythonWidget.__convertToUF2" ID="MicroPythonWidget.__convertToUF2"></a>
 <h4>MicroPythonWidget.__convertToUF2</h4>
 <b>__convertToUF2</b>(<i></i>)
@@ -420,20 +391,6 @@
 <p>
         Private method to disconnect from the device.
 </p>
-<a NAME="MicroPythonWidget.__doZoom" ID="MicroPythonWidget.__doZoom"></a>
-<h4>MicroPythonWidget.__doZoom</h4>
-<b>__doZoom</b>(<i>value</i>)
-
-<p>
-        Private slot to zoom the REPL pane.
-</p>
-<dl>
-
-<dt><i>value</i> (int)</dt>
-<dd>
-zoom value
-</dd>
-</dl>
 <a NAME="MicroPythonWidget.__downloadFirmware" ID="MicroPythonWidget.__downloadFirmware"></a>
 <h4>MicroPythonWidget.__downloadFirmware</h4>
 <b>__downloadFirmware</b>(<i></i>)
@@ -546,20 +503,6 @@
 bool
 </dd>
 </dl>
-<a NAME="MicroPythonWidget.__paste" ID="MicroPythonWidget.__paste"></a>
-<h4>MicroPythonWidget.__paste</h4>
-<b>__paste</b>(<i>mode=QClipboard.Mode.Clipboard</i>)
-
-<p>
-        Private slot to perform a paste operation.
-</p>
-<dl>
-
-<dt><i>mode</i> (QClipboard.Mode (optional))</dt>
-<dd>
-paste mode (defaults to QClipboard.Mode.Clipboard)
-</dd>
-</dl>
 <a NAME="MicroPythonWidget.__populateDeviceTypeComboBox" ID="MicroPythonWidget.__populateDeviceTypeComboBox"></a>
 <h4>MicroPythonWidget.__populateDeviceTypeComboBox</h4>
 <b>__populateDeviceTypeComboBox</b>(<i></i>)
@@ -567,111 +510,6 @@
 <p>
         Private method to populate the device type selector.
 </p>
-<a NAME="MicroPythonWidget.__processData" ID="MicroPythonWidget.__processData"></a>
-<h4>MicroPythonWidget.__processData</h4>
-<b>__processData</b>(<i>data</i>)
-
-<p>
-        Private slot to process bytes received from the device.
-</p>
-<dl>
-
-<dt><i>data</i> (bytes)</dt>
-<dd>
-bytes received from the device
-</dd>
-</dl>
-<a NAME="MicroPythonWidget.__replEditMouseReleaseEvent" ID="MicroPythonWidget.__replEditMouseReleaseEvent"></a>
-<h4>MicroPythonWidget.__replEditMouseReleaseEvent</h4>
-<b>__replEditMouseReleaseEvent</b>(<i>evt</i>)
-
-<p>
-        Private method handling mouse release events for the replEdit widget.
-</p>
-<p>
-        Note: this is a hack because QTextEdit does not allow filtering of
-        QEvent.Type.MouseButtonRelease. To make middle button paste work, we
-        had to intercept the protected event method (some kind of
-        reimplementing it).
-</p>
-<dl>
-
-<dt><i>evt</i> (QMouseEvent)</dt>
-<dd>
-reference to the event object
-</dd>
-</dl>
-<a NAME="MicroPythonWidget.__setCharFormat" ID="MicroPythonWidget.__setCharFormat"></a>
-<h4>MicroPythonWidget.__setCharFormat</h4>
-<b>__setCharFormat</b>(<i>formatCodes, textCursor</i>)
-
-<p>
-        Private method setting the current text format of the REPL pane based
-        on the passed ANSI codes.
-</p>
-<p>
-        Following codes are used:
-        <ul>
-        <li>0: Reset</li>
-        <li>1: Bold font (weight 75)</li>
-        <li>2: Light font (weight 25)</li>
-        <li>3: Italic font</li>
-        <li>4: Underlined font</li>
-        <li>9: Strikeout font</li>
-        <li>21: Bold off (weight 50)</li>
-        <li>22: Light off (weight 50)</li>
-        <li>23: Italic off</li>
-        <li>24: Underline off</li>
-        <li>29: Strikeout off</li>
-        <li>30: foreground Black</li>
-        <li>31: foreground Dark Red</li>
-        <li>32: foreground Dark Green</li>
-        <li>33: foreground Dark Yellow</li>
-        <li>34: foreground Dark Blue</li>
-        <li>35: foreground Dark Magenta</li>
-        <li>36: foreground Dark Cyan</li>
-        <li>37: foreground Light Gray</li>
-        <li>39: reset foreground to default</li>
-        <li>40: background Black</li>
-        <li>41: background Dark Red</li>
-        <li>42: background Dark Green</li>
-        <li>43: background Dark Yellow</li>
-        <li>44: background Dark Blue</li>
-        <li>45: background Dark Magenta</li>
-        <li>46: background Dark Cyan</li>
-        <li>47: background Light Gray</li>
-        <li>49: reset background to default</li>
-        <li>53: Overlined font</li>
-        <li>55: Overline off</li>
-        <li>90: bright foreground Dark Gray</li>
-        <li>91: bright foreground Red</li>
-        <li>92: bright foreground Green</li>
-        <li>93: bright foreground Yellow</li>
-        <li>94: bright foreground Blue</li>
-        <li>95: bright foreground Magenta</li>
-        <li>96: bright foreground Cyan</li>
-        <li>97: bright foreground White</li>
-        <li>100: bright background Dark Gray</li>
-        <li>101: bright background Red</li>
-        <li>102: bright background Green</li>
-        <li>103: bright background Yellow</li>
-        <li>104: bright background Blue</li>
-        <li>105: bright background Magenta</li>
-        <li>106: bright background Cyan</li>
-        <li>107: bright background White</li>
-        </ul>
-</p>
-<dl>
-
-<dt><i>formatCodes</i> (list of str)</dt>
-<dd>
-list of format codes
-</dd>
-<dt><i>textCursor</i> (QTextCursor)</dt>
-<dd>
-reference to the text cursor
-</dd>
-</dl>
 <a NAME="MicroPythonWidget.__setConnected" ID="MicroPythonWidget.__setConnected"></a>
 <h4>MicroPythonWidget.__setConnected</h4>
 <b>__setConnected</b>(<i>connected</i>)
@@ -700,20 +538,6 @@
 <p>
         Private slot to show a list of builtin modules.
 </p>
-<a NAME="MicroPythonWidget.__showContextMenu" ID="MicroPythonWidget.__showContextMenu"></a>
-<h4>MicroPythonWidget.__showContextMenu</h4>
-<b>__showContextMenu</b>(<i>pos</i>)
-
-<p>
-        Private slot to show the REPL context menu.
-</p>
-<dl>
-
-<dt><i>pos</i> (QPoint)</dt>
-<dd>
-position to show the menu at
-</dd>
-</dl>
 <a NAME="MicroPythonWidget.__showDeviceTime" ID="MicroPythonWidget.__showDeviceTime"></a>
 <h4>MicroPythonWidget.__showDeviceTime</h4>
 <b>__showDeviceTime</b>(<i></i>)
@@ -817,55 +641,6 @@
 bool
 </dd>
 </dl>
-<a NAME="MicroPythonWidget.eventFilter" ID="MicroPythonWidget.eventFilter"></a>
-<h4>MicroPythonWidget.eventFilter</h4>
-<b>eventFilter</b>(<i>obj, evt</i>)
-
-<p>
-        Public method to process events for the REPL pane.
-</p>
-<dl>
-
-<dt><i>obj</i> (QObject)</dt>
-<dd>
-reference to the object the event was meant for
-</dd>
-<dt><i>evt</i> (QEvent)</dt>
-<dd>
-reference to the event object
-</dd>
-</dl>
-<dl>
-<dt>Return:</dt>
-<dd>
-flag to indicate that the event was handled
-</dd>
-</dl>
-<dl>
-<dt>Return Type:</dt>
-<dd>
-bool
-</dd>
-</dl>
-<a NAME="MicroPythonWidget.getCurrentBoard" ID="MicroPythonWidget.getCurrentBoard"></a>
-<h4>MicroPythonWidget.getCurrentBoard</h4>
-<b>getCurrentBoard</b>(<i></i>)
-
-<p>
-        Public method to get the board name of the selected device.
-</p>
-<dl>
-<dt>Return:</dt>
-<dd>
-board name of the selected device
-</dd>
-</dl>
-<dl>
-<dt>Return Type:</dt>
-<dd>
-str
-</dd>
-</dl>
 <a NAME="MicroPythonWidget.getCurrentPort" ID="MicroPythonWidget.getCurrentPort"></a>
 <h4>MicroPythonWidget.getCurrentPort</h4>
 <b>getCurrentPort</b>(<i></i>)
@@ -1020,13 +795,6 @@
 state of the button
 </dd>
 </dl>
-<a NAME="MicroPythonWidget.on_checkButton_clicked" ID="MicroPythonWidget.on_checkButton_clicked"></a>
-<h4>MicroPythonWidget.on_checkButton_clicked</h4>
-<b>on_checkButton_clicked</b>(<i></i>)
-
-<p>
-        Private slot to check for connected devices.
-</p>
 <a NAME="MicroPythonWidget.on_connectButton_clicked" ID="MicroPythonWidget.on_connectButton_clicked"></a>
 <h4>MicroPythonWidget.on_connectButton_clicked</h4>
 <b>on_connectButton_clicked</b>(<i></i>)
--- a/src/eric7/Documentation/Source/eric7.Project.CreateDialogCodeDialog.html	Tue May 02 11:39:09 2023 +0200
+++ b/src/eric7/Documentation/Source/eric7.Project.CreateDialogCodeDialog.html	Thu May 04 17:58:52 2023 +0200
@@ -14,7 +14,7 @@
 <h3>Global Attributes</h3>
 
 <table>
-<tr><td>parameterNamesListRole</td></tr><tr><td>parameterTypesListRole</td></tr><tr><td>pyqtSignatureRole</td></tr><tr><td>pythonSignatureRole</td></tr><tr><td>returnTypeRole</td></tr><tr><td>rubySignatureRole</td></tr>
+<tr><td>parameterNamesListRole</td></tr><tr><td>parameterTypesListRole</td></tr><tr><td>pyqtSignatureRole</td></tr><tr><td>pythonSignatureRole</td></tr><tr><td>returnTypeRole</td></tr>
 </table>
 <h3>Classes</h3>
 
@@ -43,7 +43,7 @@
 <h3>Class Attributes</h3>
 
 <table>
-<tr><td>DialogClasses</td></tr><tr><td>Separator</td></tr>
+<tr><td>DialogClasses</td></tr>
 </table>
 <h3>Class Methods</h3>
 
@@ -64,10 +64,6 @@
 </tr>
 <tr>
 <td><a href="#CreateDialogCodeDialog.__generateCode">__generateCode</a></td>
-<td>Private slot to generate the code as requested by the user.</td>
-</tr>
-<tr>
-<td><a href="#CreateDialogCodeDialog.__generatePythonCode">__generatePythonCode</a></td>
 <td>Private slot to generate Python code as requested by the user.</td>
 </tr>
 <tr>
@@ -163,13 +159,6 @@
 <b>__generateCode</b>(<i></i>)
 
 <p>
-        Private slot to generate the code as requested by the user.
-</p>
-<a NAME="CreateDialogCodeDialog.__generatePythonCode" ID="CreateDialogCodeDialog.__generatePythonCode"></a>
-<h4>CreateDialogCodeDialog.__generatePythonCode</h4>
-<b>__generatePythonCode</b>(<i></i>)
-
-<p>
         Private slot to generate Python code as requested by the user.
 </p>
 <a NAME="CreateDialogCodeDialog.__mapType" ID="CreateDialogCodeDialog.__mapType"></a>
--- a/src/eric7/Documentation/Source/eric7.Project.ProjectResourcesBrowser.html	Tue May 02 11:39:09 2023 +0200
+++ b/src/eric7/Documentation/Source/eric7.Project.ProjectResourcesBrowser.html	Thu May 04 17:58:52 2023 +0200
@@ -57,7 +57,7 @@
 <h3>Class Attributes</h3>
 
 <table>
-<tr><td>RCFilenameFormatPython</td></tr><tr><td>RCFilenameFormatRuby</td></tr>
+<tr><td>RCFilenameFormatPython</td></tr>
 </table>
 <h3>Class Methods</h3>
 
--- a/src/eric7/Documentation/Source/eric7.Project.UicLoadUi5.html	Tue May 02 11:39:09 2023 +0200
+++ b/src/eric7/Documentation/Source/eric7.Project.UicLoadUi5.html	Thu May 04 17:58:52 2023 +0200
@@ -30,8 +30,12 @@
 <td>Private function to map a type as reported by Qt's meta object to the correct Python type.</td>
 </tr>
 <tr>
+<td><a href="#_printerr">_printerr</a></td>
+<td>Function to print the given string as error to sys.stdoerr with a guard string.</td>
+</tr>
+<tr>
 <td><a href="#_printout">_printout</a></td>
-<td>Function to print the given string to sys.stdout with a guard string.</td>
+<td>Function to print the given string as output to sys.stderr with a guard string.</td>
 </tr>
 <tr>
 <td><a href="#className">className</a></td>
@@ -78,12 +82,29 @@
 <div align="right"><a href="#top">Up</a></div>
 <hr />
 <hr />
+<a NAME="_printerr" ID="_printerr"></a>
+<h2>_printerr</h2>
+<b>_printerr</b>(<i>dataString</i>)
+
+<p>
+    Function to print the given string as error to sys.stdoerr with a guard string.
+</p>
+<dl>
+
+<dt><i>dataString</i> (str)</dt>
+<dd>
+string to be printed
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+<hr />
 <a NAME="_printout" ID="_printout"></a>
 <h2>_printout</h2>
 <b>_printout</b>(<i>dataString</i>)
 
 <p>
-    Function to print the given string to sys.stdout with a guard string.
+    Function to print the given string as output to sys.stderr with a guard string.
 </p>
 <dl>
 
--- a/src/eric7/Documentation/Source/eric7.Project.UicLoadUi6.html	Tue May 02 11:39:09 2023 +0200
+++ b/src/eric7/Documentation/Source/eric7.Project.UicLoadUi6.html	Thu May 04 17:58:52 2023 +0200
@@ -30,8 +30,12 @@
 <td>Private function to map a type as reported by Qt's meta object to the correct Python type.</td>
 </tr>
 <tr>
+<td><a href="#_printerr">_printerr</a></td>
+<td>Function to print the given string as error to sys.stdoerr with a guard string.</td>
+</tr>
+<tr>
 <td><a href="#_printout">_printout</a></td>
-<td>Function to print the given string to sys.stdout with a guard string.</td>
+<td>Function to print the given string as output to sys.stderr with a guard string.</td>
 </tr>
 <tr>
 <td><a href="#className">className</a></td>
@@ -78,12 +82,29 @@
 <div align="right"><a href="#top">Up</a></div>
 <hr />
 <hr />
+<a NAME="_printerr" ID="_printerr"></a>
+<h2>_printerr</h2>
+<b>_printerr</b>(<i>dataString</i>)
+
+<p>
+    Function to print the given string as error to sys.stdoerr with a guard string.
+</p>
+<dl>
+
+<dt><i>dataString</i> (str)</dt>
+<dd>
+string to be printed
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+<hr />
 <a NAME="_printout" ID="_printout"></a>
 <h2>_printout</h2>
 <b>_printout</b>(<i>dataString</i>)
 
 <p>
-    Function to print the given string to sys.stdout with a guard string.
+    Function to print the given string as output to sys.stderr with a guard string.
 </p>
 <dl>
 
--- a/src/eric7/Documentation/Source/index-eric7.MicroPython.html	Tue May 02 11:39:09 2023 +0200
+++ b/src/eric7/Documentation/Source/index-eric7.MicroPython.html	Thu May 04 17:58:52 2023 +0200
@@ -61,7 +61,7 @@
 </tr>
 <tr>
 <td><a href="eric7.MicroPython.MicroPythonDeviceInterface.html">MicroPythonDeviceInterface</a></td>
-<td>Module implementing some file system commands for MicroPython.</td>
+<td>Module  implementing an interface base class to talk to a connected MicroPython device.</td>
 </tr>
 <tr>
 <td><a href="eric7.MicroPython.MicroPythonFileManager.html">MicroPythonFileManager</a></td>
@@ -84,10 +84,38 @@
 <td>Module implementing a dialog to show progress messages.</td>
 </tr>
 <tr>
+<td><a href="eric7.MicroPython.MicroPythonReplWidget.html">MicroPythonReplWidget</a></td>
+<td>Module implementing the MicroPython REPL widget.</td>
+</tr>
+<tr>
+<td><a href="eric7.MicroPython.MicroPythonSerialDeviceInterface.html">MicroPythonSerialDeviceInterface</a></td>
+<td>Module  implementing an interface to talk to a connected MicroPython device via a serial link.</td>
+</tr>
+<tr>
 <td><a href="eric7.MicroPython.MicroPythonSerialPort.html">MicroPythonSerialPort</a></td>
 <td>Module implementing a QSerialPort with additional functionality for MicroPython devices.</td>
 </tr>
 <tr>
+<td><a href="eric7.MicroPython.MicroPythonWebreplConnectionDialog.html">MicroPythonWebreplConnectionDialog</a></td>
+<td>Module implementing a dialog to enter the WebREPL connection parameters.</td>
+</tr>
+<tr>
+<td><a href="eric7.MicroPython.MicroPythonWebreplDeviceInterface.html">MicroPythonWebreplDeviceInterface</a></td>
+<td>Module  implementing an interface to talk to a connected MicroPython device via a webrepl connection.</td>
+</tr>
+<tr>
+<td><a href="eric7.MicroPython.MicroPythonWebreplSocket.html">MicroPythonWebreplSocket</a></td>
+<td>Module implementing a websocket class to be connect to the MicroPython webrepl interface.</td>
+</tr>
+<tr>
+<td><a href="eric7.MicroPython.MicroPythonWebreplUrlAddEditDialog.html">MicroPythonWebreplUrlAddEditDialog</a></td>
+<td>Module implementing a dialog to edit the parameters for a WebREPL connection.</td>
+</tr>
+<tr>
+<td><a href="eric7.MicroPython.MicroPythonWebreplUrlsConfigDialog.html">MicroPythonWebreplUrlsConfigDialog</a></td>
+<td>Module implementing a dialog to edit the list of configured WebREPL URLs.</td>
+</tr>
+<tr>
 <td><a href="eric7.MicroPython.MicroPythonWidget.html">MicroPythonWidget</a></td>
 <td>Module implementing the MicroPython REPL widget.</td>
 </tr>
--- a/src/eric7/MicroPython/Devices/CircuitPythonDevices.py	Tue May 02 11:39:09 2023 +0200
+++ b/src/eric7/MicroPython/Devices/CircuitPythonDevices.py	Thu May 04 17:58:52 2023 +0200
@@ -469,7 +469,7 @@
         Private slot to reset the connected device.
         """
         if self.microPython.isConnected():
-            self.microPython.deviceInterface().execute(
+            self.executeCommands(
                 "import microcontroller as mc\n"
                 "mc.on_next_reset(mc.RunMode.NORMAL)"
                 "mc.reset()\n",
@@ -501,7 +501,7 @@
         Private slot to switch the board into 'bootloader' mode.
         """
         if self.microPython.isConnected():
-            self.microPython.deviceInterface().execute(
+            self.executeCommands(
                 "import microcontroller as mc\n"
                 "mc.on_next_reset(mc.RunMode.BOOTLOADER)\n"
                 "mc.reset()\n",
@@ -514,7 +514,7 @@
         Private slot to switch the board into 'UF2 Boot' mode.
         """
         if self.microPython.isConnected():
-            self.microPython.deviceInterface().execute(
+            self.executeCommands(
                 "import microcontroller as mc\n"
                 "mc.on_next_reset(mc.RunMode.UF2)\n"
                 "mc.reset()\n",
@@ -764,7 +764,7 @@
 print(has_wifi())
 del has_wifi
 """
-        out, err = self._interface.execute(command, mode=self._submitMode)
+        out, err = self.executeCommands(command, mode=self._submitMode)
         if err:
             raise OSError(self._shortError(err))
         return ast.literal_eval(out.decode("utf-8"))
@@ -848,7 +848,7 @@
 del wifi_status
 """
 
-        out, err = self._interface.execute(command, mode=self._submitMode)
+        out, err = self.executeCommands(command, mode=self._submitMode)
         if err:
             raise OSError(self._shortError(err))
 
@@ -902,7 +902,7 @@
         )
 
         with EricOverrideCursor():
-            out, err = self._interface.execute(
+            out, err = self.executeCommands(
                 command, mode=self._submitMode, timeout=15000
             )
         if err:
@@ -938,7 +938,7 @@
 del disconnect_wifi
 """
 
-        out, err = self._interface.execute(command, mode=self._submitMode)
+        out, err = self.executeCommands(command, mode=self._submitMode)
         if err:
             return False, err
 
@@ -1070,7 +1070,7 @@
 del check_internet
 """
 
-        out, err = self._interface.execute(command, mode=self._submitMode)
+        out, err = self.executeCommands(command, mode=self._submitMode)
         if err:
             return False, err
 
@@ -1107,9 +1107,7 @@
 del scan_networks
 """
 
-        out, err = self._interface.execute(
-            command, mode=self._submitMode, timeout=15000
-        )
+        out, err = self.executeCommands(command, mode=self._submitMode, timeout=15000)
         if err:
             return [], err
 
@@ -1162,7 +1160,7 @@
 del deactivate
 """
 
-        out, err = self._interface.execute(command, mode=self._submitMode)
+        out, err = self.executeCommands(command, mode=self._submitMode)
         if err:
             return False, err
         else:
@@ -1214,9 +1212,7 @@
             repr(ssid), repr(password), authmode
         )
 
-        out, err = self._interface.execute(
-            command, mode=self._submitMode, timeout=15000
-        )
+        out, err = self.executeCommands(command, mode=self._submitMode, timeout=15000)
         if err:
             return False, err
         elif out and out.startswith(b"Error:"):
@@ -1245,7 +1241,7 @@
 del stop_ap
 """
 
-        out, err = self._interface.execute(command, mode=self._submitMode)
+        out, err = self.executeCommands(command, mode=self._submitMode)
         if err:
             return False, err
         elif out and out.startswith(b"Error:"):
@@ -1294,9 +1290,7 @@
 del has_eth
 """
 
-        out, err = self._interface.execute(
-            command, mode=self._submitMode, timeout=10000
-        )
+        out, err = self.executeCommands(command, mode=self._submitMode, timeout=10000)
         if err:
             raise OSError(self._shortError(err))
 
@@ -1339,9 +1333,7 @@
             WiznetUtilities.cpyWiznetInit()
         )
 
-        out, err = self._interface.execute(
-            command, mode=self._submitMode, timeout=10000
-        )
+        out, err = self.executeCommands(command, mode=self._submitMode, timeout=10000)
         if err:
             raise OSError(self._shortError(err))
 
@@ -1396,7 +1388,7 @@
         )
 
         with EricOverrideCursor():
-            out, err = self._interface.execute(
+            out, err = self.executeCommands(
                 command, mode=self._submitMode, timeout=15000
             )
         if err:
@@ -1428,7 +1420,7 @@
         )
 
         with EricOverrideCursor():
-            out, err = self._interface.execute(
+            out, err = self.executeCommands(
                 command, mode=self._submitMode, timeout=15000
             )
         if err:
@@ -1465,9 +1457,7 @@
             WiznetUtilities.cpyWiznetInit(),
         )
 
-        out, err = self._interface.execute(
-            command, mode=self._submitMode, timeout=15000
-        )
+        out, err = self.executeCommands(command, mode=self._submitMode, timeout=15000)
         if err:
             return False, err
 
@@ -1621,9 +1611,7 @@
 print(has_bt())
 del has_bt
 """
-        out, err = self._interface.execute(
-            command, mode=self._submitMode, timeout=10000
-        )
+        out, err = self.executeCommands(command, mode=self._submitMode, timeout=10000)
         if err:
             raise OSError(self._shortError(err))
         return out.strip() == b"True"
@@ -1666,7 +1654,7 @@
 ble_status()
 del ble_status
 """
-        out, err = self._interface.execute(command, mode=self._submitMode)
+        out, err = self.executeCommands(command, mode=self._submitMode)
         if err:
             raise OSError(self._shortError(err))
 
@@ -1703,7 +1691,7 @@
 activate_ble()
 del activate_ble
 """
-        out, err = self._interface.execute(command, mode=self._submitMode)
+        out, err = self.executeCommands(command, mode=self._submitMode)
         if err:
             raise OSError(self._shortError(err))
 
@@ -1729,7 +1717,7 @@
 deactivate_ble()
 del deactivate_ble
 """
-        out, err = self._interface.execute(command, mode=self._submitMode)
+        out, err = self.executeCommands(command, mode=self._submitMode)
         if err:
             raise OSError(self._shortError(err))
 
@@ -1790,7 +1778,7 @@
 """.format(
             timeout
         )
-        out, err = self._interface.execute(
+        out, err = self.executeCommands(
             command, mode=self._submitMode, timeout=(timeout + 5) * 1000
         )
         if err:
@@ -1845,7 +1833,7 @@
 print(has_ntp())
 del has_ntp
 """
-        out, err = self._interface.execute(command, mode=self._submitMode)
+        out, err = self.executeCommands(command, mode=self._submitMode)
         if err:
             raise OSError(self._shortError(err))
         return out.strip() == b"True"
@@ -1937,7 +1925,7 @@
                 repr(server), tzOffset, timeout
             )
 
-        out, err = self._interface.execute(
+        out, err = self.executeCommands(
             command, mode=self._submitMode, timeout=(timeout + 2) * 1000
         )
         if err:
--- a/src/eric7/MicroPython/Devices/DeviceBase.py	Tue May 02 11:39:09 2023 +0200
+++ b/src/eric7/MicroPython/Devices/DeviceBase.py	Thu May 04 17:58:52 2023 +0200
@@ -118,7 +118,7 @@
         super().__init__(parent)
 
         self._deviceType = deviceType
-        self._interface = microPythonWidget.deviceInterface()
+        self._interface = None
         self.microPython = microPythonWidget
         self._deviceData = {}  # dictionary with essential device data
 
@@ -137,6 +137,7 @@
         self._deviceData = {}
 
         if connected:
+            self._interface = self.microPython.deviceInterface()
             with contextlib.suppress(OSError):
                 self._deviceData = self.__getDeviceData()
                 self._deviceData["local_mip"] = (
@@ -149,6 +150,8 @@
                     self._deviceData["ethernet_type"],
                 ) = self.hasEthernet()
                 self._deviceData["ntp"] = self.hasNetworkTime()
+        else:
+            self._interface = None
 
     def getDeviceType(self):
         """
@@ -381,6 +384,29 @@
             # user cancelled
             return ""
 
+    def executeCommands(self, commands, *, mode="raw", timeout=0):
+        """
+        Public method to send commands to the connected device and return the
+        result.
+
+        If no connected interface is available, empty results will be returned.
+
+        @param commands list of commands to be executed
+        @type str or list of str
+        @keyparam mode submit mode to be used (one of 'raw' or 'paste') (defaults to
+            'raw')
+        @type str
+        @keyparam timeout per command timeout in milliseconds (0 for configured default)
+            (defaults to 0)
+        @type int (optional)
+        @return tuple containing stdout and stderr output of the device
+        @rtype tuple of (bytes, bytes)
+        """
+        if self._interface is None:
+            return b"", b""
+
+        return self._interface.execute(commands, mode=mode, timeout=timeout)
+
     def sendCommands(self, commandsList):
         """
         Public method to send a list of commands to the device.
@@ -388,25 +414,8 @@
         @param commandsList list of commands to be sent to the device
         @type list of str
         """
-        if self._submitMode == "raw":
-            rawOn = [  # sequence of commands to enter raw mode
-                b"\x02",  # Ctrl-B: exit raw repl (just in case)
-                b"\r\x03\x03\x03",  # Ctrl-C three times: interrupt any running program
-                b"\r\x01",  # Ctrl-A: enter raw REPL
-            ]
-            newLine = [
-                b'print("\\n")\r',
-            ]
-            commands = [c.encode("utf-8)") + b"\r" for c in commandsList]
-            commands.append(b"\r")
-            commands.append(b"\x04")
-            rawOff = [b"\x02", b"\x02"]
-            commandSequence = rawOn + newLine + commands + rawOff
-            self._interface.executeAsync(commandSequence)
-        elif self._submitMode == "paste":
-            commands = b"\n".join([c.encode("utf-8)") for c in commandsList])
-            commandSequence = ["@PasteOn@", commands]
-            self._interface.executeAsyncPaste(commandSequence)
+        if self._interface is not None:
+            self._interface.executeAsync(commandsList, self._submitMode)
 
     @pyqtSlot()
     def handleDataFlood(self):
@@ -543,7 +552,7 @@
 """.format(
             repr(pathname)
         )
-        out, err = self._interface.execute(command, mode=self._submitMode)
+        out, err = self.executeCommands(command, mode=self._submitMode)
         if err:
             raise OSError(self._shortError(err))
         return out.strip() == b"True"
@@ -565,7 +574,7 @@
 """.format(
             dirname
         )
-        out, err = self._interface.execute(command, mode=self._submitMode)
+        out, err = self.executeCommands(command, mode=self._submitMode)
         if err:
             raise OSError(self._shortError(err))
         return ast.literal_eval(out.decode("utf-8"))
@@ -617,7 +626,7 @@
 """.format(
             dirname, showHidden
         )
-        out, err = self._interface.execute(command, mode=self._submitMode)
+        out, err = self.executeCommands(command, mode=self._submitMode)
         if err:
             raise OSError(self._shortError(err))
         fileslist = ast.literal_eval(out.decode("utf-8"))
@@ -645,7 +654,7 @@
 """.format(
                 dirname
             )
-            out, err = self._interface.execute(command, mode=self._submitMode)
+            out, err = self.executeCommands(command, mode=self._submitMode)
             if err:
                 raise OSError(self._shortError(err))
 
@@ -662,7 +671,7 @@
 print(__os_.getcwd())
 del __os_
 """
-        out, err = self._interface.execute(command, mode=self._submitMode)
+        out, err = self.executeCommands(command, mode=self._submitMode)
         if err:
             raise OSError(self._shortError(err))
         return out.decode("utf-8").strip()
@@ -687,7 +696,7 @@
 """.format(
                 filename
             )
-            out, err = self._interface.execute(command, mode=self._submitMode)
+            out, err = self.executeCommands(command, mode=self._submitMode)
             if err:
                 raise OSError(self._shortError(err))
 
@@ -734,7 +743,7 @@
 """.format(
                 name, recursive, force
             )
-            out, err = self._interface.execute(
+            out, err = self.executeCommands(
                 command, mode=self._submitMode, timeout=20000
             )
             if err:
@@ -759,7 +768,7 @@
 """.format(
                 dirname
             )
-            out, err = self._interface.execute(command, mode=self._submitMode)
+            out, err = self.executeCommands(command, mode=self._submitMode)
             if err:
                 raise OSError(self._shortError(err))
 
@@ -786,7 +795,7 @@
 """.format(
                 dirname
             )
-            out, err = self._interface.execute(command, mode=self._submitMode)
+            out, err = self.executeCommands(command, mode=self._submitMode)
             if err:
                 raise OSError(self._shortError(err))
 
@@ -848,7 +857,7 @@
         )
         command = "\n".join(commands)
 
-        out, err = self._interface.execute(command, mode=self._submitMode)
+        out, err = self.executeCommands(command, mode=self._submitMode)
         if err:
             raise OSError(self._shortError(err))
         return True
@@ -917,7 +926,7 @@
 """.format(
             deviceFileName
         )
-        out, err = self._interface.execute(command, mode=self._submitMode)
+        out, err = self.executeCommands(command, mode=self._submitMode)
         if err:
             raise OSError(self._shortError(err))
 
@@ -962,7 +971,7 @@
 print(fsinfo())
 del __os_, fsinfo
 """
-        out, err = self._interface.execute(command, mode=self._submitMode)
+        out, err = self.executeCommands(command, mode=self._submitMode)
         if err:
             raise OSError(self._shortError(err))
         infodict = ast.literal_eval(out.decode("utf-8"))
@@ -1084,7 +1093,7 @@
 print(get_device_data())
 del get_device_data
 """
-        out, err = self._interface.execute(command, mode=self._submitMode)
+        out, err = self.executeCommands(command, mode=self._submitMode)
         if err:
             raise OSError(self._shortError(err))
         return ast.literal_eval(out.decode("utf-8"))
@@ -1198,7 +1207,7 @@
 print(get_board_info())
 del get_board_info
 """
-        out, err = self._interface.execute(command, mode=self._submitMode)
+        out, err = self.executeCommands(command, mode=self._submitMode)
         if err:
             raise OSError(self._shortError(err))
         return ast.literal_eval(out.decode("utf-8"))
@@ -1212,7 +1221,7 @@
         @exception OSError raised to indicate an issue with the device
         """
         commands = ["help('modules')"]
-        out, err = self._interface.execute(commands, mode=self._submitMode)
+        out, err = self.executeCommands(commands, mode=self._submitMode)
         if err:
             raise OSError(self._shortError(err))
 
@@ -1255,7 +1264,7 @@
 get_time()
 del get_time
 """
-        out, err = self._interface.execute(command, mode=self._submitMode)
+        out, err = self.executeCommands(command, mode=self._submitMode)
         if err:
             if b"NotImplementedError" in err:
                 return "&lt;unsupported&gt; &lt;unsupported&gt;"
@@ -1327,7 +1336,7 @@
                     now.tm_isdst,
                 ),
             )
-            out, err = self._interface.execute(command, mode=self._submitMode)
+            out, err = self.executeCommands(command, mode=self._submitMode)
             if err:
                 raise OSError(self._shortError(err))
 
@@ -1354,7 +1363,7 @@
 """.format(
             repr(packages)
         )
-        return self._interface.execute(command, mode=self._submitMode, timeout=60000)
+        return self.executeCommands(command, mode=self._submitMode, timeout=60000)
 
     def mipInstall(self, package, index=None, target=None, version=None, mpy=True):
         """
@@ -1393,7 +1402,7 @@
 """.format(
             parameterStr
         )
-        return self._interface.execute(command, mode=self._submitMode, timeout=60000)
+        return self.executeCommands(command, mode=self._submitMode, timeout=60000)
 
     def getLibPaths(self):
         """
@@ -1411,7 +1420,7 @@
 lib_paths()
 del lib_paths
 """
-        out, err = self._interface.execute(command, mode=self._submitMode)
+        out, err = self.executeCommands(command, mode=self._submitMode)
         if err:
             raise OSError(self._shortError(err))
 
--- a/src/eric7/MicroPython/Devices/EspDevices.py	Tue May 02 11:39:09 2023 +0200
+++ b/src/eric7/MicroPython/Devices/EspDevices.py	Thu May 04 17:58:52 2023 +0200
@@ -508,7 +508,7 @@
         Private slot to reset the connected device.
         """
         if self.microPython.isConnected() and not self.hasCircuitPython():
-            self.microPython.deviceInterface().execute(
+            self.executeCommands(
                 "import machine\nmachine.reset()\n", mode=self._submitMode
             )
         else:
@@ -688,7 +688,7 @@
 del wifi_status
 """
 
-        out, err = self._interface.execute(command, mode=self._submitMode)
+        out, err = self.executeCommands(command, mode=self._submitMode)
         if err:
             raise OSError(self._shortError(err))
 
@@ -745,7 +745,7 @@
         )
 
         with EricOverrideCursor():
-            out, err = self._interface.execute(
+            out, err = self.executeCommands(
                 command, mode=self._submitMode, timeout=15000
             )
         if err:
@@ -787,7 +787,7 @@
 del disconnect_wifi
 """
 
-        out, err = self._interface.execute(command, mode=self._submitMode)
+        out, err = self.executeCommands(command, mode=self._submitMode)
         if err:
             return False, err
 
@@ -842,7 +842,7 @@
 del modify_boot
 """
 
-        out, err = self._interface.execute(nvsCommand, mode=self._submitMode)
+        out, err = self.executeCommands(nvsCommand, mode=self._submitMode)
         if err:
             return False, self.tr("Error saving credentials: {0}").format(err)
 
@@ -857,7 +857,7 @@
         except OSError as err:
             return False, self.tr("Error saving auto-connect script: {0}").format(err)
 
-        out, err = self._interface.execute(bootCommand, mode=self._submitMode)
+        out, err = self.executeCommands(bootCommand, mode=self._submitMode)
         if err:
             return False, self.tr("Error modifying 'boot.py': {0}").format(err)
 
@@ -889,7 +889,7 @@
 del delete_wifi_creds
 """
 
-        out, err = self._interface.execute(nvsCommand, mode=self._submitMode)
+        out, err = self.executeCommands(nvsCommand, mode=self._submitMode)
         if err:
             return False, self.tr("Error deleting credentials: {0}").format(err)
 
@@ -926,7 +926,7 @@
 del check_internet
 """
 
-        out, err = self._interface.execute(command, mode=self._submitMode)
+        out, err = self.executeCommands(command, mode=self._submitMode)
         if err:
             return False, err
 
@@ -960,9 +960,7 @@
 del scan_networks
 """
 
-        out, err = self._interface.execute(
-            command, mode=self._submitMode, timeout=15000
-        )
+        out, err = self.executeCommands(command, mode=self._submitMode, timeout=15000)
         if err:
             return [], err
 
@@ -1017,7 +1015,7 @@
             interface
         )
 
-        out, err = self._interface.execute(command, mode=self._submitMode)
+        out, err = self.executeCommands(command, mode=self._submitMode)
         if err:
             return False, err
         else:
@@ -1070,9 +1068,7 @@
             repr(ssid), security, repr(password), ifconfig
         )
 
-        out, err = self._interface.execute(
-            command, mode=self._submitMode, timeout=15000
-        )
+        out, err = self.executeCommands(command, mode=self._submitMode, timeout=15000)
         if err:
             return False, err
         else:
@@ -1113,9 +1109,7 @@
 del get_stations
 """
 
-        out, err = self._interface.execute(
-            command, mode=self._submitMode, timeout=10000
-        )
+        out, err = self.executeCommands(command, mode=self._submitMode, timeout=10000)
         if err:
             return [], err
 
@@ -1152,9 +1146,7 @@
 print(has_bt())
 del has_bt
 """
-        out, err = self._interface.execute(
-            command, mode=self._submitMode, timeout=10000
-        )
+        out, err = self.executeCommands(command, mode=self._submitMode, timeout=10000)
         if err:
             raise OSError(self._shortError(err))
         return out.strip() == b"True"
@@ -1200,7 +1192,7 @@
 ble_status()
 del ble_status
 """
-        out, err = self._interface.execute(command, mode=self._submitMode)
+        out, err = self.executeCommands(command, mode=self._submitMode)
         if err:
             raise OSError(self._shortError(err))
 
@@ -1245,7 +1237,7 @@
 activate_ble()
 del activate_ble
 """
-        out, err = self._interface.execute(command, mode=self._submitMode)
+        out, err = self.executeCommands(command, mode=self._submitMode)
         if err:
             raise OSError(self._shortError(err))
 
@@ -1274,7 +1266,7 @@
 deactivate_ble()
 del deactivate_ble
 """
-        out, err = self._interface.execute(command, mode=self._submitMode)
+        out, err = self.executeCommands(command, mode=self._submitMode)
         if err:
             raise OSError(self._shortError(err))
 
@@ -1334,7 +1326,7 @@
 """.format(
             timeout
         )
-        out, err = self._interface.execute(
+        out, err = self.executeCommands(
             command, mode=self._submitMode, timeout=(timeout + 5) * 1000
         )
         if err:
@@ -1379,7 +1371,7 @@
 print(has_ntp())
 del has_ntp
 """
-        out, err = self._interface.execute(command, mode=self._submitMode)
+        out, err = self.executeCommands(command, mode=self._submitMode)
         if err:
             raise OSError(self._shortError(err))
         return out.strip() == b"True"
@@ -1439,7 +1431,7 @@
 """.format(
             repr(server), tzOffset, timeout
         )
-        out, err = self._interface.execute(
+        out, err = self.executeCommands(
             command, mode=self._submitMode, timeout=(timeout + 2) * 1000
         )
         if err:
--- a/src/eric7/MicroPython/Devices/GenericMicroPythonDevices.py	Tue May 02 11:39:09 2023 +0200
+++ b/src/eric7/MicroPython/Devices/GenericMicroPythonDevices.py	Thu May 04 17:58:52 2023 +0200
@@ -249,7 +249,7 @@
         Private slot to switch the board into 'bootloader' mode.
         """
         if self.microPython.isConnected():
-            self.microPython.deviceInterface().execute(
+            self.executeCommands(
                 "import machine\nmachine.bootloader()\n", mode=self._submitMode
             )
             # simulate pressing the disconnect button
@@ -334,11 +334,12 @@
         """
         Private slot to reset the connected device.
         """
-        self.microPython.deviceInterface().execute(
-            "import machine\nmachine.reset()\n", mode=self._submitMode
-        )
-        # simulate pressing the disconnect button
-        self.microPython.on_connectButton_clicked()
+        if self.microPython.isConnected():
+            self.executeCommands(
+                "import machine\nmachine.reset()\n", mode=self._submitMode
+            )
+            # simulate pressing the disconnect button
+            self.microPython.on_connectButton_clicked()
 
     def getDocumentationUrl(self):
         """
--- a/src/eric7/MicroPython/Devices/MicrobitDevices.py	Tue May 02 11:39:09 2023 +0200
+++ b/src/eric7/MicroPython/Devices/MicrobitDevices.py	Thu May 04 17:58:52 2023 +0200
@@ -526,16 +526,18 @@
         """
         Private slot to reset the connected device.
         """
-        if self.getDeviceType() == "bbc_microbit":
-            # BBC micro:bit
-            self.microPython.deviceInterface().execute(
-                "import microbit\nmicrobit.reset()\n", mode=self._submitMode
-            )
-        else:
-            # Calliope mini
-            self.microPython.deviceInterface().execute(
-                "import calliope_mini\ncalliope_mini.reset()\n", mode=self._submitMode
-            )
+        if self.microPython.isConnected():
+            if self.getDeviceType() == "bbc_microbit":
+                # BBC micro:bit
+                self.executeCommands(
+                    "import microbit\nmicrobit.reset()\n", mode=self._submitMode
+                )
+            else:
+                # Calliope mini
+                self.executeCommands(
+                    "import calliope_mini\ncalliope_mini.reset()\n",
+                    mode=self._submitMode,
+                )
 
     def getDocumentationUrl(self):
         """
@@ -626,7 +628,7 @@
 print(__os_.listdir())
 del __os_
 """
-            out, err = self._interface.execute(command, mode=self._submitMode)
+            out, err = self.executeCommands(command, mode=self._submitMode)
             if err:
                 raise OSError(self._shortError(err))
             return ast.literal_eval(out.decode("utf-8"))
@@ -674,7 +676,7 @@
 """.format(
                 showHidden
             )
-            out, err = self._interface.execute(command, mode=self._submitMode)
+            out, err = self.executeCommands(command, mode=self._submitMode)
             if err:
                 raise OSError(self._shortError(err))
             fileslist = ast.literal_eval(out.decode("utf-8"))
@@ -765,9 +767,7 @@
 print(has_bt())
 del has_bt
 """
-        out, err = self._interface.execute(
-            command, mode=self._submitMode, timeout=10000
-        )
+        out, err = self.executeCommands(command, mode=self._submitMode, timeout=10000)
         if err:
             raise OSError(self._shortError(err))
         return out.strip() == b"True"
@@ -811,7 +811,7 @@
 ble_status()
 del ble_status
 """
-        out, err = self._interface.execute(command, mode=self._submitMode)
+        out, err = self.executeCommands(command, mode=self._submitMode)
         if err:
             raise OSError(self._shortError(err))
 
@@ -848,7 +848,7 @@
 activate_ble()
 del activate_ble
 """
-        out, err = self._interface.execute(command, mode=self._submitMode)
+        out, err = self.executeCommands(command, mode=self._submitMode)
         if err:
             raise OSError(self._shortError(err))
 
@@ -874,7 +874,7 @@
 deactivate_ble()
 del deactivate_ble
 """
-        out, err = self._interface.execute(command, mode=self._submitMode)
+        out, err = self.executeCommands(command, mode=self._submitMode)
         if err:
             raise OSError(self._shortError(err))
 
@@ -935,7 +935,7 @@
 """.format(
             timeout
         )
-        out, err = self._interface.execute(
+        out, err = self.executeCommands(
             command, mode=self._submitMode, timeout=(timeout + 5) * 1000
         )
         if err:
--- a/src/eric7/MicroPython/Devices/PyBoardDevices.py	Tue May 02 11:39:09 2023 +0200
+++ b/src/eric7/MicroPython/Devices/PyBoardDevices.py	Thu May 04 17:58:52 2023 +0200
@@ -500,7 +500,7 @@
         Private slot to activate the bootloader and disconnect.
         """
         if self.microPython.isConnected():
-            self.microPython.deviceInterface().execute(
+            self.executeCommands(
                 [
                     "import pyb",
                     "pyb.bootloader()",
@@ -515,9 +515,10 @@
         """
         Private slot to reset the connected device.
         """
-        self.microPython.deviceInterface().execute(
-            "import machine\nmachine.reset()\n", mode=self._submitMode
-        )
+        if self.microPython.isConnected():
+            self.executeCommands(
+                "import machine\nmachine.reset()\n", mode=self._submitMode
+            )
 
     ##################################################################
     ## time related methods below
--- a/src/eric7/MicroPython/Devices/RP2040Devices.py	Tue May 02 11:39:09 2023 +0200
+++ b/src/eric7/MicroPython/Devices/RP2040Devices.py	Thu May 04 17:58:52 2023 +0200
@@ -239,7 +239,7 @@
         Private slot to switch the board into 'bootloader' mode.
         """
         if self.microPython.isConnected():
-            self.microPython.deviceInterface().execute(
+            self.executeCommands(
                 [
                     "import machine",
                     "machine.bootloader()",
@@ -338,9 +338,10 @@
         """
         Private slot to reset the connected device.
         """
-        self.microPython.deviceInterface().execute(
-            "import machine\nmachine.reset()\n", mode=self._submitMode
-        )
+        if self.microPython.isConnected():
+            self.executeCommands(
+                "import machine\nmachine.reset()\n", mode=self._submitMode
+            )
 
     def getDocumentationUrl(self):
         """
@@ -463,9 +464,7 @@
 print(has_wifi())
 del has_wifi
 """
-        out, err = self._interface.execute(
-            command, mode=self._submitMode, timeout=10000
-        )
+        out, err = self.executeCommands(command, mode=self._submitMode, timeout=10000)
         if err:
             if not err.startswith(b"Timeout "):
                 raise OSError(self._shortError(err))
@@ -584,7 +583,7 @@
         else:
             return super().getWifiData()
 
-        out, err = self._interface.execute(command, mode=self._submitMode)
+        out, err = self.executeCommands(command, mode=self._submitMode)
         if err:
             raise OSError(self._shortError(err))
 
@@ -698,7 +697,7 @@
             return super().connectWifi(ssid, password)
 
         with EricOverrideCursor():
-            out, err = self._interface.execute(
+            out, err = self.executeCommands(
                 command, mode=self._submitMode, timeout=15000
             )
         if err:
@@ -756,7 +755,7 @@
         else:
             return super().disconnectWifi()
 
-        out, err = self._interface.execute(command, mode=self._submitMode)
+        out, err = self.executeCommands(command, mode=self._submitMode)
         if err:
             return False, err
 
@@ -823,7 +822,7 @@
             return False, str(err)
 
         # modify boot.py
-        out, err = self._interface.execute(command, mode=self._submitMode)
+        out, err = self.executeCommands(command, mode=self._submitMode)
         if err:
             return False, err
 
@@ -888,9 +887,7 @@
         else:
             return super().checkInternet()
 
-        out, err = self._interface.execute(
-            command, mode=self._submitMode, timeout=10000
-        )
+        out, err = self.executeCommands(command, mode=self._submitMode, timeout=10000)
         if err:
             return False, err
 
@@ -953,9 +950,7 @@
         else:
             return super().scanNetworks()
 
-        out, err = self._interface.execute(
-            command, mode=self._submitMode, timeout=15000
-        )
+        out, err = self.executeCommands(command, mode=self._submitMode, timeout=15000)
         if err:
             return [], err
 
@@ -1031,7 +1026,7 @@
         else:
             return super().deactivateInterface(interface)
 
-        out, err = self._interface.execute(command, mode=self._submitMode)
+        out, err = self.executeCommands(command, mode=self._submitMode)
         if err:
             return False, err
         else:
@@ -1122,9 +1117,7 @@
         else:
             return super().startAccessPoint(ssid, security=security, password=password)
 
-        out, err = self._interface.execute(
-            command, mode=self._submitMode, timeout=15000
-        )
+        out, err = self.executeCommands(command, mode=self._submitMode, timeout=15000)
         if err:
             return False, err
         else:
@@ -1172,9 +1165,7 @@
         else:
             return super().checkInternet()
 
-        out, err = self._interface.execute(
-            command, mode=self._submitMode, timeout=10000
-        )
+        out, err = self.executeCommands(command, mode=self._submitMode, timeout=10000)
         if err:
             return [], err
 
@@ -1209,9 +1200,7 @@
 del has_eth
 """
 
-        out, err = self._interface.execute(
-            command, mode=self._submitMode, timeout=10000
-        )
+        out, err = self.executeCommands(command, mode=self._submitMode, timeout=10000)
         if err:
             raise OSError(self._shortError(err))
 
@@ -1250,7 +1239,7 @@
             WiznetUtilities.mpyWiznetInit()
         )
 
-        out, err = self._interface.execute(command, mode=self._submitMode)
+        out, err = self.executeCommands(command, mode=self._submitMode)
         if err:
             raise OSError(self._shortError(err))
 
@@ -1307,7 +1296,7 @@
         )
 
         with EricOverrideCursor():
-            out, err = self._interface.execute(
+            out, err = self.executeCommands(
                 command, mode=self._submitMode, timeout=15000
             )
         if err:
@@ -1339,7 +1328,7 @@
         )
 
         with EricOverrideCursor():
-            out, err = self._interface.execute(
+            out, err = self.executeCommands(
                 command, mode=self._submitMode, timeout=15000
             )
         if err:
@@ -1378,9 +1367,7 @@
             WiznetUtilities.mpyWiznetInit(),
         )
 
-        out, err = self._interface.execute(
-            command, mode=self._submitMode, timeout=10000
-        )
+        out, err = self.executeCommands(command, mode=self._submitMode, timeout=10000)
         if err:
             return False, err
 
@@ -1445,7 +1432,7 @@
             return False, str(err)
 
         # modify boot.py
-        out, err = self._interface.execute(command, mode=self._submitMode)
+        out, err = self.executeCommands(command, mode=self._submitMode)
         if err:
             return False, err
 
@@ -1490,7 +1477,7 @@
 print(has_ntp())
 del has_ntp
 """
-        out, err = self._interface.execute(command, mode=self._submitMode)
+        out, err = self.executeCommands(command, mode=self._submitMode)
         if err:
             raise OSError(self._shortError(err))
         return out.strip() == b"True"
@@ -1551,7 +1538,7 @@
 """.format(
             repr(server), tzOffset, timeout
         )
-        out, err = self._interface.execute(
+        out, err = self.executeCommands(
             command, mode=self._submitMode, timeout=(timeout + 2) * 1000
         )
         if err:
@@ -1586,7 +1573,7 @@
                 repr(country)
             )
 
-            out, err = self._interface.execute(command, mode=self._submitMode)
+            out, err = self.executeCommands(command, mode=self._submitMode)
             if err:
                 self.microPython.showError("rp2.country()", err)
 
--- a/src/eric7/MicroPython/Devices/STLinkDevices.py	Tue May 02 11:39:09 2023 +0200
+++ b/src/eric7/MicroPython/Devices/STLinkDevices.py	Thu May 04 17:58:52 2023 +0200
@@ -468,9 +468,10 @@
         """
         Private slot to reset the connected device.
         """
-        self.microPython.deviceInterface().execute(
-            "import machine\nmachine.reset()\n", mode=self._submitMode
-        )
+        if self.microPython.isConnected():
+            self.executeCommands(
+                "import machine\nmachine.reset()\n", mode=self._submitMode
+            )
 
 
 def createDevice(microPythonWidget, deviceType, vid, pid, boardName, serialNumber):
--- a/src/eric7/MicroPython/Devices/TeensyDevices.py	Tue May 02 11:39:09 2023 +0200
+++ b/src/eric7/MicroPython/Devices/TeensyDevices.py	Thu May 04 17:58:52 2023 +0200
@@ -243,9 +243,10 @@
         """
         Private slot to reset the connected device.
         """
-        self.microPython.deviceInterface().execute(
-            "import machine\nmachine.reset()\n", mode=self._submitMode
-        )
+        if self.microPython.isConnected():
+            self.executeCommands(
+                "import machine\nmachine.reset()\n", mode=self._submitMode
+            )
 
     ##################################################################
     ## time related methods below
--- a/src/eric7/MicroPython/MicroPythonDeviceInterface.py	Tue May 02 11:39:09 2023 +0200
+++ b/src/eric7/MicroPython/MicroPythonDeviceInterface.py	Thu May 04 17:58:52 2023 +0200
@@ -1,25 +1,13 @@
 # -*- coding: utf-8 -*-
 
-# Copyright (c) 2019 - 2023 Detlev Offenbach <detlev@die-offenbachs.de>
+# Copyright (c) 2023 Detlev Offenbach <detlev@die-offenbachs.de>
 #
 
 """
-Module implementing some file system commands for MicroPython.
+Module  implementing an interface base class to talk to a connected MicroPython device.
 """
 
-from PyQt6.QtCore import (
-    QCoreApplication,
-    QEventLoop,
-    QObject,
-    QThread,
-    QTimer,
-    pyqtSignal,
-    pyqtSlot,
-)
-
-from eric7 import Preferences
-
-from .MicroPythonSerialPort import MicroPythonSerialPort
+from PyQt6.QtCore import QObject, pyqtSignal, pyqtSlot
 
 
 class MicroPythonDeviceInterface(QObject):
@@ -28,12 +16,14 @@
 
     @signal executeAsyncFinished() emitted to indicate the end of an
         asynchronously executed list of commands (e.g. a script)
-    @signal dataReceived(data) emitted to send data received via the serial
-        connection for further processing
+    @signal dataReceived(data) emitted to send data received via the connection
+        for further processing
+    @signal osdInfo(str) emitted when some OSD data was received from the device
     """
 
     executeAsyncFinished = pyqtSignal()
     dataReceived = pyqtSignal(bytes)
+    osdInfo = pyqtSignal(str)
 
     PasteModePrompt = b"=== "
     TracebackMarker = b"Traceback (most recent call last):"
@@ -47,43 +37,35 @@
         """
         super().__init__(parent)
 
-        self.__repl = parent
-
-        self.__blockReadyRead = False
-
-        self.__serial = MicroPythonSerialPort(
-            timeout=Preferences.getMicroPython("SerialTimeout"), parent=self
-        )
-        self.__serial.readyRead.connect(self.__readSerial)
-
     @pyqtSlot()
-    def __readSerial(self):
+    def connectToDevice(self, connection):
         """
-        Private slot to read all available serial data and emit it with the
-        "dataReceived" signal for further processing.
-        """
-        if not self.__blockReadyRead:
-            data = bytes(self.__serial.readAll())
-            self.dataReceived.emit(data)
+        Public slot to connect to the device.
 
-    @pyqtSlot()
-    def connectToDevice(self, port):
-        """
-        Public slot to start the manager.
-
-        @param port name of the port to be used
+        @param connection name of the connection to be used
         @type str
         @return flag indicating success
         @rtype bool
+        @exception NotImplementedError raised to indicate that this method needs to
+            be implemented in a derived class
         """
-        return self.__serial.openSerialLink(port)
+        raise NotImplementedError(
+            "This method needs to be implemented in a derived class."
+        )
+
+        return False
 
     @pyqtSlot()
     def disconnectFromDevice(self):
         """
-        Public slot to stop the thread.
+        Public slot to disconnect from the device.
+
+        @exception NotImplementedError raised to indicate that this method needs to
+            be implemented in a derived class
         """
-        self.__serial.closeSerialLink()
+        raise NotImplementedError(
+            "This method needs to be implemented in a derived class."
+        )
 
     def isConnected(self):
         """
@@ -91,15 +73,21 @@
 
         @return flag indicating the connection status
         @rtype bool
+        @exception NotImplementedError raised to indicate that this method needs to
+            be implemented in a derived class
         """
-        return self.__serial.isConnected()
+        raise NotImplementedError(
+            "This method needs to be implemented in a derived class."
+        )
+
+        return False
 
     @pyqtSlot()
     def handlePreferencesChanged(self):
         """
         Public slot to handle a change of the preferences.
         """
-        self.__serial.setTimeout(Preferences.getMicroPython("SerialTimeout"))
+        pass
 
     def write(self, data):
         """
@@ -107,149 +95,37 @@
 
         @param data data to be written
         @type bytes or bytearray
-        """
-        self.__serial.isConnected() and self.__serial.write(data)
-
-    def __pasteOn(self):
-        """
-        Private method to switch the connected device to 'paste' mode.
-
-        Note: switching to paste mode is done with synchronous writes.
-
-        @return flag indicating success
-        @rtype bool
-        """
-        if not self.__serial:
-            return False
-
-        pasteMessage = b"paste mode; Ctrl-C to cancel, Ctrl-D to finish\r\n=== "
-
-        self.__serial.clear()  # clear any buffered output before entering paste mode
-        self.__serial.write(b"\x02")  # end raw mode if required
-        written = self.__serial.waitForBytesWritten(500)
-        # time out after 500ms if device is not responding
-        if not written:
-            return False
-        for _i in range(3):
-            # CTRL-C three times to break out of loops
-            self.__serial.write(b"\r\x03")
-            written = self.__serial.waitForBytesWritten(500)
-            # time out after 500ms if device is not responding
-            if not written:
-                return False
-            QThread.msleep(10)
-        self.__serial.readAll()  # read all data and discard it
-        self.__serial.write(b"\r\x05")  # send CTRL-E to enter paste mode
-        self.__serial.readUntil(pasteMessage)
-
-        if self.__serial.hasTimedOut():
-            # it timed out; try it again and than fail
-            self.__serial.write(b"\r\x05")  # send CTRL-E again
-            self.__serial.readUntil(pasteMessage)
-            if self.__serial.hasTimedOut():
-                return False
-
-        QCoreApplication.processEvents(
-            QEventLoop.ProcessEventsFlag.ExcludeUserInputEvents
-        )
-        self.__serial.readAll()  # read all data and discard it
-        return True
-
-    def __pasteOff(self):
-        """
-        Private method to switch 'paste' mode off.
+        @exception NotImplementedError raised to indicate that this method needs to
+            be implemented in a derived class
         """
-        if self.__serial:
-            self.__serial.write(b"\x04")  # send CTRL-D to cancel paste mode
-
-    def __rawOn(self):
-        """
-        Private method to switch the connected device to 'raw' mode.
-
-        Note: switching to raw mode is done with synchronous writes.
-
-        @return flag indicating success
-        @rtype bool
-        """
-        if not self.__serial:
-            return False
-
-        rawReplMessage = b"raw REPL; CTRL-B to exit\r\n>"
-
-        self.__serial.write(b"\x02")  # end raw mode if required
-        written = self.__serial.waitForBytesWritten(500)
-        # time out after 500ms if device is not responding
-        if not written:
-            return False
-        for _i in range(3):
-            # CTRL-C three times to break out of loops
-            self.__serial.write(b"\r\x03")
-            written = self.__serial.waitForBytesWritten(500)
-            # time out after 500ms if device is not responding
-            if not written:
-                return False
-            QThread.msleep(10)
-        self.__serial.readAll()  # read all data and discard it
-        self.__serial.write(b"\r\x01")  # send CTRL-A to enter raw mode
-        self.__serial.readUntil(rawReplMessage)
-        if self.__serial.hasTimedOut():
-            # it timed out; try it again and than fail
-            self.__serial.write(b"\r\x01")  # send CTRL-A again
-            self.__serial.readUntil(rawReplMessage)
-            if self.__serial.hasTimedOut():
-                return False
-
-        QCoreApplication.processEvents(
-            QEventLoop.ProcessEventsFlag.ExcludeUserInputEvents
+        raise NotImplementedError(
+            "This method needs to be implemented in a derived class."
         )
-        self.__serial.readAll()  # read all data and discard it
-        return True
-
-    def __rawOff(self):
-        """
-        Private method to switch 'raw' mode off.
-        """
-        if self.__serial:
-            self.__serial.write(b"\x02")  # send CTRL-B to cancel raw mode
-            self.__serial.readUntil(b">>> ")  # read until Python prompt
-            self.__serial.readAll()  # read all data and discard it
 
     def probeDevice(self):
         """
         Public method to check the device is responding.
 
-        If the device has not been flashed with a MicroPython formware, the
+        If the device has not been flashed with a MicroPython firmware, the
         probe will fail.
 
         @return flag indicating a communicating MicroPython device
         @rtype bool
+        @exception NotImplementedError raised to indicate that this method needs to
+            be implemented in a derived class
         """
-        if not self.__serial:
-            return False
-
-        if not self.__serial.isConnected():
-            return False
+        raise NotImplementedError(
+            "This method needs to be implemented in a derived class."
+        )
 
-        # switch on raw mode
-        self.__blockReadyRead = True
-        ok = self.__pasteOn()
-        if not ok:
-            self.__blockReadyRead = False
-            return False
-
-        # switch off raw mode
-        QThread.msleep(10)
-        self.__pasteOff()
-        self.__blockReadyRead = False
-
-        return True
+        return False
 
     def execute(self, commands, *, mode="raw", timeout=0):
         """
         Public method to send commands to the connected device and return the
         result.
 
-        If no serial connection is available, empty results will be returned.
+        If no connection is available, empty results will be returned.
 
         @param commands list of commands to be executed
         @type str or list of str
@@ -261,205 +137,38 @@
         @type int (optional)
         @return tuple containing stdout and stderr output of the device
         @rtype tuple of (bytes, bytes)
+        @exception NotImplementedError raised to indicate that this method needs to
+            be implemented in a derived class
         @exception ValueError raised in case of an unsupported submit mode
         """
+        raise NotImplementedError(
+            "This method needs to be implemented in a derived class."
+        )
+
         if mode not in ("paste", "raw"):
             raise ValueError("Unsupported submit mode given ('{0}').".format(mode))
 
-        if mode == "raw":
-            return self.__execute_raw(commands, timeout=timeout)
-        elif mode == "paste":
-            return self.__execute_paste(commands, timeout=timeout)
-        else:
-            # just in case
-            return b"", b""
-
-    def __execute_raw(self, commands, timeout=0):
-        """
-        Private method to send commands to the connected device using 'raw REPL' mode
-        and return the result.
-
-        If no serial connection is available, empty results will be returned.
-
-        @param commands list of commands to be executed
-        @type str or list of str
-        @param timeout per command timeout in milliseconds (0 for configured default)
-            (defaults to 0)
-        @type int (optional)
-        @return tuple containing stdout and stderr output of the device
-        @rtype tuple of (bytes, bytes)
-        """
-        if not self.__serial:
-            return b"", b""
-
-        if not self.__serial.isConnected():
-            return b"", b"Device not connected or not switched on."
-
-        result = bytearray()
-        err = b""
-
-        if isinstance(commands, str):
-            commands = [commands]
-
-        # switch on raw mode
-        self.__blockReadyRead = True
-        ok = self.__rawOn()
-        if not ok:
-            self.__blockReadyRead = False
-            return (b"", b"Could not switch to raw mode. Is the device switched on?")
-
-        # send commands
-        QThread.msleep(10)
-        for command in commands:
-            if command:
-                commandBytes = command.encode("utf-8")
-                self.__serial.write(commandBytes + b"\x04")
-                QCoreApplication.processEvents(
-                    QEventLoop.ProcessEventsFlag.ExcludeUserInputEvents
-                )
-                ok = self.__serial.readUntil(b"OK")
-                if ok != b"OK":
-                    self.__blockReadyRead = False
-                    return (
-                        b"",
-                        "Expected 'OK', got '{0}', followed by '{1}'".format(
-                            ok, self.__serial.readAll()
-                        ).encode("utf-8"),
-                    )
-
-                # read until prompt
-                response = self.__serial.readUntil(b"\x04>", timeout=timeout)
-                if self.__serial.hasTimedOut():
-                    self.__blockReadyRead = False
-                    return b"", b"Timeout while processing commands."
-                if b"\x04" in response[:-2]:
-                    # split stdout, stderr
-                    out, err = response[:-2].split(b"\x04")
-                    result += out
-                else:
-                    err = b"invalid response received: " + response
-                if err:
-                    result = b""
-                    break
-
-        # switch off raw mode
-        QThread.msleep(10)
-        self.__rawOff()
-        self.__blockReadyRead = False
+        return b"", b""
 
-        return bytes(result), err
-
-    def __execute_paste(self, commands, timeout=0):
-        """
-        Private method to send commands to the connected device using 'paste' mode
-        and return the result.
-
-        If no serial connection is available, empty results will be returned.
-
-        @param commands list of commands to be executed
-        @type str or list of str
-        @param timeout per command timeout in milliseconds (0 for configured default)
-            (defaults to 0)
-        @type int (optional)
-        @return tuple containing stdout and stderr output of the device
-        @rtype tuple of (bytes, bytes)
-        """
-        if not self.__serial:
-            return b"", b""
-
-        if not self.__serial.isConnected():
-            return b"", b"Device not connected or not switched on."
-
-        if isinstance(commands, list):
-            commands = "\n".join(commands)
-
-        # switch on paste mode
-        self.__blockReadyRead = True
-        ok = self.__pasteOn()
-        if not ok:
-            self.__blockReadyRead = False
-            return (b"", b"Could not switch to paste mode. Is the device switched on?")
-
-        # send commands
-        QThread.msleep(10)
-        for command in commands.splitlines(keepends=True):
-            # send the data as single lines
-            commandBytes = command.encode("utf-8")
-            self.__serial.write(commandBytes)
-            QCoreApplication.processEvents(
-                QEventLoop.ProcessEventsFlag.ExcludeUserInputEvents
-            )
-            QThread.msleep(10)
-            ok = self.__serial.readUntil(commandBytes)
-            if ok != commandBytes:
-                self.__blockReadyRead = False
-                return (
-                    b"",
-                    "Expected '{0}', got '{1}', followed by '{2}'".format(
-                        commandBytes, ok, self.__serial.readAll()
-                    ).encode("utf-8"),
-                )
-
-        # switch off paste mode causing the commands to be executed
-        self.__pasteOff()
-        QThread.msleep(10)
-        # read until Python prompt
-        result = (
-            self.__serial.readUntil(b">>> ", timeout=timeout)
-            .replace(b">>> ", b"")
-            .strip()
-        )
-        if self.__serial.hasTimedOut():
-            self.__blockReadyRead = False
-            return b"", b"Timeout while processing commands."
-
-        # get rid of any OSD string
-        if result.startswith(b"\x1b]0;"):
-            result = result.split(b"\x1b\\")[-1]
-
-        if self.TracebackMarker in result:
-            errorIndex = result.find(self.TracebackMarker)
-            out, err = result[:errorIndex], result[errorIndex:]
-        else:
-            out = result
-            err = b""
-
-        self.__blockReadyRead = False
-        return out, err
-
-    def executeAsync(self, commandsList):
+    def executeAsync(self, commandsList, submitMode):
         """
         Public method to execute a series of commands over a period of time
         without returning any result (asynchronous execution).
 
         @param commandsList list of commands to be execute on the device
-        @type list of bytes
+        @type list of str
+        @param submitMode mode to be used to submit the commands (one of 'raw'
+            or 'paste')
+        @type str
+        @exception NotImplementedError raised to indicate that this method needs to
+            be implemented in a derived class
+        @exception ValueError raised to indicate an unknown submit mode
         """
-        if commandsList:
-            command = commandsList.pop(0)
-            self.__serial.write(command)
-            QTimer.singleShot(2, lambda: self.executeAsync(commandsList))
-        else:
-            self.executeAsyncFinished.emit()
-
-    def executeAsyncPaste(self, commandsList):
-        """
-        Public method to execute a series of commands over a period of time
-        without returning any result (asynchronous execution).
+        raise NotImplementedError(
+            "This method needs to be implemented in a derived class."
+        )
 
-        @param commandsList list of commands to be execute on the device
-        @type list of bytes
-        """
-        if commandsList:
-            self.__blockReadyRead = True
-            command = commandsList.pop(0)
-            if command == "@PasteOn@":
-                self.__pasteOn()
-            else:
-                self.__serial.write(command)
-                self.__serial.readUntil(command)
-            QTimer.singleShot(2, lambda: self.executeAsyncPaste(commandsList))
-        else:
-            self.__blockReadyRead = False
-            self.__pasteOff()
-            self.executeAsyncFinished.emit()
+        if submitMode not in ("raw", "paste"):
+            raise ValueError(
+                "Unsupported submit mode given ('{0}').".format(submitMode)
+            )
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/eric7/MicroPython/MicroPythonReplWidget.py	Thu May 04 17:58:52 2023 +0200
@@ -0,0 +1,703 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2023 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing the MicroPython REPL widget.
+"""
+
+import re
+
+from PyQt6.QtCore import QPoint, Qt, pyqtSignal, pyqtSlot
+from PyQt6.QtGui import (
+    QBrush,
+    QClipboard,
+    QColor,
+    QGuiApplication,
+    QKeySequence,
+    QTextCursor,
+)
+from PyQt6.QtWidgets import (
+    QHBoxLayout,
+    QLabel,
+    QMenu,
+    QSizePolicy,
+    QTextEdit,
+    QVBoxLayout,
+    QWidget,
+)
+
+from eric7 import Preferences
+from eric7.EricGui import EricPixmapCache
+from eric7.EricWidgets.EricZoomWidget import EricZoomWidget
+from eric7.SystemUtilities import OSUtilities
+
+AnsiColorSchemes = {
+    "Windows 7": {
+        0: QBrush(QColor(0, 0, 0)),
+        1: QBrush(QColor(128, 0, 0)),
+        2: QBrush(QColor(0, 128, 0)),
+        3: QBrush(QColor(128, 128, 0)),
+        4: QBrush(QColor(0, 0, 128)),
+        5: QBrush(QColor(128, 0, 128)),
+        6: QBrush(QColor(0, 128, 128)),
+        7: QBrush(QColor(192, 192, 192)),
+        10: QBrush(QColor(128, 128, 128)),
+        11: QBrush(QColor(255, 0, 0)),
+        12: QBrush(QColor(0, 255, 0)),
+        13: QBrush(QColor(255, 255, 0)),
+        14: QBrush(QColor(0, 0, 255)),
+        15: QBrush(QColor(255, 0, 255)),
+        16: QBrush(QColor(0, 255, 255)),
+        17: QBrush(QColor(255, 255, 255)),
+    },
+    "Windows 10": {
+        0: QBrush(QColor(12, 12, 12)),
+        1: QBrush(QColor(197, 15, 31)),
+        2: QBrush(QColor(19, 161, 14)),
+        3: QBrush(QColor(193, 156, 0)),
+        4: QBrush(QColor(0, 55, 218)),
+        5: QBrush(QColor(136, 23, 152)),
+        6: QBrush(QColor(58, 150, 221)),
+        7: QBrush(QColor(204, 204, 204)),
+        10: QBrush(QColor(118, 118, 118)),
+        11: QBrush(QColor(231, 72, 86)),
+        12: QBrush(QColor(22, 198, 12)),
+        13: QBrush(QColor(249, 241, 165)),
+        14: QBrush(QColor(59, 12, 255)),
+        15: QBrush(QColor(180, 0, 158)),
+        16: QBrush(QColor(97, 214, 214)),
+        17: QBrush(QColor(242, 242, 242)),
+    },
+    "PuTTY": {
+        0: QBrush(QColor(0, 0, 0)),
+        1: QBrush(QColor(187, 0, 0)),
+        2: QBrush(QColor(0, 187, 0)),
+        3: QBrush(QColor(187, 187, 0)),
+        4: QBrush(QColor(0, 0, 187)),
+        5: QBrush(QColor(187, 0, 187)),
+        6: QBrush(QColor(0, 187, 187)),
+        7: QBrush(QColor(187, 187, 187)),
+        10: QBrush(QColor(85, 85, 85)),
+        11: QBrush(QColor(255, 85, 85)),
+        12: QBrush(QColor(85, 255, 85)),
+        13: QBrush(QColor(255, 255, 85)),
+        14: QBrush(QColor(85, 85, 255)),
+        15: QBrush(QColor(255, 85, 255)),
+        16: QBrush(QColor(85, 255, 255)),
+        17: QBrush(QColor(255, 255, 255)),
+    },
+    "xterm": {
+        0: QBrush(QColor(0, 0, 0)),
+        1: QBrush(QColor(205, 0, 0)),
+        2: QBrush(QColor(0, 205, 0)),
+        3: QBrush(QColor(205, 205, 0)),
+        4: QBrush(QColor(0, 0, 238)),
+        5: QBrush(QColor(205, 0, 205)),
+        6: QBrush(QColor(0, 205, 205)),
+        7: QBrush(QColor(229, 229, 229)),
+        10: QBrush(QColor(127, 127, 127)),
+        11: QBrush(QColor(255, 0, 0)),
+        12: QBrush(QColor(0, 255, 0)),
+        13: QBrush(QColor(255, 255, 0)),
+        14: QBrush(QColor(0, 0, 255)),
+        15: QBrush(QColor(255, 0, 255)),
+        16: QBrush(QColor(0, 255, 255)),
+        17: QBrush(QColor(255, 255, 255)),
+    },
+    "Ubuntu": {
+        0: QBrush(QColor(1, 1, 1)),
+        1: QBrush(QColor(222, 56, 43)),
+        2: QBrush(QColor(57, 181, 74)),
+        3: QBrush(QColor(255, 199, 6)),
+        4: QBrush(QColor(0, 11, 184)),
+        5: QBrush(QColor(118, 38, 113)),
+        6: QBrush(QColor(44, 181, 233)),
+        7: QBrush(QColor(204, 204, 204)),
+        10: QBrush(QColor(128, 128, 128)),
+        11: QBrush(QColor(255, 0, 0)),
+        12: QBrush(QColor(0, 255, 0)),
+        13: QBrush(QColor(255, 255, 0)),
+        14: QBrush(QColor(0, 0, 255)),
+        15: QBrush(QColor(255, 0, 255)),
+        16: QBrush(QColor(0, 255, 255)),
+        17: QBrush(QColor(255, 255, 255)),
+    },
+    "Ubuntu (dark)": {
+        0: QBrush(QColor(96, 96, 96)),
+        1: QBrush(QColor(235, 58, 45)),
+        2: QBrush(QColor(57, 181, 74)),
+        3: QBrush(QColor(255, 199, 29)),
+        4: QBrush(QColor(25, 56, 230)),
+        5: QBrush(QColor(200, 64, 193)),
+        6: QBrush(QColor(48, 200, 255)),
+        7: QBrush(QColor(204, 204, 204)),
+        10: QBrush(QColor(128, 128, 128)),
+        11: QBrush(QColor(255, 0, 0)),
+        12: QBrush(QColor(0, 255, 0)),
+        13: QBrush(QColor(255, 255, 0)),
+        14: QBrush(QColor(0, 0, 255)),
+        15: QBrush(QColor(255, 0, 255)),
+        16: QBrush(QColor(0, 255, 255)),
+        17: QBrush(QColor(255, 255, 255)),
+    },
+    "Breeze (dark)": {
+        0: QBrush(QColor(35, 38, 39)),
+        1: QBrush(QColor(237, 21, 21)),
+        2: QBrush(QColor(17, 209, 22)),
+        3: QBrush(QColor(246, 116, 0)),
+        4: QBrush(QColor(29, 153, 243)),
+        5: QBrush(QColor(155, 89, 182)),
+        6: QBrush(QColor(26, 188, 156)),
+        7: QBrush(QColor(252, 252, 252)),
+        10: QBrush(QColor(127, 140, 141)),
+        11: QBrush(QColor(192, 57, 43)),
+        12: QBrush(QColor(28, 220, 154)),
+        13: QBrush(QColor(253, 188, 75)),
+        14: QBrush(QColor(61, 174, 233)),
+        15: QBrush(QColor(142, 68, 173)),
+        16: QBrush(QColor(22, 160, 133)),
+        17: QBrush(QColor(255, 255, 255)),
+    },
+}
+
+
+class MicroPythonReplWidget(QWidget):
+    """
+    Class implementing the MicroPython REPL widget.
+    """
+
+    ZoomMin = -10
+    ZoomMax = 20
+
+    def __init__(self, parent=None):
+        """
+        Constructor
+
+        @param parent reference to the parent widget (defaults to None)
+        @type QWidget (optional)
+        """
+        super().__init__(parent=parent)
+
+        self.__layout = QVBoxLayout(self)
+        self.__layout.setContentsMargins(0, 0, 0, 0)
+
+        self.__zoomLayout = QHBoxLayout()
+        self.__osdLabel = QLabel()
+        self.__osdLabel.setSizePolicy(
+            QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Preferred
+        )
+        self.__zoomLayout.addWidget(self.__osdLabel)
+
+        self.__zoomWidget = EricZoomWidget(
+            EricPixmapCache.getPixmap("zoomOut"),
+            EricPixmapCache.getPixmap("zoomIn"),
+            EricPixmapCache.getPixmap("zoomReset"),
+            self,
+        )
+        self.__zoomWidget.setMinimum(self.ZoomMin)
+        self.__zoomWidget.setMaximum(self.ZoomMax)
+        self.__zoomLayout.addWidget(self.__zoomWidget)
+        self.__layout.addLayout(self.__zoomLayout)
+
+        self.__replEdit = MicroPythonReplEdit(self)
+        self.__layout.addWidget(self.__replEdit)
+
+        self.setLayout(self.__layout)
+
+        self.__zoomWidget.valueChanged.connect(self.__replEdit.doZoom)
+        self.__replEdit.osdInfo.connect(self.setOSDInfo)
+
+    @pyqtSlot(str)
+    def setOSDInfo(self, infoStr):
+        """
+        Public slot to set the OSD information.
+
+        @param infoStr string to be shown
+        @type str
+        """
+        self.__osdLabel.setText(infoStr)
+
+    @pyqtSlot()
+    def clearOSD(self):
+        """
+        Public slot to clear the OSD info.
+        """
+        self.__osdLabel.clear()
+
+    def replEdit(self):
+        """
+        Public method to get a reference to the REPL edit.
+
+        @return reference to the REPL edit
+        @rtype MicroPythonReplEdit
+        """
+        return self.__replEdit
+
+
+class MicroPythonReplEdit(QTextEdit):
+    """
+    Class implementing the REPL edit pane.
+
+    @signal osdInfo(str) emitted when some OSD data was received from the device
+    """
+
+    osdInfo = pyqtSignal(str)
+
+    def __init__(self, parent=None):
+        """
+        Constructor
+
+        @param parent reference to the parent widget (defaults to None)
+        @type QWidget (optional)
+        """
+        super().__init__(parent=parent)
+
+        self.setAcceptRichText(False)
+        self.setUndoRedoEnabled(False)
+        self.setLineWrapMode(QTextEdit.LineWrapMode.NoWrap)
+        self.setContextMenuPolicy(Qt.ContextMenuPolicy.CustomContextMenu)
+
+        self.__currentZoom = 0
+
+        self.__replBuffer = b""
+
+        self.__vt100Re = re.compile(
+            r"(?P<count>\d*)(?P<color>(?:;?\d*)*)(?P<action>[ABCDKm])"
+        )
+
+        self.customContextMenuRequested.connect(self.__showContextMenu)
+
+        charFormat = self.currentCharFormat()
+        self.DefaultForeground = charFormat.foreground()
+        self.DefaultBackground = charFormat.background()
+
+        self.__interface = None
+
+    def setInterface(self, deviceInterface):
+        """
+        Public method to set the reference to the device interface object.
+
+        @param deviceInterface reference to the device interface object
+        @type MicroPythonDeviceInterface
+        """
+        self.__interface = deviceInterface
+
+    @pyqtSlot(int)
+    def doZoom(self, value):
+        """
+        Public slot to zoom in or out.
+
+        @param value zoom value
+        @type int
+        """
+        if value < self.__currentZoom:
+            self.zoomOut(self.__currentZoom - value)
+        elif value > self.__currentZoom:
+            self.zoomIn(value - self.__currentZoom)
+        self.__currentZoom = value
+
+    @pyqtSlot(QPoint)
+    def __showContextMenu(self, pos):
+        """
+        Private slot to show the REPL context menu.
+
+        @param pos position to show the menu at
+        @type QPoint
+        """
+        connected = bool(self.__interface) and self.__interface.isConnected()
+
+        if OSUtilities.isMacPlatform():
+            copyKeys = QKeySequence("Ctrl+C")
+            pasteKeys = QKeySequence("Ctrl+V")
+            selectAllKeys = QKeySequence("Ctrl+A")
+        else:
+            copyKeys = QKeySequence("Ctrl+Shift+C")
+            pasteKeys = QKeySequence("Ctrl+Shift+V")
+            selectAllKeys = QKeySequence("Ctrl+Shift+A")
+
+        menu = QMenu(self)
+        menu.addAction(
+            EricPixmapCache.getIcon("editDelete"), self.tr("Clear"), self.__clear
+        ).setEnabled(bool(self.toPlainText()))
+        menu.addSeparator()
+        menu.addAction(
+            EricPixmapCache.getIcon("editCopy"),
+            self.tr("Copy"),
+            copyKeys,
+            self.copy,
+        ).setEnabled(self.textCursor().hasSelection())
+        menu.addAction(
+            EricPixmapCache.getIcon("editPaste"),
+            self.tr("Paste"),
+            pasteKeys,
+            self.__paste,
+        ).setEnabled(self.canPaste() and connected)
+        menu.addSeparator()
+        menu.addAction(
+            EricPixmapCache.getIcon("editSelectAll"),
+            self.tr("Select All"),
+            selectAllKeys,
+            self.selectAll,
+        ).setEnabled(bool(self.toPlainText()))
+
+        menu.exec(self.mapToGlobal(pos))
+
+    @pyqtSlot()
+    def handlePreferencesChanged(self):
+        """
+        Public slot to handle a change in preferences.
+        """
+        self.__colorScheme = Preferences.getMicroPython("ColorScheme")
+
+        self.__font = Preferences.getEditorOtherFonts("MonospacedFont")
+        self.setFontFamily(self.__font.family())
+        self.setFontPointSize(self.__font.pointSize())
+
+        if Preferences.getMicroPython("ReplLineWrap"):
+            self.setLineWrapMode(QTextEdit.LineWrapMode.WidgetWidth)
+        else:
+            self.setLineWrapMode(QTextEdit.LineWrapMode.NoWrap)
+
+    @pyqtSlot()
+    def __clear(self):
+        """
+        Private slot to clear the REPL pane.
+        """
+        self.clear()
+        if bool(self.__interface) and self.__interface.isConnected():
+            self.__interface.write(b"\r")
+
+    @pyqtSlot()
+    def __paste(self, mode=QClipboard.Mode.Clipboard):
+        """
+        Private slot to perform a paste operation.
+
+        @param mode paste mode (defaults to QClipboard.Mode.Clipboard)
+        @type QClipboard.Mode (optional)
+        """
+        # add support for paste by mouse middle button
+        clipboard = QGuiApplication.clipboard()
+        if clipboard:
+            pasteText = clipboard.text(mode=mode)
+            if pasteText:
+                pasteText = pasteText.replace("\n\r", "\r")
+                pasteText = pasteText.replace("\n", "\r")
+                if bool(self.__interface) and self.__interface.isConnected():
+                    self.__interface.write(b"\x05")
+                    self.__interface.write(pasteText.encode("utf-8"))
+                    self.__interface.write(b"\x04")
+
+    def keyPressEvent(self, evt):
+        """
+        Protected method to handle key press events.
+
+        @param evt reference to the key press event
+        @type QKeyEvent
+        """
+        key = evt.key()
+        msg = bytes(evt.text(), "utf8")
+        if key == Qt.Key.Key_Backspace:
+            msg = b"\b"
+        elif key == Qt.Key.Key_Delete:
+            msg = b"\x1B[\x33\x7E"
+        elif key == Qt.Key.Key_Up:
+            msg = b"\x1B[A"
+        elif key == Qt.Key.Key_Down:
+            msg = b"\x1B[B"
+        elif key == Qt.Key.Key_Right:
+            msg = b"\x1B[C"
+        elif key == Qt.Key.Key_Left:
+            msg = b"\x1B[D"
+        elif key == Qt.Key.Key_Home:
+            msg = b"\x1B[H"
+        elif key == Qt.Key.Key_End:
+            msg = b"\x1B[F"
+        elif (
+            OSUtilities.isMacPlatform()
+            and evt.modifiers() == Qt.KeyboardModifier.MetaModifier
+        ) or (
+            not OSUtilities.isMacPlatform()
+            and evt.modifiers() == Qt.KeyboardModifier.ControlModifier
+        ):
+            if Qt.Key.Key_A <= key <= Qt.Key.Key_Z:
+                # devices treat an input of \x01 as Ctrl+A, etc.
+                msg = bytes([1 + key - Qt.Key.Key_A])
+        elif evt.modifiers() == (
+            Qt.KeyboardModifier.ControlModifier | Qt.KeyboardModifier.ShiftModifier
+        ) or (
+            OSUtilities.isMacPlatform()
+            and evt.modifiers() == Qt.KeyboardModifier.ControlModifier
+        ):
+            if key == Qt.Key.Key_C:
+                self.copy()
+                msg = b""
+            elif key == Qt.Key.Key_V:
+                self.__paste()
+                msg = b""
+            elif key == Qt.Key.Key_A:
+                self.selectAll()
+                msg = b""
+        elif key in (Qt.Key.Key_Return, Qt.Key.Key_Enter):
+            tc = self.textCursor()
+            tc.movePosition(QTextCursor.MoveOperation.EndOfLine)
+            self.setTextCursor(tc)
+        if bool(self.__interface) and self.__interface.isConnected():
+            self.__interface.write(msg)
+
+        evt.accept()
+
+    def mouseReleaseEvent(self, evt):
+        """
+        Protected method to handle mouse release events.
+
+        @param evt reference to the event object
+        @type QMouseEvent
+        """
+        if evt.button() == Qt.MouseButton.MiddleButton:
+            self.__paste(mode=QClipboard.Mode.Selection)
+            msg = b""
+            if bool(self.__interface) and self.__interface.isConnected():
+                self.__interface.write(msg)
+            evt.accept()
+        else:
+            super().mouseReleaseEvent(evt)
+
+    @pyqtSlot(bytes)
+    def processData(self, data):
+        """
+        Public slot to process the data received from the device.
+
+        @param data data received from the device
+        @type bytes
+        """
+        tc = self.textCursor()
+        # the text cursor must be on the last line
+        while tc.movePosition(QTextCursor.MoveOperation.Down):
+            pass
+
+        # reset the font
+        charFormat = tc.charFormat()
+        self.__setCharFormat(None, tc)
+        tc.setCharFormat(charFormat)
+
+        # add received data to the buffered one
+        data = self.__replBuffer + data
+
+        index = 0
+        while index < len(data):
+            if data[index] == 8:  # \b
+                tc.movePosition(QTextCursor.MoveOperation.Left)
+                self.setTextCursor(tc)
+            elif data[index] in (4, 13):  # EOT, \r
+                pass
+            elif len(data) > index + 1 and data[index] == 27 and data[index + 1] == 91:
+                # VT100 cursor command detected: <Esc>[
+                index += 2  # move index to after the [
+                match = self.__vt100Re.search(
+                    data[index:].decode("utf-8", errors="replace")
+                )
+                if match:
+                    # move to last position in control sequence
+                    # ++ will be done at end of loop
+                    index += match.end() - 1
+
+                    action = match.group("action")
+                    if action in "ABCD":
+                        if match.group("count") == "":
+                            count = 1
+                        else:
+                            count = int(match.group("count"))
+
+                        if action == "A":  # up
+                            tc.movePosition(QTextCursor.MoveOperation.Up, n=count)
+                            self.setTextCursor(tc)
+                        elif action == "B":  # down
+                            tc.movePosition(QTextCursor.MoveOperation.Down, n=count)
+                            self.setTextCursor(tc)
+                        elif action == "C":  # right
+                            tc.movePosition(QTextCursor.MoveOperation.Right, n=count)
+                            self.setTextCursor(tc)
+                        elif action == "D":  # left
+                            tc.movePosition(QTextCursor.MoveOperation.Left, n=count)
+                            self.setTextCursor(tc)
+                    elif action == "K":  # delete things
+                        if match.group("count") in ("", "0"):
+                            # delete to end of line
+                            tc.movePosition(
+                                QTextCursor.MoveOperation.EndOfLine,
+                                mode=QTextCursor.MoveMode.KeepAnchor,
+                            )
+                            tc.removeSelectedText()
+                            self.setTextCursor(tc)
+                        elif match.group("count") == "1":
+                            # delete to beginning of line
+                            tc.movePosition(
+                                QTextCursor.MoveOperation.StartOfLine,
+                                mode=QTextCursor.MoveMode.KeepAnchor,
+                            )
+                            tc.removeSelectedText()
+                            self.setTextCursor(tc)
+                        elif match.group("count") == "2":
+                            # delete whole line
+                            tc.movePosition(QTextCursor.MoveOperation.EndOfLine)
+                            tc.movePosition(
+                                QTextCursor.MoveOperation.StartOfLine,
+                                mode=QTextCursor.MoveMode.KeepAnchor,
+                            )
+                            tc.removeSelectedText()
+                            self.setTextCursor(tc)
+                    elif action == "m":
+                        self.__setCharFormat(match.group(0)[:-1].split(";"), tc)
+            elif (
+                len(data) > index + 1
+                and data[index] == 27
+                and data[index + 1 : index + 4] == b"]0;"
+            ):
+                if b"\x1b\\" in data[index + 4 :]:
+                    # 'set window title' command detected: <Esc>]0;...<Esc>\
+                    # __IGNORE_WARNING_M891__
+                    titleData = data[index + 4 :].split(b"\x1b\\")[0]
+                    title = titleData.decode("utf-8")
+                    index += len(titleData) + 5  # one more is done at the end
+                    self.osdInfo.emit(title)
+                else:
+                    # data is incomplete; buffer and stop processing
+                    self.__replBuffer = data[index:]
+                    return
+            else:
+                tc.deleteChar()
+                self.setTextCursor(tc)
+                self.insertPlainText(chr(data[index]))
+
+            index += 1
+
+        self.ensureCursorVisible()
+        self.__replBuffer = b""
+
+    def __setCharFormat(self, formatCodes, textCursor):
+        """
+        Private method setting the current text format of the REPL pane based
+        on the passed ANSI codes.
+
+        Following codes are used:
+        <ul>
+        <li>0: Reset</li>
+        <li>1: Bold font (weight 75)</li>
+        <li>2: Light font (weight 25)</li>
+        <li>3: Italic font</li>
+        <li>4: Underlined font</li>
+        <li>9: Strikeout font</li>
+        <li>21: Bold off (weight 50)</li>
+        <li>22: Light off (weight 50)</li>
+        <li>23: Italic off</li>
+        <li>24: Underline off</li>
+        <li>29: Strikeout off</li>
+        <li>30: foreground Black</li>
+        <li>31: foreground Dark Red</li>
+        <li>32: foreground Dark Green</li>
+        <li>33: foreground Dark Yellow</li>
+        <li>34: foreground Dark Blue</li>
+        <li>35: foreground Dark Magenta</li>
+        <li>36: foreground Dark Cyan</li>
+        <li>37: foreground Light Gray</li>
+        <li>39: reset foreground to default</li>
+        <li>40: background Black</li>
+        <li>41: background Dark Red</li>
+        <li>42: background Dark Green</li>
+        <li>43: background Dark Yellow</li>
+        <li>44: background Dark Blue</li>
+        <li>45: background Dark Magenta</li>
+        <li>46: background Dark Cyan</li>
+        <li>47: background Light Gray</li>
+        <li>49: reset background to default</li>
+        <li>53: Overlined font</li>
+        <li>55: Overline off</li>
+        <li>90: bright foreground Dark Gray</li>
+        <li>91: bright foreground Red</li>
+        <li>92: bright foreground Green</li>
+        <li>93: bright foreground Yellow</li>
+        <li>94: bright foreground Blue</li>
+        <li>95: bright foreground Magenta</li>
+        <li>96: bright foreground Cyan</li>
+        <li>97: bright foreground White</li>
+        <li>100: bright background Dark Gray</li>
+        <li>101: bright background Red</li>
+        <li>102: bright background Green</li>
+        <li>103: bright background Yellow</li>
+        <li>104: bright background Blue</li>
+        <li>105: bright background Magenta</li>
+        <li>106: bright background Cyan</li>
+        <li>107: bright background White</li>
+        </ul>
+
+        @param formatCodes list of format codes
+        @type list of str
+        @param textCursor reference to the text cursor
+        @type QTextCursor
+        """
+        if not formatCodes:
+            # empty format codes list is treated as a reset
+            formatCodes = ["0"]
+
+        charFormat = textCursor.charFormat()
+        for formatCode in formatCodes:
+            try:
+                formatCode = int(formatCode)
+            except ValueError:
+                # ignore non digit values
+                continue
+
+            if formatCode == 0:
+                charFormat.setFontWeight(50)
+                charFormat.setFontItalic(False)
+                charFormat.setFontUnderline(False)
+                charFormat.setFontStrikeOut(False)
+                charFormat.setFontOverline(False)
+                charFormat.setForeground(self.DefaultForeground)
+                charFormat.setBackground(self.DefaultBackground)
+            elif formatCode == 1:
+                charFormat.setFontWeight(75)
+            elif formatCode == 2:
+                charFormat.setFontWeight(25)
+            elif formatCode == 3:
+                charFormat.setFontItalic(True)
+            elif formatCode == 4:
+                charFormat.setFontUnderline(True)
+            elif formatCode == 9:
+                charFormat.setFontStrikeOut(True)
+            elif formatCode in (21, 22):
+                charFormat.setFontWeight(50)
+            elif formatCode == 23:
+                charFormat.setFontItalic(False)
+            elif formatCode == 24:
+                charFormat.setFontUnderline(False)
+            elif formatCode == 29:
+                charFormat.setFontStrikeOut(False)
+            elif formatCode == 53:
+                charFormat.setFontOverline(True)
+            elif formatCode == 55:
+                charFormat.setFontOverline(False)
+            elif formatCode in (30, 31, 32, 33, 34, 35, 36, 37):
+                charFormat.setForeground(
+                    AnsiColorSchemes[self.__colorScheme][formatCode - 30]
+                )
+            elif formatCode in (40, 41, 42, 43, 44, 45, 46, 47):
+                charFormat.setBackground(
+                    AnsiColorSchemes[self.__colorScheme][formatCode - 40]
+                )
+            elif formatCode in (90, 91, 92, 93, 94, 95, 96, 97):
+                charFormat.setForeground(
+                    AnsiColorSchemes[self.__colorScheme][formatCode - 80]
+                )
+            elif formatCode in (100, 101, 102, 103, 104, 105, 106, 107):
+                charFormat.setBackground(
+                    AnsiColorSchemes[self.__colorScheme][formatCode - 90]
+                )
+            elif formatCode == 39:
+                charFormat.setForeground(self.DefaultForeground)
+            elif formatCode == 49:
+                charFormat.setBackground(self.DefaultBackground)
+
+        textCursor.setCharFormat(charFormat)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/eric7/MicroPython/MicroPythonSerialDeviceInterface.py	Thu May 04 17:58:52 2023 +0200
@@ -0,0 +1,477 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2019 - 2023 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module  implementing an interface to talk to a connected MicroPython device via
+a serial link.
+"""
+
+from PyQt6.QtCore import QCoreApplication, QEventLoop, QThread, QTimer, pyqtSlot
+
+from eric7 import Preferences
+
+from .MicroPythonDeviceInterface import MicroPythonDeviceInterface
+from .MicroPythonSerialPort import MicroPythonSerialPort
+
+
+class MicroPythonSerialDeviceInterface(MicroPythonDeviceInterface):
+    """
+    Class implementing an interface to talk to a connected MicroPython device via
+    a serial link.
+    """
+
+    def __init__(self, parent=None):
+        """
+        Constructor
+
+        @param parent reference to the parent object
+        @type QObject
+        """
+        super().__init__(parent)
+
+        self.__blockReadyRead = False
+
+        self.__serial = MicroPythonSerialPort(
+            timeout=Preferences.getMicroPython("SerialTimeout"), parent=self
+        )
+        self.__serial.readyRead.connect(self.__readSerial)
+
+    @pyqtSlot()
+    def __readSerial(self):
+        """
+        Private slot to read all available serial data and emit it with the
+        "dataReceived" signal for further processing.
+        """
+        if not self.__blockReadyRead:
+            data = bytes(self.__serial.readAll())
+            self.dataReceived.emit(data)
+
+    @pyqtSlot()
+    def connectToDevice(self, connection):
+        """
+        Public slot to connect to the device.
+
+        @param connection name of the connection to be used
+        @type str
+        @return flag indicating success
+        @rtype bool
+        """
+        return self.__serial.openSerialLink(connection)
+
+    @pyqtSlot()
+    def disconnectFromDevice(self):
+        """
+        Public slot to disconnect from the device.
+        """
+        self.__serial.closeSerialLink()
+
+    def isConnected(self):
+        """
+        Public method to get the connection status.
+
+        @return flag indicating the connection status
+        @rtype bool
+        """
+        return self.__serial.isConnected()
+
+    @pyqtSlot()
+    def handlePreferencesChanged(self):
+        """
+        Public slot to handle a change of the preferences.
+        """
+        self.__serial.setTimeout(Preferences.getMicroPython("SerialTimeout"))
+
+    def write(self, data):
+        """
+        Public method to write data to the connected device.
+
+        @param data data to be written
+        @type bytes or bytearray
+        """
+        self.__serial.isConnected() and self.__serial.write(data)
+
+    def __pasteOn(self):
+        """
+        Private method to switch the connected device to 'paste' mode.
+
+        Note: switching to paste mode is done with synchronous writes.
+
+        @return flag indicating success
+        @rtype bool
+        """
+        if not self.__serial:
+            return False
+
+        pasteMessage = b"paste mode; Ctrl-C to cancel, Ctrl-D to finish\r\n=== "
+
+        self.__serial.clear()  # clear any buffered output before entering paste mode
+        self.__serial.write(b"\x02")  # end raw mode if required
+        written = self.__serial.waitForBytesWritten(500)
+        # time out after 500ms if device is not responding
+        if not written:
+            return False
+        for _i in range(3):
+            # CTRL-C three times to break out of loops
+            self.__serial.write(b"\r\x03")
+            written = self.__serial.waitForBytesWritten(500)
+            # time out after 500ms if device is not responding
+            if not written:
+                return False
+            QThread.msleep(10)
+        self.__serial.readAll()  # read all data and discard it
+        self.__serial.write(b"\r\x05")  # send CTRL-E to enter paste mode
+        self.__serial.readUntil(pasteMessage)
+
+        if self.__serial.hasTimedOut():
+            # it timed out; try it again and than fail
+            self.__serial.write(b"\r\x05")  # send CTRL-E again
+            self.__serial.readUntil(pasteMessage)
+            if self.__serial.hasTimedOut():
+                return False
+
+        QCoreApplication.processEvents(
+            QEventLoop.ProcessEventsFlag.ExcludeUserInputEvents
+        )
+        self.__serial.readAll()  # read all data and discard it
+        return True
+
+    def __pasteOff(self):
+        """
+        Private method to switch 'paste' mode off.
+        """
+        if self.__serial:
+            self.__serial.write(b"\x04")  # send CTRL-D to cancel paste mode
+
+    def __rawOn(self):
+        """
+        Private method to switch the connected device to 'raw' mode.
+
+        Note: switching to raw mode is done with synchronous writes.
+
+        @return flag indicating success
+        @rtype bool
+        """
+        if not self.__serial:
+            return False
+
+        rawReplMessage = b"raw REPL; CTRL-B to exit\r\n>"
+
+        self.__serial.write(b"\x02")  # end raw mode if required
+        written = self.__serial.waitForBytesWritten(500)
+        # time out after 500ms if device is not responding
+        if not written:
+            return False
+        for _i in range(3):
+            # CTRL-C three times to break out of loops
+            self.__serial.write(b"\r\x03")
+            written = self.__serial.waitForBytesWritten(500)
+            # time out after 500ms if device is not responding
+            if not written:
+                return False
+            QThread.msleep(10)
+        self.__serial.readAll()  # read all data and discard it
+        self.__serial.write(b"\r\x01")  # send CTRL-A to enter raw mode
+        self.__serial.readUntil(rawReplMessage)
+        if self.__serial.hasTimedOut():
+            # it timed out; try it again and than fail
+            self.__serial.write(b"\r\x01")  # send CTRL-A again
+            self.__serial.readUntil(rawReplMessage)
+            if self.__serial.hasTimedOut():
+                return False
+
+        QCoreApplication.processEvents(
+            QEventLoop.ProcessEventsFlag.ExcludeUserInputEvents
+        )
+        self.__serial.readAll()  # read all data and discard it
+        return True
+
+    def __rawOff(self):
+        """
+        Private method to switch 'raw' mode off.
+        """
+        if self.__serial:
+            self.__serial.write(b"\x02")  # send CTRL-B to cancel raw mode
+            self.__serial.readUntil(b">>> ")  # read until Python prompt
+            self.__serial.readAll()  # read all data and discard it
+
+    def probeDevice(self):
+        """
+        Public method to check the device is responding.
+
+        If the device has not been flashed with a MicroPython firmware, the
+        probe will fail.
+
+        @return flag indicating a communicating MicroPython device
+        @rtype bool
+        """
+        if not self.__serial:
+            return False
+
+        if not self.__serial.isConnected():
+            return False
+
+        # switch on paste mode
+        self.__blockReadyRead = True
+        ok = self.__pasteOn()
+        if not ok:
+            self.__blockReadyRead = False
+            return False
+
+        # switch off paste mode
+        QThread.msleep(10)
+        self.__pasteOff()
+        self.__blockReadyRead = False
+
+        return True
+
+    def execute(self, commands, *, mode="raw", timeout=0):
+        """
+        Public method to send commands to the connected device and return the
+        result.
+
+        If no serial connection is available, empty results will be returned.
+
+        @param commands list of commands to be executed
+        @type str or list of str
+        @keyparam mode submit mode to be used (one of 'raw' or 'paste') (defaults to
+            'raw')
+        @type str
+        @keyparam timeout per command timeout in milliseconds (0 for configured default)
+            (defaults to 0)
+        @type int (optional)
+        @return tuple containing stdout and stderr output of the device
+        @rtype tuple of (bytes, bytes)
+        @exception ValueError raised in case of an unsupported submit mode
+        """
+        if mode not in ("paste", "raw"):
+            raise ValueError("Unsupported submit mode given ('{0}').".format(mode))
+
+        if mode == "raw":
+            return self.__execute_raw(commands, timeout=timeout)
+        elif mode == "paste":
+            return self.__execute_paste(commands, timeout=timeout)
+        else:
+            # just in case
+            return b"", b""
+
+    def __execute_raw(self, commands, timeout=0):
+        """
+        Private method to send commands to the connected device using 'raw REPL' mode
+        and return the result.
+
+        If no serial connection is available, empty results will be returned.
+
+        @param commands list of commands to be executed
+        @type str or list of str
+        @param timeout per command timeout in milliseconds (0 for configured default)
+            (defaults to 0)
+        @type int (optional)
+        @return tuple containing stdout and stderr output of the device
+        @rtype tuple of (bytes, bytes)
+        """
+        if not self.__serial:
+            return b"", b""
+
+        if not self.__serial.isConnected():
+            return b"", b"Device not connected or not switched on."
+
+        result = bytearray()
+        err = b""
+
+        if isinstance(commands, str):
+            commands = [commands]
+
+        # switch on raw mode
+        self.__blockReadyRead = True
+        ok = self.__rawOn()
+        if not ok:
+            self.__blockReadyRead = False
+            return (b"", b"Could not switch to raw mode. Is the device switched on?")
+
+        # send commands
+        QThread.msleep(10)
+        for command in commands:
+            if command:
+                commandBytes = command.encode("utf-8")
+                self.__serial.write(commandBytes + b"\x04")
+                QCoreApplication.processEvents(
+                    QEventLoop.ProcessEventsFlag.ExcludeUserInputEvents
+                )
+                ok = self.__serial.readUntil(b"OK")
+                if ok != b"OK":
+                    self.__blockReadyRead = False
+                    return (
+                        b"",
+                        "Expected 'OK', got '{0}', followed by '{1}'".format(
+                            ok, self.__serial.readAll()
+                        ).encode("utf-8"),
+                    )
+
+                # read until prompt
+                response = self.__serial.readUntil(b"\x04>", timeout=timeout)
+                if self.__serial.hasTimedOut():
+                    self.__blockReadyRead = False
+                    return b"", b"Timeout while processing commands."
+                if b"\x04" in response[:-2]:
+                    # split stdout, stderr
+                    out, err = response[:-2].split(b"\x04")
+                    result += out
+                else:
+                    err = b"invalid response received: " + response
+                if err:
+                    result = b""
+                    break
+
+        # switch off raw mode
+        QThread.msleep(10)
+        self.__rawOff()
+        self.__blockReadyRead = False
+
+        return bytes(result), err
+
+    def __execute_paste(self, commands, timeout=0):
+        """
+        Private method to send commands to the connected device using 'paste' mode
+        and return the result.
+
+        If no serial connection is available, empty results will be returned.
+
+        @param commands list of commands to be executed
+        @type str or list of str
+        @param timeout per command timeout in milliseconds (0 for configured default)
+            (defaults to 0)
+        @type int (optional)
+        @return tuple containing stdout and stderr output of the device
+        @rtype tuple of (bytes, bytes)
+        """
+        if not self.__serial:
+            return b"", b""
+
+        if not self.__serial.isConnected():
+            return b"", b"Device is not connected or not switched on."
+
+        if isinstance(commands, list):
+            commands = "\n".join(commands)
+
+        # switch on paste mode
+        self.__blockReadyRead = True
+        ok = self.__pasteOn()
+        if not ok:
+            self.__blockReadyRead = False
+            return (b"", b"Could not switch to paste mode. Is the device switched on?")
+
+        # send commands
+        QThread.msleep(10)
+        for command in commands.splitlines(keepends=True):
+            # send the data as single lines
+            commandBytes = command.encode("utf-8")
+            self.__serial.write(commandBytes)
+            QCoreApplication.processEvents(
+                QEventLoop.ProcessEventsFlag.ExcludeUserInputEvents
+            )
+            QThread.msleep(10)
+            ok = self.__serial.readUntil(commandBytes)
+            if ok != commandBytes:
+                self.__blockReadyRead = False
+                return (
+                    b"",
+                    "Expected '{0}', got '{1}', followed by '{2}'".format(
+                        commandBytes, ok, self.__serial.readAll()
+                    ).encode("utf-8"),
+                )
+
+        # switch off paste mode causing the commands to be executed
+        self.__pasteOff()
+        QThread.msleep(10)
+        # read until Python prompt
+        result = (
+            self.__serial.readUntil(b">>> ", timeout=timeout)
+            .replace(b">>> ", b"")
+            .strip()
+        )
+        if self.__serial.hasTimedOut():
+            self.__blockReadyRead = False
+            return b"", b"Timeout while processing commands."
+
+        # get rid of any OSD string and send it
+        if result.startswith(b"\x1b]0;"):
+            osd, result = result.split(b"\x1b\\", 1)
+            self.osdInfo.emit(osd[4:].decode("utf-8"))
+
+        if self.TracebackMarker in result:
+            errorIndex = result.find(self.TracebackMarker)
+            out, err = result[:errorIndex], result[errorIndex:]
+        else:
+            out = result
+            err = b""
+
+        self.__blockReadyRead = False
+        return out, err
+
+    def executeAsync(self, commandsList, submitMode):
+        """
+        Public method to execute a series of commands over a period of time
+        without returning any result (asynchronous execution).
+
+        @param commandsList list of commands to be execute on the device
+        @type list of str
+        @param submitMode mode to be used to submit the commands
+        @type str (one of 'raw' or 'paste')
+        @exception ValueError raised to indicate an unknown submit mode
+        """
+        if submitMode not in ("raw", "paste"):
+            raise ValueError("Illegal submit mode given ({0})".format(submitMode))
+
+        if submitMode == "raw":
+            startSequence = [  # sequence of commands to enter raw mode
+                b"\x02",  # Ctrl-B: exit raw repl (just in case)
+                b"\r\x03\x03\x03",  # Ctrl-C three times: interrupt any running program
+                b"\r\x01",  # Ctrl-A: enter raw REPL
+                b'print("\\n")\r',
+            ]
+            endSequence = [
+                b"\r",
+                b"\x04",
+            ]
+            self.__executeAsyncRaw(
+                startSequence
+                + [c.encode("utf-8") + b"\r" for c in commandsList]
+                + endSequence
+            )
+        elif submitMode == "paste":
+            self.__executeAsyncPaste(commandsList)
+
+    def __executeAsyncRaw(self, commandsList):
+        """
+        Private method to execute a series of commands over a period of time
+        without returning any result (asynchronous execution).
+
+        @param commandsList list of commands to be execute on the device
+        @type list of bytes
+        """
+        if commandsList:
+            command = commandsList.pop(0)
+            self.__serial.write(command)
+            QTimer.singleShot(2, lambda: self.__executeAsyncRaw(commandsList))
+        else:
+            self.__rawOff()
+            self.executeAsyncFinished.emit()
+
+    def __executeAsyncPaste(self, commandsList):
+        """
+        Private method to execute a series of commands over a period of time
+        without returning any result (asynchronous execution).
+
+        @param commandsList list of commands to be execute on the device
+        @type list of str
+        """
+        self.__blockReadyRead = True
+        self.__pasteOn()
+        command = b"\n".join(c.encode("utf-8)") for c in commandsList)
+        self.__serial.write(command)
+        self.__serial.readUntil(command)
+        self.__blockReadyRead = False
+        self.__pasteOff()
+        self.executeAsyncFinished.emit()
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/eric7/MicroPython/MicroPythonWebreplConnectionDialog.py	Thu May 04 17:58:52 2023 +0200
@@ -0,0 +1,123 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2023 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing a dialog to enter the WebREPL connection parameters.
+"""
+
+from PyQt6.QtCore import pyqtSlot
+from PyQt6.QtWidgets import QDialog, QDialogButtonBox, QLineEdit
+
+from eric7.EricGui import EricPixmapCache
+
+from .Devices import getSupportedDevices
+from .Ui_MicroPythonWebreplConnectionDialog import Ui_MicroPythonWebreplConnectionDialog
+
+
+class MicroPythonWebreplConnectionDialog(
+    QDialog, Ui_MicroPythonWebreplConnectionDialog
+):
+    """
+    Class implementing a dialog to enter the WebREPL connection parameters.
+    """
+
+    def __init__(self, currentWebreplUrl, currentType, parent=None):
+        """
+        Constructor
+
+        @param currentWebreplUrl WebREPL URL most recently configured
+        @type str
+        @param currentType device type most recently selected
+        @type str
+        @param parent reference to the parent widget (defaults to None)
+        @type QWidget (optional)
+        """
+        super().__init__(parent)
+        self.setupUi(self)
+
+        self.deviceTypeComboBox.addItem("", "")
+        for board, description in sorted(getSupportedDevices(), key=lambda x: x[1]):
+            self.deviceTypeComboBox.addItem(description, board)
+
+        self.showPasswordButton.setIcon(EricPixmapCache.getIcon("showPassword"))
+
+        self.hostEdit.textChanged.connect(self.__updateOkButton)
+        self.portEdit.textChanged.connect(self.__updateOkButton)
+        self.deviceTypeComboBox.currentIndexChanged.connect(self.__updateOkButton)
+
+        if currentWebreplUrl:
+            url = currentWebreplUrl.replace("ws://", "")
+            password, hostPort = url.split("@", 1) if "@" in url else ("", url)
+            host, port = hostPort.split(":", 1) if ":" in hostPort else (hostPort, "")
+            self.hostEdit.setText(host)
+            self.portEdit.setText(port)
+            self.passwordEdit.setText(password)
+
+            typeIndex = self.deviceTypeComboBox.findData(currentType)
+            self.deviceTypeComboBox.setCurrentIndex(typeIndex)
+        else:
+            self.__updateOkButton()
+
+        msh = self.minimumSizeHint()
+        self.resize(max(self.width(), msh.width()), msh.height())
+
+    @pyqtSlot()
+    def __updateOkButton(self):
+        """
+        Private slot to update the enabled state of the OK button.
+        """
+        port = self.portEdit.text()
+        if port == "":
+            portOk = True
+        else:
+            try:
+                portNo = int(port)
+                portOk = 1024 < portNo <= 65535
+            except ValueError:
+                portOk = False
+        self.buttonBox.button(QDialogButtonBox.StandardButton.Ok).setEnabled(
+            bool(self.hostEdit.text())
+            and portOk
+            and bool(self.deviceTypeComboBox.currentData())
+        )
+
+    @pyqtSlot(bool)
+    def on_showPasswordButton_clicked(self, checked):
+        """
+        Private slot to show or hide the password.
+
+        @param checked state of the button
+        @type bool
+        """
+        if checked:
+            self.passwordEdit.setEchoMode(QLineEdit.EchoMode.Normal)
+            self.showPasswordButton.setIcon(EricPixmapCache.getIcon("hidePassword"))
+            self.showPasswordButton.setToolTip(self.tr("Press to hide the password."))
+        else:
+            self.passwordEdit.setEchoMode(QLineEdit.EchoMode.Password)
+            self.showPasswordButton.setIcon(EricPixmapCache.getIcon("showPassword"))
+            self.showPasswordButton.setToolTip(self.tr("Press to show the password."))
+
+    def getWebreplConnectionParameters(self):
+        """
+        Public method to retrieve the entered WebREPL connection data.
+
+        @return tuple containing the URL and device type for the WebREPL connection
+        @rtype tuple of (str, str)
+        """
+        password = self.passwordEdit.text()
+        host = self.hostEdit.text()
+        port = self.portEdit.text()
+
+        if password and port:
+            url = f"ws://{password}@{host}:{port}"
+        elif password:
+            url = f"ws://{password}@{host}"
+        elif port:
+            url = f"ws://{host}:{port}"
+        else:
+            url = f"ws://{host}"
+
+        return (url, self.deviceTypeComboBox.currentData())
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/eric7/MicroPython/MicroPythonWebreplConnectionDialog.ui	Thu May 04 17:58:52 2023 +0200
@@ -0,0 +1,157 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>MicroPythonWebreplConnectionDialog</class>
+ <widget class="QDialog" name="MicroPythonWebreplConnectionDialog">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>400</width>
+    <height>172</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>WebREPL Connection</string>
+  </property>
+  <property name="sizeGripEnabled">
+   <bool>true</bool>
+  </property>
+  <layout class="QGridLayout" name="gridLayout">
+   <item row="0" column="0">
+    <widget class="QLabel" name="label_3">
+     <property name="text">
+      <string>Host:</string>
+     </property>
+    </widget>
+   </item>
+   <item row="0" column="1" colspan="2">
+    <widget class="QLineEdit" name="hostEdit">
+     <property name="toolTip">
+      <string>Enter the host name or IPv4 address of the device.</string>
+     </property>
+     <property name="clearButtonEnabled">
+      <bool>true</bool>
+     </property>
+    </widget>
+   </item>
+   <item row="1" column="0">
+    <widget class="QLabel" name="label_4">
+     <property name="text">
+      <string>Port:</string>
+     </property>
+    </widget>
+   </item>
+   <item row="1" column="1" colspan="2">
+    <widget class="QLineEdit" name="portEdit">
+     <property name="toolTip">
+      <string>Enter the port of the WebREPL (empty for default port 8266).</string>
+     </property>
+     <property name="clearButtonEnabled">
+      <bool>true</bool>
+     </property>
+    </widget>
+   </item>
+   <item row="2" column="0">
+    <widget class="QLabel" name="label_5">
+     <property name="text">
+      <string>Password:</string>
+     </property>
+    </widget>
+   </item>
+   <item row="2" column="1">
+    <widget class="QLineEdit" name="passwordEdit">
+     <property name="toolTip">
+      <string>Enter the password for this device connection.</string>
+     </property>
+     <property name="echoMode">
+      <enum>QLineEdit::Password</enum>
+     </property>
+     <property name="clearButtonEnabled">
+      <bool>true</bool>
+     </property>
+    </widget>
+   </item>
+   <item row="2" column="2">
+    <widget class="QToolButton" name="showPasswordButton">
+     <property name="toolTip">
+      <string>Press to show the password.</string>
+     </property>
+     <property name="checkable">
+      <bool>true</bool>
+     </property>
+    </widget>
+   </item>
+   <item row="3" column="0">
+    <widget class="QLabel" name="label_6">
+     <property name="text">
+      <string>Device Type:</string>
+     </property>
+    </widget>
+   </item>
+   <item row="3" column="1" colspan="2">
+    <widget class="QComboBox" name="deviceTypeComboBox">
+     <property name="sizePolicy">
+      <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
+       <horstretch>0</horstretch>
+       <verstretch>0</verstretch>
+      </sizepolicy>
+     </property>
+     <property name="toolTip">
+      <string>Select the device type</string>
+     </property>
+    </widget>
+   </item>
+   <item row="4" column="0" colspan="3">
+    <widget class="QDialogButtonBox" name="buttonBox">
+     <property name="orientation">
+      <enum>Qt::Horizontal</enum>
+     </property>
+     <property name="standardButtons">
+      <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
+     </property>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <tabstops>
+  <tabstop>hostEdit</tabstop>
+  <tabstop>portEdit</tabstop>
+  <tabstop>passwordEdit</tabstop>
+  <tabstop>deviceTypeComboBox</tabstop>
+ </tabstops>
+ <resources/>
+ <connections>
+  <connection>
+   <sender>buttonBox</sender>
+   <signal>accepted()</signal>
+   <receiver>MicroPythonWebreplConnectionDialog</receiver>
+   <slot>accept()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>248</x>
+     <y>254</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>157</x>
+     <y>274</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>buttonBox</sender>
+   <signal>rejected()</signal>
+   <receiver>MicroPythonWebreplConnectionDialog</receiver>
+   <slot>reject()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>316</x>
+     <y>260</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>286</x>
+     <y>274</y>
+    </hint>
+   </hints>
+  </connection>
+ </connections>
+</ui>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/eric7/MicroPython/MicroPythonWebreplDeviceInterface.py	Thu May 04 17:58:52 2023 +0200
@@ -0,0 +1,299 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2023 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module  implementing an interface to talk to a connected MicroPython device via
+a webrepl connection.
+"""
+
+from PyQt6.QtCore import QThread, pyqtSlot
+from PyQt6.QtWidgets import QInputDialog, QLineEdit
+
+from eric7 import Preferences
+from eric7.EricWidgets import EricMessageBox
+
+from .MicroPythonDeviceInterface import MicroPythonDeviceInterface
+from .MicroPythonWebreplSocket import MicroPythonWebreplSocket
+
+
+class MicroPythonWebreplDeviceInterface(MicroPythonDeviceInterface):
+    """
+    Class implementing an interface to talk to a connected MicroPython device via
+    a webrepl connection.
+    """
+
+    def __init__(self, parent=None):
+        """
+        Constructor
+
+        @param parent reference to the parent object
+        @type QObject
+        """
+        super().__init__(parent)
+
+        self.__blockReadyRead = False
+
+        self.__socket = MicroPythonWebreplSocket(
+            timeout=Preferences.getMicroPython("WebreplTimeout"), parent=self
+        )
+        self.__connected = False
+        self.__socket.readyRead.connect(self.__readSocket)
+
+    @pyqtSlot()
+    def __readSocket(self):
+        """
+        Private slot to read all available data and emit it with the
+        "dataReceived" signal for further processing.
+        """
+        if not self.__blockReadyRead:
+            data = bytes(self.__socket.readAll())
+            self.dataReceived.emit(data)
+
+    def __readAll(self):
+        """
+        Private method to read all data and emit it for further processing.
+        """
+        data = self.__socket.readAll()
+        self.dataReceived.emit(data)
+
+    @pyqtSlot()
+    def connectToDevice(self, connection):
+        """
+        Public slot to connect to the device.
+
+        @param connection name of the connection to be used in the form of an URL string
+            (ws://password@host:port)
+        @type str
+        @return flag indicating success
+        @rtype bool
+        """
+        connection = connection.replace("ws://", "")
+        try:
+            password, hostPort = connection.split("@", 1)
+        except ValueError:
+            password, hostPort = None, connection
+        if password is None:
+            password, ok = QInputDialog.getText(
+                None,
+                self.tr("WebREPL Password"),
+                self.tr("Enter the WebREPL password:"),
+                QLineEdit.EchoMode.Password,
+            )
+            if not ok:
+                return False
+
+        try:
+            host, port = hostPort.split(":", 1)
+            port = int(port)
+        except ValueError:
+            host, port = hostPort, 8266  # default port is 8266
+
+        self.__blockReadyRead = True
+        ok = self.__socket.connectToDevice(host, port)
+        if ok:
+            ok = self.__socket.login(password)
+            if not ok:
+                EricMessageBox.warning(
+                    None,
+                    self.tr("WebREPL Login"),
+                    self.tr(
+                        "The login to the selected device 'webrepl' failed. The given"
+                        " password may be incorrect."
+                    ),
+                )
+
+        self.__connected = ok
+        self.__blockReadyRead = False
+
+        return self.__connected
+
+    @pyqtSlot()
+    def disconnectFromDevice(self):
+        """
+        Public slot to disconnect from the device.
+        """
+        self.__socket.disconnect()
+        self.__connected = False
+
+    def isConnected(self):
+        """
+        Public method to get the connection status.
+
+        @return flag indicating the connection status
+        @rtype bool
+        """
+        return self.__connected
+
+    @pyqtSlot()
+    def handlePreferencesChanged(self):
+        """
+        Public slot to handle a change of the preferences.
+        """
+        self.__socket.setTimeout(Preferences.getMicroPython("WebreplTimeout"))
+
+    def write(self, data):
+        """
+        Public method to write data to the connected device.
+
+        @param data data to be written
+        @type bytes or bytearray
+        """
+        self.__connected and self.__socket.writeTextMessage(data)
+
+    def probeDevice(self):
+        """
+        Public method to check the device is responding.
+
+        If the device has not been flashed with a MicroPython firmware, the
+        probe will fail.
+
+        @return flag indicating a communicating MicroPython device
+        @rtype bool
+        """
+        if not self.__connected:
+            return False
+
+        # switch on paste mode
+        self.__blockReadyRead = True
+        ok = self.__pasteOn()
+        if not ok:
+            self.__blockReadyRead = False
+            return False
+
+        # switch off raw mode
+        QThread.msleep(10)
+        self.__pasteOff()
+        self.__blockReadyRead = False
+
+        return True
+
+    def execute(self, commands, *, mode="raw", timeout=0):
+        """
+        Public method to send commands to the connected device and return the
+        result.
+
+        @param commands list of commands to be executed
+        @type str or list of str
+        @keyparam mode submit mode to be used (one of 'raw' or 'paste') (defaults to
+            'raw'). This is ignored because webrepl always uses 'paste' mode.
+        @type str
+        @keyparam timeout per command timeout in milliseconds (0 for configured default)
+            (defaults to 0)
+        @type int (optional)
+        @return tuple containing stdout and stderr output of the device
+        @rtype tuple of (bytes, bytes)
+        """
+        if not self.__connected:
+            return b"", b"Device is not connected."
+
+        if isinstance(commands, list):
+            commands = "\n".join(commands)
+
+        # switch on paste mode
+        self.__blockReadyRead = True
+        ok = self.__pasteOn()
+        if not ok:
+            self.__blockReadyRead = False
+            return (b"", b"Could not switch to paste mode. Is the device switched on?")
+
+        # send commands
+        commandBytes = commands.encode("utf-8")
+        self.__socket.writeTextMessage(commandBytes)
+        ok = self.__socket.readUntil(commandBytes)
+        if ok != commandBytes:
+            self.__blockReadyRead = False
+            return (
+                b"",
+                "Expected '{0}', got '{1}', followed by '{2}'".format(
+                    commandBytes, ok, self.__socket.readAll()
+                ).encode("utf-8"),
+            )
+
+        # switch off paste mode causing the commands to be executed
+        self.__pasteOff()
+
+        # read until Python prompt
+        result = (
+            self.__socket.readUntil(b">>> ", timeout=timeout)
+            .replace(b">>> ", b"")
+            .strip()
+        )
+        if self.__socket.hasTimedOut():
+            self.__blockReadyRead = False
+            return b"", b"Timeout while processing commands."
+
+        # get rid of any OSD string and send it
+        if result.startswith(b"\x1b]0;"):
+            osd, result = result.split(b"\x1b\\", 1)
+            self.osdInfo.emit(osd[4:].decode("utf-8"))
+
+        if self.TracebackMarker in result:
+            errorIndex = result.find(self.TracebackMarker)
+            out, err = result[:errorIndex], result[errorIndex:].replace(">>> ", "")
+        else:
+            out = result
+            err = b""
+
+        self.__blockReadyRead = False
+        return out, err
+
+    def executeAsync(self, commandsList, submitMode):
+        """
+        Public method to execute a series of commands over a period of time
+        without returning any result (asynchronous execution).
+
+        @param commandsList list of commands to be execute on the device
+        @type list of str
+        @param submitMode mode to be used to submit the commands
+        @type str (one of 'raw' or 'paste')
+        """
+        self.__blockReadyRead = True
+        self.__pasteOn()
+        command = b"\n".join(c.encode("utf-8)") for c in commandsList)
+        self.__socket.writeTextMessage(command)
+        self.__socket.readUntil(command)
+        self.__blockReadyRead = False
+        self.__pasteOff()
+        self.executeAsyncFinished.emit()
+
+    def __pasteOn(self):
+        """
+        Private method to switch the connected device to 'paste' mode.
+
+        Note: switching to paste mode is done with synchronous writes.
+
+        @return flag indicating success
+        @rtype bool
+        """
+        if not self.__connected:
+            return False
+
+        pasteMessage = b"paste mode; Ctrl-C to cancel, Ctrl-D to finish\r\n=== "
+
+        self.__socket.writeTextMessage(b"\x02")  # end raw mode if required
+        for _i in range(3):
+            # CTRL-C three times to break out of loops
+            self.__socket.writeTextMessage(b"\r\x03")
+            # time out after 500ms if device is not responding
+        self.__socket.readAll()  # read all data and discard it
+        self.__socket.writeTextMessage(b"\r\x05")  # send CTRL-E to enter paste mode
+        self.__socket.readUntil(pasteMessage)
+
+        if self.__socket.hasTimedOut():
+            # it timed out; try it again and than fail
+            self.__socket.writeTextMessage(b"\r\x05")  # send CTRL-E again
+            self.__socket.readUntil(pasteMessage)
+            if self.__socket.hasTimedOut():
+                return False
+
+        self.__socket.readAll()  # read all data and discard it
+        return True
+
+    def __pasteOff(self):
+        """
+        Private method to switch 'paste' mode off.
+        """
+        if self.__connected:
+            self.__socket.writeTextMessage(b"\x04")  # send CTRL-D to cancel paste mode
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/eric7/MicroPython/MicroPythonWebreplSocket.py	Thu May 04 17:58:52 2023 +0200
@@ -0,0 +1,258 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2023 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing a websocket class to be connect to the MicroPython webrepl
+interface.
+"""
+
+from PyQt6.QtCore import (
+    QCoreApplication,
+    QEventLoop,
+    QMutex,
+    QTime,
+    QTimer,
+    QUrl,
+    pyqtSignal,
+    pyqtSlot,
+)
+from PyQt6.QtNetwork import QAbstractSocket
+from PyQt6.QtWebSockets import QWebSocket
+
+from eric7.EricUtilities.EricMutexLocker import EricMutexLocker
+
+
+class MicroPythonWebreplSocket(QWebSocket):
+    """
+    Class implementing a websocket client to be connected to the MicroPython webrepl
+    interface.
+
+    @signal readyRead() emitted to signal the availability of data
+    """
+
+    readyRead = pyqtSignal()
+
+    def __init__(self, timeout=10000, parent=None):
+        """
+        Constructor
+
+        @param timeout timout in milliseconds to be set
+        @type int
+        @param parent reference to the parent object
+        @type QObject
+        """
+        super().__init__(parent=parent)
+
+        self.__connected = False
+        self.__timeout = timeout  # 10s default timeout
+        self.__timedOut = False
+
+        self.__mutex = QMutex()
+        self.__buffer = b""
+        self.textMessageReceived.connect(self.__textDataReceived)
+
+    @pyqtSlot(str)
+    def __textDataReceived(self, strMessage):
+        """
+        Private slot handling a received text message.
+
+        @param strMessage received text message
+        @type str
+        """
+        with EricMutexLocker(self.__mutex):
+            self.__buffer += strMessage.encode("utf-8")
+
+        self.readyRead.emit()
+
+    def setTimeout(self, timeout):
+        """
+        Public method to set the socket timeout value.
+
+        @param timeout timout in milliseconds to be set
+        @type int
+        """
+        self.__timeout = timeout
+
+    def waitForConnected(self):
+        """
+        Public method to wait for the websocket being connected.
+
+        @return flag indicating the connect result
+        @rtype bool
+        """
+        loop = QEventLoop()
+        self.connected.connect(loop.quit)
+        self.errorOccurred.connect(loop.quit)
+
+        def timeout():
+            loop.quit()
+            self.__timedOut = True
+
+        self.__timedOut = False
+        timer = QTimer()
+        timer.setSingleShot(True)
+        timer.timeout.connect(timeout)
+        timer.start(self.__timeout)
+
+        loop.exec()
+        timer.stop()
+        if self.state() == QAbstractSocket.SocketState.ConnectedState:
+            self.__connected = True
+            return True
+        else:
+            self.__connected = False
+            return False
+
+    def connectToDevice(self, host, port):
+        """
+        Public method to connect to the given host and port.
+
+        @param host host name or IP address
+        @type str
+        @param port port number
+        @type int
+        @return flag indicating success
+        @rtype bool
+        """
+        if self.__connected:
+            self.disconnectFromDevice()
+
+        url = QUrl(f"ws://{host}:{port}")
+        self.open(url)
+        ok = self.waitForConnected()
+        if not ok:
+            return False
+
+        self.__connected = True
+        return True
+
+    def disconnect(self):
+        """
+        Public method to disconnect the websocket.
+        """
+        if self.__connected:
+            self.close()
+            self.__connected = False
+
+    def isConnected(self):
+        """
+        Public method to check the connected state of the websocket.
+
+        @return flag indicating the connected state
+        @rtype bool
+        """
+        return self.__connected
+
+    def hasTimedOut(self):
+        """
+        Public method to check, if the last 'readUntil()' has timed out.
+
+        @return flag indicating a timeout
+        @@rtype bool
+        """
+        return self.__timedOut
+
+    def login(self, password):
+        """
+        Public method to login to the webrepl console of the device.
+
+        @param password password
+        @type str
+        @return flag indicating a successful login
+        @rtype bool
+        """
+        self.readUntil(expected=b": ")
+        self.writeTextMessage(password.encode("utf-8") + b"\r")
+        data = self.readUntil([b">>> ", b"denied\r\n"])
+
+        return not data.endswith(b"denied\r\n")
+
+    def writeTextMessage(self, data):
+        """
+        Public method write some text data to the webrepl server of the connected
+        device.
+
+        @param data text data to be sent
+        @type bytes
+        """
+        self.sendTextMessage(data.decode("utf-8"))
+        self.flush()
+
+    def readAll(self, timeout=0):
+        """
+        Public method to read all available data.
+
+        @param timeout timeout in milliseconds (0 for no timeout)
+            (defaults to 0)
+        @type int (optional)
+        @return received data
+        @rtype bytes
+        """
+        QCoreApplication.processEvents(
+            QEventLoop.ProcessEventsFlag.ExcludeUserInputEvents
+        )
+        if timeout > 0:
+            # receive data for 'timeout' milliseconds
+            loop = QEventLoop()
+            QTimer.singleShot(timeout, loop.quit)
+            loop.exec()
+
+        # return all buffered data
+        with EricMutexLocker(self.__mutex):
+            data = self.__buffer
+            self.__buffer = b""
+
+        return data
+
+    def readUntil(self, expected=b"\n", size=None, timeout=0):
+        r"""
+        Public method to read data until an expected sequence is found
+        (default: \n) or a specific size is exceeded.
+
+        @param expected expected bytes sequence
+        @type bytes
+        @param size maximum data to be read (defaults to None)
+        @type int (optional)
+        @param timeout timeout in milliseconds (0 for configured default)
+            (defaults to 0)
+        @type int (optional)
+        @return bytes read from the device including the expected sequence
+        @rtype bytes
+        """
+        data = b""
+        self.__timedOut = False
+
+        if timeout == 0:
+            timeout = self.__timeout
+
+        if not isinstance(expected, list):
+            expected = [expected]
+
+        t = QTime.currentTime()
+        while True:
+            QCoreApplication.processEvents(
+                QEventLoop.ProcessEventsFlag.ExcludeUserInputEvents, 500
+            )
+            with EricMutexLocker(self.__mutex):
+                if any(e in self.__buffer for e in expected):
+                    for e in expected:
+                        index = self.__buffer.find(e)
+                        if index >= 0:
+                            endIndex = index + len(e)
+                            data = self.__buffer[:endIndex]
+                            self.__buffer = self.__buffer[endIndex:]
+                            break
+                    break
+                if size is not None and len(self.__buffer) >= size:
+                    data = self.__buffer[:size]
+                    self.__buffer = self.__buffer[size:]
+                    break
+                if t.msecsTo(QTime.currentTime()) > timeout:
+                    self.__timedOut = True
+                    data = self.__buffer
+                    self.__buffer = b""
+                    break
+
+        return data
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/eric7/MicroPython/MicroPythonWebreplUrlAddEditDialog.py	Thu May 04 17:58:52 2023 +0200
@@ -0,0 +1,135 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2023 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing a dialog to edit the parameters for a WebREPL connection.
+"""
+
+from PyQt6.QtCore import pyqtSlot
+from PyQt6.QtWidgets import QDialog, QDialogButtonBox
+
+from .Devices import getSupportedDevices
+from .Ui_MicroPythonWebreplUrlAddEditDialog import Ui_MicroPythonWebreplUrlAddEditDialog
+
+
+class MicroPythonWebreplUrlAddEditDialog(
+    QDialog, Ui_MicroPythonWebreplUrlAddEditDialog
+):
+    """
+    Class implementing a dialog to edit the parameters for a WebREPL connection.
+    """
+
+    def __init__(self, definedNames, connectionParams=None, parent=None):
+        """
+        Constructor
+
+        @param definedNames list of already define WebREPL connection names
+        @type list of str
+        @param connectionParams parameters for the WebREPL connection to be edited
+            (default to None)
+        @type tuple of (str, str, str) (optional)
+        @param parent reference to the parent widget (defaults to None)
+        @type QWidget (optional)
+        """
+        super().__init__(parent)
+        self.setupUi(self)
+
+        self.__definedNames = definedNames[:]
+
+        self.deviceTypeComboBox.addItem("", "")
+        for board, description in sorted(getSupportedDevices(), key=lambda x: x[1]):
+            self.deviceTypeComboBox.addItem(description, board)
+
+        self.nameEdit.textChanged.connect(self.__updateOkButton)
+        self.descriptionEdit.textChanged.connect(self.__updateOkButton)
+        self.hostEdit.textChanged.connect(self.__updateOkButton)
+        self.portEdit.textChanged.connect(self.__updateOkButton)
+        self.deviceTypeComboBox.currentIndexChanged.connect(self.__updateOkButton)
+
+        if connectionParams:
+            self.__editName = connectionParams[0]
+            self.__populateFields(connectionParams)
+        else:
+            self.__editName = ""
+            self.__updateOkButton()
+
+        msh = self.minimumSizeHint()
+        self.resize(max(self.width(), msh.width()), msh.height())
+
+    def __populateFields(self, params):
+        """
+        Private method to populate the various dialog fields with the given parameters.
+
+        @param params arameters for the WebREPL connection to be edited
+        @type tuple of (str, str, str)
+        """
+        self.nameEdit.setText(params[0])
+        self.descriptionEdit.setText(params[1])
+
+        url = params[2].replace("ws://", "")
+        password, hostPort = url.split("@", 1) if "@" in url else ("", url)
+        host, port = hostPort.split(":", 1) if ":" in hostPort else (hostPort, "")
+        self.hostEdit.setText(host)
+        self.portEdit.setText(port)
+        self.passwordEdit.setText(password)
+
+        typeIndex = self.deviceTypeComboBox.findData(params["device_type"])
+        self.deviceTypeComboBox.setCurrentIndex(typeIndex)
+
+    @pyqtSlot()
+    def __updateOkButton(self):
+        """
+        Private slot to update the enabled state of the OK button.
+        """
+        port = self.portEdit.text()
+        if port == "":
+            portOk = True
+        else:
+            try:
+                portNo = int(port)
+                portOk = 1024 < portNo <= 65535
+            except ValueError:
+                portOk = False
+
+        name = self.nameEdit.text()
+        nameOk = bool(name) and (
+            name == self.__editName or name not in self.__definedNames
+        )
+
+        self.buttonBox.button(QDialogButtonBox.StandardButton.Ok).setEnabled(
+            nameOk
+            and bool(self.descriptionEdit.text())
+            and bool(self.hostEdit.text())
+            and portOk
+            and bool(self.deviceTypeComboBox.currentData())
+        )
+
+    def getWebreplUrl(self):
+        """
+        Public method to retrieve the entered WebREPL connection data.
+
+        @return tuple containing the name, description, URL and device type for
+            the WebREPL connection
+        @rtype tuple of (str, str, str, str)
+        """
+        password = self.passwordEdit.text()
+        host = self.hostEdit.text()
+        port = self.portEdit.text()
+
+        if password and port:
+            url = f"ws://{password}@{host}:{port}"
+        elif password:
+            url = f"ws://{password}@{host}"
+        elif port:
+            url = f"ws://{host}:{port}"
+        else:
+            url = f"ws://{host}"
+
+        return (
+            self.nameEdit.text(),
+            self.descriptionEdit.text(),
+            url,
+            self.deviceTypeComboBox.currentData(),
+        )
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/eric7/MicroPython/MicroPythonWebreplUrlAddEditDialog.ui	Thu May 04 17:58:52 2023 +0200
@@ -0,0 +1,172 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>MicroPythonWebreplUrlAddEditDialog</class>
+ <widget class="QDialog" name="MicroPythonWebreplUrlAddEditDialog">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>400</width>
+    <height>236</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>WebREPL URL</string>
+  </property>
+  <property name="sizeGripEnabled">
+   <bool>true</bool>
+  </property>
+  <layout class="QGridLayout" name="gridLayout">
+   <item row="0" column="0">
+    <widget class="QLabel" name="label">
+     <property name="text">
+      <string>Name:</string>
+     </property>
+    </widget>
+   </item>
+   <item row="0" column="1">
+    <widget class="QLineEdit" name="nameEdit">
+     <property name="toolTip">
+      <string>Enter a unique name for the WebREPL connection.</string>
+     </property>
+     <property name="clearButtonEnabled">
+      <bool>true</bool>
+     </property>
+    </widget>
+   </item>
+   <item row="1" column="0">
+    <widget class="QLabel" name="label_2">
+     <property name="text">
+      <string>Description:</string>
+     </property>
+    </widget>
+   </item>
+   <item row="1" column="1">
+    <widget class="QLineEdit" name="descriptionEdit">
+     <property name="toolTip">
+      <string>Enter a short description to be shown in the selector.</string>
+     </property>
+     <property name="clearButtonEnabled">
+      <bool>true</bool>
+     </property>
+    </widget>
+   </item>
+   <item row="2" column="0">
+    <widget class="QLabel" name="label_3">
+     <property name="text">
+      <string>Host:</string>
+     </property>
+    </widget>
+   </item>
+   <item row="2" column="1">
+    <widget class="QLineEdit" name="hostEdit">
+     <property name="toolTip">
+      <string>Enter the host name or IPv4 address of the device.</string>
+     </property>
+     <property name="clearButtonEnabled">
+      <bool>true</bool>
+     </property>
+    </widget>
+   </item>
+   <item row="3" column="0">
+    <widget class="QLabel" name="label_4">
+     <property name="text">
+      <string>Port:</string>
+     </property>
+    </widget>
+   </item>
+   <item row="3" column="1">
+    <widget class="QLineEdit" name="portEdit">
+     <property name="toolTip">
+      <string>Enter the port of the WebREPL (empty for default port 8266).</string>
+     </property>
+     <property name="clearButtonEnabled">
+      <bool>true</bool>
+     </property>
+    </widget>
+   </item>
+   <item row="4" column="0">
+    <widget class="QLabel" name="label_5">
+     <property name="text">
+      <string>Password:</string>
+     </property>
+    </widget>
+   </item>
+   <item row="4" column="1">
+    <widget class="QLineEdit" name="passwordEdit">
+     <property name="toolTip">
+      <string>Enter the password for this device connection.</string>
+     </property>
+     <property name="clearButtonEnabled">
+      <bool>true</bool>
+     </property>
+    </widget>
+   </item>
+   <item row="5" column="0">
+    <widget class="QLabel" name="label_6">
+     <property name="text">
+      <string>Device Type:</string>
+     </property>
+    </widget>
+   </item>
+   <item row="5" column="1">
+    <widget class="QComboBox" name="deviceTypeComboBox">
+     <property name="sizePolicy">
+      <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
+       <horstretch>0</horstretch>
+       <verstretch>0</verstretch>
+      </sizepolicy>
+     </property>
+     <property name="toolTip">
+      <string>Select the device type</string>
+     </property>
+    </widget>
+   </item>
+   <item row="6" column="0" colspan="2">
+    <widget class="QDialogButtonBox" name="buttonBox">
+     <property name="orientation">
+      <enum>Qt::Horizontal</enum>
+     </property>
+     <property name="standardButtons">
+      <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
+     </property>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <resources/>
+ <connections>
+  <connection>
+   <sender>buttonBox</sender>
+   <signal>accepted()</signal>
+   <receiver>MicroPythonWebreplUrlAddEditDialog</receiver>
+   <slot>accept()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>248</x>
+     <y>254</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>157</x>
+     <y>274</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>buttonBox</sender>
+   <signal>rejected()</signal>
+   <receiver>MicroPythonWebreplUrlAddEditDialog</receiver>
+   <slot>reject()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>316</x>
+     <y>260</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>286</x>
+     <y>274</y>
+    </hint>
+   </hints>
+  </connection>
+ </connections>
+</ui>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/eric7/MicroPython/MicroPythonWebreplUrlsConfigDialog.py	Thu May 04 17:58:52 2023 +0200
@@ -0,0 +1,172 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2023 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing a dialog to edit the list of configured WebREPL URLs.
+"""
+
+from PyQt6.QtCore import Qt, pyqtSlot
+from PyQt6.QtWidgets import QDialog, QTreeWidgetItem
+
+from eric7.EricWidgets import EricMessageBox
+
+from .MicroPythonWebreplUrlAddEditDialog import MicroPythonWebreplUrlAddEditDialog
+from .Ui_MicroPythonWebreplUrlsConfigDialog import Ui_MicroPythonWebreplUrlsConfigDialog
+
+
+class MicroPythonWebreplUrlsConfigDialog(
+    QDialog, Ui_MicroPythonWebreplUrlsConfigDialog
+):
+    """
+    Class implementing a dialog to edit the list of configured WebREPL URLs.
+    """
+
+    def __init__(self, webreplDict, parent=None):
+        """
+        Constructor
+
+        @param webreplDict dictionary containing the configured WebREPL URLs
+        @type dict
+        @param parent reference to the parent widget (defaults to None)
+        @type QWidget (optional)
+        """
+        super().__init__(parent)
+        self.setupUi(self)
+
+        for name, data in webreplDict.items():
+            itm = QTreeWidgetItem(
+                self.webreplUrlsList,
+                [name, data["description"], data["url"]],
+            )
+            itm.setData(0, Qt.ItemDataRole.UserRole, data["device_type"])
+
+        self.__sortItems()
+        self.__resizeColumns()
+        self.__updateActionButtons()
+
+        self.webreplUrlsList.itemSelectionChanged.connect(self.__updateActionButtons)
+
+    @pyqtSlot()
+    def __sortItems(self):
+        """
+        Private slot to sort the list by name column (i.e. column 0).
+        """
+        self.webreplUrlsList.sortItems(0, Qt.SortOrder.AscendingOrder)
+
+    @pyqtSlot()
+    def __resizeColumns(self):
+        """
+        Private slot to resize the columns to their contents.
+        """
+        for column in range(self.webreplUrlsList.columnCount()):
+            self.webreplUrlsList.resizeColumnToContents(column)
+
+    @pyqtSlot()
+    def __updateActionButtons(self):
+        """
+        Private slot to change the enabled state of the action buttons.
+        """
+        selectedItemsCount = len(self.webreplUrlsList.selectedItems())
+        self.editButton.setEnabled(selectedItemsCount == 1)
+        self.removeButton.setEnabled(selectedItemsCount > 0)
+
+        self.removeAllButton.setEnabled(self.webreplUrlsList.topLevelItemCount() > 0)
+
+    def __definedNames(self):
+        """
+        Private method to get a list of defined connection names.
+
+        @return list of defined connection names
+        @rtype list of str
+        """
+        return [
+            self.webreplUrlsList.topLevelItem(row).text(0)
+            for row in range(self.webreplUrlsList.topLevelItemCount())
+        ]
+
+    @pyqtSlot()
+    def on_addButton_clicked(self):
+        """
+        Private slot to add a new WebREPL connection.
+        """
+        dlg = MicroPythonWebreplUrlAddEditDialog(self.__definedNames(), parent=self)
+        if dlg.exec() == QDialog.DialogCode.Accepted:
+            name, description, url, deviceType = dlg.getWebreplUrl()
+            itm = QTreeWidgetItem(self.webreplUrlsList, [name, description, url])
+            itm.setData(0, Qt.ItemDataRole.UserRole, deviceType)
+
+            self.__sortItems()
+            self.__resizeColumns()
+            self.__updateActionButtons()
+
+    @pyqtSlot()
+    def on_editButton_clicked(self):
+        """
+        Private slot to edit the selected WebREPL connection.
+        """
+        itm = self.webreplUrlsList.selectedItems()[0]
+        dlg = MicroPythonWebreplUrlAddEditDialog(
+            self.__definedNames(),
+            connectionParams=(itm.text(0), itm.text(1), itm.text(2)),
+            parent=self,
+        )
+        if dlg.exec() == QDialog.DialogCode.Accepted:
+            name, description, url, deviceType = dlg.getWebreplUrl()
+            itm.setText(0, name)
+            itm.setText(1, description)
+            itm.setText(2, url)
+            itm.setData(0, Qt.ItemDataRole.UserRole, deviceType)
+
+            self.__sortItems()
+            self.__resizeColumns()
+            self.__updateActionButtons()
+
+    @pyqtSlot()
+    def on_removeButton_clicked(self):
+        """
+        Private slot to remove the selected entries.
+        """
+        ok = EricMessageBox.yesNo(
+            self,
+            self.tr("Remove Selected WebREPL URLs"),
+            self.tr("""Shall the selected WebREPL URLs really be removed?"""),
+        )
+        if ok:
+            for itm in self.webreplUrlsList.selectedItems():
+                self.webreplUrlsList.takeTopLevelItem(
+                    self.webreplUrlsList.indexOfTopLevelItem(itm)
+                )
+                del itm
+
+    @pyqtSlot()
+    def on_removeAllButton_clicked(self):
+        """
+        Private slot to remove all entries.
+        """
+        ok = EricMessageBox.yesNo(
+            self,
+            self.tr("Remove All WebREPL URLs"),
+            self.tr("""Shall all WebREPL URLs really be removed?"""),
+        )
+        if ok:
+            self.webreplUrlsList.clear()
+
+    def getWebreplDict(self):
+        """
+        Public method to retrieve a dictionary containing the configured WebREPL URLs.
+
+        @return dictionary containing the configured WebREPL URLs
+        @rtype dict
+        """
+        webreplDict = {}
+        for row in range(self.webreplUrlsList.topLevelItemCount()):
+            itm = self.webreplUrlsList.topLevelItem(row)
+            webreplDict[itm.text(0)] = {
+                "description": itm.text(1),
+                "url": itm.text(2),
+                "device_type": itm.data(0, Qt.ItemDataRole.UserRole),
+            }
+
+        return webreplDict
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/eric7/MicroPython/MicroPythonWebreplUrlsConfigDialog.ui	Thu May 04 17:58:52 2023 +0200
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>MicroPythonWebreplUrlsConfigDialog</class>
+ <widget class="QDialog" name="MicroPythonWebreplUrlsConfigDialog">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>713</width>
+    <height>516</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>WebREPL URLs</string>
+  </property>
+  <property name="sizeGripEnabled">
+   <bool>true</bool>
+  </property>
+  <layout class="QGridLayout" name="gridLayout">
+   <item row="0" column="0">
+    <widget class="QTreeWidget" name="webreplUrlsList">
+     <property name="editTriggers">
+      <set>QAbstractItemView::NoEditTriggers</set>
+     </property>
+     <property name="selectionMode">
+      <enum>QAbstractItemView::ExtendedSelection</enum>
+     </property>
+     <property name="rootIsDecorated">
+      <bool>false</bool>
+     </property>
+     <property name="itemsExpandable">
+      <bool>false</bool>
+     </property>
+     <property name="sortingEnabled">
+      <bool>true</bool>
+     </property>
+     <column>
+      <property name="text">
+       <string>Name</string>
+      </property>
+     </column>
+     <column>
+      <property name="text">
+       <string>Description</string>
+      </property>
+     </column>
+     <column>
+      <property name="text">
+       <string>URL</string>
+      </property>
+     </column>
+    </widget>
+   </item>
+   <item row="0" column="1">
+    <layout class="QVBoxLayout" name="verticalLayout">
+     <item>
+      <widget class="QPushButton" name="addButton">
+       <property name="toolTip">
+        <string>Press to add a new entry.</string>
+       </property>
+       <property name="text">
+        <string>Add...</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QPushButton" name="editButton">
+       <property name="toolTip">
+        <string>Press to edit the selected entry.</string>
+       </property>
+       <property name="text">
+        <string>Edit...</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QPushButton" name="removeButton">
+       <property name="toolTip">
+        <string>Press to remove the selected entries.</string>
+       </property>
+       <property name="text">
+        <string>Remove</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QPushButton" name="removeAllButton">
+       <property name="toolTip">
+        <string>Press to remove all entries.</string>
+       </property>
+       <property name="text">
+        <string>Remove All</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <spacer name="verticalSpacer">
+       <property name="orientation">
+        <enum>Qt::Vertical</enum>
+       </property>
+       <property name="sizeHint" stdset="0">
+        <size>
+         <width>20</width>
+         <height>40</height>
+        </size>
+       </property>
+      </spacer>
+     </item>
+    </layout>
+   </item>
+   <item row="2" column="0" colspan="2">
+    <widget class="QDialogButtonBox" name="buttonBox">
+     <property name="orientation">
+      <enum>Qt::Horizontal</enum>
+     </property>
+     <property name="standardButtons">
+      <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
+     </property>
+    </widget>
+   </item>
+   <item row="1" column="0" colspan="2">
+    <widget class="QLabel" name="label">
+     <property name="text">
+      <string>&lt;b&gt;Note:&lt;/b&gt; The name of an entry must be unique amongst the list.</string>
+     </property>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <resources/>
+ <connections>
+  <connection>
+   <sender>buttonBox</sender>
+   <signal>accepted()</signal>
+   <receiver>MicroPythonWebreplUrlsConfigDialog</receiver>
+   <slot>accept()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>248</x>
+     <y>254</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>157</x>
+     <y>274</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>buttonBox</sender>
+   <signal>rejected()</signal>
+   <receiver>MicroPythonWebreplUrlsConfigDialog</receiver>
+   <slot>reject()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>316</x>
+     <y>260</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>286</x>
+     <y>274</y>
+    </hint>
+   </hints>
+  </connection>
+ </connections>
+</ui>
--- a/src/eric7/MicroPython/MicroPythonWidget.py	Tue May 02 11:39:09 2023 +0200
+++ b/src/eric7/MicroPython/MicroPythonWidget.py	Thu May 04 17:58:52 2023 +0200
@@ -10,21 +10,14 @@
 import contextlib
 import functools
 import os
-import re
 import time
 
-from PyQt6.QtCore import QEvent, QPoint, Qt, pyqtSignal, pyqtSlot
-from PyQt6.QtGui import QBrush, QClipboard, QColor, QKeySequence, QTextCursor
+from PyQt6.QtCore import Qt, pyqtSignal, pyqtSlot
 from PyQt6.QtWidgets import (
-    QApplication,
     QDialog,
-    QHBoxLayout,
     QInputDialog,
-    QLabel,
     QLineEdit,
     QMenu,
-    QSizePolicy,
-    QTextEdit,
     QToolButton,
     QWidget,
 )
@@ -37,7 +30,6 @@
 from eric7.EricWidgets.EricListSelectionDialog import EricListSelectionDialog
 from eric7.EricWidgets.EricPlainTextDialog import EricPlainTextDialog
 from eric7.EricWidgets.EricProcessDialog import EricProcessDialog
-from eric7.EricWidgets.EricZoomWidget import EricZoomWidget
 from eric7.SystemUtilities import FileSystemUtilities, OSUtilities
 from eric7.UI.Info import BugAddress
 
@@ -46,6 +38,7 @@
 from .EthernetDialogs.EthernetController import EthernetController
 from .MicroPythonFileManager import MicroPythonFileManager
 from .MicroPythonFileManagerWidget import MicroPythonFileManagerWidget
+from .MicroPythonWebreplDeviceInterface import MicroPythonWebreplDeviceInterface
 from .Ui_MicroPythonWidget import Ui_MicroPythonWidget
 from .WifiDialogs.WifiController import WifiController
 
@@ -57,142 +50,12 @@
     HAS_QTCHART = False
 
 try:
-    from .MicroPythonDeviceInterface import MicroPythonDeviceInterface
+    from .MicroPythonSerialDeviceInterface import MicroPythonSerialDeviceInterface
 
     HAS_QTSERIALPORT = True
 except ImportError:
     HAS_QTSERIALPORT = False
 
-# ANSI Colors (see https://en.wikipedia.org/wiki/ANSI_escape_code)
-AnsiColorSchemes = {
-    "Windows 7": {
-        0: QBrush(QColor(0, 0, 0)),
-        1: QBrush(QColor(128, 0, 0)),
-        2: QBrush(QColor(0, 128, 0)),
-        3: QBrush(QColor(128, 128, 0)),
-        4: QBrush(QColor(0, 0, 128)),
-        5: QBrush(QColor(128, 0, 128)),
-        6: QBrush(QColor(0, 128, 128)),
-        7: QBrush(QColor(192, 192, 192)),
-        10: QBrush(QColor(128, 128, 128)),
-        11: QBrush(QColor(255, 0, 0)),
-        12: QBrush(QColor(0, 255, 0)),
-        13: QBrush(QColor(255, 255, 0)),
-        14: QBrush(QColor(0, 0, 255)),
-        15: QBrush(QColor(255, 0, 255)),
-        16: QBrush(QColor(0, 255, 255)),
-        17: QBrush(QColor(255, 255, 255)),
-    },
-    "Windows 10": {
-        0: QBrush(QColor(12, 12, 12)),
-        1: QBrush(QColor(197, 15, 31)),
-        2: QBrush(QColor(19, 161, 14)),
-        3: QBrush(QColor(193, 156, 0)),
-        4: QBrush(QColor(0, 55, 218)),
-        5: QBrush(QColor(136, 23, 152)),
-        6: QBrush(QColor(58, 150, 221)),
-        7: QBrush(QColor(204, 204, 204)),
-        10: QBrush(QColor(118, 118, 118)),
-        11: QBrush(QColor(231, 72, 86)),
-        12: QBrush(QColor(22, 198, 12)),
-        13: QBrush(QColor(249, 241, 165)),
-        14: QBrush(QColor(59, 12, 255)),
-        15: QBrush(QColor(180, 0, 158)),
-        16: QBrush(QColor(97, 214, 214)),
-        17: QBrush(QColor(242, 242, 242)),
-    },
-    "PuTTY": {
-        0: QBrush(QColor(0, 0, 0)),
-        1: QBrush(QColor(187, 0, 0)),
-        2: QBrush(QColor(0, 187, 0)),
-        3: QBrush(QColor(187, 187, 0)),
-        4: QBrush(QColor(0, 0, 187)),
-        5: QBrush(QColor(187, 0, 187)),
-        6: QBrush(QColor(0, 187, 187)),
-        7: QBrush(QColor(187, 187, 187)),
-        10: QBrush(QColor(85, 85, 85)),
-        11: QBrush(QColor(255, 85, 85)),
-        12: QBrush(QColor(85, 255, 85)),
-        13: QBrush(QColor(255, 255, 85)),
-        14: QBrush(QColor(85, 85, 255)),
-        15: QBrush(QColor(255, 85, 255)),
-        16: QBrush(QColor(85, 255, 255)),
-        17: QBrush(QColor(255, 255, 255)),
-    },
-    "xterm": {
-        0: QBrush(QColor(0, 0, 0)),
-        1: QBrush(QColor(205, 0, 0)),
-        2: QBrush(QColor(0, 205, 0)),
-        3: QBrush(QColor(205, 205, 0)),
-        4: QBrush(QColor(0, 0, 238)),
-        5: QBrush(QColor(205, 0, 205)),
-        6: QBrush(QColor(0, 205, 205)),
-        7: QBrush(QColor(229, 229, 229)),
-        10: QBrush(QColor(127, 127, 127)),
-        11: QBrush(QColor(255, 0, 0)),
-        12: QBrush(QColor(0, 255, 0)),
-        13: QBrush(QColor(255, 255, 0)),
-        14: QBrush(QColor(0, 0, 255)),
-        15: QBrush(QColor(255, 0, 255)),
-        16: QBrush(QColor(0, 255, 255)),
-        17: QBrush(QColor(255, 255, 255)),
-    },
-    "Ubuntu": {
-        0: QBrush(QColor(1, 1, 1)),
-        1: QBrush(QColor(222, 56, 43)),
-        2: QBrush(QColor(57, 181, 74)),
-        3: QBrush(QColor(255, 199, 6)),
-        4: QBrush(QColor(0, 11, 184)),
-        5: QBrush(QColor(118, 38, 113)),
-        6: QBrush(QColor(44, 181, 233)),
-        7: QBrush(QColor(204, 204, 204)),
-        10: QBrush(QColor(128, 128, 128)),
-        11: QBrush(QColor(255, 0, 0)),
-        12: QBrush(QColor(0, 255, 0)),
-        13: QBrush(QColor(255, 255, 0)),
-        14: QBrush(QColor(0, 0, 255)),
-        15: QBrush(QColor(255, 0, 255)),
-        16: QBrush(QColor(0, 255, 255)),
-        17: QBrush(QColor(255, 255, 255)),
-    },
-    "Ubuntu (dark)": {
-        0: QBrush(QColor(96, 96, 96)),
-        1: QBrush(QColor(235, 58, 45)),
-        2: QBrush(QColor(57, 181, 74)),
-        3: QBrush(QColor(255, 199, 29)),
-        4: QBrush(QColor(25, 56, 230)),
-        5: QBrush(QColor(200, 64, 193)),
-        6: QBrush(QColor(48, 200, 255)),
-        7: QBrush(QColor(204, 204, 204)),
-        10: QBrush(QColor(128, 128, 128)),
-        11: QBrush(QColor(255, 0, 0)),
-        12: QBrush(QColor(0, 255, 0)),
-        13: QBrush(QColor(255, 255, 0)),
-        14: QBrush(QColor(0, 0, 255)),
-        15: QBrush(QColor(255, 0, 255)),
-        16: QBrush(QColor(0, 255, 255)),
-        17: QBrush(QColor(255, 255, 255)),
-    },
-    "Breeze (dark)": {
-        0: QBrush(QColor(35, 38, 39)),
-        1: QBrush(QColor(237, 21, 21)),
-        2: QBrush(QColor(17, 209, 22)),
-        3: QBrush(QColor(246, 116, 0)),
-        4: QBrush(QColor(29, 153, 243)),
-        5: QBrush(QColor(155, 89, 182)),
-        6: QBrush(QColor(26, 188, 156)),
-        7: QBrush(QColor(252, 252, 252)),
-        10: QBrush(QColor(127, 140, 141)),
-        11: QBrush(QColor(192, 57, 43)),
-        12: QBrush(QColor(28, 220, 154)),
-        13: QBrush(QColor(253, 188, 75)),
-        14: QBrush(QColor(61, 174, 233)),
-        15: QBrush(QColor(142, 68, 173)),
-        16: QBrush(QColor(22, 160, 133)),
-        17: QBrush(QColor(255, 255, 255)),
-    },
-}
-
 
 class MicroPythonWidget(QWidget, Ui_MicroPythonWidget):
     """
@@ -202,15 +65,14 @@
         connection for further processing
     """
 
-    ZoomMin = -10
-    ZoomMax = 20
-
     DeviceTypeRole = Qt.ItemDataRole.UserRole
     DeviceBoardRole = Qt.ItemDataRole.UserRole + 1
     DevicePortRole = Qt.ItemDataRole.UserRole + 2
     DeviceVidRole = Qt.ItemDataRole.UserRole + 3
     DevicePidRole = Qt.ItemDataRole.UserRole + 4
     DeviceSerNoRole = Qt.ItemDataRole.UserRole + 5
+    DeviceInterfaceTypeRole = Qt.ItemDataRole.UserRole + 6
+    DeviceWebreplUrlRole = Qt.ItemDataRole.UserRole + 7
 
     dataReceived = pyqtSignal(bytes)
 
@@ -254,34 +116,14 @@
 
         self.deviceIconLabel.setPixmap(Devices.getDeviceIcon("", False))
 
-        self.checkButton.setIcon(EricPixmapCache.getIcon("question"))
+        self.repopulateButton.setIcon(EricPixmapCache.getIcon("question"))
+        self.webreplConfigButton.setIcon(EricPixmapCache.getIcon("edit"))
         self.runButton.setIcon(EricPixmapCache.getIcon("start"))
         self.replButton.setIcon(EricPixmapCache.getIcon("terminal"))
         self.filesButton.setIcon(EricPixmapCache.getIcon("filemanager"))
         self.chartButton.setIcon(EricPixmapCache.getIcon("chart"))
         self.connectButton.setIcon(EricPixmapCache.getIcon("linkConnect"))
 
-        self.__zoomLayout = QHBoxLayout()
-        self.__osdLabel = QLabel()
-        self.__osdLabel.setSizePolicy(
-            QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Preferred
-        )
-        self.__zoomLayout.addWidget(self.__osdLabel)
-
-        self.__zoom0 = self.replEdit.fontPointSize()
-        self.__zoomWidget = EricZoomWidget(
-            EricPixmapCache.getPixmap("zoomOut"),
-            EricPixmapCache.getPixmap("zoomIn"),
-            EricPixmapCache.getPixmap("zoomReset"),
-            self,
-        )
-        self.__zoomLayout.addWidget(self.__zoomWidget)
-        self.layout().insertLayout(self.layout().count() - 1, self.__zoomLayout)
-        self.__zoomWidget.setMinimum(self.ZoomMin)
-        self.__zoomWidget.setMaximum(self.ZoomMax)
-        self.__zoomWidget.valueChanged.connect(self.__doZoom)
-        self.__currentZoom = 0
-
         self.__fileManager = None
         self.__fileManagerWidget = None
         self.__chartWidget = None
@@ -290,19 +132,16 @@
         self.__lastPort = None
         self.__lastDeviceType = None
 
-        if HAS_QTSERIALPORT:
-            self.__interface = MicroPythonDeviceInterface(self)
-        else:
-            self.__interface = None
+        self.__lastWebreplUrl = None
+
+        self.__interface = None
         self.__device = None
         self.__connected = False
         self.__linkConnected = False
         self.__setConnected(False)
 
-        self.__replBuffer = b""
-
         if not HAS_QTSERIALPORT:
-            self.replEdit.setHtml(
+            self.replWidget.replEdit().setHtml(
                 self.tr(
                     "<h3>The QtSerialPort package is not available.<br/>"
                     "MicroPython support is deactivated.</h3>"
@@ -311,27 +150,14 @@
             self.setEnabled(False)
             return
 
-        self.__vt100Re = re.compile(
-            r"(?P<count>\d*)(?P<color>(?:;?\d*)*)(?P<action>[ABCDKm])"
-        )
-
         self.__populateDeviceTypeComboBox()
 
-        self.replEdit.installEventFilter(self)
-        # Hack to intercept middle button paste
-        self.__origReplEditMouseReleaseEvent = self.replEdit.mouseReleaseEvent
-        self.replEdit.mouseReleaseEvent = self.__replEditMouseReleaseEvent
-
-        self.replEdit.customContextMenuRequested.connect(self.__showContextMenu)
+        self.repopulateButton.clicked.connect(self.__populateDeviceTypeComboBox)
+        self.webreplConfigButton.clicked.connect(self.__configureWebreplUrls)
         self.__ui.preferencesChanged.connect(self.__handlePreferencesChanged)
-        self.__ui.preferencesChanged.connect(self.__interface.handlePreferencesChanged)
 
         self.__handlePreferencesChanged()
 
-        charFormat = self.replEdit.currentCharFormat()
-        self.DefaultForeground = charFormat.foreground()
-        self.DefaultBackground = charFormat.background()
-
     def __populateDeviceTypeComboBox(self):
         """
         Private method to populate the device type selector.
@@ -345,7 +171,7 @@
         devices, unknownDevices, unknownPorts = Devices.getFoundDevices()
         if devices:
             supportedMessage = self.tr(
-                "%n supported device(s) detected.", "", len(devices)
+                "%n supported serial device(s) detected.", "", len(devices)
             )
 
             for index, (
@@ -376,9 +202,12 @@
                 self.deviceTypeComboBox.setItemData(
                     index, serialNumber, self.DeviceSerNoRole
                 )
+                self.deviceTypeComboBox.setItemData(
+                    index, "serial", self.DeviceInterfaceTypeRole
+                )
 
         else:
-            supportedMessage = self.tr("No supported devices detected.")
+            supportedMessage = self.tr("No supported serial devices detected.")
 
         self.__unknownPorts = unknownPorts
         if self.__unknownPorts:
@@ -398,7 +227,33 @@
         else:
             unknownMessage = ""
 
-        self.deviceInfoLabel.setText(supportedMessage + unknownMessage)
+        # add WebREPL entries
+        self.deviceTypeComboBox.insertSeparator(self.deviceTypeComboBox.count())
+        self.deviceTypeComboBox.addItem(self.tr("WebREPL (manual)"))
+        index = self.deviceTypeComboBox.count() - 1
+        self.deviceTypeComboBox.setItemData(
+            index, "webrepl", self.DeviceInterfaceTypeRole
+        )
+        webreplUrlsDict = Preferences.getMicroPython("WebreplUrls")
+        for name in sorted(webreplUrlsDict):
+            self.deviceTypeComboBox.addItem(webreplUrlsDict[name]["description"])
+            index = self.deviceTypeComboBox.count() - 1
+            self.deviceTypeComboBox.setItemData(
+                index, webreplUrlsDict[name]["device_type"], self.DeviceTypeRole
+            )
+            self.deviceTypeComboBox.setItemData(
+                index, "webrepl", self.DeviceInterfaceTypeRole
+            )
+            self.deviceTypeComboBox.setItemData(
+                index, webreplUrlsDict[name]["url"], self.DeviceWebreplUrlRole
+            )
+        webreplMessage = (
+            self.tr("\n%n WebREPL connection(s) defined.", "", len(webreplUrlsDict))
+            if webreplUrlsDict
+            else ""
+        )
+
+        self.deviceInfoLabel.setText(supportedMessage + unknownMessage + webreplMessage)
 
         index = self.deviceTypeComboBox.findText(
             currentDevice, Qt.MatchFlag.MatchExactly
@@ -467,20 +322,31 @@
         """
         Private slot to handle a change in preferences.
         """
-        self.__colorScheme = Preferences.getMicroPython("ColorScheme")
+        self.replWidget.replEdit().handlePreferencesChanged()
 
-        self.__font = Preferences.getEditorOtherFonts("MonospacedFont")
-        self.replEdit.setFontFamily(self.__font.family())
-        self.replEdit.setFontPointSize(self.__font.pointSize())
-
-        if Preferences.getMicroPython("ReplLineWrap"):
-            self.replEdit.setLineWrapMode(QTextEdit.LineWrapMode.WidgetWidth)
-        else:
-            self.replEdit.setLineWrapMode(QTextEdit.LineWrapMode.NoWrap)
+        if self.__interface is not None:
+            self.__interface.handlePreferencesChanged
 
         if self.__chartWidget is not None:
             self.__chartWidget.preferencesChanged()
 
+    @pyqtSlot()
+    def __configureWebreplUrls(self):
+        """
+        Private slot to configure the list of selectable WebREPL URLs.
+        """
+        from .MicroPythonWebreplUrlsConfigDialog import (
+            MicroPythonWebreplUrlsConfigDialog,
+        )
+
+        webreplUrlsDict = Preferences.getMicroPython("WebreplUrls")
+        dlg = MicroPythonWebreplUrlsConfigDialog(webreplUrlsDict)
+        if dlg.exec() == QDialog.DialogCode.Accepted:
+            webreplUrlsDict = dlg.getWebreplDict()
+            Preferences.setMicroPython("WebreplUrls", webreplUrlsDict)
+
+            self.__populateDeviceTypeComboBox()
+
     def deviceInterface(self):
         """
         Public method to get a reference to the device interface object.
@@ -529,7 +395,7 @@
             pid = self.deviceTypeComboBox.itemData(index, self.DevicePidRole)
             serNo = self.deviceTypeComboBox.itemData(index, self.DeviceSerNoRole)
 
-            if deviceType or (pid is not None and pid is not None):
+            if deviceType or (vid is not None and pid is not None):
                 deviceWorkspace = (
                     self.__device.getWorkspace() if self.__device is not None else None
                 )
@@ -544,13 +410,6 @@
             else:
                 self.__device = None
 
-    @pyqtSlot()
-    def on_checkButton_clicked(self):
-        """
-        Private slot to check for connected devices.
-        """
-        self.__populateDeviceTypeComboBox()
-
     def setActionButtons(self, **kwargs):
         """
         Public method to set the enabled state of the various action buttons.
@@ -570,50 +429,6 @@
                 kwargs["chart"] and HAS_QTCHART and self.__connected
             )
 
-    @pyqtSlot(QPoint)
-    def __showContextMenu(self, pos):
-        """
-        Private slot to show the REPL context menu.
-
-        @param pos position to show the menu at
-        @type QPoint
-        """
-        if OSUtilities.isMacPlatform():
-            copyKeys = QKeySequence("Ctrl+C")
-            pasteKeys = QKeySequence("Ctrl+V")
-            selectAllKeys = QKeySequence("Ctrl+A")
-        else:
-            copyKeys = QKeySequence("Ctrl+Shift+C")
-            pasteKeys = QKeySequence("Ctrl+Shift+V")
-            selectAllKeys = QKeySequence("Ctrl+Shift+A")
-
-        menu = QMenu(self)
-        menu.addAction(
-            EricPixmapCache.getIcon("editDelete"), self.tr("Clear"), self.__clear
-        ).setEnabled(bool(self.replEdit.toPlainText()))
-        menu.addSeparator()
-        menu.addAction(
-            EricPixmapCache.getIcon("editCopy"),
-            self.tr("Copy"),
-            copyKeys,
-            self.replEdit.copy,
-        ).setEnabled(self.replEdit.textCursor().hasSelection())
-        menu.addAction(
-            EricPixmapCache.getIcon("editPaste"),
-            self.tr("Paste"),
-            pasteKeys,
-            self.__paste,
-        ).setEnabled(self.replEdit.canPaste() and self.__connected)
-        menu.addSeparator()
-        menu.addAction(
-            EricPixmapCache.getIcon("editSelectAll"),
-            self.tr("Select All"),
-            selectAllKeys,
-            self.replEdit.selectAll,
-        ).setEnabled(bool(self.replEdit.toPlainText()))
-
-        menu.exec(self.replEdit.mapToGlobal(pos))
-
     def __setConnected(self, connected):
         """
         Private method to set the connection status LED.
@@ -622,7 +437,7 @@
         @type bool
         """
         self.__connected = connected
-        self.__linkConnected = self.__interface.isConnected()
+        self.__linkConnected = bool(self.__interface) and self.__interface.isConnected()
 
         self.deviceConnectedLed.setOn(self.__linkConnected)
         if self.__fileManagerWidget:
@@ -708,8 +523,10 @@
                 )
                 return
 
-            self.replEdit.clear()
-            self.__interface.dataReceived.connect(self.__processData)
+            self.replWidget.replEdit().clear()
+            self.__interface.dataReceived.connect(
+                self.replWidget.replEdit().processData
+            )
 
             if not self.__interface.isConnected():
                 self.__connectToDevice()
@@ -720,10 +537,13 @@
                     self.__interface.write(b"\x03")
 
             self.__device.setRepl(True)
-            self.replEdit.setFocus(Qt.FocusReason.OtherFocusReason)
+            self.replWidget.replEdit().setFocus(Qt.FocusReason.OtherFocusReason)
         else:
             with contextlib.suppress(TypeError):
-                self.__interface.dataReceived.disconnect(self.__processData)
+                if self.__interface is not None:
+                    self.__interface.dataReceived.disconnect(
+                        self.replWidget.replEdit().processData
+                    )
             if not self.chartButton.isChecked() and not self.filesButton.isChecked():
                 self.__disconnectFromDevice()
             self.__device.setRepl(False)
@@ -735,7 +555,7 @@
         Private slot to connect to the selected device or disconnect from the
         currently connected device.
         """
-        self.__osdLabel.clear()
+        self.replWidget.clearOSD()
         if self.__linkConnected:
             with EricOverrideCursor():
                 self.__disconnectFromDevice()
@@ -750,372 +570,6 @@
             with EricOverrideCursor():
                 self.__connectToDevice(withAutostart=True)
 
-    @pyqtSlot()
-    def __clear(self):
-        """
-        Private slot to clear the REPL pane.
-        """
-        self.replEdit.clear()
-        self.__interface.isConnected() and self.__interface.write(b"\r")
-
-    @pyqtSlot()
-    def __paste(self, mode=QClipboard.Mode.Clipboard):
-        """
-        Private slot to perform a paste operation.
-
-        @param mode paste mode (defaults to QClipboard.Mode.Clipboard)
-        @type QClipboard.Mode (optional)
-        """
-        # add support for paste by mouse middle button
-        clipboard = QApplication.clipboard()
-        if clipboard:
-            pasteText = clipboard.text(mode=mode)
-            if pasteText:
-                pasteText = pasteText.replace("\n\r", "\r")
-                pasteText = pasteText.replace("\n", "\r")
-                if self.__interface.isConnected():
-                    self.__interface.write(b"\x05")
-                    self.__interface.write(pasteText.encode("utf-8"))
-                    self.__interface.write(b"\x04")
-
-    def eventFilter(self, obj, evt):
-        """
-        Public method to process events for the REPL pane.
-
-        @param obj reference to the object the event was meant for
-        @type QObject
-        @param evt reference to the event object
-        @type QEvent
-        @return flag to indicate that the event was handled
-        @rtype bool
-        """
-        if obj is self.replEdit and evt.type() == QEvent.Type.KeyPress:
-            # handle the key press event on behalf of the REPL pane
-            key = evt.key()
-            msg = bytes(evt.text(), "utf8")
-            if key == Qt.Key.Key_Backspace:
-                msg = b"\b"
-            elif key == Qt.Key.Key_Delete:
-                msg = b"\x1B[\x33\x7E"
-            elif key == Qt.Key.Key_Up:
-                msg = b"\x1B[A"
-            elif key == Qt.Key.Key_Down:
-                msg = b"\x1B[B"
-            elif key == Qt.Key.Key_Right:
-                msg = b"\x1B[C"
-            elif key == Qt.Key.Key_Left:
-                msg = b"\x1B[D"
-            elif key == Qt.Key.Key_Home:
-                msg = b"\x1B[H"
-            elif key == Qt.Key.Key_End:
-                msg = b"\x1B[F"
-            elif (
-                OSUtilities.isMacPlatform()
-                and evt.modifiers() == Qt.KeyboardModifier.MetaModifier
-            ) or (
-                not OSUtilities.isMacPlatform()
-                and evt.modifiers() == Qt.KeyboardModifier.ControlModifier
-            ):
-                if Qt.Key.Key_A <= key <= Qt.Key.Key_Z:
-                    # devices treat an input of \x01 as Ctrl+A, etc.
-                    msg = bytes([1 + key - Qt.Key.Key_A])
-            elif evt.modifiers() == (
-                Qt.KeyboardModifier.ControlModifier | Qt.KeyboardModifier.ShiftModifier
-            ) or (
-                OSUtilities.isMacPlatform()
-                and evt.modifiers() == Qt.KeyboardModifier.ControlModifier
-            ):
-                if key == Qt.Key.Key_C:
-                    self.replEdit.copy()
-                    msg = b""
-                elif key == Qt.Key.Key_V:
-                    self.__paste()
-                    msg = b""
-                elif key == Qt.Key.Key_A:
-                    self.replEdit.selectAll()
-                    msg = b""
-            elif key in (Qt.Key.Key_Return, Qt.Key.Key_Enter):
-                tc = self.replEdit.textCursor()
-                tc.movePosition(QTextCursor.MoveOperation.EndOfLine)
-                self.replEdit.setTextCursor(tc)
-            self.__interface.isConnected() and self.__interface.write(msg)
-            return True
-        else:
-            # standard event processing
-            return super().eventFilter(obj, evt)
-
-    def __replEditMouseReleaseEvent(self, evt):
-        """
-        Private method handling mouse release events for the replEdit widget.
-
-        Note: this is a hack because QTextEdit does not allow filtering of
-        QEvent.Type.MouseButtonRelease. To make middle button paste work, we
-        had to intercept the protected event method (some kind of
-        reimplementing it).
-
-        @param evt reference to the event object
-        @type QMouseEvent
-        """
-        if evt.button() == Qt.MouseButton.MiddleButton:
-            self.__paste(mode=QClipboard.Mode.Selection)
-            msg = b""
-            if self.__interface.isConnected():
-                self.__interface.write(msg)
-            evt.accept()
-        else:
-            self.__origReplEditMouseReleaseEvent(evt)
-
-    def __processData(self, data):
-        """
-        Private slot to process bytes received from the device.
-
-        @param data bytes received from the device
-        @type bytes
-        """
-        tc = self.replEdit.textCursor()
-        # the text cursor must be on the last line
-        while tc.movePosition(QTextCursor.MoveOperation.Down):
-            pass
-
-        # set the font
-        charFormat = tc.charFormat()
-        charFormat.setFontFamilies([self.__font.family()])
-        charFormat.setFontPointSize(self.__font.pointSize())
-        tc.setCharFormat(charFormat)
-
-        # add received data to the buffered one
-        data = self.__replBuffer + data
-
-        index = 0
-        while index < len(data):
-            if data[index] == 8:  # \b
-                tc.movePosition(QTextCursor.MoveOperation.Left)
-                self.replEdit.setTextCursor(tc)
-            elif data[index] in (4, 13):  # EOT, \r
-                pass
-            elif len(data) > index + 1 and data[index] == 27 and data[index + 1] == 91:
-                # VT100 cursor command detected: <Esc>[
-                index += 2  # move index to after the [
-                match = self.__vt100Re.search(
-                    data[index:].decode("utf-8", errors="replace")
-                )
-                if match:
-                    # move to last position in control sequence
-                    # ++ will be done at end of loop
-                    index += match.end() - 1
-
-                    action = match.group("action")
-                    if action in "ABCD":
-                        if match.group("count") == "":
-                            count = 1
-                        else:
-                            count = int(match.group("count"))
-
-                        if action == "A":  # up
-                            tc.movePosition(QTextCursor.MoveOperation.Up, n=count)
-                            self.replEdit.setTextCursor(tc)
-                        elif action == "B":  # down
-                            tc.movePosition(QTextCursor.MoveOperation.Down, n=count)
-                            self.replEdit.setTextCursor(tc)
-                        elif action == "C":  # right
-                            tc.movePosition(QTextCursor.MoveOperation.Right, n=count)
-                            self.replEdit.setTextCursor(tc)
-                        elif action == "D":  # left
-                            tc.movePosition(QTextCursor.MoveOperation.Left, n=count)
-                            self.replEdit.setTextCursor(tc)
-                    elif action == "K":  # delete things
-                        if match.group("count") in ("", "0"):
-                            # delete to end of line
-                            tc.movePosition(
-                                QTextCursor.MoveOperation.EndOfLine,
-                                mode=QTextCursor.MoveMode.KeepAnchor,
-                            )
-                            tc.removeSelectedText()
-                            self.replEdit.setTextCursor(tc)
-                        elif match.group("count") == "1":
-                            # delete to beginning of line
-                            tc.movePosition(
-                                QTextCursor.MoveOperation.StartOfLine,
-                                mode=QTextCursor.MoveMode.KeepAnchor,
-                            )
-                            tc.removeSelectedText()
-                            self.replEdit.setTextCursor(tc)
-                        elif match.group("count") == "2":
-                            # delete whole line
-                            tc.movePosition(QTextCursor.MoveOperation.EndOfLine)
-                            tc.movePosition(
-                                QTextCursor.MoveOperation.StartOfLine,
-                                mode=QTextCursor.MoveMode.KeepAnchor,
-                            )
-                            tc.removeSelectedText()
-                            self.replEdit.setTextCursor(tc)
-                    elif action == "m":
-                        self.__setCharFormat(match.group(0)[:-1].split(";"), tc)
-            elif (
-                len(data) > index + 1
-                and data[index] == 27
-                and data[index + 1 : index + 4] == b"]0;"
-            ):
-                if b"\x1b\\" in data[index + 4 :]:
-                    # 'set window title' command detected: <Esc>]0;...<Esc>\
-                    # __IGNORE_WARNING_M891__
-                    titleData = data[index + 4 :].split(b"\x1b\\")[0]
-                    title = titleData.decode()
-                    index += len(titleData) + 5  # one more is done at the end
-                    self.__osdLabel.setText(title)
-                else:
-                    # data is incomplete; buffer and stop processing
-                    self.__replBuffer = data[index:]
-                    return
-            else:
-                tc.deleteChar()
-                self.replEdit.setTextCursor(tc)
-                self.replEdit.insertPlainText(chr(data[index]))
-
-            index += 1
-
-        self.replEdit.ensureCursorVisible()
-        self.__replBuffer = b""
-
-    def __setCharFormat(self, formatCodes, textCursor):
-        """
-        Private method setting the current text format of the REPL pane based
-        on the passed ANSI codes.
-
-        Following codes are used:
-        <ul>
-        <li>0: Reset</li>
-        <li>1: Bold font (weight 75)</li>
-        <li>2: Light font (weight 25)</li>
-        <li>3: Italic font</li>
-        <li>4: Underlined font</li>
-        <li>9: Strikeout font</li>
-        <li>21: Bold off (weight 50)</li>
-        <li>22: Light off (weight 50)</li>
-        <li>23: Italic off</li>
-        <li>24: Underline off</li>
-        <li>29: Strikeout off</li>
-        <li>30: foreground Black</li>
-        <li>31: foreground Dark Red</li>
-        <li>32: foreground Dark Green</li>
-        <li>33: foreground Dark Yellow</li>
-        <li>34: foreground Dark Blue</li>
-        <li>35: foreground Dark Magenta</li>
-        <li>36: foreground Dark Cyan</li>
-        <li>37: foreground Light Gray</li>
-        <li>39: reset foreground to default</li>
-        <li>40: background Black</li>
-        <li>41: background Dark Red</li>
-        <li>42: background Dark Green</li>
-        <li>43: background Dark Yellow</li>
-        <li>44: background Dark Blue</li>
-        <li>45: background Dark Magenta</li>
-        <li>46: background Dark Cyan</li>
-        <li>47: background Light Gray</li>
-        <li>49: reset background to default</li>
-        <li>53: Overlined font</li>
-        <li>55: Overline off</li>
-        <li>90: bright foreground Dark Gray</li>
-        <li>91: bright foreground Red</li>
-        <li>92: bright foreground Green</li>
-        <li>93: bright foreground Yellow</li>
-        <li>94: bright foreground Blue</li>
-        <li>95: bright foreground Magenta</li>
-        <li>96: bright foreground Cyan</li>
-        <li>97: bright foreground White</li>
-        <li>100: bright background Dark Gray</li>
-        <li>101: bright background Red</li>
-        <li>102: bright background Green</li>
-        <li>103: bright background Yellow</li>
-        <li>104: bright background Blue</li>
-        <li>105: bright background Magenta</li>
-        <li>106: bright background Cyan</li>
-        <li>107: bright background White</li>
-        </ul>
-
-        @param formatCodes list of format codes
-        @type list of str
-        @param textCursor reference to the text cursor
-        @type QTextCursor
-        """
-        if not formatCodes:
-            # empty format codes list is treated as a reset
-            formatCodes = ["0"]
-
-        charFormat = textCursor.charFormat()
-        for formatCode in formatCodes:
-            try:
-                formatCode = int(formatCode)
-            except ValueError:
-                # ignore non digit values
-                continue
-
-            if formatCode == 0:
-                charFormat.setFontWeight(50)
-                charFormat.setFontItalic(False)
-                charFormat.setFontUnderline(False)
-                charFormat.setFontStrikeOut(False)
-                charFormat.setFontOverline(False)
-                charFormat.setForeground(self.DefaultForeground)
-                charFormat.setBackground(self.DefaultBackground)
-            elif formatCode == 1:
-                charFormat.setFontWeight(75)
-            elif formatCode == 2:
-                charFormat.setFontWeight(25)
-            elif formatCode == 3:
-                charFormat.setFontItalic(True)
-            elif formatCode == 4:
-                charFormat.setFontUnderline(True)
-            elif formatCode == 9:
-                charFormat.setFontStrikeOut(True)
-            elif formatCode in (21, 22):
-                charFormat.setFontWeight(50)
-            elif formatCode == 23:
-                charFormat.setFontItalic(False)
-            elif formatCode == 24:
-                charFormat.setFontUnderline(False)
-            elif formatCode == 29:
-                charFormat.setFontStrikeOut(False)
-            elif formatCode == 53:
-                charFormat.setFontOverline(True)
-            elif formatCode == 55:
-                charFormat.setFontOverline(False)
-            elif formatCode in (30, 31, 32, 33, 34, 35, 36, 37):
-                charFormat.setForeground(
-                    AnsiColorSchemes[self.__colorScheme][formatCode - 30]
-                )
-            elif formatCode in (40, 41, 42, 43, 44, 45, 46, 47):
-                charFormat.setBackground(
-                    AnsiColorSchemes[self.__colorScheme][formatCode - 40]
-                )
-            elif formatCode in (90, 91, 92, 93, 94, 95, 96, 97):
-                charFormat.setForeground(
-                    AnsiColorSchemes[self.__colorScheme][formatCode - 80]
-                )
-            elif formatCode in (100, 101, 102, 103, 104, 105, 106, 107):
-                charFormat.setBackground(
-                    AnsiColorSchemes[self.__colorScheme][formatCode - 90]
-                )
-            elif formatCode == 39:
-                charFormat.setForeground(self.DefaultForeground)
-            elif formatCode == 49:
-                charFormat.setBackground(self.DefaultBackground)
-
-        textCursor.setCharFormat(charFormat)
-
-    def __doZoom(self, value):
-        """
-        Private slot to zoom the REPL pane.
-
-        @param value zoom value
-        @type int
-        """
-        if value < self.__currentZoom:
-            self.replEdit.zoomOut(self.__currentZoom - value)
-        elif value > self.__currentZoom:
-            self.replEdit.zoomIn(value - self.__currentZoom)
-        self.__currentZoom = value
-
     def getCurrentPort(self):
         """
         Public method to determine the port path of the selected device.
@@ -1134,16 +588,6 @@
         else:
             return ""
 
-    def getCurrentBoard(self):
-        """
-        Public method to get the board name of the selected device.
-
-        @return board name of the selected device
-        @rtype str
-        """
-        boardName = self.deviceTypeComboBox.currentData(self.DeviceBoardRole)
-        return boardName
-
     def getDevice(self):
         """
         Public method to get a reference to the current device.
@@ -1182,27 +626,67 @@
         @param withAutostart flag indicating to start the repl and file manager
             automatically
         @type bool
+        @exception ValueError raised to indicate an unsupported interface type
         """
         from .ConnectionSelectionDialog import ConnectionSelectionDialog
+        from .MicroPythonWebreplConnectionDialog import (
+            MicroPythonWebreplConnectionDialog,
+        )
 
-        port = self.getCurrentPort()
-        if not port:
-            with EricOverridenCursor():
-                dlg = ConnectionSelectionDialog(
-                    self.__unknownPorts, self.__lastPort, self.__lastDeviceType
-                )
-                if dlg.exec() == QDialog.DialogCode.Accepted:
-                    vid, pid, port, deviceType = dlg.getData()
+        interfaceType = (
+            self.deviceTypeComboBox.currentData(self.DeviceInterfaceTypeRole)
+            or "serial"
+        )  # 'serial' is the default
+
+        if interfaceType not in ("serial", "webrepl"):
+            raise ValueError(
+                "Unsupported interface type detected ('{0}')".format(interfaceType)
+            )
+
+        if interfaceType == "serial":
+            port = self.getCurrentPort()
+            if not port:
+                with EricOverridenCursor():
+                    dlg = ConnectionSelectionDialog(
+                        self.__unknownPorts, self.__lastPort, self.__lastDeviceType
+                    )
+                    if dlg.exec() == QDialog.DialogCode.Accepted:
+                        vid, pid, port, deviceType = dlg.getData()
+
+                        self.deviceIconLabel.setPixmap(
+                            Devices.getDeviceIcon(deviceType, False)
+                        )
+                        self.__device = Devices.getDevice(deviceType, self, vid, pid)
 
-                    self.deviceIconLabel.setPixmap(
-                        Devices.getDeviceIcon(deviceType, False)
-                    )
-                    self.__device = Devices.getDevice(deviceType, self, vid, pid)
+                        self.__lastPort = port
+                        self.__lastDeviceType = deviceType
+                    else:
+                        return
 
-                    self.__lastPort = port
-                    self.__lastDeviceType = deviceType
-                else:
-                    return
+            self.__interface = MicroPythonSerialDeviceInterface(self)
+        elif interfaceType == "webrepl":
+            port = self.deviceTypeComboBox.currentData(self.DeviceWebreplUrlRole)
+            if not port:
+                with EricOverridenCursor():
+                    dlg = MicroPythonWebreplConnectionDialog(
+                        self.__lastWebreplUrl, self.__lastDeviceType
+                    )
+                    if dlg.exec() == QDialog.DialogCode.Accepted:
+                        port, deviceType = dlg.getWebreplConnectionParameters()
+
+                        self.deviceIconLabel.setPixmap(
+                            Devices.getDeviceIcon(deviceType, False)
+                        )
+                        self.__device = Devices.getDevice(deviceType, self, None, None)
+
+                        self.__lastWebreplUrl = port
+                        self.__lastDeviceType = deviceType
+                    else:
+                        return
+
+            self.__interface = MicroPythonWebreplDeviceInterface(self)
+        self.replWidget.replEdit().setInterface(self.__interface)
+        self.__interface.osdInfo.connect(self.replWidget.setOSDInfo)
 
         if self.__interface.connectToDevice(port):
             deviceResponding = self.__interface.probeDevice()
@@ -1250,9 +734,14 @@
         Private method to disconnect from the device.
         """
         self.__device and self.__device.setConnected(False)
-        self.__interface.disconnectFromDevice()
         self.__setConnected(False)
 
+        if self.__interface is not None:
+            self.__interface.disconnectFromDevice()
+            self.__interface.deleteLater()
+            self.__interface = None
+            self.replWidget.replEdit().setInterface(None)
+
     @pyqtSlot()
     def on_runButton_clicked(self):
         """
--- a/src/eric7/MicroPython/MicroPythonWidget.ui	Tue May 02 11:39:09 2023 +0200
+++ b/src/eric7/MicroPython/MicroPythonWidget.ui	Thu May 04 17:58:52 2023 +0200
@@ -10,6 +10,12 @@
     <height>548</height>
    </rect>
   </property>
+  <property name="sizePolicy">
+   <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
+    <horstretch>0</horstretch>
+    <verstretch>0</verstretch>
+   </sizepolicy>
+  </property>
   <layout class="QVBoxLayout" name="verticalLayout">
    <item>
     <layout class="QHBoxLayout" name="horizontalLayout">
@@ -34,21 +40,15 @@
      </item>
      <item>
       <layout class="QGridLayout" name="gridLayout">
-       <item row="1" column="0" colspan="4">
-        <widget class="QLabel" name="deviceInfoLabel">
-         <property name="sizePolicy">
-          <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
-           <horstretch>0</horstretch>
-           <verstretch>0</verstretch>
-          </sizepolicy>
-         </property>
-         <property name="wordWrap">
-          <bool>true</bool>
+       <item row="0" column="1">
+        <widget class="QToolButton" name="repopulateButton">
+         <property name="toolTip">
+          <string>Press to detect connected devices and repopulate the device selector.</string>
          </property>
         </widget>
        </item>
        <item row="0" column="3">
-        <widget class="EricLed" name="deviceConnectedLed" native="true"/>
+        <widget class="EricToolButton" name="menuButton"/>
        </item>
        <item row="0" column="0">
         <widget class="QComboBox" name="deviceTypeComboBox">
@@ -63,15 +63,28 @@
          </property>
         </widget>
        </item>
-       <item row="0" column="1">
-        <widget class="QToolButton" name="checkButton">
-         <property name="toolTip">
-          <string>Press to check for connected devices</string>
+       <item row="1" column="0" colspan="5">
+        <widget class="QLabel" name="deviceInfoLabel">
+         <property name="sizePolicy">
+          <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
+           <horstretch>0</horstretch>
+           <verstretch>0</verstretch>
+          </sizepolicy>
+         </property>
+         <property name="wordWrap">
+          <bool>true</bool>
          </property>
         </widget>
        </item>
+       <item row="0" column="4">
+        <widget class="EricLed" name="deviceConnectedLed" native="true"/>
+       </item>
        <item row="0" column="2">
-        <widget class="EricToolButton" name="menuButton"/>
+        <widget class="QToolButton" name="webreplConfigButton">
+         <property name="toolTip">
+          <string>Press to edit the list of configured WebREPL connections.</string>
+         </property>
+        </widget>
        </item>
       </layout>
      </item>
@@ -139,18 +152,15 @@
     </layout>
    </item>
    <item>
-    <widget class="QTextEdit" name="replEdit">
-     <property name="contextMenuPolicy">
-      <enum>Qt::CustomContextMenu</enum>
+    <widget class="MicroPythonReplWidget" name="replWidget" native="true">
+     <property name="sizePolicy">
+      <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
+       <horstretch>0</horstretch>
+       <verstretch>0</verstretch>
+      </sizepolicy>
      </property>
-     <property name="undoRedoEnabled">
-      <bool>false</bool>
-     </property>
-     <property name="lineWrapMode">
-      <enum>QTextEdit::NoWrap</enum>
-     </property>
-     <property name="acceptRichText">
-      <bool>false</bool>
+     <property name="focusPolicy">
+      <enum>Qt::StrongFocus</enum>
      </property>
     </widget>
    </item>
@@ -168,17 +178,24 @@
    <header>eric7/EricWidgets/EricLed.h</header>
    <container>1</container>
   </customwidget>
+  <customwidget>
+   <class>MicroPythonReplWidget</class>
+   <extends>QWidget</extends>
+   <header>eric7/MicroPython/MicroPythonReplWidget.h</header>
+   <container>1</container>
+  </customwidget>
  </customwidgets>
  <tabstops>
   <tabstop>deviceTypeComboBox</tabstop>
-  <tabstop>checkButton</tabstop>
+  <tabstop>repopulateButton</tabstop>
+  <tabstop>webreplConfigButton</tabstop>
   <tabstop>menuButton</tabstop>
   <tabstop>runButton</tabstop>
   <tabstop>replButton</tabstop>
   <tabstop>filesButton</tabstop>
   <tabstop>chartButton</tabstop>
   <tabstop>connectButton</tabstop>
-  <tabstop>replEdit</tabstop>
+  <tabstop>replWidget</tabstop>
  </tabstops>
  <resources/>
  <connections/>
--- a/src/eric7/Preferences/ConfigurationPages/MicroPythonPage.py	Tue May 02 11:39:09 2023 +0200
+++ b/src/eric7/Preferences/ConfigurationPages/MicroPythonPage.py	Thu May 04 17:58:52 2023 +0200
@@ -16,7 +16,7 @@
 from eric7.EricGui import EricPixmapCache
 from eric7.EricWidgets.EricApplication import ericApp
 from eric7.EricWidgets.EricPathPicker import EricPathPickerModes
-from eric7.MicroPython.MicroPythonWidget import AnsiColorSchemes
+from eric7.MicroPython.MicroPythonReplWidget import AnsiColorSchemes
 from eric7.SystemUtilities import FileSystemUtilities, OSUtilities, PythonUtilities
 
 from .ConfigurationPageBase import ConfigurationPageBase
@@ -115,11 +115,15 @@
             Preferences.getMicroPython("EnableManualDeviceSelection")
         )
 
-        # serial link parameters
-        self.timeoutSpinBox.setValue(
+        # device communication
+        self.serialTimeoutSpinBox.setValue(
             Preferences.getMicroPython("SerialTimeout") // 1000
-        )
-        # converted to seconds
+        )  # converted to seconds
+        self.webreplTimeoutSpinBox.setValue(
+            Preferences.getMicroPython("WebreplTimeout") // 1000
+        )  # converted to seconds
+
+        # device time handling
         self.syncTimeCheckBox.setChecked(
             Preferences.getMicroPython("SyncTimeAfterConnect")
         )
@@ -227,9 +231,15 @@
             "EnableManualDeviceSelection", self.manualSelectionCheckBox.isChecked()
         )
 
-        # serial link parameters
-        Preferences.setMicroPython("SerialTimeout", self.timeoutSpinBox.value() * 1000)
-        # converted to milliseconds
+        # device communication
+        Preferences.setMicroPython(
+            "SerialTimeout", self.serialTimeoutSpinBox.value() * 1000
+        )  # converted to milliseconds
+        Preferences.setMicroPython(
+            "WebreplTimeout", self.webreplTimeoutSpinBox.value() * 1000
+        )  # converted to milliseconds
+
+        # device time handling
         Preferences.setMicroPython(
             "SyncTimeAfterConnect", self.syncTimeCheckBox.isChecked()
         )
--- a/src/eric7/Preferences/ConfigurationPages/MicroPythonPage.ui	Tue May 02 11:39:09 2023 +0200
+++ b/src/eric7/Preferences/ConfigurationPages/MicroPythonPage.ui	Thu May 04 17:58:52 2023 +0200
@@ -7,7 +7,7 @@
     <x>0</x>
     <y>0</y>
     <width>541</width>
-    <height>2038</height>
+    <height>2150</height>
    </rect>
   </property>
   <layout class="QVBoxLayout" name="verticalLayout_3">
@@ -78,18 +78,18 @@
    <item>
     <widget class="QGroupBox" name="groupBox_2">
      <property name="title">
-      <string>Serial Link</string>
+      <string>Device Communication</string>
      </property>
      <layout class="QGridLayout" name="gridLayout_2">
       <item row="0" column="0">
        <widget class="QLabel" name="label_2">
         <property name="text">
-         <string>Timeout for Serial Link Communication:</string>
+         <string>Serial Link Timeout:</string>
         </property>
        </widget>
       </item>
       <item row="0" column="1">
-       <widget class="QSpinBox" name="timeoutSpinBox">
+       <widget class="QSpinBox" name="serialTimeoutSpinBox">
         <property name="toolTip">
          <string>Enter the timout value</string>
         </property>
@@ -120,7 +120,42 @@
         </property>
        </spacer>
       </item>
-      <item row="1" column="0" colspan="3">
+      <item row="1" column="0">
+       <widget class="QLabel" name="label_33">
+        <property name="text">
+         <string>WebRepl Timeout:</string>
+        </property>
+       </widget>
+      </item>
+      <item row="1" column="1">
+       <widget class="QSpinBox" name="webreplTimeoutSpinBox">
+        <property name="toolTip">
+         <string>Enter the timout value</string>
+        </property>
+        <property name="alignment">
+         <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+        </property>
+        <property name="suffix">
+         <string> s</string>
+        </property>
+        <property name="minimum">
+         <number>1</number>
+        </property>
+        <property name="maximum">
+         <number>30</number>
+        </property>
+       </widget>
+      </item>
+     </layout>
+    </widget>
+   </item>
+   <item>
+    <widget class="QGroupBox" name="groupBox_19">
+     <property name="title">
+      <string>Device Time</string>
+     </property>
+     <layout class="QHBoxLayout" name="horizontalLayout_9">
+      <item>
        <widget class="QCheckBox" name="syncTimeCheckBox">
         <property name="sizePolicy">
          <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
@@ -1004,7 +1039,8 @@
  <tabstops>
   <tabstop>workspacePicker</tabstop>
   <tabstop>manualSelectionCheckBox</tabstop>
-  <tabstop>timeoutSpinBox</tabstop>
+  <tabstop>serialTimeoutSpinBox</tabstop>
+  <tabstop>webreplTimeoutSpinBox</tabstop>
   <tabstop>syncTimeCheckBox</tabstop>
   <tabstop>colorSchemeComboBox</tabstop>
   <tabstop>replWrapCheckBox</tabstop>
--- a/src/eric7/Preferences/__init__.py	Tue May 02 11:39:09 2023 +0200
+++ b/src/eric7/Preferences/__init__.py	Thu May 04 17:58:52 2023 +0200
@@ -1570,7 +1570,9 @@
     # defaults for MicroPython
     microPythonDefaults = {
         "MpyWorkspace": "",
-        "SerialTimeout": 2000,  # timeout in milliseconds
+        "SerialTimeout": 2000,  # timeout in milliseconds for serial connections
+        "WebreplTimeout": 5000,  # timeout in milliseconds for webrepl connections
+        "WebreplUrls": "{}",  # empty dict of WebREPL URLs as JSON
         "ReplLineWrap": True,  # wrap the REPL lines
         "SyncTimeAfterConnect": True,
         "ShowHiddenLocal": True,
@@ -3806,6 +3808,7 @@
     """
     if key in (
         "SerialTimeout",
+        "WebreplTimeout",
         "ChartColorTheme",
         "WifiApAuthMode",
         "NtpOffset",
@@ -3825,7 +3828,7 @@
         return toBool(
             Prefs.settings.value("MicroPython/" + key, Prefs.microPythonDefaults[key])
         )
-    elif key in ["IgnoredUnknownDevices", "ManualDevices"]:
+    elif key in ["IgnoredUnknownDevices", "ManualDevices", "WebreplUrls"]:
         jsonStr = Prefs.settings.value(
             "MicroPython/" + key, Prefs.microPythonDefaults[key]
         )
@@ -3851,7 +3854,7 @@
     @param key the key of the setting to be set
     @param value the value to be set
     """
-    if key in ["IgnoredUnknownDevices", "ManualDevices"]:
+    if key in ["IgnoredUnknownDevices", "ManualDevices", "WebreplUrls"]:
         Prefs.settings.setValue("MicroPython/" + key, json.dumps(value))
     elif key in ("WifiPassword", "WifiApPassword"):
         Prefs.settings.setValue("MicroPython/" + key, pwConvert(value, encode=True))
--- a/src/eric7/i18n/eric7_cs.ts	Tue May 02 11:39:09 2023 +0200
+++ b/src/eric7/i18n/eric7_cs.ts	Thu May 04 17:58:52 2023 +0200
@@ -1790,77 +1790,77 @@
   <context>
     <name>BaseDevice</name>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="196" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="199" />
       <source>Device Data Not Available</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="197" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="200" />
       <source>&lt;p&gt;The device data is not available. Try to connect to the device again. Aborting...&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="250" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="253" />
       <source>Unsupported Device</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="260" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="263" />
       <source>REPL is not supported by this device.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="279" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="282" />
       <source>Plotter is not supported by this device.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="298" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="301" />
       <source>Running scripts is not supported by this device.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="317" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="320" />
       <source>File Manager is not supported by this device.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="372" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="375" />
       <source>Select Device Directory</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="373" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="376" />
       <source>Select the directory for the connected device:</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="519" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="528" />
       <source>Detected an error without indications.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="1464" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="1473" />
       <source>Operation not supported.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="1772" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="1781" />
       <source>Yes</source>
       <translation type="unfinished">Ano</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="1772" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="1781" />
       <source>No</source>
       <translation type="unfinished">Ne</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="1774" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="1783" />
       <source>yes</source>
       <translation type="unfinished">ano</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="1774" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="1783" />
       <source>no</source>
       <translation type="unfinished">ne</translation>
     </message>
@@ -4215,14 +4215,14 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1128" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1126" />
       <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="865" />
       <source>unknown ({0})</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1577" />
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1500" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1567" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1490" />
       <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1040" />
       <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="961" />
       <source>The device volume is not available.</source>
@@ -4235,94 +4235,94 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1539" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1529" />
       <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1005" />
       <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="977" />
       <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; exists already. Shall it be replaced?&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1546" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1536" />
       <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1012" />
       <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="984" />
       <source>Aborted</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1195" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1193" />
       <source>CircuitPython does not support setting the IPv4 parameters of the WiFi access point.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1266" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1262" />
       <source>CircuitPython does not support reporting of connected clients.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1675" />
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1350" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1663" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1342" />
       <source>Active</source>
       <translation type="unfinished">Aktivní</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1681" />
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1351" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1669" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1343" />
       <source>Connected</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1352" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1344" />
       <source>IPv4 Address</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1353" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1345" />
       <source>Netmask</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1354" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1346" />
       <source>Gateway</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1355" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1347" />
       <source>DNS</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1677" />
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1356" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1665" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1348" />
       <source>MAC-Address</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1357" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1349" />
       <source>Chip Type</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1358" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1350" />
       <source>max. Sockets</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1538" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1528" />
       <source>Write Connect Script</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1676" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1664" />
       <source>Name</source>
       <translation type="unfinished">Jméno</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1679" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1667" />
       <source>Address Type</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1682" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1670" />
       <source>Advertising</source>
       <translation type="unfinished" />
     </message>
@@ -20607,8 +20607,8 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1506" />
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1490" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1498" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1482" />
       <location filename="../MicroPython/Devices/EspDevices.py" line="196" />
       <source>Erase Flash</source>
       <translation type="unfinished" />
@@ -20619,7 +20619,7 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1591" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1583" />
       <location filename="../MicroPython/Devices/EspDevices.py" line="203" />
       <source>Flash Additional Firmware</source>
       <translation type="unfinished" />
@@ -20670,8 +20670,8 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1590" />
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1549" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1582" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1541" />
       <location filename="../MicroPython/Devices/EspDevices.py" line="363" />
       <source>'esptool write_flash' Output</source>
       <translation type="unfinished" />
@@ -20737,68 +20737,68 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="980" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="978" />
       <source>unknown ({0})</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1209" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1201" />
       <source>Active</source>
       <translation type="unfinished">Aktivní</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1210" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1202" />
       <source>Name</source>
       <translation type="unfinished">Jméno</translation>
     </message>
     <message>
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1203" />
+      <source>MAC-Address</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1206" />
+      <source>Address Type</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1207" />
+      <source>Public</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1207" />
+      <source>Random</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
       <location filename="../MicroPython/Devices/EspDevices.py" line="1211" />
-      <source>MAC-Address</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1214" />
-      <source>Address Type</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1215" />
-      <source>Public</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1215" />
-      <source>Random</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1219" />
       <source>Rx-Buffer</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1221" />
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1219" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1213" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1211" />
       <source>{0} Bytes</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1221" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1213" />
       <source>MTU</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1491" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1483" />
       <source>Shall the flash of the selected device really be erased?</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1505" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1497" />
       <source>'esptool erase_flash' Output</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1550" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1542" />
       <source>Flash µPy/CPy Firmware</source>
       <translation type="unfinished" />
     </message>
@@ -50416,15 +50416,16 @@
     </message>
     <message>
       <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
-      <source>Serial Link</source>
+      <source>Device Communication</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
-      <source>Timeout for Serial Link Communication:</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
+      <source>Serial Link Timeout:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
       <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
       <source>Enter the timout value</source>
       <translation type="unfinished" />
@@ -50432,11 +50433,22 @@
     <message>
       <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
       <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
+      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
       <source> s</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
+      <source>WebRepl Timeout:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
+      <source>Device Time</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
       <source>Select to synchronize the time after connection is established</source>
       <translation type="unfinished" />
     </message>
@@ -50529,8 +50541,8 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.py" line="354" />
-      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.py" line="337" />
+      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.py" line="364" />
+      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.py" line="347" />
       <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
       <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
       <source>Press to show the password</source>
@@ -50872,8 +50884,8 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.py" line="350" />
-      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.py" line="333" />
+      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.py" line="360" />
+      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.py" line="343" />
       <source>Press to hide the password</source>
       <translation type="unfinished" />
     </message>
@@ -50887,39 +50899,298 @@
     </message>
   </context>
   <context>
+    <name>MicroPythonReplEdit</name>
+    <message>
+      <location filename="../MicroPython/MicroPythonReplWidget.py" line="322" />
+      <source>Clear</source>
+      <translation type="unfinished">Vyčistit</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonReplWidget.py" line="327" />
+      <source>Copy</source>
+      <translation type="unfinished">Kopírovat</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonReplWidget.py" line="333" />
+      <source>Paste</source>
+      <translation type="unfinished">Vložit</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonReplWidget.py" line="340" />
+      <source>Select All</source>
+      <translation type="unfinished">Vybrat vše</translation>
+    </message>
+  </context>
+  <context>
+    <name>MicroPythonWebreplConnectionDialog</name>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.py" line="97" />
+      <source>Press to hide the password.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.ui" line="0" />
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.py" line="101" />
+      <source>Press to show the password.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.ui" line="0" />
+      <source>WebREPL Connection</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.ui" line="0" />
+      <source>Host:</source>
+      <translation type="unfinished">Host:</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.ui" line="0" />
+      <source>Enter the host name or IPv4 address of the device.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.ui" line="0" />
+      <source>Port:</source>
+      <translation type="unfinished">Port:</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.ui" line="0" />
+      <source>Enter the port of the WebREPL (empty for default port 8266).</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.ui" line="0" />
+      <source>Password:</source>
+      <translation type="unfinished">Heslo:</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.ui" line="0" />
+      <source>Enter the password for this device connection.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.ui" line="0" />
+      <source>Device Type:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.ui" line="0" />
+      <source>Select the device type</source>
+      <translation type="unfinished" />
+    </message>
+  </context>
+  <context>
+    <name>MicroPythonWebreplDeviceInterface</name>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplDeviceInterface.py" line="80" />
+      <source>WebREPL Password</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplDeviceInterface.py" line="81" />
+      <source>Enter the WebREPL password:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplDeviceInterface.py" line="100" />
+      <source>WebREPL Login</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplDeviceInterface.py" line="101" />
+      <source>The login to the selected device 'webrepl' failed. The given password may be incorrect.</source>
+      <translation type="unfinished" />
+    </message>
+  </context>
+  <context>
+    <name>MicroPythonWebreplUrlAddEditDialog</name>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>WebREPL URL</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Name:</source>
+      <translation type="unfinished">Jméno:</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Enter a unique name for the WebREPL connection.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Description:</source>
+      <translation type="unfinished">Popisek:</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Enter a short description to be shown in the selector.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Host:</source>
+      <translation type="unfinished">Host:</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Enter the host name or IPv4 address of the device.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Port:</source>
+      <translation type="unfinished">Port:</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Enter the port of the WebREPL (empty for default port 8266).</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Password:</source>
+      <translation type="unfinished">Heslo:</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Enter the password for this device connection.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Device Type:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Select the device type</source>
+      <translation type="unfinished" />
+    </message>
+  </context>
+  <context>
+    <name>MicroPythonWebreplUrlsConfigDialog</name>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.py" line="133" />
+      <source>Remove Selected WebREPL URLs</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.py" line="134" />
+      <source>Shall the selected WebREPL URLs really be removed?</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.py" line="150" />
+      <source>Remove All WebREPL URLs</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.py" line="151" />
+      <source>Shall all WebREPL URLs really be removed?</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>WebREPL URLs</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>Name</source>
+      <translation type="unfinished">Jméno</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>Description</source>
+      <translation type="unfinished">Popisek</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>URL</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>Press to add a new entry.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>Add...</source>
+      <translation type="unfinished">Přidat...</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>Press to edit the selected entry.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>Edit...</source>
+      <translation type="unfinished">Editovat...</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>Press to remove the selected entries.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>Remove</source>
+      <translation type="unfinished">Odebrat</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>Press to remove all entries.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>Remove All</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>&lt;b&gt;Note:&lt;/b&gt; The name of an entry must be unique amongst the list.</source>
+      <translation type="unfinished" />
+    </message>
+  </context>
+  <context>
     <name>MicroPythonWidget</name>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="247" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="109" />
       <source>MicroPython Menu</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="306" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="145" />
       <source>&lt;h3&gt;The QtSerialPort package is not available.&lt;br/&gt;MicroPython support is deactivated.&lt;/h3&gt;</source>
       <translation type="unfinished" />
     </message>
     <message numerus="yes">
-      <location filename="../MicroPython/MicroPythonWidget.py" line="347" />
-      <source>%n supported device(s) detected.</source>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="173" />
+      <source>%n supported serial device(s) detected.</source>
       <translation type="unfinished">
         <numerusform />
-        <numerusform />
-        <numerusform />
       </translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="361" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="187" />
       <source>{0} - {1} ({2})</source>
       <comment>board name, description, port name</comment>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="381" />
-      <source>No supported devices detected.</source>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="210" />
+      <source>No supported serial devices detected.</source>
       <translation type="unfinished" />
     </message>
     <message numerus="yes">
-      <location filename="../MicroPython/MicroPythonWidget.py" line="385" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="214" />
       <source>
 %n unknown device(s) for manual selection.</source>
       <translation type="unfinished">
@@ -50929,70 +51200,63 @@
       </translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="392" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="221" />
       <source>Manual Selection</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="456" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="427" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="232" />
+      <source>WebREPL (manual)</source>
+      <translation type="unfinished" />
+    </message>
+    <message numerus="yes">
+      <location filename="../MicroPython/MicroPythonWidget.py" line="251" />
+      <source>
+%n WebREPL connection(s) defined.</source>
+      <translation type="unfinished">
+        <numerusform />
+      </translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="311" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="282" />
       <source>Unknown MicroPython Device</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="428" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="283" />
       <source>&lt;p&gt;Detected these unknown serial devices&lt;/p&gt;&lt;ul&gt;&lt;li&gt;{0}&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Please report them together with the board name and a short description to &lt;a href="mailto:{1}"&gt; the eric bug reporting address&lt;/a&gt; if it is a MicroPython board.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="440" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="295" />
       <source>{0} (0x{1:04x}/0x{2:04x})</source>
       <comment>description, VId, PId</comment>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="457" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="312" />
       <source>Would you like to add them to the list of manually configured devices?</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="592" />
-      <source>Clear</source>
-      <translation type="unfinished">Vyčistit</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="597" />
-      <source>Copy</source>
-      <translation type="unfinished">Kopírovat</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="603" />
-      <source>Paste</source>
-      <translation type="unfinished">Vložit</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="610" />
-      <source>Select All</source>
-      <translation type="unfinished">Vybrat vše</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="636" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="451" />
       <source>Press to disconnect the current device</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../MicroPython/MicroPythonWidget.ui" line="0" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="641" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="456" />
       <source>Press to connect the selected device</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="673" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="488" />
       <source>No device attached</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="674" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="489" />
       <source>Please ensure the device is plugged into your computer and selected.
 
 It must have a version of MicroPython (or CircuitPython) flashed onto it before anything will work.
@@ -51001,353 +51265,358 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="703" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="518" />
       <source>Start REPL</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="704" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="519" />
       <source>&lt;p&gt;The REPL cannot be started.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1232" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1221" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="716" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="705" />
       <source>Serial Device Connect</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1222" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="706" />
       <source>&lt;p&gt;The device at serial port &lt;b&gt;{0}&lt;/b&gt; does not respond. It may not have a MicroPython firmware flashed.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1233" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="717" />
       <source>&lt;p&gt;Cannot connect to device at serial port &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1291" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1282" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1273" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="780" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="771" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="762" />
       <source>Run Script</source>
       <translation type="unfinished">Spustit skript</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1274" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="763" />
       <source>There is no editor open. Abort...</source>
       <translation type="unfinished" />
     </message>
     <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="772" />
+      <source>The current editor does not contain a script. Abort...</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="781" />
+      <source>&lt;p&gt;Cannot run script.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="817" />
+      <source>Start Chart</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="818" />
+      <source>&lt;p&gt;The Chart cannot be started.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="833" />
+      <source>µPy Chart</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="850" />
+      <source>Unsaved Chart Data</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="851" />
+      <source>The chart contains unsaved data.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="899" />
+      <source>Start File Manager</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="900" />
+      <source>&lt;p&gt;The File Manager cannot be started.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="920" />
+      <source>µPy Files</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="985" />
+      <source>Downloads</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1032" />
+      <source>Show Version</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1035" />
+      <source>Show Implementation</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1038" />
+      <source>Show Board Data</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1224" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1043" />
+      <source>Synchronize Time</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1046" />
+      <source>Show Device Time</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1048" />
+      <source>Show Local Time</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1051" />
+      <source>Show Time</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1055" />
+      <source>Show Builtin Modules</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1633" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1067" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1059" />
+      <source>Install Package</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1672" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1669" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1063" />
+      <source>Install Packages</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1448" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1073" />
+      <source>Compile Python File</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1472" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1463" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1077" />
+      <source>Compile Current Editor</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1098" />
+      <source>Download Firmware</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1105" />
+      <source>Show Documentation</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1108" />
+      <source>Convert To UF2</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1109" />
+      <source>Flash UF2 Device</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1112" />
+      <source>Manage Unknown Devices</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1115" />
+      <source>Ignored Serial Devices</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1118" />
+      <source>Configure</source>
+      <translation type="unfinished">Konfigurovat</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1127" />
+      <source>&lt;h3&gt;Device Version Information&lt;/h3&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1138" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1134" />
+      <source>Device Version Information</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1139" />
+      <source>No version information available.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1163" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1155" />
+      <source>unknown</source>
+      <translation type="unfinished">neznámý</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1169" />
+      <source> ({0})</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1185" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1176" />
+      <source>Device Implementation Information</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1177" />
+      <source>&lt;h3&gt;Device Implementation Information&lt;/h3&gt;&lt;p&gt;This device contains &lt;b&gt;{0} {1}{2}&lt;/b&gt;.&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1186" />
+      <source>No device implementation information available.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1225" />
+      <source>&lt;p&gt;The time of the connected device was synchronized with the local time.&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1247" />
+      <source>&lt;h3&gt;Device Date and Time&lt;/h3&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{1}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1255" />
+      <source>&lt;h3&gt;Device Date and Time&lt;/h3&gt;&lt;p&gt;{0}&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1271" />
+      <source>Device Date and Time</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
       <location filename="../MicroPython/MicroPythonWidget.py" line="1283" />
-      <source>The current editor does not contain a script. Abort...</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1292" />
-      <source>&lt;p&gt;Cannot run script.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1328" />
-      <source>Start Chart</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1329" />
-      <source>&lt;p&gt;The Chart cannot be started.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1344" />
-      <source>µPy Chart</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1361" />
-      <source>Unsaved Chart Data</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1362" />
-      <source>The chart contains unsaved data.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1410" />
-      <source>Start File Manager</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1411" />
-      <source>&lt;p&gt;The File Manager cannot be started.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1431" />
-      <source>µPy Files</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1496" />
-      <source>Downloads</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1543" />
-      <source>Show Version</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1546" />
-      <source>Show Implementation</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1549" />
-      <source>Show Board Data</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1735" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1554" />
-      <source>Synchronize Time</source>
+      <source>Local Date and Time</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1284" />
+      <source>&lt;h3&gt;Local Date and Time&lt;/h3&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{1}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1325" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1308" />
+      <source>Date and Time</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1309" />
+      <source>&lt;table&gt;&lt;tr&gt;&lt;th&gt;&lt;/th&gt;&lt;th&gt;Local Date and Time&lt;/th&gt;&lt;th&gt;Device Date and Time&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td align='center'&gt;{0}&lt;/td&gt;&lt;td align='center'&gt;{2}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td align='center'&gt;{1}&lt;/td&gt;&lt;td align='center'&gt;{3}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1326" />
+      <source>&lt;table&gt;&lt;tr&gt;&lt;th&gt;Local Date and Time&lt;/th&gt;&lt;th&gt;Device Date and Time&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align='center'&gt;{0} {1}&lt;/td&gt;&lt;td align='center'&gt;{2}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1350" />
+      <source>Error handling device</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1351" />
+      <source>&lt;p&gt;There was an error communicating with the connected device.&lt;/p&gt;&lt;p&gt;Method: {0}&lt;/p&gt;&lt;p&gt;Message: {1}&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1393" />
+      <source>The MicroPython cross compiler &lt;b&gt;mpy-cross&lt;/b&gt; cannot be found. Ensure it is in the search path or configure it on the MicroPython configuration page.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1419" />
+      <source>Python Files (*.py);;All Files (*)</source>
+      <translation type="unfinished">Python soubory (*.py);;Všechny soubory (*)</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1429" />
+      <source>The Python file &lt;b&gt;{0}&lt;/b&gt; does not exist. Aborting...</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1438" />
+      <source>'mpy-cross' Output</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1464" />
+      <source>The current editor does not contain a Python file. Aborting...</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1556" />
+      <source>Add Unknown Devices</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../MicroPython/MicroPythonWidget.py" line="1557" />
-      <source>Show Device Time</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1559" />
-      <source>Show Local Time</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1562" />
-      <source>Show Time</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1566" />
-      <source>Show Builtin Modules</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2144" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1578" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1570" />
-      <source>Install Package</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2183" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2180" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1574" />
-      <source>Install Packages</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1959" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1584" />
-      <source>Compile Python File</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1983" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1974" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1588" />
-      <source>Compile Current Editor</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1609" />
-      <source>Download Firmware</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1616" />
-      <source>Show Documentation</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1619" />
-      <source>Convert To UF2</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1620" />
-      <source>Flash UF2 Device</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1623" />
-      <source>Manage Unknown Devices</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1626" />
-      <source>Ignored Serial Devices</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1629" />
-      <source>Configure</source>
-      <translation type="unfinished">Konfigurovat</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1638" />
-      <source>&lt;h3&gt;Device Version Information&lt;/h3&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1649" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1645" />
-      <source>Device Version Information</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1650" />
-      <source>No version information available.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1674" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1666" />
-      <source>unknown</source>
-      <translation type="unfinished">neznámý</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1680" />
-      <source> ({0})</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1696" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1687" />
-      <source>Device Implementation Information</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1688" />
-      <source>&lt;h3&gt;Device Implementation Information&lt;/h3&gt;&lt;p&gt;This device contains &lt;b&gt;{0} {1}{2}&lt;/b&gt;.&lt;/p&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1697" />
-      <source>No device implementation information available.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1736" />
-      <source>&lt;p&gt;The time of the connected device was synchronized with the local time.&lt;/p&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1758" />
-      <source>&lt;h3&gt;Device Date and Time&lt;/h3&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{1}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1766" />
-      <source>&lt;h3&gt;Device Date and Time&lt;/h3&gt;&lt;p&gt;{0}&lt;/p&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1782" />
-      <source>Device Date and Time</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1794" />
-      <source>Local Date and Time</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1795" />
-      <source>&lt;h3&gt;Local Date and Time&lt;/h3&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{1}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1836" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1819" />
-      <source>Date and Time</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1820" />
-      <source>&lt;table&gt;&lt;tr&gt;&lt;th&gt;&lt;/th&gt;&lt;th&gt;Local Date and Time&lt;/th&gt;&lt;th&gt;Device Date and Time&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td align='center'&gt;{0}&lt;/td&gt;&lt;td align='center'&gt;{2}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td align='center'&gt;{1}&lt;/td&gt;&lt;td align='center'&gt;{3}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1837" />
-      <source>&lt;table&gt;&lt;tr&gt;&lt;th&gt;Local Date and Time&lt;/th&gt;&lt;th&gt;Device Date and Time&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align='center'&gt;{0} {1}&lt;/td&gt;&lt;td align='center'&gt;{2}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1861" />
-      <source>Error handling device</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1862" />
-      <source>&lt;p&gt;There was an error communicating with the connected device.&lt;/p&gt;&lt;p&gt;Method: {0}&lt;/p&gt;&lt;p&gt;Message: {1}&lt;/p&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1904" />
-      <source>The MicroPython cross compiler &lt;b&gt;mpy-cross&lt;/b&gt; cannot be found. Ensure it is in the search path or configure it on the MicroPython configuration page.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1930" />
-      <source>Python Files (*.py);;All Files (*)</source>
-      <translation type="unfinished">Python soubory (*.py);;Všechny soubory (*)</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1940" />
-      <source>The Python file &lt;b&gt;{0}&lt;/b&gt; does not exist. Aborting...</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1949" />
-      <source>'mpy-cross' Output</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1975" />
-      <source>The current editor does not contain a Python file. Aborting...</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2067" />
-      <source>Add Unknown Devices</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2068" />
       <source>Select the devices to be added:</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2117" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1606" />
       <source>Plus any modules on the filesystem.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2169" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1658" />
       <source>Package '{0}' was installed successfully.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2184" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1673" />
       <source>Enter the packages to be installed separated by whitespace:</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../MicroPython/MicroPythonWidget.ui" line="0" />
-      <source>Press to check for connected devices</source>
+      <source>Press to detect connected devices and repopulate the device selector.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.ui" line="0" />
+      <source>Press to edit the list of configured WebREPL connections.</source>
       <translation type="unfinished" />
     </message>
     <message>
@@ -51370,6 +51639,30 @@
       <source>Press to open a chart window to display data receive from the selected device</source>
       <translation type="unfinished" />
     </message>
+    <message numerus="yes">
+      <source>%n supported device(s) detected.</source>
+      <translation type="vanished">
+        <numerusform />
+        <numerusform />
+        <numerusform />
+      </translation>
+    </message>
+    <message>
+      <source>Clear</source>
+      <translation type="vanished">Vyčistit</translation>
+    </message>
+    <message>
+      <source>Copy</source>
+      <translation type="vanished">Kopírovat</translation>
+    </message>
+    <message>
+      <source>Paste</source>
+      <translation type="vanished">Vložit</translation>
+    </message>
+    <message>
+      <source>Select All</source>
+      <translation type="vanished">Vybrat vše</translation>
+    </message>
   </context>
   <context>
     <name>MicrobitDevice</name>
@@ -51533,29 +51826,29 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="569" />
+      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="571" />
       <source>MicroPython Firmware for BBC micro:bit V1</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="601" />
-      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="588" />
-      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="573" />
+      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="603" />
+      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="590" />
+      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="575" />
       <source>DAPLink Firmware</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="580" />
+      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="582" />
       <source>MicroPython Firmware for BBC micro:bit V2</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="584" />
+      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="586" />
       <source>CircuitPython Firmware for BBC micro:bit V2</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="597" />
+      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="599" />
       <source>MicroPython Firmware</source>
       <translation type="unfinished" />
     </message>
@@ -58770,18 +59063,18 @@
   <context>
     <name>Preferences</name>
     <message>
-      <location filename="../Preferences/__init__.py" line="1815" />
+      <location filename="../Preferences/__init__.py" line="1817" />
       <source>Export Preferences</source>
       <translation>Předvolby exportu</translation>
     </message>
     <message>
+      <location filename="../Preferences/__init__.py" line="1846" />
+      <location filename="../Preferences/__init__.py" line="1819" />
+      <source>Properties File (*.ini);;All Files (*)</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
       <location filename="../Preferences/__init__.py" line="1844" />
-      <location filename="../Preferences/__init__.py" line="1817" />
-      <source>Properties File (*.ini);;All Files (*)</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Preferences/__init__.py" line="1842" />
       <source>Import Preferences</source>
       <translation>Předvolby importu</translation>
     </message>
@@ -69156,88 +69449,88 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="364" />
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="365" />
       <source>MicroPython Firmware</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="368" />
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="369" />
       <source>Pimoroni Pico Firmware</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="371" />
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="372" />
       <source>CircuitPython Firmware</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="375" />
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="376" />
       <source>CircuitPython Libraries</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="427" />
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="428" />
       <source>Set Country</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="983" />
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="618" />
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="978" />
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="617" />
       <source>unknown ({0})</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1093" />
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1088" />
       <source>Pico Wireless does not support setting the IPv4 parameters of the WiFi access point.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1168" />
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1161" />
       <source>Pico Wireless does not support reporting of connected clients.</source>
       <translation type="unfinished" />
     </message>
     <message>
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1248" />
+      <source>Active</source>
+      <translation type="unfinished">Aktivní</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1249" />
+      <source>Connected</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1252" />
+      <source>Status</source>
+      <translation type="unfinished">Status</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1256" />
+      <source>Hostname</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1257" />
+      <source>IPv4 Address</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1258" />
+      <source>Netmask</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
       <location filename="../MicroPython/Devices/RP2040Devices.py" line="1259" />
-      <source>Active</source>
-      <translation type="unfinished">Aktivní</translation>
+      <source>Gateway</source>
+      <translation type="unfinished" />
     </message>
     <message>
       <location filename="../MicroPython/Devices/RP2040Devices.py" line="1260" />
-      <source>Connected</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1263" />
-      <source>Status</source>
-      <translation type="unfinished">Status</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1267" />
-      <source>Hostname</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1268" />
-      <source>IPv4 Address</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1269" />
-      <source>Netmask</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1270" />
-      <source>Gateway</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1271" />
       <source>DNS</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1272" />
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1261" />
       <source>MAC-Address</source>
       <translation type="unfinished" />
     </message>
@@ -70163,19 +70456,19 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/SearchReplaceWidget.py" line="1045" />
+      <location filename="../QScintilla/SearchReplaceWidget.py" line="1046" />
       <location filename="../QScintilla/SearchReplaceWidget.py" line="597" />
       <location filename="../QScintilla/SearchReplaceWidget.py" line="559" />
       <source>'{0}' was not found.</source>
       <translation>'{0}' nebyl nalezen.</translation>
     </message>
     <message>
-      <location filename="../QScintilla/SearchReplaceWidget.py" line="1198" />
+      <location filename="../QScintilla/SearchReplaceWidget.py" line="1199" />
       <source>Replaced {0} occurrences.</source>
       <translation>Nahrazeno {0} výskytů.</translation>
     </message>
     <message>
-      <location filename="../QScintilla/SearchReplaceWidget.py" line="1204" />
+      <location filename="../QScintilla/SearchReplaceWidget.py" line="1205" />
       <source>Nothing replaced because '{0}' was not found.</source>
       <translation>Nebylo nic nahrazeno, protože '{0}' nebyl nalezen.</translation>
     </message>
@@ -83303,7 +83596,7 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/TeensyDevices.py" line="315" />
+      <location filename="../MicroPython/Devices/TeensyDevices.py" line="316" />
       <location filename="../MicroPython/Devices/TeensyDevices.py" line="154" />
       <source>Flash MicroPython Firmware</source>
       <translation type="unfinished" />
@@ -83344,17 +83637,17 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/TeensyDevices.py" line="316" />
+      <location filename="../MicroPython/Devices/TeensyDevices.py" line="317" />
       <source>&lt;p&gt;Teensy 4.0 and Teensy 4.1 are flashed using the 'Teensy Loader' application. Make sure you downloaded the MicroPython or CircuitPython .hex file.&lt;/p&gt;&lt;p&gt;See &lt;a href="{0}"&gt;the PJRC Teensy web site&lt;/a&gt; for details.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/TeensyDevices.py" line="338" />
-      <source>Start 'Teensy Loader'</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../MicroPython/Devices/TeensyDevices.py" line="339" />
+      <source>Start 'Teensy Loader'</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/Devices/TeensyDevices.py" line="340" />
       <source>&lt;p&gt;The 'Teensy Loader' application &lt;b&gt;teensy&lt;/b&gt; could not be started. Ensure it is in the application search path or start it manually.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
Binary file src/eric7/i18n/eric7_de.qm has changed
--- a/src/eric7/i18n/eric7_de.ts	Tue May 02 11:39:09 2023 +0200
+++ b/src/eric7/i18n/eric7_de.ts	Thu May 04 17:58:52 2023 +0200
@@ -1733,77 +1733,77 @@
   <context>
     <name>BaseDevice</name>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="196" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="199" />
       <source>Device Data Not Available</source>
       <translation>Gerätedaten sind nicht verfügbar</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="197" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="200" />
       <source>&lt;p&gt;The device data is not available. Try to connect to the device again. Aborting...&lt;/p&gt;</source>
       <translation>&lt;p&gt;Die Gerätedaten sind nicht verfügbar. Versuche, das Gerät neu zu verbinden. Abbruch...&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="250" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="253" />
       <source>Unsupported Device</source>
       <translation>Nicht unterstütztes Gerät</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="260" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="263" />
       <source>REPL is not supported by this device.</source>
       <translation>REPL wird von diesem Gerät nicht unterstützt.</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="279" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="282" />
       <source>Plotter is not supported by this device.</source>
       <translation>Der Plotter wird von diesem Gerät nicht unterstützt.</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="298" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="301" />
       <source>Running scripts is not supported by this device.</source>
       <translation>Die Ausführung von Skripten wird von diesem Gerät nicht unterstützt.</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="317" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="320" />
       <source>File Manager is not supported by this device.</source>
       <translation>Der Dateimanager wird von diesem Gerät nicht unterstützt.</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="372" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="375" />
       <source>Select Device Directory</source>
       <translation>Auswahl des Geräteverzeichnis</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="373" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="376" />
       <source>Select the directory for the connected device:</source>
       <translation>Wähle das Verzeichnis für das verbundene Gerät:</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="519" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="528" />
       <source>Detected an error without indications.</source>
       <translation>Es wurde ein Fehler ohne nähere Angaben entdeckt.</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="1464" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="1473" />
       <source>Operation not supported.</source>
       <translation>Befehl wird nicht unterstützt.</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="1772" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="1781" />
       <source>Yes</source>
       <translation>Ja</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="1772" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="1781" />
       <source>No</source>
       <translation>Nein</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="1774" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="1783" />
       <source>yes</source>
       <translation>ja</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="1774" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="1783" />
       <source>no</source>
       <translation>nein</translation>
     </message>
@@ -4157,14 +4157,14 @@
       <translation>Wähle den Pfad des Gerätes:</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1128" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1126" />
       <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="865" />
       <source>unknown ({0})</source>
       <translation>unbekannt ({0})</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1577" />
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1500" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1567" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1490" />
       <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1040" />
       <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="961" />
       <source>The device volume is not available.</source>
@@ -4177,94 +4177,94 @@
       <translation>WLAN Berechtigungen schreiben</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1539" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1529" />
       <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1005" />
       <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="977" />
       <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; exists already. Shall it be replaced?&lt;/p&gt;</source>
       <translation>&lt;p&gt;Die Datei &lt;b&gt;{0}&lt;/b&gt; existiert bereits. Soll sie ersetzt werden?&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1546" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1536" />
       <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1012" />
       <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="984" />
       <source>Aborted</source>
       <translation>Abgebrochen</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1195" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1193" />
       <source>CircuitPython does not support setting the IPv4 parameters of the WiFi access point.</source>
       <translation>CircuitPython unterstützt nicht die Konfiguration der IPv4 Parameter des WiFi Access Point.</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1266" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1262" />
       <source>CircuitPython does not support reporting of connected clients.</source>
       <translation>CircuitPython unterstützt nicht die Ermittlung verbundener Geräte.</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1675" />
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1350" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1663" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1342" />
       <source>Active</source>
       <translation>Aktiv</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1681" />
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1351" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1669" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1343" />
       <source>Connected</source>
       <translation>Verbunden</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1352" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1344" />
       <source>IPv4 Address</source>
       <translation>IPv4 Adresse</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1353" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1345" />
       <source>Netmask</source>
       <translation>Netzmaske</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1354" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1346" />
       <source>Gateway</source>
       <translation>Gateway</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1355" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1347" />
       <source>DNS</source>
       <translation>DNS</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1677" />
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1356" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1665" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1348" />
       <source>MAC-Address</source>
       <translation>MAC-Addresse</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1357" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1349" />
       <source>Chip Type</source>
       <translation>Chiptyp</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1358" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1350" />
       <source>max. Sockets</source>
       <translation>max. Sockets</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1538" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1528" />
       <source>Write Connect Script</source>
       <translation>Verbindungsskript schreiben</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1676" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1664" />
       <source>Name</source>
       <translation>Name</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1679" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1667" />
       <source>Address Type</source>
       <translation>Adresstyp</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1682" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1670" />
       <source>Advertising</source>
       <translation>Advertising</translation>
     </message>
@@ -20533,8 +20533,8 @@
       <translation>Zeige MicroPython Versionen</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1506" />
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1490" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1498" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1482" />
       <location filename="../MicroPython/Devices/EspDevices.py" line="196" />
       <source>Erase Flash</source>
       <translation>Flash löschen</translation>
@@ -20545,7 +20545,7 @@
       <translation>MicroPython Firmware flashen</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1591" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1583" />
       <location filename="../MicroPython/Devices/EspDevices.py" line="203" />
       <source>Flash Additional Firmware</source>
       <translation>Zusätzliche Firmware flashen</translation>
@@ -20596,8 +20596,8 @@
       <translation>Ausgabe von 'esptool read_flash'</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1590" />
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1549" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1582" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1541" />
       <location filename="../MicroPython/Devices/EspDevices.py" line="363" />
       <source>'esptool write_flash' Output</source>
       <translation>Ausgabe von 'esptool write_flash'</translation>
@@ -20663,68 +20663,68 @@
       <translation>Fehler beim Löschen der Berechtigungen: {0}</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="980" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="978" />
       <source>unknown ({0})</source>
       <translation>unbekannt ({0})</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1209" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1201" />
       <source>Active</source>
       <translation>Aktiv</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1210" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1202" />
       <source>Name</source>
       <translation>Name</translation>
     </message>
     <message>
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1203" />
+      <source>MAC-Address</source>
+      <translation>MAC-Addresse</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1206" />
+      <source>Address Type</source>
+      <translation>Adresstyp</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1207" />
+      <source>Public</source>
+      <translation>Öffentlich</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1207" />
+      <source>Random</source>
+      <translation>Zufällig</translation>
+    </message>
+    <message>
       <location filename="../MicroPython/Devices/EspDevices.py" line="1211" />
-      <source>MAC-Address</source>
-      <translation>MAC-Addresse</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1214" />
-      <source>Address Type</source>
-      <translation>Adresstyp</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1215" />
-      <source>Public</source>
-      <translation>Öffentlich</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1215" />
-      <source>Random</source>
-      <translation>Zufällig</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1219" />
       <source>Rx-Buffer</source>
       <translation>Empfangspuffer</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1221" />
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1219" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1213" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1211" />
       <source>{0} Bytes</source>
       <translation>{0} Bytes</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1221" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1213" />
       <source>MTU</source>
       <translation>MTU</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1491" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1483" />
       <source>Shall the flash of the selected device really be erased?</source>
       <translation>Soll der Flashspeicher des ausgewählten Gerätes wirklich gelöscht werden?</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1505" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1497" />
       <source>'esptool erase_flash' Output</source>
       <translation>Ausgabe von 'esptool erase_flash'</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1550" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1542" />
       <source>Flash µPy/CPy Firmware</source>
       <translation>µPy/CPy Firmware flashen</translation>
     </message>
@@ -50296,15 +50296,16 @@
     </message>
     <message>
       <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
-      <source>Serial Link</source>
-      <translation>Serieller Link</translation>
+      <source>Device Communication</source>
+      <translation>Gerätekommunikation</translation>
     </message>
     <message>
       <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
-      <source>Timeout for Serial Link Communication:</source>
-      <translation>Timeout für die Serielle Kommunikation:</translation>
-    </message>
-    <message>
+      <source>Serial Link Timeout:</source>
+      <translation>Timeout für serielle Verbindung:</translation>
+    </message>
+    <message>
+      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
       <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
       <source>Enter the timout value</source>
       <translation>Gib den Timeout Wert ein</translation>
@@ -50312,11 +50313,22 @@
     <message>
       <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
       <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
+      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
       <source> s</source>
       <translation> s</translation>
     </message>
     <message>
       <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
+      <source>WebRepl Timeout:</source>
+      <translation>Timeout für WebREPL:</translation>
+    </message>
+    <message>
+      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
+      <source>Device Time</source>
+      <translation>Gerätezeit</translation>
+    </message>
+    <message>
+      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
       <source>Select to synchronize the time after connection is established</source>
       <translation>Auswählen, um die Zeit nach Herstellen der Verbindung zu synchronisieren</translation>
     </message>
@@ -50409,8 +50421,8 @@
       <translation>Gib das Netzwerkkennwort ein</translation>
     </message>
     <message>
-      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.py" line="354" />
-      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.py" line="337" />
+      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.py" line="364" />
+      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.py" line="347" />
       <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
       <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
       <source>Press to show the password</source>
@@ -50752,8 +50764,8 @@
       <translation>offen</translation>
     </message>
     <message>
-      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.py" line="350" />
-      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.py" line="333" />
+      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.py" line="360" />
+      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.py" line="343" />
       <source>Press to hide the password</source>
       <translation>Drücken, um das Kennwort auszublenden</translation>
     </message>
@@ -50767,38 +50779,299 @@
     </message>
   </context>
   <context>
+    <name>MicroPythonReplEdit</name>
+    <message>
+      <location filename="../MicroPython/MicroPythonReplWidget.py" line="322" />
+      <source>Clear</source>
+      <translation>Löschen</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonReplWidget.py" line="327" />
+      <source>Copy</source>
+      <translation>Kopieren</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonReplWidget.py" line="333" />
+      <source>Paste</source>
+      <translation>Einfügen</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonReplWidget.py" line="340" />
+      <source>Select All</source>
+      <translation>Alles auswählen</translation>
+    </message>
+  </context>
+  <context>
+    <name>MicroPythonWebreplConnectionDialog</name>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.py" line="97" />
+      <source>Press to hide the password.</source>
+      <translation>Drücken, um das Kennwort auszublenden.</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.ui" line="0" />
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.py" line="101" />
+      <source>Press to show the password.</source>
+      <translation>Drücken, um das Kennwort anzuzeigen.</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.ui" line="0" />
+      <source>WebREPL Connection</source>
+      <translation>WebREPL Verbindung</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.ui" line="0" />
+      <source>Host:</source>
+      <translation>Rechner:</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.ui" line="0" />
+      <source>Enter the host name or IPv4 address of the device.</source>
+      <translation>Gib den Rechnernamen oder die IPv4 Adresse des Gerätes ein.</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.ui" line="0" />
+      <source>Port:</source>
+      <translation>Port:</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.ui" line="0" />
+      <source>Enter the port of the WebREPL (empty for default port 8266).</source>
+      <translation>Gib den Port der WebREPL ein (leer lassen für den Standardport 8266).</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.ui" line="0" />
+      <source>Password:</source>
+      <translation>Kennwort:</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.ui" line="0" />
+      <source>Enter the password for this device connection.</source>
+      <translation>Gib das Kennwort für diese Geräteverbindung ein.</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.ui" line="0" />
+      <source>Device Type:</source>
+      <translation>Gerätetype:</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.ui" line="0" />
+      <source>Select the device type</source>
+      <translation>Wähle den Gerätetyp</translation>
+    </message>
+  </context>
+  <context>
+    <name>MicroPythonWebreplDeviceInterface</name>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplDeviceInterface.py" line="80" />
+      <source>WebREPL Password</source>
+      <translation>WebREPL Kennwort</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplDeviceInterface.py" line="81" />
+      <source>Enter the WebREPL password:</source>
+      <translation>Gib das WebREPL Kennwort ein:</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplDeviceInterface.py" line="100" />
+      <source>WebREPL Login</source>
+      <translation>WebREPL Anmeldung</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplDeviceInterface.py" line="101" />
+      <source>The login to the selected device 'webrepl' failed. The given password may be incorrect.</source>
+      <translation>Die Anmeldung am ausgewählten Gerät 'webrepl' ist fehlgeschlagen. Das eingegebene Kennwort war möglicherweise falsch.</translation>
+    </message>
+  </context>
+  <context>
+    <name>MicroPythonWebreplUrlAddEditDialog</name>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>WebREPL URL</source>
+      <translation>WebREPL URL</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Name:</source>
+      <translation>Name:</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Enter a unique name for the WebREPL connection.</source>
+      <translation>Gib einen eindeutigen Namen für die WebREPL Verbindung ein.</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Description:</source>
+      <translation>Beschreibung:</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Enter a short description to be shown in the selector.</source>
+      <translation>Gibe eine Kurzbeschreibung für die Anzeige in der Auswahlliste ein.</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Host:</source>
+      <translation>Rechner:</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Enter the host name or IPv4 address of the device.</source>
+      <translation>Gib den Rechnernamen oder die IPv4 Adresse des Gerätes ein.</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Port:</source>
+      <translation>Port:</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Enter the port of the WebREPL (empty for default port 8266).</source>
+      <translation>Gib den Port der WebREPL ein (leer lassen für den Standardport 8266).</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Password:</source>
+      <translation>Kennwort:</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Enter the password for this device connection.</source>
+      <translation>Gib das Kennwort für diese Geräteverbindung ein.</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Device Type:</source>
+      <translation>Gerätetype:</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Select the device type</source>
+      <translation>Wähle den Gerätetyp</translation>
+    </message>
+  </context>
+  <context>
+    <name>MicroPythonWebreplUrlsConfigDialog</name>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.py" line="133" />
+      <source>Remove Selected WebREPL URLs</source>
+      <translation>Ausgewählte WebREPL URLs löschen</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.py" line="134" />
+      <source>Shall the selected WebREPL URLs really be removed?</source>
+      <translation>Sollen die ausgewählten WebREPL URLs wirklich gelöscht werden?</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.py" line="150" />
+      <source>Remove All WebREPL URLs</source>
+      <translation>Alle WebREPL URLs löschen</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.py" line="151" />
+      <source>Shall all WebREPL URLs really be removed?</source>
+      <translation>Sollen wirklich alle WebREPL URLs gelöscht werden?</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>WebREPL URLs</source>
+      <translation>WebREPL URLs</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>Name</source>
+      <translation>Name</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>Description</source>
+      <translation>Beschreibung</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>URL</source>
+      <translation>URL</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>Press to add a new entry.</source>
+      <translation>Drücken, um einen neuen Eintrag hinzuzufügen.</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>Add...</source>
+      <translation>Hinzufügen...</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>Press to edit the selected entry.</source>
+      <translation>Drücken, um den ausgewählten Eintrag zu bearbeiten.</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>Edit...</source>
+      <translation>Bearbeiten...</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>Press to remove the selected entries.</source>
+      <translation>Drücken, um die ausgwählten Einträge zu löschen.</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>Remove</source>
+      <translation>Entfernen</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>Press to remove all entries.</source>
+      <translation>Drücken, um alle Einträge zu löschen.</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>Remove All</source>
+      <translation>Alle entfernen</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>&lt;b&gt;Note:&lt;/b&gt; The name of an entry must be unique amongst the list.</source>
+      <translation>&lt;b&gt;Hinweis:&lt;/b&gt; Der Name eines Eintrags muss in der Liste eindeutig sein.</translation>
+    </message>
+  </context>
+  <context>
     <name>MicroPythonWidget</name>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="247" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="109" />
       <source>MicroPython Menu</source>
       <translation>MicroPython MenÜ</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="306" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="145" />
       <source>&lt;h3&gt;The QtSerialPort package is not available.&lt;br/&gt;MicroPython support is deactivated.&lt;/h3&gt;</source>
       <translation>&lt;h3&gt;Das Paket QtSerialPort ist nicht verfügbar.&lt;br/&gt;Die MicroPython Unterstützung wird deaktiviert.&lt;/h3&gt;</translation>
     </message>
     <message numerus="yes">
-      <location filename="../MicroPython/MicroPythonWidget.py" line="347" />
-      <source>%n supported device(s) detected.</source>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="173" />
+      <source>%n supported serial device(s) detected.</source>
       <translation>
-        <numerusform>%n unterstütztes Gerät gefunden.</numerusform>
-        <numerusform>%n unterstützte Geräte gefunden.</numerusform>
+        <numerusform>%n unterstütztes serielles Gerät erkannt.</numerusform>
+        <numerusform>%n unterstützte serielle Geräte erkannt.</numerusform>
       </translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="361" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="187" />
       <source>{0} - {1} ({2})</source>
       <comment>board name, description, port name</comment>
       <translation>{0} - {1} ({2})</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="381" />
-      <source>No supported devices detected.</source>
-      <translation>Keine unterstützten Geräte gefunden.</translation>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="210" />
+      <source>No supported serial devices detected.</source>
+      <translation>Keine unterstützten seriellen Geräte erkannt.</translation>
     </message>
     <message numerus="yes">
-      <location filename="../MicroPython/MicroPythonWidget.py" line="385" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="214" />
       <source>
 %n unknown device(s) for manual selection.</source>
       <translation>
@@ -50809,70 +51082,66 @@
       </translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="392" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="221" />
       <source>Manual Selection</source>
       <translation>Manuelle Auswahl</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="456" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="427" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="232" />
+      <source>WebREPL (manual)</source>
+      <translation>WebREPL (manuell)</translation>
+    </message>
+    <message numerus="yes">
+      <location filename="../MicroPython/MicroPythonWidget.py" line="251" />
+      <source>
+%n WebREPL connection(s) defined.</source>
+      <translation>
+        <numerusform>
+%n WebREPL Verbindung definiert.</numerusform>
+        <numerusform>
+%n WebREPL Verbindungen definiert.</numerusform>
+      </translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="311" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="282" />
       <source>Unknown MicroPython Device</source>
       <translation>Unbekanntes MicroPython Gerät</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="428" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="283" />
       <source>&lt;p&gt;Detected these unknown serial devices&lt;/p&gt;&lt;ul&gt;&lt;li&gt;{0}&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Please report them together with the board name and a short description to &lt;a href="mailto:{1}"&gt; the eric bug reporting address&lt;/a&gt; if it is a MicroPython board.&lt;/p&gt;</source>
       <translation>&lt;p&gt;Diese ubekannten seriellen Geräte wurden erkannt.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;{0}&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Falls es sich um ein MicroPython Board handelt, melden sie es bitte zusammen mit dem Boardnamen und einer Kurzbeschreibung an &lt;a href="mailto:{1}"&gt; die eric Fehlermitteilungsadresse&lt;/a&gt;.&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="440" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="295" />
       <source>{0} (0x{1:04x}/0x{2:04x})</source>
       <comment>description, VId, PId</comment>
       <translation>{0} (0x{1:04x}/0x{2:04x})</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="457" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="312" />
       <source>Would you like to add them to the list of manually configured devices?</source>
       <translation>Sollen sie zur Liste der manuell konfigurierten Geräte hinzugefügt werden?</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="592" />
-      <source>Clear</source>
-      <translation>Löschen</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="597" />
-      <source>Copy</source>
-      <translation>Kopieren</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="603" />
-      <source>Paste</source>
-      <translation>Einfügen</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="610" />
-      <source>Select All</source>
-      <translation>Alles auswählen</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="636" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="451" />
       <source>Press to disconnect the current device</source>
       <translation>Drücken, um die Verbindung zum aktuelle Geräte zu trennen</translation>
     </message>
     <message>
       <location filename="../MicroPython/MicroPythonWidget.ui" line="0" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="641" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="456" />
       <source>Press to connect the selected device</source>
       <translation>Drücken, um eine Verbindung mit den ausgewählten Gerät herzustellen</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="673" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="488" />
       <source>No device attached</source>
       <translation>Kein Gerät angeschlossen</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="674" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="489" />
       <source>Please ensure the device is plugged into your computer and selected.
 
 It must have a version of MicroPython (or CircuitPython) flashed onto it before anything will work.
@@ -50885,354 +51154,359 @@
 Drücke zum Abschluss den Resetknopf des Gerätes und warte ein paar Sekunden vor einem neuen Versuch.</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="703" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="518" />
       <source>Start REPL</source>
       <translation>REPL starten</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="704" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="519" />
       <source>&lt;p&gt;The REPL cannot be started.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
       <translation>&lt;p&gt;Die Eingabeaufforderung kann nicht gestartet werden.&lt;/p&gt;&lt;p&gt;Ursache: {0}&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1232" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1221" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="716" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="705" />
       <source>Serial Device Connect</source>
       <translation>Serielle Verbindung</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1222" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="706" />
       <source>&lt;p&gt;The device at serial port &lt;b&gt;{0}&lt;/b&gt; does not respond. It may not have a MicroPython firmware flashed.&lt;/p&gt;</source>
       <translation>&lt;p&gt;Das Gerät am seriellen Port &lt;b&gt;{0}&lt;/b&gt; antwortet nicht. Es hat wahrscheinlich keine MicroPython Firmware geflasht.&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1233" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="717" />
       <source>&lt;p&gt;Cannot connect to device at serial port &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</source>
       <translation>&lt;p&gt;Kann keine Verbindung zum Gerät an der seriellen Schnittstelle &lt;b&gt;{0}&lt;/b&gt; herstellen.&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1291" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1282" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1273" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="780" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="771" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="762" />
       <source>Run Script</source>
       <translation>Skript ausführen</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1274" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="763" />
       <source>There is no editor open. Abort...</source>
       <translation>Es ist kein Editor offen. Abbruch...</translation>
     </message>
     <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="772" />
+      <source>The current editor does not contain a script. Abort...</source>
+      <translation>Der aktuelle Editortext enthält kein Skript. Abbruch...</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="781" />
+      <source>&lt;p&gt;Cannot run script.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
+      <translation>&lt;p&gt;Das Skript kann nicht ausgeführt werden.&lt;/p&gt;&lt;p&gt;Ursache: {0}&lt;/p&gt;</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="817" />
+      <source>Start Chart</source>
+      <translation>Chart starten</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="818" />
+      <source>&lt;p&gt;The Chart cannot be started.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
+      <translation>&lt;p&gt;Das Chart kann nicht gestartet werden.&lt;/p&gt;&lt;p&gt;Ursache: {0}&lt;/p&gt;</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="833" />
+      <source>µPy Chart</source>
+      <translation>µPy Chart</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="850" />
+      <source>Unsaved Chart Data</source>
+      <translation>Nicht gesicherte Chart Daten</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="851" />
+      <source>The chart contains unsaved data.</source>
+      <translation>Das Chart enthält ungesicherte Daten.</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="899" />
+      <source>Start File Manager</source>
+      <translation>Dateimanager starten</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="900" />
+      <source>&lt;p&gt;The File Manager cannot be started.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
+      <translation>&lt;p&gt;Der Dateimanager kann nicht gestartet werden.&lt;/p&gt;&lt;p&gt;Ursache: {0}&lt;/p&gt;</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="920" />
+      <source>µPy Files</source>
+      <translation>µPy Dateien</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="985" />
+      <source>Downloads</source>
+      <translation>Downloads</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1032" />
+      <source>Show Version</source>
+      <translation>Version anzeigen</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1035" />
+      <source>Show Implementation</source>
+      <translation>Implementierung anzeigen</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1038" />
+      <source>Show Board Data</source>
+      <translation>Board Daten anzeigen</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1224" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1043" />
+      <source>Synchronize Time</source>
+      <translation>Zeit synchronisieren</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1046" />
+      <source>Show Device Time</source>
+      <translation>Gerätezeit anzeigen</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1048" />
+      <source>Show Local Time</source>
+      <translation>Lokale Zeit anzeigen</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1051" />
+      <source>Show Time</source>
+      <translation>Zeit anzeigen</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1055" />
+      <source>Show Builtin Modules</source>
+      <translation>Eingebaute Module anzeigen</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1633" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1067" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1059" />
+      <source>Install Package</source>
+      <translation>Paket installieren</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1672" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1669" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1063" />
+      <source>Install Packages</source>
+      <translation>Pakete installieren</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1448" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1073" />
+      <source>Compile Python File</source>
+      <translation>Python Datei übersetzen</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1472" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1463" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1077" />
+      <source>Compile Current Editor</source>
+      <translation>Aktuellen Editor übersetzen</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1098" />
+      <source>Download Firmware</source>
+      <translation>Firmware herunterladen</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1105" />
+      <source>Show Documentation</source>
+      <translation>Dokumentation anzeigen</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1108" />
+      <source>Convert To UF2</source>
+      <translation>Zu UF2 konvertieren</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1109" />
+      <source>Flash UF2 Device</source>
+      <translation>UF2 Gerät flashen</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1112" />
+      <source>Manage Unknown Devices</source>
+      <translation>Unbekannte Geräte verwalten</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1115" />
+      <source>Ignored Serial Devices</source>
+      <translation>Ignorierte Serielle Geräte</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1118" />
+      <source>Configure</source>
+      <translation>Einstellungen</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1127" />
+      <source>&lt;h3&gt;Device Version Information&lt;/h3&gt;</source>
+      <translation>&lt;h3&gt;Versionsinformationen des Gerätes&lt;/h3&gt;</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1138" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1134" />
+      <source>Device Version Information</source>
+      <translation>Versionsinformationen des Gerätes</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1139" />
+      <source>No version information available.</source>
+      <translation>Keine Versionsinformationen verfügbar.</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1163" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1155" />
+      <source>unknown</source>
+      <translation>unbekannt</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1169" />
+      <source> ({0})</source>
+      <translation> ({0})</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1185" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1176" />
+      <source>Device Implementation Information</source>
+      <translation>Informationen zur Implementierung</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1177" />
+      <source>&lt;h3&gt;Device Implementation Information&lt;/h3&gt;&lt;p&gt;This device contains &lt;b&gt;{0} {1}{2}&lt;/b&gt;.&lt;/p&gt;</source>
+      <translation>&lt;h3&gt;Informationen zur Implementierung&lt;/h3&gt;&lt;p&gt;Dieses Gerät enthält &lt;b&gt;{0} {1}{2}&lt;/b&gt;.&lt;/p&gt;</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1186" />
+      <source>No device implementation information available.</source>
+      <translation>Keine Informationen zur Implementierung verfügbar.</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1225" />
+      <source>&lt;p&gt;The time of the connected device was synchronized with the local time.&lt;/p&gt;</source>
+      <translation>&lt;p&gt;Die Zeit des angeschlossenen Gerätes wurde mit der lokalen Zeit synchronisiert.&lt;/p&gt;</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1247" />
+      <source>&lt;h3&gt;Device Date and Time&lt;/h3&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{1}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
+      <translation>&lt;h3&gt;Datum und Zeit des Gerätes&lt;/h3&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Datum&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Zeit&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{1}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1255" />
+      <source>&lt;h3&gt;Device Date and Time&lt;/h3&gt;&lt;p&gt;{0}&lt;/p&gt;</source>
+      <translation>&lt;h3&gt;Datum und Zeit des Gerätes&lt;/h3&gt;&lt;p&gt;{0}&lt;/p&gt;</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1271" />
+      <source>Device Date and Time</source>
+      <translation>Datum und Zeit des Gerätes</translation>
+    </message>
+    <message>
       <location filename="../MicroPython/MicroPythonWidget.py" line="1283" />
-      <source>The current editor does not contain a script. Abort...</source>
-      <translation>Der aktuelle Editortext enthält kein Skript. Abbruch...</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1292" />
-      <source>&lt;p&gt;Cannot run script.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
-      <translation>&lt;p&gt;Das Skript kann nicht ausgeführt werden.&lt;/p&gt;&lt;p&gt;Ursache: {0}&lt;/p&gt;</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1328" />
-      <source>Start Chart</source>
-      <translation>Chart starten</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1329" />
-      <source>&lt;p&gt;The Chart cannot be started.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
-      <translation>&lt;p&gt;Das Chart kann nicht gestartet werden.&lt;/p&gt;&lt;p&gt;Ursache: {0}&lt;/p&gt;</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1344" />
-      <source>µPy Chart</source>
-      <translation>µPy Chart</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1361" />
-      <source>Unsaved Chart Data</source>
-      <translation>Nicht gesicherte Chart Daten</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1362" />
-      <source>The chart contains unsaved data.</source>
-      <translation>Das Chart enthält ungesicherte Daten.</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1410" />
-      <source>Start File Manager</source>
-      <translation>Dateimanager starten</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1411" />
-      <source>&lt;p&gt;The File Manager cannot be started.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
-      <translation>&lt;p&gt;Der Dateimanager kann nicht gestartet werden.&lt;/p&gt;&lt;p&gt;Ursache: {0}&lt;/p&gt;</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1431" />
-      <source>µPy Files</source>
-      <translation>µPy Dateien</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1496" />
-      <source>Downloads</source>
-      <translation>Downloads</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1543" />
-      <source>Show Version</source>
-      <translation>Version anzeigen</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1546" />
-      <source>Show Implementation</source>
-      <translation>Implementierung anzeigen</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1549" />
-      <source>Show Board Data</source>
-      <translation>Board Daten anzeigen</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1735" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1554" />
-      <source>Synchronize Time</source>
-      <translation>Zeit synchronisieren</translation>
+      <source>Local Date and Time</source>
+      <translation>Lokales Datum und Zeit</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1284" />
+      <source>&lt;h3&gt;Local Date and Time&lt;/h3&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{1}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
+      <translation>&lt;h3&gt;Lokales Datum und Zeit&lt;/h3&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Datum&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Zeit&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{1}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1325" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1308" />
+      <source>Date and Time</source>
+      <translation>Datum und Zeit</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1309" />
+      <source>&lt;table&gt;&lt;tr&gt;&lt;th&gt;&lt;/th&gt;&lt;th&gt;Local Date and Time&lt;/th&gt;&lt;th&gt;Device Date and Time&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td align='center'&gt;{0}&lt;/td&gt;&lt;td align='center'&gt;{2}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td align='center'&gt;{1}&lt;/td&gt;&lt;td align='center'&gt;{3}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
+      <translation>&lt;table&gt;&lt;tr&gt;&lt;th&gt;&lt;/th&gt;&lt;th&gt;Lokales Datum und Zeit&lt;/th&gt;&lt;th&gt;Datum und Zeit des Gerätes&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Datum&lt;/b&gt;&lt;/td&gt;&lt;td align='center'&gt;{0}&lt;/td&gt;&lt;td align='center'&gt;{2}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Zeit&lt;/b&gt;&lt;/td&gt;&lt;td align='center'&gt;{1}&lt;/td&gt;&lt;td align='center'&gt;{3}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1326" />
+      <source>&lt;table&gt;&lt;tr&gt;&lt;th&gt;Local Date and Time&lt;/th&gt;&lt;th&gt;Device Date and Time&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align='center'&gt;{0} {1}&lt;/td&gt;&lt;td align='center'&gt;{2}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
+      <translation>&lt;table&gt;&lt;tr&gt;&lt;th&gt;Lokales Datum und Zeit&lt;/th&gt;&lt;th&gt;Datum und Zeit des Gerätes&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align='center'&gt;{0} {1}&lt;/td&gt;&lt;td align='center'&gt;{2}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1350" />
+      <source>Error handling device</source>
+      <translation>Fehler bei Gerätekommunikation</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1351" />
+      <source>&lt;p&gt;There was an error communicating with the connected device.&lt;/p&gt;&lt;p&gt;Method: {0}&lt;/p&gt;&lt;p&gt;Message: {1}&lt;/p&gt;</source>
+      <translation>&lt;p&gt;Es trat ein Fehler bei der Kommunikation mit dem Gerät auf.&lt;/p&gt;&lt;p&gt;Methode: {0}&lt;/p&gt;&lt;p&gt;Nachricht: {1}&lt;/p&gt;</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1393" />
+      <source>The MicroPython cross compiler &lt;b&gt;mpy-cross&lt;/b&gt; cannot be found. Ensure it is in the search path or configure it on the MicroPython configuration page.</source>
+      <translation>Der MicroPython Crosscompiler &lt;b&gt;mpy-cross&lt;/b&gt; kann nicht gefunden werden. Stelle sicher, dass er im Suchpfad liegt oder konfiguriere ihn auf der MicroPython Konfigurationsseite.</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1419" />
+      <source>Python Files (*.py);;All Files (*)</source>
+      <translation>Python-Dateien (*.py);;Alle Dateien (*)</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1429" />
+      <source>The Python file &lt;b&gt;{0}&lt;/b&gt; does not exist. Aborting...</source>
+      <translation>Die Python Datei &lt;b&gt;{0}&lt;/b&gt; existiert nicht. Abbruch...</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1438" />
+      <source>'mpy-cross' Output</source>
+      <translation>'mpy-cross' Ausgabe</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1464" />
+      <source>The current editor does not contain a Python file. Aborting...</source>
+      <translation>Der aktuelle Editortext enthält keine Pythondatei. Abbruch...</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1556" />
+      <source>Add Unknown Devices</source>
+      <translation>Unbekannte Geräte hinzufügen</translation>
     </message>
     <message>
       <location filename="../MicroPython/MicroPythonWidget.py" line="1557" />
-      <source>Show Device Time</source>
-      <translation>Gerätezeit anzeigen</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1559" />
-      <source>Show Local Time</source>
-      <translation>Lokale Zeit anzeigen</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1562" />
-      <source>Show Time</source>
-      <translation>Zeit anzeigen</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1566" />
-      <source>Show Builtin Modules</source>
-      <translation>Eingebaute Module anzeigen</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2144" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1578" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1570" />
-      <source>Install Package</source>
-      <translation>Paket installieren</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2183" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2180" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1574" />
-      <source>Install Packages</source>
-      <translation>Pakete installieren</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1959" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1584" />
-      <source>Compile Python File</source>
-      <translation>Python Datei übersetzen</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1983" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1974" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1588" />
-      <source>Compile Current Editor</source>
-      <translation>Aktuellen Editor übersetzen</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1609" />
-      <source>Download Firmware</source>
-      <translation>Firmware herunterladen</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1616" />
-      <source>Show Documentation</source>
-      <translation>Dokumentation anzeigen</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1619" />
-      <source>Convert To UF2</source>
-      <translation>Zu UF2 konvertieren</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1620" />
-      <source>Flash UF2 Device</source>
-      <translation>UF2 Gerät flashen</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1623" />
-      <source>Manage Unknown Devices</source>
-      <translation>Unbekannte Geräte verwalten</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1626" />
-      <source>Ignored Serial Devices</source>
-      <translation>Ignorierte Serielle Geräte</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1629" />
-      <source>Configure</source>
-      <translation>Einstellungen</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1638" />
-      <source>&lt;h3&gt;Device Version Information&lt;/h3&gt;</source>
-      <translation>&lt;h3&gt;Versionsinformationen des Gerätes&lt;/h3&gt;</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1649" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1645" />
-      <source>Device Version Information</source>
-      <translation>Versionsinformationen des Gerätes</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1650" />
-      <source>No version information available.</source>
-      <translation>Keine Versionsinformationen verfügbar.</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1674" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1666" />
-      <source>unknown</source>
-      <translation>unbekannt</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1680" />
-      <source> ({0})</source>
-      <translation> ({0})</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1696" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1687" />
-      <source>Device Implementation Information</source>
-      <translation>Informationen zur Implementierung</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1688" />
-      <source>&lt;h3&gt;Device Implementation Information&lt;/h3&gt;&lt;p&gt;This device contains &lt;b&gt;{0} {1}{2}&lt;/b&gt;.&lt;/p&gt;</source>
-      <translation>&lt;h3&gt;Informationen zur Implementierung&lt;/h3&gt;&lt;p&gt;Dieses Gerät enthält &lt;b&gt;{0} {1}{2}&lt;/b&gt;.&lt;/p&gt;</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1697" />
-      <source>No device implementation information available.</source>
-      <translation>Keine Informationen zur Implementierung verfügbar.</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1736" />
-      <source>&lt;p&gt;The time of the connected device was synchronized with the local time.&lt;/p&gt;</source>
-      <translation>&lt;p&gt;Die Zeit des angeschlossenen Gerätes wurde mit der lokalen Zeit synchronisiert.&lt;/p&gt;</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1758" />
-      <source>&lt;h3&gt;Device Date and Time&lt;/h3&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{1}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
-      <translation>&lt;h3&gt;Datum und Zeit des Gerätes&lt;/h3&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Datum&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Zeit&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{1}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1766" />
-      <source>&lt;h3&gt;Device Date and Time&lt;/h3&gt;&lt;p&gt;{0}&lt;/p&gt;</source>
-      <translation>&lt;h3&gt;Datum und Zeit des Gerätes&lt;/h3&gt;&lt;p&gt;{0}&lt;/p&gt;</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1782" />
-      <source>Device Date and Time</source>
-      <translation>Datum und Zeit des Gerätes</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1794" />
-      <source>Local Date and Time</source>
-      <translation>Lokales Datum und Zeit</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1795" />
-      <source>&lt;h3&gt;Local Date and Time&lt;/h3&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{1}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
-      <translation>&lt;h3&gt;Lokales Datum und Zeit&lt;/h3&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Datum&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Zeit&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{1}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1836" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1819" />
-      <source>Date and Time</source>
-      <translation>Datum und Zeit</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1820" />
-      <source>&lt;table&gt;&lt;tr&gt;&lt;th&gt;&lt;/th&gt;&lt;th&gt;Local Date and Time&lt;/th&gt;&lt;th&gt;Device Date and Time&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td align='center'&gt;{0}&lt;/td&gt;&lt;td align='center'&gt;{2}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td align='center'&gt;{1}&lt;/td&gt;&lt;td align='center'&gt;{3}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
-      <translation>&lt;table&gt;&lt;tr&gt;&lt;th&gt;&lt;/th&gt;&lt;th&gt;Lokales Datum und Zeit&lt;/th&gt;&lt;th&gt;Datum und Zeit des Gerätes&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Datum&lt;/b&gt;&lt;/td&gt;&lt;td align='center'&gt;{0}&lt;/td&gt;&lt;td align='center'&gt;{2}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Zeit&lt;/b&gt;&lt;/td&gt;&lt;td align='center'&gt;{1}&lt;/td&gt;&lt;td align='center'&gt;{3}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1837" />
-      <source>&lt;table&gt;&lt;tr&gt;&lt;th&gt;Local Date and Time&lt;/th&gt;&lt;th&gt;Device Date and Time&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align='center'&gt;{0} {1}&lt;/td&gt;&lt;td align='center'&gt;{2}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
-      <translation>&lt;table&gt;&lt;tr&gt;&lt;th&gt;Lokales Datum und Zeit&lt;/th&gt;&lt;th&gt;Datum und Zeit des Gerätes&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align='center'&gt;{0} {1}&lt;/td&gt;&lt;td align='center'&gt;{2}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1861" />
-      <source>Error handling device</source>
-      <translation>Fehler bei Gerätekommunikation</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1862" />
-      <source>&lt;p&gt;There was an error communicating with the connected device.&lt;/p&gt;&lt;p&gt;Method: {0}&lt;/p&gt;&lt;p&gt;Message: {1}&lt;/p&gt;</source>
-      <translation>&lt;p&gt;Es trat ein Fehler bei der Kommunikation mit dem Gerät auf.&lt;/p&gt;&lt;p&gt;Methode: {0}&lt;/p&gt;&lt;p&gt;Nachricht: {1}&lt;/p&gt;</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1904" />
-      <source>The MicroPython cross compiler &lt;b&gt;mpy-cross&lt;/b&gt; cannot be found. Ensure it is in the search path or configure it on the MicroPython configuration page.</source>
-      <translation>Der MicroPython Crosscompiler &lt;b&gt;mpy-cross&lt;/b&gt; kann nicht gefunden werden. Stelle sicher, dass er im Suchpfad liegt oder konfiguriere ihn auf der MicroPython Konfigurationsseite.</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1930" />
-      <source>Python Files (*.py);;All Files (*)</source>
-      <translation>Python-Dateien (*.py);;Alle Dateien (*)</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1940" />
-      <source>The Python file &lt;b&gt;{0}&lt;/b&gt; does not exist. Aborting...</source>
-      <translation>Die Python Datei &lt;b&gt;{0}&lt;/b&gt; existiert nicht. Abbruch...</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1949" />
-      <source>'mpy-cross' Output</source>
-      <translation>'mpy-cross' Ausgabe</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1975" />
-      <source>The current editor does not contain a Python file. Aborting...</source>
-      <translation>Der aktuelle Editortext enthält keine Pythondatei. Abbruch...</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2067" />
-      <source>Add Unknown Devices</source>
-      <translation>Unbekannte Geräte hinzufügen</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2068" />
       <source>Select the devices to be added:</source>
       <translation>Wähle die hinzuzufügenden unbekannten Geräte:</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2117" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1606" />
       <source>Plus any modules on the filesystem.</source>
       <translation>Zusätzlich alle Module im Dateisystem.</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2169" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1658" />
       <source>Package '{0}' was installed successfully.</source>
       <translation>Paket '{0}' wurde erfolgreich installiert.</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2184" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1673" />
       <source>Enter the packages to be installed separated by whitespace:</source>
       <translation>Gib die zu installierenden Pakete durch Leerzeichen getrennt ein:</translation>
     </message>
     <message>
       <location filename="../MicroPython/MicroPythonWidget.ui" line="0" />
-      <source>Press to check for connected devices</source>
-      <translation>Drücken, um nach angeschlossenen Geräten zu suchen</translation>
+      <source>Press to detect connected devices and repopulate the device selector.</source>
+      <translation>Drücken, um verbundene Geräte zu erkennen und die Auswahlliste neu aufzubauen.</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.ui" line="0" />
+      <source>Press to edit the list of configured WebREPL connections.</source>
+      <translation>Drücken, um die Liste konfigurierter WebREPL Verbindungen zu bearbeiten.</translation>
     </message>
     <message>
       <location filename="../MicroPython/MicroPythonWidget.ui" line="0" />
@@ -51417,29 +51691,29 @@
       <translation>Das Skript ist leer. Abbruch.</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="569" />
+      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="571" />
       <source>MicroPython Firmware for BBC micro:bit V1</source>
       <translation>MicroPython Firmware für  BBC micro:bit V1</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="601" />
-      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="588" />
-      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="573" />
+      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="603" />
+      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="590" />
+      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="575" />
       <source>DAPLink Firmware</source>
       <translation>DAPLink Firmware</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="580" />
+      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="582" />
       <source>MicroPython Firmware for BBC micro:bit V2</source>
       <translation>MicroPython Firmware für  BBC micro:bit V2</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="584" />
+      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="586" />
       <source>CircuitPython Firmware for BBC micro:bit V2</source>
       <translation>CircuitPython Firmware für  BBC micro:bit V2</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="597" />
+      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="599" />
       <source>MicroPython Firmware</source>
       <translation>MicroPython Firmware</translation>
     </message>
@@ -58652,18 +58926,18 @@
   <context>
     <name>Preferences</name>
     <message>
-      <location filename="../Preferences/__init__.py" line="1815" />
+      <location filename="../Preferences/__init__.py" line="1817" />
       <source>Export Preferences</source>
       <translation>Einstellungen exportieren</translation>
     </message>
     <message>
+      <location filename="../Preferences/__init__.py" line="1846" />
+      <location filename="../Preferences/__init__.py" line="1819" />
+      <source>Properties File (*.ini);;All Files (*)</source>
+      <translation>Properties-Dateien (*.ini);;Alle Dateien (*)</translation>
+    </message>
+    <message>
       <location filename="../Preferences/__init__.py" line="1844" />
-      <location filename="../Preferences/__init__.py" line="1817" />
-      <source>Properties File (*.ini);;All Files (*)</source>
-      <translation>Properties-Dateien (*.ini);;Alle Dateien (*)</translation>
-    </message>
-    <message>
-      <location filename="../Preferences/__init__.py" line="1842" />
       <source>Import Preferences</source>
       <translation>Einstellungen importieren</translation>
     </message>
@@ -68829,88 +69103,88 @@
       <translation>MicroPython Version</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="364" />
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="365" />
       <source>MicroPython Firmware</source>
       <translation>MicroPython Firmware</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="368" />
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="369" />
       <source>Pimoroni Pico Firmware</source>
       <translation>Pimoroni Pico Firmware</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="371" />
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="372" />
       <source>CircuitPython Firmware</source>
       <translation>CircuitPython Firmware</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="375" />
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="376" />
       <source>CircuitPython Libraries</source>
       <translation>CircuitPython Bibliotheken</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="427" />
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="428" />
       <source>Set Country</source>
       <translation>Staat einstellen</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="983" />
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="618" />
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="978" />
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="617" />
       <source>unknown ({0})</source>
       <translation>unbekannt ({0})</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1093" />
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1088" />
       <source>Pico Wireless does not support setting the IPv4 parameters of the WiFi access point.</source>
       <translation>Pico Wireless unterstützt nicht die Konfiguration der IPv4 Parameter des WiFi Access Point.</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1168" />
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1161" />
       <source>Pico Wireless does not support reporting of connected clients.</source>
       <translation>Pico Wireless unterstützt nicht die Ermittlung verbundener Geräte.</translation>
     </message>
     <message>
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1248" />
+      <source>Active</source>
+      <translation>Aktiv</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1249" />
+      <source>Connected</source>
+      <translation>Verbunden</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1252" />
+      <source>Status</source>
+      <translation>Status</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1256" />
+      <source>Hostname</source>
+      <translation>Hostname</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1257" />
+      <source>IPv4 Address</source>
+      <translation>IPv4 Adresse</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1258" />
+      <source>Netmask</source>
+      <translation>Netzmaske</translation>
+    </message>
+    <message>
       <location filename="../MicroPython/Devices/RP2040Devices.py" line="1259" />
-      <source>Active</source>
-      <translation>Aktiv</translation>
+      <source>Gateway</source>
+      <translation>Gateway</translation>
     </message>
     <message>
       <location filename="../MicroPython/Devices/RP2040Devices.py" line="1260" />
-      <source>Connected</source>
-      <translation>Verbunden</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1263" />
-      <source>Status</source>
-      <translation>Status</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1267" />
-      <source>Hostname</source>
-      <translation>Hostname</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1268" />
-      <source>IPv4 Address</source>
-      <translation>IPv4 Adresse</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1269" />
-      <source>Netmask</source>
-      <translation>Netzmaske</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1270" />
-      <source>Gateway</source>
-      <translation>Gateway</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1271" />
       <source>DNS</source>
       <translation>DNS</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1272" />
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1261" />
       <source>MAC-Address</source>
       <translation>MAC-Addresse</translation>
     </message>
@@ -69840,19 +70114,19 @@
       <translation>Alle ersetzen</translation>
     </message>
     <message>
-      <location filename="../QScintilla/SearchReplaceWidget.py" line="1045" />
+      <location filename="../QScintilla/SearchReplaceWidget.py" line="1046" />
       <location filename="../QScintilla/SearchReplaceWidget.py" line="597" />
       <location filename="../QScintilla/SearchReplaceWidget.py" line="559" />
       <source>'{0}' was not found.</source>
       <translation>„{0}“ wurde nicht gefunden.</translation>
     </message>
     <message>
-      <location filename="../QScintilla/SearchReplaceWidget.py" line="1198" />
+      <location filename="../QScintilla/SearchReplaceWidget.py" line="1199" />
       <source>Replaced {0} occurrences.</source>
       <translation>{0} Vorkommen ersetzt.</translation>
     </message>
     <message>
-      <location filename="../QScintilla/SearchReplaceWidget.py" line="1204" />
+      <location filename="../QScintilla/SearchReplaceWidget.py" line="1205" />
       <source>Nothing replaced because '{0}' was not found.</source>
       <translation>Es wurde nichts ersetzt, da „{0}“ nicht gefunden wurde.</translation>
     </message>
@@ -83040,7 +83314,7 @@
       <translation>MicroPython Flashanweisungen</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/TeensyDevices.py" line="315" />
+      <location filename="../MicroPython/Devices/TeensyDevices.py" line="316" />
       <location filename="../MicroPython/Devices/TeensyDevices.py" line="154" />
       <source>Flash MicroPython Firmware</source>
       <translation>MicroPython Firmware flashen</translation>
@@ -83081,17 +83355,17 @@
       <translation>MicroPython Version</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/TeensyDevices.py" line="316" />
+      <location filename="../MicroPython/Devices/TeensyDevices.py" line="317" />
       <source>&lt;p&gt;Teensy 4.0 and Teensy 4.1 are flashed using the 'Teensy Loader' application. Make sure you downloaded the MicroPython or CircuitPython .hex file.&lt;/p&gt;&lt;p&gt;See &lt;a href="{0}"&gt;the PJRC Teensy web site&lt;/a&gt; for details.&lt;/p&gt;</source>
       <translation>&lt;p&gt;Teensy 4.0 und Teensy 4.1 werden mit der 'Teensy Loader' Anwendung geflasht. Stelle sicher, dass die MicroPython .hex Datei geladen ist.&lt;/p&gt;&lt;p&gt;Siehe &lt;a href="{0}"&gt;die PJRC Teensy Webseite&lt;/a&gt; für Details.&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/TeensyDevices.py" line="338" />
-      <source>Start 'Teensy Loader'</source>
-      <translation>'Teensy Loader' starten</translation>
-    </message>
-    <message>
       <location filename="../MicroPython/Devices/TeensyDevices.py" line="339" />
+      <source>Start 'Teensy Loader'</source>
+      <translation>'Teensy Loader' starten</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/Devices/TeensyDevices.py" line="340" />
       <source>&lt;p&gt;The 'Teensy Loader' application &lt;b&gt;teensy&lt;/b&gt; could not be started. Ensure it is in the application search path or start it manually.&lt;/p&gt;</source>
       <translation>&lt;p&gt;Die 'Teensy Loader' Anwendung &lt;b&gt;teensy&lt;/b&gt; konnte nicht gestartet werden. Stelle sicher, dass sie sich im Suchpfad befindet oder starte sie manuell.&lt;/p&gt;</translation>
     </message>
--- a/src/eric7/i18n/eric7_empty.ts	Tue May 02 11:39:09 2023 +0200
+++ b/src/eric7/i18n/eric7_empty.ts	Thu May 04 17:58:52 2023 +0200
@@ -1716,77 +1716,77 @@
   <context>
     <name>BaseDevice</name>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="196" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="199" />
       <source>Device Data Not Available</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="197" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="200" />
       <source>&lt;p&gt;The device data is not available. Try to connect to the device again. Aborting...&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="250" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="253" />
       <source>Unsupported Device</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="260" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="263" />
       <source>REPL is not supported by this device.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="279" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="282" />
       <source>Plotter is not supported by this device.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="298" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="301" />
       <source>Running scripts is not supported by this device.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="317" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="320" />
       <source>File Manager is not supported by this device.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="372" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="375" />
       <source>Select Device Directory</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="373" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="376" />
       <source>Select the directory for the connected device:</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="519" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="528" />
       <source>Detected an error without indications.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="1464" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="1473" />
       <source>Operation not supported.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="1772" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="1781" />
       <source>Yes</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="1772" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="1781" />
       <source>No</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="1774" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="1783" />
       <source>yes</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="1774" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="1783" />
       <source>no</source>
       <translation type="unfinished" />
     </message>
@@ -4122,14 +4122,14 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1128" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1126" />
       <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="865" />
       <source>unknown ({0})</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1577" />
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1500" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1567" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1490" />
       <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1040" />
       <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="961" />
       <source>The device volume is not available.</source>
@@ -4142,94 +4142,94 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1539" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1529" />
       <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1005" />
       <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="977" />
       <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; exists already. Shall it be replaced?&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1546" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1536" />
       <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1012" />
       <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="984" />
       <source>Aborted</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1195" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1193" />
       <source>CircuitPython does not support setting the IPv4 parameters of the WiFi access point.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1266" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1262" />
       <source>CircuitPython does not support reporting of connected clients.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1675" />
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1350" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1663" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1342" />
       <source>Active</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1681" />
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1351" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1669" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1343" />
       <source>Connected</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1352" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1344" />
       <source>IPv4 Address</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1353" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1345" />
       <source>Netmask</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1354" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1346" />
       <source>Gateway</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1355" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1347" />
       <source>DNS</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1677" />
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1356" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1665" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1348" />
       <source>MAC-Address</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1357" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1349" />
       <source>Chip Type</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1358" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1350" />
       <source>max. Sockets</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1538" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1528" />
       <source>Write Connect Script</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1676" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1664" />
       <source>Name</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1679" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1667" />
       <source>Address Type</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1682" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1670" />
       <source>Advertising</source>
       <translation type="unfinished" />
     </message>
@@ -20412,8 +20412,8 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1506" />
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1490" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1498" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1482" />
       <location filename="../MicroPython/Devices/EspDevices.py" line="196" />
       <source>Erase Flash</source>
       <translation type="unfinished" />
@@ -20424,7 +20424,7 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1591" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1583" />
       <location filename="../MicroPython/Devices/EspDevices.py" line="203" />
       <source>Flash Additional Firmware</source>
       <translation type="unfinished" />
@@ -20475,8 +20475,8 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1590" />
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1549" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1582" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1541" />
       <location filename="../MicroPython/Devices/EspDevices.py" line="363" />
       <source>'esptool write_flash' Output</source>
       <translation type="unfinished" />
@@ -20542,68 +20542,68 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="980" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="978" />
       <source>unknown ({0})</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1209" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1201" />
       <source>Active</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1210" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1202" />
       <source>Name</source>
       <translation type="unfinished" />
     </message>
     <message>
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1203" />
+      <source>MAC-Address</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1206" />
+      <source>Address Type</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1207" />
+      <source>Public</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1207" />
+      <source>Random</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
       <location filename="../MicroPython/Devices/EspDevices.py" line="1211" />
-      <source>MAC-Address</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1214" />
-      <source>Address Type</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1215" />
-      <source>Public</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1215" />
-      <source>Random</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1219" />
       <source>Rx-Buffer</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1221" />
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1219" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1213" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1211" />
       <source>{0} Bytes</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1221" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1213" />
       <source>MTU</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1491" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1483" />
       <source>Shall the flash of the selected device really be erased?</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1505" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1497" />
       <source>'esptool erase_flash' Output</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1550" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1542" />
       <source>Flash µPy/CPy Firmware</source>
       <translation type="unfinished" />
     </message>
@@ -50058,15 +50058,16 @@
     </message>
     <message>
       <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
-      <source>Serial Link</source>
+      <source>Device Communication</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
-      <source>Timeout for Serial Link Communication:</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
+      <source>Serial Link Timeout:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
       <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
       <source>Enter the timout value</source>
       <translation type="unfinished" />
@@ -50074,11 +50075,22 @@
     <message>
       <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
       <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
+      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
       <source> s</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
+      <source>WebRepl Timeout:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
+      <source>Device Time</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
       <source>Select to synchronize the time after connection is established</source>
       <translation type="unfinished" />
     </message>
@@ -50171,8 +50183,8 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.py" line="354" />
-      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.py" line="337" />
+      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.py" line="364" />
+      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.py" line="347" />
       <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
       <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
       <source>Press to show the password</source>
@@ -50514,8 +50526,8 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.py" line="350" />
-      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.py" line="333" />
+      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.py" line="360" />
+      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.py" line="343" />
       <source>Press to hide the password</source>
       <translation type="unfinished" />
     </message>
@@ -50529,37 +50541,298 @@
     </message>
   </context>
   <context>
+    <name>MicroPythonReplEdit</name>
+    <message>
+      <location filename="../MicroPython/MicroPythonReplWidget.py" line="322" />
+      <source>Clear</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonReplWidget.py" line="327" />
+      <source>Copy</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonReplWidget.py" line="333" />
+      <source>Paste</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonReplWidget.py" line="340" />
+      <source>Select All</source>
+      <translation type="unfinished" />
+    </message>
+  </context>
+  <context>
+    <name>MicroPythonWebreplConnectionDialog</name>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.py" line="97" />
+      <source>Press to hide the password.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.ui" line="0" />
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.py" line="101" />
+      <source>Press to show the password.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.ui" line="0" />
+      <source>WebREPL Connection</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.ui" line="0" />
+      <source>Host:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.ui" line="0" />
+      <source>Enter the host name or IPv4 address of the device.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.ui" line="0" />
+      <source>Port:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.ui" line="0" />
+      <source>Enter the port of the WebREPL (empty for default port 8266).</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.ui" line="0" />
+      <source>Password:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.ui" line="0" />
+      <source>Enter the password for this device connection.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.ui" line="0" />
+      <source>Device Type:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.ui" line="0" />
+      <source>Select the device type</source>
+      <translation type="unfinished" />
+    </message>
+  </context>
+  <context>
+    <name>MicroPythonWebreplDeviceInterface</name>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplDeviceInterface.py" line="80" />
+      <source>WebREPL Password</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplDeviceInterface.py" line="81" />
+      <source>Enter the WebREPL password:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplDeviceInterface.py" line="100" />
+      <source>WebREPL Login</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplDeviceInterface.py" line="101" />
+      <source>The login to the selected device 'webrepl' failed. The given password may be incorrect.</source>
+      <translation type="unfinished" />
+    </message>
+  </context>
+  <context>
+    <name>MicroPythonWebreplUrlAddEditDialog</name>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>WebREPL URL</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Name:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Enter a unique name for the WebREPL connection.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Description:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Enter a short description to be shown in the selector.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Host:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Enter the host name or IPv4 address of the device.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Port:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Enter the port of the WebREPL (empty for default port 8266).</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Password:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Enter the password for this device connection.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Device Type:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Select the device type</source>
+      <translation type="unfinished" />
+    </message>
+  </context>
+  <context>
+    <name>MicroPythonWebreplUrlsConfigDialog</name>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.py" line="133" />
+      <source>Remove Selected WebREPL URLs</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.py" line="134" />
+      <source>Shall the selected WebREPL URLs really be removed?</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.py" line="150" />
+      <source>Remove All WebREPL URLs</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.py" line="151" />
+      <source>Shall all WebREPL URLs really be removed?</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>WebREPL URLs</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>Name</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>Description</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>URL</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>Press to add a new entry.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>Add...</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>Press to edit the selected entry.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>Edit...</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>Press to remove the selected entries.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>Remove</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>Press to remove all entries.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>Remove All</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>&lt;b&gt;Note:&lt;/b&gt; The name of an entry must be unique amongst the list.</source>
+      <translation type="unfinished" />
+    </message>
+  </context>
+  <context>
     <name>MicroPythonWidget</name>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="247" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="109" />
       <source>MicroPython Menu</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="306" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="145" />
       <source>&lt;h3&gt;The QtSerialPort package is not available.&lt;br/&gt;MicroPython support is deactivated.&lt;/h3&gt;</source>
       <translation type="unfinished" />
     </message>
     <message numerus="yes">
-      <location filename="../MicroPython/MicroPythonWidget.py" line="347" />
-      <source>%n supported device(s) detected.</source>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="173" />
+      <source>%n supported serial device(s) detected.</source>
       <translation type="unfinished">
         <numerusform />
       </translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="361" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="187" />
       <source>{0} - {1} ({2})</source>
       <comment>board name, description, port name</comment>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="381" />
-      <source>No supported devices detected.</source>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="210" />
+      <source>No supported serial devices detected.</source>
       <translation type="unfinished" />
     </message>
     <message numerus="yes">
-      <location filename="../MicroPython/MicroPythonWidget.py" line="385" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="214" />
       <source>
 %n unknown device(s) for manual selection.</source>
       <translation type="unfinished">
@@ -50567,70 +50840,63 @@
       </translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="392" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="221" />
       <source>Manual Selection</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="456" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="427" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="232" />
+      <source>WebREPL (manual)</source>
+      <translation type="unfinished" />
+    </message>
+    <message numerus="yes">
+      <location filename="../MicroPython/MicroPythonWidget.py" line="251" />
+      <source>
+%n WebREPL connection(s) defined.</source>
+      <translation type="unfinished">
+        <numerusform />
+      </translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="311" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="282" />
       <source>Unknown MicroPython Device</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="428" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="283" />
       <source>&lt;p&gt;Detected these unknown serial devices&lt;/p&gt;&lt;ul&gt;&lt;li&gt;{0}&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Please report them together with the board name and a short description to &lt;a href="mailto:{1}"&gt; the eric bug reporting address&lt;/a&gt; if it is a MicroPython board.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="440" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="295" />
       <source>{0} (0x{1:04x}/0x{2:04x})</source>
       <comment>description, VId, PId</comment>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="457" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="312" />
       <source>Would you like to add them to the list of manually configured devices?</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="592" />
-      <source>Clear</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="597" />
-      <source>Copy</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="603" />
-      <source>Paste</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="610" />
-      <source>Select All</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="636" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="451" />
       <source>Press to disconnect the current device</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../MicroPython/MicroPythonWidget.ui" line="0" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="641" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="456" />
       <source>Press to connect the selected device</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="673" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="488" />
       <source>No device attached</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="674" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="489" />
       <source>Please ensure the device is plugged into your computer and selected.
 
 It must have a version of MicroPython (or CircuitPython) flashed onto it before anything will work.
@@ -50639,353 +50905,358 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="703" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="518" />
       <source>Start REPL</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="704" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="519" />
       <source>&lt;p&gt;The REPL cannot be started.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1232" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1221" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="716" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="705" />
       <source>Serial Device Connect</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1222" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="706" />
       <source>&lt;p&gt;The device at serial port &lt;b&gt;{0}&lt;/b&gt; does not respond. It may not have a MicroPython firmware flashed.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1233" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="717" />
       <source>&lt;p&gt;Cannot connect to device at serial port &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1291" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1282" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1273" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="780" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="771" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="762" />
       <source>Run Script</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1274" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="763" />
       <source>There is no editor open. Abort...</source>
       <translation type="unfinished" />
     </message>
     <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="772" />
+      <source>The current editor does not contain a script. Abort...</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="781" />
+      <source>&lt;p&gt;Cannot run script.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="817" />
+      <source>Start Chart</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="818" />
+      <source>&lt;p&gt;The Chart cannot be started.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="833" />
+      <source>µPy Chart</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="850" />
+      <source>Unsaved Chart Data</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="851" />
+      <source>The chart contains unsaved data.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="899" />
+      <source>Start File Manager</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="900" />
+      <source>&lt;p&gt;The File Manager cannot be started.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="920" />
+      <source>µPy Files</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="985" />
+      <source>Downloads</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1032" />
+      <source>Show Version</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1035" />
+      <source>Show Implementation</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1038" />
+      <source>Show Board Data</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1224" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1043" />
+      <source>Synchronize Time</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1046" />
+      <source>Show Device Time</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1048" />
+      <source>Show Local Time</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1051" />
+      <source>Show Time</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1055" />
+      <source>Show Builtin Modules</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1633" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1067" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1059" />
+      <source>Install Package</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1672" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1669" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1063" />
+      <source>Install Packages</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1448" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1073" />
+      <source>Compile Python File</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1472" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1463" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1077" />
+      <source>Compile Current Editor</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1098" />
+      <source>Download Firmware</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1105" />
+      <source>Show Documentation</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1108" />
+      <source>Convert To UF2</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1109" />
+      <source>Flash UF2 Device</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1112" />
+      <source>Manage Unknown Devices</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1115" />
+      <source>Ignored Serial Devices</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1118" />
+      <source>Configure</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1127" />
+      <source>&lt;h3&gt;Device Version Information&lt;/h3&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1138" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1134" />
+      <source>Device Version Information</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1139" />
+      <source>No version information available.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1163" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1155" />
+      <source>unknown</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1169" />
+      <source> ({0})</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1185" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1176" />
+      <source>Device Implementation Information</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1177" />
+      <source>&lt;h3&gt;Device Implementation Information&lt;/h3&gt;&lt;p&gt;This device contains &lt;b&gt;{0} {1}{2}&lt;/b&gt;.&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1186" />
+      <source>No device implementation information available.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1225" />
+      <source>&lt;p&gt;The time of the connected device was synchronized with the local time.&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1247" />
+      <source>&lt;h3&gt;Device Date and Time&lt;/h3&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{1}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1255" />
+      <source>&lt;h3&gt;Device Date and Time&lt;/h3&gt;&lt;p&gt;{0}&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1271" />
+      <source>Device Date and Time</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
       <location filename="../MicroPython/MicroPythonWidget.py" line="1283" />
-      <source>The current editor does not contain a script. Abort...</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1292" />
-      <source>&lt;p&gt;Cannot run script.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1328" />
-      <source>Start Chart</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1329" />
-      <source>&lt;p&gt;The Chart cannot be started.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1344" />
-      <source>µPy Chart</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1361" />
-      <source>Unsaved Chart Data</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1362" />
-      <source>The chart contains unsaved data.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1410" />
-      <source>Start File Manager</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1411" />
-      <source>&lt;p&gt;The File Manager cannot be started.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1431" />
-      <source>µPy Files</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1496" />
-      <source>Downloads</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1543" />
-      <source>Show Version</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1546" />
-      <source>Show Implementation</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1549" />
-      <source>Show Board Data</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1735" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1554" />
-      <source>Synchronize Time</source>
+      <source>Local Date and Time</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1284" />
+      <source>&lt;h3&gt;Local Date and Time&lt;/h3&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{1}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1325" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1308" />
+      <source>Date and Time</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1309" />
+      <source>&lt;table&gt;&lt;tr&gt;&lt;th&gt;&lt;/th&gt;&lt;th&gt;Local Date and Time&lt;/th&gt;&lt;th&gt;Device Date and Time&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td align='center'&gt;{0}&lt;/td&gt;&lt;td align='center'&gt;{2}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td align='center'&gt;{1}&lt;/td&gt;&lt;td align='center'&gt;{3}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1326" />
+      <source>&lt;table&gt;&lt;tr&gt;&lt;th&gt;Local Date and Time&lt;/th&gt;&lt;th&gt;Device Date and Time&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align='center'&gt;{0} {1}&lt;/td&gt;&lt;td align='center'&gt;{2}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1350" />
+      <source>Error handling device</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1351" />
+      <source>&lt;p&gt;There was an error communicating with the connected device.&lt;/p&gt;&lt;p&gt;Method: {0}&lt;/p&gt;&lt;p&gt;Message: {1}&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1393" />
+      <source>The MicroPython cross compiler &lt;b&gt;mpy-cross&lt;/b&gt; cannot be found. Ensure it is in the search path or configure it on the MicroPython configuration page.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1419" />
+      <source>Python Files (*.py);;All Files (*)</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1429" />
+      <source>The Python file &lt;b&gt;{0}&lt;/b&gt; does not exist. Aborting...</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1438" />
+      <source>'mpy-cross' Output</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1464" />
+      <source>The current editor does not contain a Python file. Aborting...</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1556" />
+      <source>Add Unknown Devices</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../MicroPython/MicroPythonWidget.py" line="1557" />
-      <source>Show Device Time</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1559" />
-      <source>Show Local Time</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1562" />
-      <source>Show Time</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1566" />
-      <source>Show Builtin Modules</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2144" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1578" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1570" />
-      <source>Install Package</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2183" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2180" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1574" />
-      <source>Install Packages</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1959" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1584" />
-      <source>Compile Python File</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1983" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1974" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1588" />
-      <source>Compile Current Editor</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1609" />
-      <source>Download Firmware</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1616" />
-      <source>Show Documentation</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1619" />
-      <source>Convert To UF2</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1620" />
-      <source>Flash UF2 Device</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1623" />
-      <source>Manage Unknown Devices</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1626" />
-      <source>Ignored Serial Devices</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1629" />
-      <source>Configure</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1638" />
-      <source>&lt;h3&gt;Device Version Information&lt;/h3&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1649" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1645" />
-      <source>Device Version Information</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1650" />
-      <source>No version information available.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1674" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1666" />
-      <source>unknown</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1680" />
-      <source> ({0})</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1696" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1687" />
-      <source>Device Implementation Information</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1688" />
-      <source>&lt;h3&gt;Device Implementation Information&lt;/h3&gt;&lt;p&gt;This device contains &lt;b&gt;{0} {1}{2}&lt;/b&gt;.&lt;/p&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1697" />
-      <source>No device implementation information available.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1736" />
-      <source>&lt;p&gt;The time of the connected device was synchronized with the local time.&lt;/p&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1758" />
-      <source>&lt;h3&gt;Device Date and Time&lt;/h3&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{1}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1766" />
-      <source>&lt;h3&gt;Device Date and Time&lt;/h3&gt;&lt;p&gt;{0}&lt;/p&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1782" />
-      <source>Device Date and Time</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1794" />
-      <source>Local Date and Time</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1795" />
-      <source>&lt;h3&gt;Local Date and Time&lt;/h3&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{1}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1836" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1819" />
-      <source>Date and Time</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1820" />
-      <source>&lt;table&gt;&lt;tr&gt;&lt;th&gt;&lt;/th&gt;&lt;th&gt;Local Date and Time&lt;/th&gt;&lt;th&gt;Device Date and Time&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td align='center'&gt;{0}&lt;/td&gt;&lt;td align='center'&gt;{2}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td align='center'&gt;{1}&lt;/td&gt;&lt;td align='center'&gt;{3}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1837" />
-      <source>&lt;table&gt;&lt;tr&gt;&lt;th&gt;Local Date and Time&lt;/th&gt;&lt;th&gt;Device Date and Time&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align='center'&gt;{0} {1}&lt;/td&gt;&lt;td align='center'&gt;{2}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1861" />
-      <source>Error handling device</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1862" />
-      <source>&lt;p&gt;There was an error communicating with the connected device.&lt;/p&gt;&lt;p&gt;Method: {0}&lt;/p&gt;&lt;p&gt;Message: {1}&lt;/p&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1904" />
-      <source>The MicroPython cross compiler &lt;b&gt;mpy-cross&lt;/b&gt; cannot be found. Ensure it is in the search path or configure it on the MicroPython configuration page.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1930" />
-      <source>Python Files (*.py);;All Files (*)</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1940" />
-      <source>The Python file &lt;b&gt;{0}&lt;/b&gt; does not exist. Aborting...</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1949" />
-      <source>'mpy-cross' Output</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1975" />
-      <source>The current editor does not contain a Python file. Aborting...</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2067" />
-      <source>Add Unknown Devices</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2068" />
       <source>Select the devices to be added:</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2117" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1606" />
       <source>Plus any modules on the filesystem.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2169" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1658" />
       <source>Package '{0}' was installed successfully.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2184" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1673" />
       <source>Enter the packages to be installed separated by whitespace:</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../MicroPython/MicroPythonWidget.ui" line="0" />
-      <source>Press to check for connected devices</source>
+      <source>Press to detect connected devices and repopulate the device selector.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.ui" line="0" />
+      <source>Press to edit the list of configured WebREPL connections.</source>
       <translation type="unfinished" />
     </message>
     <message>
@@ -51171,29 +51442,29 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="569" />
+      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="571" />
       <source>MicroPython Firmware for BBC micro:bit V1</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="601" />
-      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="588" />
-      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="573" />
+      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="603" />
+      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="590" />
+      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="575" />
       <source>DAPLink Firmware</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="580" />
+      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="582" />
       <source>MicroPython Firmware for BBC micro:bit V2</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="584" />
+      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="586" />
       <source>CircuitPython Firmware for BBC micro:bit V2</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="597" />
+      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="599" />
       <source>MicroPython Firmware</source>
       <translation type="unfinished" />
     </message>
@@ -58387,18 +58658,18 @@
   <context>
     <name>Preferences</name>
     <message>
-      <location filename="../Preferences/__init__.py" line="1815" />
+      <location filename="../Preferences/__init__.py" line="1817" />
       <source>Export Preferences</source>
       <translation type="unfinished" />
     </message>
     <message>
+      <location filename="../Preferences/__init__.py" line="1846" />
+      <location filename="../Preferences/__init__.py" line="1819" />
+      <source>Properties File (*.ini);;All Files (*)</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
       <location filename="../Preferences/__init__.py" line="1844" />
-      <location filename="../Preferences/__init__.py" line="1817" />
-      <source>Properties File (*.ini);;All Files (*)</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Preferences/__init__.py" line="1842" />
       <source>Import Preferences</source>
       <translation type="unfinished" />
     </message>
@@ -68419,88 +68690,88 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="364" />
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="365" />
       <source>MicroPython Firmware</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="368" />
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="369" />
       <source>Pimoroni Pico Firmware</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="371" />
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="372" />
       <source>CircuitPython Firmware</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="375" />
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="376" />
       <source>CircuitPython Libraries</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="427" />
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="428" />
       <source>Set Country</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="983" />
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="618" />
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="978" />
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="617" />
       <source>unknown ({0})</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1093" />
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1088" />
       <source>Pico Wireless does not support setting the IPv4 parameters of the WiFi access point.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1168" />
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1161" />
       <source>Pico Wireless does not support reporting of connected clients.</source>
       <translation type="unfinished" />
     </message>
     <message>
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1248" />
+      <source>Active</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1249" />
+      <source>Connected</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1252" />
+      <source>Status</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1256" />
+      <source>Hostname</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1257" />
+      <source>IPv4 Address</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1258" />
+      <source>Netmask</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
       <location filename="../MicroPython/Devices/RP2040Devices.py" line="1259" />
-      <source>Active</source>
+      <source>Gateway</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../MicroPython/Devices/RP2040Devices.py" line="1260" />
-      <source>Connected</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1263" />
-      <source>Status</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1267" />
-      <source>Hostname</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1268" />
-      <source>IPv4 Address</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1269" />
-      <source>Netmask</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1270" />
-      <source>Gateway</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1271" />
       <source>DNS</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1272" />
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1261" />
       <source>MAC-Address</source>
       <translation type="unfinished" />
     </message>
@@ -69395,19 +69666,19 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/SearchReplaceWidget.py" line="1045" />
+      <location filename="../QScintilla/SearchReplaceWidget.py" line="1046" />
       <location filename="../QScintilla/SearchReplaceWidget.py" line="597" />
       <location filename="../QScintilla/SearchReplaceWidget.py" line="559" />
       <source>'{0}' was not found.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/SearchReplaceWidget.py" line="1198" />
+      <location filename="../QScintilla/SearchReplaceWidget.py" line="1199" />
       <source>Replaced {0} occurrences.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/SearchReplaceWidget.py" line="1204" />
+      <location filename="../QScintilla/SearchReplaceWidget.py" line="1205" />
       <source>Nothing replaced because '{0}' was not found.</source>
       <translation type="unfinished" />
     </message>
@@ -82487,7 +82758,7 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/TeensyDevices.py" line="315" />
+      <location filename="../MicroPython/Devices/TeensyDevices.py" line="316" />
       <location filename="../MicroPython/Devices/TeensyDevices.py" line="154" />
       <source>Flash MicroPython Firmware</source>
       <translation type="unfinished" />
@@ -82528,17 +82799,17 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/TeensyDevices.py" line="316" />
+      <location filename="../MicroPython/Devices/TeensyDevices.py" line="317" />
       <source>&lt;p&gt;Teensy 4.0 and Teensy 4.1 are flashed using the 'Teensy Loader' application. Make sure you downloaded the MicroPython or CircuitPython .hex file.&lt;/p&gt;&lt;p&gt;See &lt;a href="{0}"&gt;the PJRC Teensy web site&lt;/a&gt; for details.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/TeensyDevices.py" line="338" />
-      <source>Start 'Teensy Loader'</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../MicroPython/Devices/TeensyDevices.py" line="339" />
+      <source>Start 'Teensy Loader'</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/Devices/TeensyDevices.py" line="340" />
       <source>&lt;p&gt;The 'Teensy Loader' application &lt;b&gt;teensy&lt;/b&gt; could not be started. Ensure it is in the application search path or start it manually.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
Binary file src/eric7/i18n/eric7_en.qm has changed
--- a/src/eric7/i18n/eric7_en.ts	Tue May 02 11:39:09 2023 +0200
+++ b/src/eric7/i18n/eric7_en.ts	Thu May 04 17:58:52 2023 +0200
@@ -1716,77 +1716,77 @@
   <context>
     <name>BaseDevice</name>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="196" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="199" />
       <source>Device Data Not Available</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="197" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="200" />
       <source>&lt;p&gt;The device data is not available. Try to connect to the device again. Aborting...&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="250" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="253" />
       <source>Unsupported Device</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="260" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="263" />
       <source>REPL is not supported by this device.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="279" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="282" />
       <source>Plotter is not supported by this device.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="298" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="301" />
       <source>Running scripts is not supported by this device.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="317" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="320" />
       <source>File Manager is not supported by this device.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="372" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="375" />
       <source>Select Device Directory</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="373" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="376" />
       <source>Select the directory for the connected device:</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="519" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="528" />
       <source>Detected an error without indications.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="1464" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="1473" />
       <source>Operation not supported.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="1772" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="1781" />
       <source>Yes</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="1772" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="1781" />
       <source>No</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="1774" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="1783" />
       <source>yes</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="1774" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="1783" />
       <source>no</source>
       <translation type="unfinished" />
     </message>
@@ -4123,14 +4123,14 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1128" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1126" />
       <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="865" />
       <source>unknown ({0})</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1577" />
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1500" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1567" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1490" />
       <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1040" />
       <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="961" />
       <source>The device volume is not available.</source>
@@ -4143,94 +4143,94 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1539" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1529" />
       <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1005" />
       <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="977" />
       <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; exists already. Shall it be replaced?&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1546" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1536" />
       <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1012" />
       <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="984" />
       <source>Aborted</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1195" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1193" />
       <source>CircuitPython does not support setting the IPv4 parameters of the WiFi access point.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1266" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1262" />
       <source>CircuitPython does not support reporting of connected clients.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1675" />
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1350" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1663" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1342" />
       <source>Active</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1681" />
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1351" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1669" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1343" />
       <source>Connected</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1352" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1344" />
       <source>IPv4 Address</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1353" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1345" />
       <source>Netmask</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1354" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1346" />
       <source>Gateway</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1355" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1347" />
       <source>DNS</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1677" />
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1356" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1665" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1348" />
       <source>MAC-Address</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1357" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1349" />
       <source>Chip Type</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1358" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1350" />
       <source>max. Sockets</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1538" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1528" />
       <source>Write Connect Script</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1676" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1664" />
       <source>Name</source>
       <translation>Name</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1679" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1667" />
       <source>Address Type</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1682" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1670" />
       <source>Advertising</source>
       <translation type="unfinished" />
     </message>
@@ -20428,8 +20428,8 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1506" />
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1490" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1498" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1482" />
       <location filename="../MicroPython/Devices/EspDevices.py" line="196" />
       <source>Erase Flash</source>
       <translation type="unfinished" />
@@ -20440,7 +20440,7 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1591" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1583" />
       <location filename="../MicroPython/Devices/EspDevices.py" line="203" />
       <source>Flash Additional Firmware</source>
       <translation type="unfinished" />
@@ -20491,8 +20491,8 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1590" />
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1549" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1582" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1541" />
       <location filename="../MicroPython/Devices/EspDevices.py" line="363" />
       <source>'esptool write_flash' Output</source>
       <translation type="unfinished" />
@@ -20558,68 +20558,68 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="980" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="978" />
       <source>unknown ({0})</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1209" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1201" />
       <source>Active</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1210" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1202" />
       <source>Name</source>
       <translation>Name</translation>
     </message>
     <message>
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1203" />
+      <source>MAC-Address</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1206" />
+      <source>Address Type</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1207" />
+      <source>Public</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1207" />
+      <source>Random</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
       <location filename="../MicroPython/Devices/EspDevices.py" line="1211" />
-      <source>MAC-Address</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1214" />
-      <source>Address Type</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1215" />
-      <source>Public</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1215" />
-      <source>Random</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1219" />
       <source>Rx-Buffer</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1221" />
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1219" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1213" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1211" />
       <source>{0} Bytes</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1221" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1213" />
       <source>MTU</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1491" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1483" />
       <source>Shall the flash of the selected device really be erased?</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1505" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1497" />
       <source>'esptool erase_flash' Output</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1550" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1542" />
       <source>Flash µPy/CPy Firmware</source>
       <translation type="unfinished" />
     </message>
@@ -50100,15 +50100,16 @@
     </message>
     <message>
       <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
-      <source>Serial Link</source>
+      <source>Device Communication</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
-      <source>Timeout for Serial Link Communication:</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
+      <source>Serial Link Timeout:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
       <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
       <source>Enter the timout value</source>
       <translation type="unfinished" />
@@ -50116,11 +50117,22 @@
     <message>
       <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
       <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
+      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
       <source> s</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
+      <source>WebRepl Timeout:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
+      <source>Device Time</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
       <source>Select to synchronize the time after connection is established</source>
       <translation type="unfinished" />
     </message>
@@ -50213,8 +50225,8 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.py" line="354" />
-      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.py" line="337" />
+      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.py" line="364" />
+      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.py" line="347" />
       <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
       <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
       <source>Press to show the password</source>
@@ -50556,8 +50568,8 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.py" line="350" />
-      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.py" line="333" />
+      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.py" line="360" />
+      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.py" line="343" />
       <source>Press to hide the password</source>
       <translation type="unfinished" />
     </message>
@@ -50571,38 +50583,299 @@
     </message>
   </context>
   <context>
+    <name>MicroPythonReplEdit</name>
+    <message>
+      <location filename="../MicroPython/MicroPythonReplWidget.py" line="322" />
+      <source>Clear</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonReplWidget.py" line="327" />
+      <source>Copy</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonReplWidget.py" line="333" />
+      <source>Paste</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonReplWidget.py" line="340" />
+      <source>Select All</source>
+      <translation type="unfinished" />
+    </message>
+  </context>
+  <context>
+    <name>MicroPythonWebreplConnectionDialog</name>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.py" line="97" />
+      <source>Press to hide the password.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.ui" line="0" />
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.py" line="101" />
+      <source>Press to show the password.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.ui" line="0" />
+      <source>WebREPL Connection</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.ui" line="0" />
+      <source>Host:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.ui" line="0" />
+      <source>Enter the host name or IPv4 address of the device.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.ui" line="0" />
+      <source>Port:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.ui" line="0" />
+      <source>Enter the port of the WebREPL (empty for default port 8266).</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.ui" line="0" />
+      <source>Password:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.ui" line="0" />
+      <source>Enter the password for this device connection.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.ui" line="0" />
+      <source>Device Type:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.ui" line="0" />
+      <source>Select the device type</source>
+      <translation type="unfinished" />
+    </message>
+  </context>
+  <context>
+    <name>MicroPythonWebreplDeviceInterface</name>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplDeviceInterface.py" line="80" />
+      <source>WebREPL Password</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplDeviceInterface.py" line="81" />
+      <source>Enter the WebREPL password:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplDeviceInterface.py" line="100" />
+      <source>WebREPL Login</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplDeviceInterface.py" line="101" />
+      <source>The login to the selected device 'webrepl' failed. The given password may be incorrect.</source>
+      <translation type="unfinished" />
+    </message>
+  </context>
+  <context>
+    <name>MicroPythonWebreplUrlAddEditDialog</name>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>WebREPL URL</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Name:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Enter a unique name for the WebREPL connection.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Description:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Enter a short description to be shown in the selector.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Host:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Enter the host name or IPv4 address of the device.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Port:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Enter the port of the WebREPL (empty for default port 8266).</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Password:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Enter the password for this device connection.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Device Type:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Select the device type</source>
+      <translation type="unfinished" />
+    </message>
+  </context>
+  <context>
+    <name>MicroPythonWebreplUrlsConfigDialog</name>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.py" line="133" />
+      <source>Remove Selected WebREPL URLs</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.py" line="134" />
+      <source>Shall the selected WebREPL URLs really be removed?</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.py" line="150" />
+      <source>Remove All WebREPL URLs</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.py" line="151" />
+      <source>Shall all WebREPL URLs really be removed?</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>WebREPL URLs</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>Name</source>
+      <translation type="unfinished">Name</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>Description</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>URL</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>Press to add a new entry.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>Add...</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>Press to edit the selected entry.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>Edit...</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>Press to remove the selected entries.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>Remove</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>Press to remove all entries.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>Remove All</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>&lt;b&gt;Note:&lt;/b&gt; The name of an entry must be unique amongst the list.</source>
+      <translation type="unfinished" />
+    </message>
+  </context>
+  <context>
     <name>MicroPythonWidget</name>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="247" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="109" />
       <source>MicroPython Menu</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="306" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="145" />
       <source>&lt;h3&gt;The QtSerialPort package is not available.&lt;br/&gt;MicroPython support is deactivated.&lt;/h3&gt;</source>
       <translation type="unfinished" />
     </message>
     <message numerus="yes">
-      <location filename="../MicroPython/MicroPythonWidget.py" line="347" />
-      <source>%n supported device(s) detected.</source>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="173" />
+      <source>%n supported serial device(s) detected.</source>
       <translation>
-        <numerusform>%n supported device detected.</numerusform>
-        <numerusform>%n supported devices detected.</numerusform>
+        <numerusform>%n supported serial device detected.</numerusform>
+        <numerusform>%n supported serial devices detected.</numerusform>
       </translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="361" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="187" />
       <source>{0} - {1} ({2})</source>
       <comment>board name, description, port name</comment>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="381" />
-      <source>No supported devices detected.</source>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="210" />
+      <source>No supported serial devices detected.</source>
       <translation type="unfinished" />
     </message>
     <message numerus="yes">
-      <location filename="../MicroPython/MicroPythonWidget.py" line="385" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="214" />
       <source>
 %n unknown device(s) for manual selection.</source>
       <translation>
@@ -50613,70 +50886,66 @@
       </translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="392" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="221" />
       <source>Manual Selection</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="456" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="427" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="232" />
+      <source>WebREPL (manual)</source>
+      <translation type="unfinished" />
+    </message>
+    <message numerus="yes">
+      <location filename="../MicroPython/MicroPythonWidget.py" line="251" />
+      <source>
+%n WebREPL connection(s) defined.</source>
+      <translation>
+        <numerusform>
+%n WebREPL connection defined.</numerusform>
+        <numerusform>
+%n WebREPL connections defined.</numerusform>
+      </translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="311" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="282" />
       <source>Unknown MicroPython Device</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="428" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="283" />
       <source>&lt;p&gt;Detected these unknown serial devices&lt;/p&gt;&lt;ul&gt;&lt;li&gt;{0}&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Please report them together with the board name and a short description to &lt;a href="mailto:{1}"&gt; the eric bug reporting address&lt;/a&gt; if it is a MicroPython board.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="440" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="295" />
       <source>{0} (0x{1:04x}/0x{2:04x})</source>
       <comment>description, VId, PId</comment>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="457" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="312" />
       <source>Would you like to add them to the list of manually configured devices?</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="592" />
-      <source>Clear</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="597" />
-      <source>Copy</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="603" />
-      <source>Paste</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="610" />
-      <source>Select All</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="636" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="451" />
       <source>Press to disconnect the current device</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../MicroPython/MicroPythonWidget.ui" line="0" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="641" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="456" />
       <source>Press to connect the selected device</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="673" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="488" />
       <source>No device attached</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="674" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="489" />
       <source>Please ensure the device is plugged into your computer and selected.
 
 It must have a version of MicroPython (or CircuitPython) flashed onto it before anything will work.
@@ -50685,353 +50954,358 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="703" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="518" />
       <source>Start REPL</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="704" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="519" />
       <source>&lt;p&gt;The REPL cannot be started.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1232" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1221" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="716" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="705" />
       <source>Serial Device Connect</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1222" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="706" />
       <source>&lt;p&gt;The device at serial port &lt;b&gt;{0}&lt;/b&gt; does not respond. It may not have a MicroPython firmware flashed.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1233" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="717" />
       <source>&lt;p&gt;Cannot connect to device at serial port &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1291" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1282" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1273" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="780" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="771" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="762" />
       <source>Run Script</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1274" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="763" />
       <source>There is no editor open. Abort...</source>
       <translation type="unfinished" />
     </message>
     <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="772" />
+      <source>The current editor does not contain a script. Abort...</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="781" />
+      <source>&lt;p&gt;Cannot run script.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="817" />
+      <source>Start Chart</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="818" />
+      <source>&lt;p&gt;The Chart cannot be started.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="833" />
+      <source>µPy Chart</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="850" />
+      <source>Unsaved Chart Data</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="851" />
+      <source>The chart contains unsaved data.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="899" />
+      <source>Start File Manager</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="900" />
+      <source>&lt;p&gt;The File Manager cannot be started.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="920" />
+      <source>µPy Files</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="985" />
+      <source>Downloads</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1032" />
+      <source>Show Version</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1035" />
+      <source>Show Implementation</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1038" />
+      <source>Show Board Data</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1224" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1043" />
+      <source>Synchronize Time</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1046" />
+      <source>Show Device Time</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1048" />
+      <source>Show Local Time</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1051" />
+      <source>Show Time</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1055" />
+      <source>Show Builtin Modules</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1633" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1067" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1059" />
+      <source>Install Package</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1672" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1669" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1063" />
+      <source>Install Packages</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1448" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1073" />
+      <source>Compile Python File</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1472" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1463" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1077" />
+      <source>Compile Current Editor</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1098" />
+      <source>Download Firmware</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1105" />
+      <source>Show Documentation</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1108" />
+      <source>Convert To UF2</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1109" />
+      <source>Flash UF2 Device</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1112" />
+      <source>Manage Unknown Devices</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1115" />
+      <source>Ignored Serial Devices</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1118" />
+      <source>Configure</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1127" />
+      <source>&lt;h3&gt;Device Version Information&lt;/h3&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1138" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1134" />
+      <source>Device Version Information</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1139" />
+      <source>No version information available.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1163" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1155" />
+      <source>unknown</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1169" />
+      <source> ({0})</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1185" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1176" />
+      <source>Device Implementation Information</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1177" />
+      <source>&lt;h3&gt;Device Implementation Information&lt;/h3&gt;&lt;p&gt;This device contains &lt;b&gt;{0} {1}{2}&lt;/b&gt;.&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1186" />
+      <source>No device implementation information available.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1225" />
+      <source>&lt;p&gt;The time of the connected device was synchronized with the local time.&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1247" />
+      <source>&lt;h3&gt;Device Date and Time&lt;/h3&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{1}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1255" />
+      <source>&lt;h3&gt;Device Date and Time&lt;/h3&gt;&lt;p&gt;{0}&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1271" />
+      <source>Device Date and Time</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
       <location filename="../MicroPython/MicroPythonWidget.py" line="1283" />
-      <source>The current editor does not contain a script. Abort...</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1292" />
-      <source>&lt;p&gt;Cannot run script.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1328" />
-      <source>Start Chart</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1329" />
-      <source>&lt;p&gt;The Chart cannot be started.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1344" />
-      <source>µPy Chart</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1361" />
-      <source>Unsaved Chart Data</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1362" />
-      <source>The chart contains unsaved data.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1410" />
-      <source>Start File Manager</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1411" />
-      <source>&lt;p&gt;The File Manager cannot be started.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1431" />
-      <source>µPy Files</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1496" />
-      <source>Downloads</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1543" />
-      <source>Show Version</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1546" />
-      <source>Show Implementation</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1549" />
-      <source>Show Board Data</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1735" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1554" />
-      <source>Synchronize Time</source>
+      <source>Local Date and Time</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1284" />
+      <source>&lt;h3&gt;Local Date and Time&lt;/h3&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{1}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1325" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1308" />
+      <source>Date and Time</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1309" />
+      <source>&lt;table&gt;&lt;tr&gt;&lt;th&gt;&lt;/th&gt;&lt;th&gt;Local Date and Time&lt;/th&gt;&lt;th&gt;Device Date and Time&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td align='center'&gt;{0}&lt;/td&gt;&lt;td align='center'&gt;{2}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td align='center'&gt;{1}&lt;/td&gt;&lt;td align='center'&gt;{3}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1326" />
+      <source>&lt;table&gt;&lt;tr&gt;&lt;th&gt;Local Date and Time&lt;/th&gt;&lt;th&gt;Device Date and Time&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align='center'&gt;{0} {1}&lt;/td&gt;&lt;td align='center'&gt;{2}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1350" />
+      <source>Error handling device</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1351" />
+      <source>&lt;p&gt;There was an error communicating with the connected device.&lt;/p&gt;&lt;p&gt;Method: {0}&lt;/p&gt;&lt;p&gt;Message: {1}&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1393" />
+      <source>The MicroPython cross compiler &lt;b&gt;mpy-cross&lt;/b&gt; cannot be found. Ensure it is in the search path or configure it on the MicroPython configuration page.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1419" />
+      <source>Python Files (*.py);;All Files (*)</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1429" />
+      <source>The Python file &lt;b&gt;{0}&lt;/b&gt; does not exist. Aborting...</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1438" />
+      <source>'mpy-cross' Output</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1464" />
+      <source>The current editor does not contain a Python file. Aborting...</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1556" />
+      <source>Add Unknown Devices</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../MicroPython/MicroPythonWidget.py" line="1557" />
-      <source>Show Device Time</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1559" />
-      <source>Show Local Time</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1562" />
-      <source>Show Time</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1566" />
-      <source>Show Builtin Modules</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2144" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1578" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1570" />
-      <source>Install Package</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2183" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2180" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1574" />
-      <source>Install Packages</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1959" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1584" />
-      <source>Compile Python File</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1983" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1974" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1588" />
-      <source>Compile Current Editor</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1609" />
-      <source>Download Firmware</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1616" />
-      <source>Show Documentation</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1619" />
-      <source>Convert To UF2</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1620" />
-      <source>Flash UF2 Device</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1623" />
-      <source>Manage Unknown Devices</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1626" />
-      <source>Ignored Serial Devices</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1629" />
-      <source>Configure</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1638" />
-      <source>&lt;h3&gt;Device Version Information&lt;/h3&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1649" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1645" />
-      <source>Device Version Information</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1650" />
-      <source>No version information available.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1674" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1666" />
-      <source>unknown</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1680" />
-      <source> ({0})</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1696" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1687" />
-      <source>Device Implementation Information</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1688" />
-      <source>&lt;h3&gt;Device Implementation Information&lt;/h3&gt;&lt;p&gt;This device contains &lt;b&gt;{0} {1}{2}&lt;/b&gt;.&lt;/p&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1697" />
-      <source>No device implementation information available.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1736" />
-      <source>&lt;p&gt;The time of the connected device was synchronized with the local time.&lt;/p&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1758" />
-      <source>&lt;h3&gt;Device Date and Time&lt;/h3&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{1}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1766" />
-      <source>&lt;h3&gt;Device Date and Time&lt;/h3&gt;&lt;p&gt;{0}&lt;/p&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1782" />
-      <source>Device Date and Time</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1794" />
-      <source>Local Date and Time</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1795" />
-      <source>&lt;h3&gt;Local Date and Time&lt;/h3&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{1}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1836" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1819" />
-      <source>Date and Time</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1820" />
-      <source>&lt;table&gt;&lt;tr&gt;&lt;th&gt;&lt;/th&gt;&lt;th&gt;Local Date and Time&lt;/th&gt;&lt;th&gt;Device Date and Time&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td align='center'&gt;{0}&lt;/td&gt;&lt;td align='center'&gt;{2}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td align='center'&gt;{1}&lt;/td&gt;&lt;td align='center'&gt;{3}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1837" />
-      <source>&lt;table&gt;&lt;tr&gt;&lt;th&gt;Local Date and Time&lt;/th&gt;&lt;th&gt;Device Date and Time&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align='center'&gt;{0} {1}&lt;/td&gt;&lt;td align='center'&gt;{2}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1861" />
-      <source>Error handling device</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1862" />
-      <source>&lt;p&gt;There was an error communicating with the connected device.&lt;/p&gt;&lt;p&gt;Method: {0}&lt;/p&gt;&lt;p&gt;Message: {1}&lt;/p&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1904" />
-      <source>The MicroPython cross compiler &lt;b&gt;mpy-cross&lt;/b&gt; cannot be found. Ensure it is in the search path or configure it on the MicroPython configuration page.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1930" />
-      <source>Python Files (*.py);;All Files (*)</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1940" />
-      <source>The Python file &lt;b&gt;{0}&lt;/b&gt; does not exist. Aborting...</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1949" />
-      <source>'mpy-cross' Output</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1975" />
-      <source>The current editor does not contain a Python file. Aborting...</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2067" />
-      <source>Add Unknown Devices</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2068" />
       <source>Select the devices to be added:</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2117" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1606" />
       <source>Plus any modules on the filesystem.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2169" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1658" />
       <source>Package '{0}' was installed successfully.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2184" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1673" />
       <source>Enter the packages to be installed separated by whitespace:</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../MicroPython/MicroPythonWidget.ui" line="0" />
-      <source>Press to check for connected devices</source>
+      <source>Press to detect connected devices and repopulate the device selector.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.ui" line="0" />
+      <source>Press to edit the list of configured WebREPL connections.</source>
       <translation type="unfinished" />
     </message>
     <message>
@@ -51217,29 +51491,29 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="569" />
+      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="571" />
       <source>MicroPython Firmware for BBC micro:bit V1</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="601" />
-      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="588" />
-      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="573" />
+      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="603" />
+      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="590" />
+      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="575" />
       <source>DAPLink Firmware</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="580" />
+      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="582" />
       <source>MicroPython Firmware for BBC micro:bit V2</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="584" />
+      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="586" />
       <source>CircuitPython Firmware for BBC micro:bit V2</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="597" />
+      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="599" />
       <source>MicroPython Firmware</source>
       <translation type="unfinished" />
     </message>
@@ -58436,18 +58710,18 @@
   <context>
     <name>Preferences</name>
     <message>
-      <location filename="../Preferences/__init__.py" line="1815" />
+      <location filename="../Preferences/__init__.py" line="1817" />
       <source>Export Preferences</source>
       <translation type="unfinished" />
     </message>
     <message>
+      <location filename="../Preferences/__init__.py" line="1846" />
+      <location filename="../Preferences/__init__.py" line="1819" />
+      <source>Properties File (*.ini);;All Files (*)</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
       <location filename="../Preferences/__init__.py" line="1844" />
-      <location filename="../Preferences/__init__.py" line="1817" />
-      <source>Properties File (*.ini);;All Files (*)</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Preferences/__init__.py" line="1842" />
       <source>Import Preferences</source>
       <translation type="unfinished" />
     </message>
@@ -68470,88 +68744,88 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="364" />
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="365" />
       <source>MicroPython Firmware</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="368" />
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="369" />
       <source>Pimoroni Pico Firmware</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="371" />
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="372" />
       <source>CircuitPython Firmware</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="375" />
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="376" />
       <source>CircuitPython Libraries</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="427" />
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="428" />
       <source>Set Country</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="983" />
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="618" />
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="978" />
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="617" />
       <source>unknown ({0})</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1093" />
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1088" />
       <source>Pico Wireless does not support setting the IPv4 parameters of the WiFi access point.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1168" />
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1161" />
       <source>Pico Wireless does not support reporting of connected clients.</source>
       <translation type="unfinished" />
     </message>
     <message>
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1248" />
+      <source>Active</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1249" />
+      <source>Connected</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1252" />
+      <source>Status</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1256" />
+      <source>Hostname</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1257" />
+      <source>IPv4 Address</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1258" />
+      <source>Netmask</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
       <location filename="../MicroPython/Devices/RP2040Devices.py" line="1259" />
-      <source>Active</source>
+      <source>Gateway</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../MicroPython/Devices/RP2040Devices.py" line="1260" />
-      <source>Connected</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1263" />
-      <source>Status</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1267" />
-      <source>Hostname</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1268" />
-      <source>IPv4 Address</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1269" />
-      <source>Netmask</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1270" />
-      <source>Gateway</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1271" />
       <source>DNS</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1272" />
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1261" />
       <source>MAC-Address</source>
       <translation type="unfinished" />
     </message>
@@ -69446,19 +69720,19 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/SearchReplaceWidget.py" line="1045" />
+      <location filename="../QScintilla/SearchReplaceWidget.py" line="1046" />
       <location filename="../QScintilla/SearchReplaceWidget.py" line="597" />
       <location filename="../QScintilla/SearchReplaceWidget.py" line="559" />
       <source>'{0}' was not found.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/SearchReplaceWidget.py" line="1198" />
+      <location filename="../QScintilla/SearchReplaceWidget.py" line="1199" />
       <source>Replaced {0} occurrences.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/SearchReplaceWidget.py" line="1204" />
+      <location filename="../QScintilla/SearchReplaceWidget.py" line="1205" />
       <source>Nothing replaced because '{0}' was not found.</source>
       <translation type="unfinished" />
     </message>
@@ -82539,7 +82813,7 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/TeensyDevices.py" line="315" />
+      <location filename="../MicroPython/Devices/TeensyDevices.py" line="316" />
       <location filename="../MicroPython/Devices/TeensyDevices.py" line="154" />
       <source>Flash MicroPython Firmware</source>
       <translation type="unfinished" />
@@ -82580,17 +82854,17 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/TeensyDevices.py" line="316" />
+      <location filename="../MicroPython/Devices/TeensyDevices.py" line="317" />
       <source>&lt;p&gt;Teensy 4.0 and Teensy 4.1 are flashed using the 'Teensy Loader' application. Make sure you downloaded the MicroPython or CircuitPython .hex file.&lt;/p&gt;&lt;p&gt;See &lt;a href="{0}"&gt;the PJRC Teensy web site&lt;/a&gt; for details.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/TeensyDevices.py" line="338" />
-      <source>Start 'Teensy Loader'</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../MicroPython/Devices/TeensyDevices.py" line="339" />
+      <source>Start 'Teensy Loader'</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/Devices/TeensyDevices.py" line="340" />
       <source>&lt;p&gt;The 'Teensy Loader' application &lt;b&gt;teensy&lt;/b&gt; could not be started. Ensure it is in the application search path or start it manually.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
--- a/src/eric7/i18n/eric7_es.ts	Tue May 02 11:39:09 2023 +0200
+++ b/src/eric7/i18n/eric7_es.ts	Thu May 04 17:58:52 2023 +0200
@@ -1730,77 +1730,77 @@
   <context>
     <name>BaseDevice</name>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="196" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="199" />
       <source>Device Data Not Available</source>
       <translation>Datos del Dispositivo No Disponibles</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="197" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="200" />
       <source>&lt;p&gt;The device data is not available. Try to connect to the device again. Aborting...&lt;/p&gt;</source>
       <translation>&lt;p&gt;Los datos del dispositivo no están dispoibles. Trate de conectar el dispositivo de nuevo. Abortando...&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="250" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="253" />
       <source>Unsupported Device</source>
       <translation>Dispositivo no soportado</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="260" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="263" />
       <source>REPL is not supported by this device.</source>
       <translation>REPL no soportado por este dispositivo.</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="279" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="282" />
       <source>Plotter is not supported by this device.</source>
       <translation>Plotter no soportado por este dispositivo.</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="298" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="301" />
       <source>Running scripts is not supported by this device.</source>
       <translation>La ejecución de scripts no está soportada por este dispositivo.</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="317" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="320" />
       <source>File Manager is not supported by this device.</source>
       <translation>El Gestor de Archivos no está soportado por este dispositivo.</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="372" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="375" />
       <source>Select Device Directory</source>
       <translation>Seleccionar Directorio para Dispositivo</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="373" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="376" />
       <source>Select the directory for the connected device:</source>
       <translation>Seleccionar el directorio para el dispositivo conectado:</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="519" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="528" />
       <source>Detected an error without indications.</source>
       <translation>Detectado un error sin indicaciones.</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="1464" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="1473" />
       <source>Operation not supported.</source>
       <translation>Operación no soportada.</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="1772" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="1781" />
       <source>Yes</source>
       <translation>Si</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="1772" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="1781" />
       <source>No</source>
       <translation>No</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="1774" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="1783" />
       <source>yes</source>
       <translation>si</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="1774" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="1783" />
       <source>no</source>
       <translation>no</translation>
     </message>
@@ -4154,14 +4154,14 @@
       <translation>Seleccionar la ruta para el dispositivo montado:</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1128" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1126" />
       <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="865" />
       <source>unknown ({0})</source>
       <translation>({0}) desconocido</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1577" />
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1500" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1567" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1490" />
       <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1040" />
       <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="961" />
       <source>The device volume is not available.</source>
@@ -4174,94 +4174,94 @@
       <translation>Escribir Credenciales WiFi</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1539" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1529" />
       <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1005" />
       <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="977" />
       <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; exists already. Shall it be replaced?&lt;/p&gt;</source>
       <translation>&lt;p&gt;El archivo &lt;b&gt;{0}&lt;/b&gt; ya existe. ¿Reemplazarlo?&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1546" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1536" />
       <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1012" />
       <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="984" />
       <source>Aborted</source>
       <translation>Abortado</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1195" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1193" />
       <source>CircuitPython does not support setting the IPv4 parameters of the WiFi access point.</source>
       <translation>CircuitPython no soporta el ajuste de parámetros IPv4 del punto de acceso de la WiFi.</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1266" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1262" />
       <source>CircuitPython does not support reporting of connected clients.</source>
       <translation>CircuitPython no soporta información de clientes conectados.</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1675" />
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1350" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1663" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1342" />
       <source>Active</source>
       <translation>Activo</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1681" />
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1351" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1669" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1343" />
       <source>Connected</source>
       <translation>Conectado</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1352" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1344" />
       <source>IPv4 Address</source>
       <translation>Dirección IPv4</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1353" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1345" />
       <source>Netmask</source>
       <translation>Máscara de Red</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1354" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1346" />
       <source>Gateway</source>
       <translation>Gateway</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1355" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1347" />
       <source>DNS</source>
       <translation>DNS</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1677" />
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1356" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1665" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1348" />
       <source>MAC-Address</source>
       <translation>Dirección MAC</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1357" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1349" />
       <source>Chip Type</source>
       <translation>Tipo de Chip</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1358" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1350" />
       <source>max. Sockets</source>
       <translation>máx. Sockets</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1538" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1528" />
       <source>Write Connect Script</source>
       <translation>Escribir Script de Conexión</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1676" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1664" />
       <source>Name</source>
       <translation>Nombre</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1679" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1667" />
       <source>Address Type</source>
       <translation>Tipo de Dirección</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1682" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1670" />
       <source>Advertising</source>
       <translation>Publicitando</translation>
     </message>
@@ -20538,8 +20538,8 @@
       <translation>Mostrar Versiones de MicroPython</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1506" />
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1490" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1498" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1482" />
       <location filename="../MicroPython/Devices/EspDevices.py" line="196" />
       <source>Erase Flash</source>
       <translation>Borrar Flash</translation>
@@ -20550,7 +20550,7 @@
       <translation>Flash MicroPython Firmware</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1591" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1583" />
       <location filename="../MicroPython/Devices/EspDevices.py" line="203" />
       <source>Flash Additional Firmware</source>
       <translation>Flash Additional Firmware</translation>
@@ -20601,8 +20601,8 @@
       <translation>Salida de 'esptool read_flash'</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1590" />
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1549" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1582" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1541" />
       <location filename="../MicroPython/Devices/EspDevices.py" line="363" />
       <source>'esptool write_flash' Output</source>
       <translation>Salida de 'esptool write_flash'</translation>
@@ -20668,68 +20668,68 @@
       <translation>Error al borrar credenciales: {0}</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="980" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="978" />
       <source>unknown ({0})</source>
       <translation>desconocido ({0})</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1209" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1201" />
       <source>Active</source>
       <translation>Activo</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1210" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1202" />
       <source>Name</source>
       <translation>Nombre</translation>
     </message>
     <message>
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1203" />
+      <source>MAC-Address</source>
+      <translation>Dirección MAC</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1206" />
+      <source>Address Type</source>
+      <translation>Tipo de Dirección</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1207" />
+      <source>Public</source>
+      <translation>Pública</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1207" />
+      <source>Random</source>
+      <translation>Aleatoria</translation>
+    </message>
+    <message>
       <location filename="../MicroPython/Devices/EspDevices.py" line="1211" />
-      <source>MAC-Address</source>
-      <translation>Dirección MAC</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1214" />
-      <source>Address Type</source>
-      <translation>Tipo de Dirección</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1215" />
-      <source>Public</source>
-      <translation>Pública</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1215" />
-      <source>Random</source>
-      <translation>Aleatoria</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1219" />
       <source>Rx-Buffer</source>
       <translation>Rx-Buffer</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1221" />
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1219" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1213" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1211" />
       <source>{0} Bytes</source>
       <translation>{0} Bytes</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1221" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1213" />
       <source>MTU</source>
       <translation>MTU</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1491" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1483" />
       <source>Shall the flash of the selected device really be erased?</source>
       <translation>¿Borrar el flash del dispositivo seleccionado?</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1505" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1497" />
       <source>'esptool erase_flash' Output</source>
       <translation>Salida de 'esptool erase_flash'</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1550" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1542" />
       <source>Flash µPy/CPy Firmware</source>
       <translation>Flash Firmware µPy/CPy</translation>
     </message>
@@ -50300,15 +50300,16 @@
     </message>
     <message>
       <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
-      <source>Serial Link</source>
-      <translation>Enlace de Serie</translation>
+      <source>Device Communication</source>
+      <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
-      <source>Timeout for Serial Link Communication:</source>
-      <translation>Tiempo máximo para Comunicación por Enlace de Serie:</translation>
-    </message>
-    <message>
+      <source>Serial Link Timeout:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
       <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
       <source>Enter the timout value</source>
       <translation>Introducir tiempo máximo</translation>
@@ -50316,11 +50317,22 @@
     <message>
       <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
       <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
+      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
       <source> s</source>
       <translation> s</translation>
     </message>
     <message>
       <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
+      <source>WebRepl Timeout:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
+      <source>Device Time</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
       <source>Select to synchronize the time after connection is established</source>
       <translation>Seleccionar para sincronizar la hora tras establecimiento de conexión</translation>
     </message>
@@ -50413,8 +50425,8 @@
       <translation>Introducir la contraseña de red</translation>
     </message>
     <message>
-      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.py" line="354" />
-      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.py" line="337" />
+      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.py" line="364" />
+      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.py" line="347" />
       <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
       <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
       <source>Press to show the password</source>
@@ -50756,11 +50768,19 @@
       <translation>abrir</translation>
     </message>
     <message>
-      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.py" line="350" />
-      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.py" line="333" />
+      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.py" line="360" />
+      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.py" line="343" />
       <source>Press to hide the password</source>
       <translation>Pulsar para ocultar la contraseña</translation>
     </message>
+    <message>
+      <source>Serial Link</source>
+      <translation type="vanished">Enlace de Serie</translation>
+    </message>
+    <message>
+      <source>Timeout for Serial Link Communication:</source>
+      <translation type="vanished">Tiempo máximo para Comunicación por Enlace de Serie:</translation>
+    </message>
   </context>
   <context>
     <name>MicroPythonProgressInfoDialog</name>
@@ -50771,38 +50791,298 @@
     </message>
   </context>
   <context>
+    <name>MicroPythonReplEdit</name>
+    <message>
+      <location filename="../MicroPython/MicroPythonReplWidget.py" line="322" />
+      <source>Clear</source>
+      <translation type="unfinished">Limpiar</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonReplWidget.py" line="327" />
+      <source>Copy</source>
+      <translation type="unfinished">Copiar</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonReplWidget.py" line="333" />
+      <source>Paste</source>
+      <translation type="unfinished">Pegar</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonReplWidget.py" line="340" />
+      <source>Select All</source>
+      <translation type="unfinished">Seleccionar todo</translation>
+    </message>
+  </context>
+  <context>
+    <name>MicroPythonWebreplConnectionDialog</name>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.py" line="97" />
+      <source>Press to hide the password.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.ui" line="0" />
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.py" line="101" />
+      <source>Press to show the password.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.ui" line="0" />
+      <source>WebREPL Connection</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.ui" line="0" />
+      <source>Host:</source>
+      <translation type="unfinished">Host:</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.ui" line="0" />
+      <source>Enter the host name or IPv4 address of the device.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.ui" line="0" />
+      <source>Port:</source>
+      <translation type="unfinished">Puerto:</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.ui" line="0" />
+      <source>Enter the port of the WebREPL (empty for default port 8266).</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.ui" line="0" />
+      <source>Password:</source>
+      <translation type="unfinished">Contraseña:</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.ui" line="0" />
+      <source>Enter the password for this device connection.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.ui" line="0" />
+      <source>Device Type:</source>
+      <translation type="unfinished">Tipo de Dispositivo:</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.ui" line="0" />
+      <source>Select the device type</source>
+      <translation type="unfinished">Seleccionar el tipo de dispositivo</translation>
+    </message>
+  </context>
+  <context>
+    <name>MicroPythonWebreplDeviceInterface</name>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplDeviceInterface.py" line="80" />
+      <source>WebREPL Password</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplDeviceInterface.py" line="81" />
+      <source>Enter the WebREPL password:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplDeviceInterface.py" line="100" />
+      <source>WebREPL Login</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplDeviceInterface.py" line="101" />
+      <source>The login to the selected device 'webrepl' failed. The given password may be incorrect.</source>
+      <translation type="unfinished" />
+    </message>
+  </context>
+  <context>
+    <name>MicroPythonWebreplUrlAddEditDialog</name>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>WebREPL URL</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Name:</source>
+      <translation type="unfinished">Nombre:</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Enter a unique name for the WebREPL connection.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Description:</source>
+      <translation type="unfinished">Descripción:</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Enter a short description to be shown in the selector.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Host:</source>
+      <translation type="unfinished">Host:</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Enter the host name or IPv4 address of the device.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Port:</source>
+      <translation type="unfinished">Puerto:</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Enter the port of the WebREPL (empty for default port 8266).</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Password:</source>
+      <translation type="unfinished">Contraseña:</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Enter the password for this device connection.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Device Type:</source>
+      <translation type="unfinished">Tipo de Dispositivo:</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Select the device type</source>
+      <translation type="unfinished">Seleccionar el tipo de dispositivo</translation>
+    </message>
+  </context>
+  <context>
+    <name>MicroPythonWebreplUrlsConfigDialog</name>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.py" line="133" />
+      <source>Remove Selected WebREPL URLs</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.py" line="134" />
+      <source>Shall the selected WebREPL URLs really be removed?</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.py" line="150" />
+      <source>Remove All WebREPL URLs</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.py" line="151" />
+      <source>Shall all WebREPL URLs really be removed?</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>WebREPL URLs</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>Name</source>
+      <translation type="unfinished">Nombre</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>Description</source>
+      <translation type="unfinished">Descripción</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>URL</source>
+      <translation type="unfinished">URL</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>Press to add a new entry.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>Add...</source>
+      <translation type="unfinished">Añadir...</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>Press to edit the selected entry.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>Edit...</source>
+      <translation type="unfinished">Editar...</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>Press to remove the selected entries.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>Remove</source>
+      <translation type="unfinished">Eliminar</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>Press to remove all entries.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>Remove All</source>
+      <translation type="unfinished">Eliminar Todo</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>&lt;b&gt;Note:&lt;/b&gt; The name of an entry must be unique amongst the list.</source>
+      <translation type="unfinished" />
+    </message>
+  </context>
+  <context>
     <name>MicroPythonWidget</name>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="247" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="109" />
       <source>MicroPython Menu</source>
       <translation>Menú de MicroPython</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="306" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="145" />
       <source>&lt;h3&gt;The QtSerialPort package is not available.&lt;br/&gt;MicroPython support is deactivated.&lt;/h3&gt;</source>
       <translation>&lt;h3&gt;El package QtSerialPort no está disponible.&lt;br/&gt;Soporte para MicroPython desactivado.&lt;/h3&gt;</translation>
     </message>
     <message numerus="yes">
-      <location filename="../MicroPython/MicroPythonWidget.py" line="347" />
-      <source>%n supported device(s) detected.</source>
-      <translation>
-        <numerusform>%n dispositivo soportado detectado.</numerusform>
-        <numerusform>%n dispositivos soportados detectados.</numerusform>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="173" />
+      <source>%n supported serial device(s) detected.</source>
+      <translation type="unfinished">
+        <numerusform />
       </translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="361" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="187" />
       <source>{0} - {1} ({2})</source>
       <comment>board name, description, port name</comment>
       <translation>{0} - {1} ({2})</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="381" />
-      <source>No supported devices detected.</source>
-      <translation>No se han detectado dispositivos soportados.</translation>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="210" />
+      <source>No supported serial devices detected.</source>
+      <translation type="unfinished" />
     </message>
     <message numerus="yes">
-      <location filename="../MicroPython/MicroPythonWidget.py" line="385" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="214" />
       <source>
 %n unknown device(s) for manual selection.</source>
       <translation>
@@ -50813,70 +51093,63 @@
       </translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="392" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="221" />
       <source>Manual Selection</source>
       <translation>Selección Manual</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="456" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="427" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="232" />
+      <source>WebREPL (manual)</source>
+      <translation type="unfinished" />
+    </message>
+    <message numerus="yes">
+      <location filename="../MicroPython/MicroPythonWidget.py" line="251" />
+      <source>
+%n WebREPL connection(s) defined.</source>
+      <translation type="unfinished">
+        <numerusform />
+      </translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="311" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="282" />
       <source>Unknown MicroPython Device</source>
       <translation>Dispositivo MicroPython Desconocido</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="428" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="283" />
       <source>&lt;p&gt;Detected these unknown serial devices&lt;/p&gt;&lt;ul&gt;&lt;li&gt;{0}&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Please report them together with the board name and a short description to &lt;a href="mailto:{1}"&gt; the eric bug reporting address&lt;/a&gt; if it is a MicroPython board.&lt;/p&gt;</source>
       <translation>&lt;p&gt;Detectados estos dispositivos de serie desconocidos&lt;/p&gt;&lt;ul&gt;&lt;li&gt;{0}&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Reportarlos por favor junto con el nombre de la placa y una descripción corta a &lt;a href="mailto:{1}"&gt; la dirección de reporte de bugs de eric &lt;/a&gt; si es una placa MicroPython.&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="440" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="295" />
       <source>{0} (0x{1:04x}/0x{2:04x})</source>
       <comment>description, VId, PId</comment>
       <translation>{0} (0x{1:04x}/0x{2:04x})</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="457" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="312" />
       <source>Would you like to add them to the list of manually configured devices?</source>
       <translation>¿Desea añadirlos a la lista de dispositivos configurados manualmente?</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="592" />
-      <source>Clear</source>
-      <translation>Limpiar</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="597" />
-      <source>Copy</source>
-      <translation>Copiar</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="603" />
-      <source>Paste</source>
-      <translation>Pegar</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="610" />
-      <source>Select All</source>
-      <translation>Seleccionar todo</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="636" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="451" />
       <source>Press to disconnect the current device</source>
       <translation>Pulsar para desconectar el dispositivo seleccionado</translation>
     </message>
     <message>
       <location filename="../MicroPython/MicroPythonWidget.ui" line="0" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="641" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="456" />
       <source>Press to connect the selected device</source>
       <translation>Pulsar para conectar el dispositivo seleccionado</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="673" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="488" />
       <source>No device attached</source>
       <translation>No hay dispositivo conectado</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="674" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="489" />
       <source>Please ensure the device is plugged into your computer and selected.
 
 It must have a version of MicroPython (or CircuitPython) flashed onto it before anything will work.
@@ -50889,354 +51162,359 @@
 Finalmente, pulsar el botón de reset del dispositivo y esperar unos pocos segundos antes de intentar de nuevo.</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="703" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="518" />
       <source>Start REPL</source>
       <translation>Iniciar REPL</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="704" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="519" />
       <source>&lt;p&gt;The REPL cannot be started.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
       <translation>&lt;p&gt;El REPL no se puede iniciar.&lt;/p&gt;&lt;p&gt;Razón: {0}&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1232" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1221" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="716" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="705" />
       <source>Serial Device Connect</source>
       <translation>Conexión de Dispositivo en Serie</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1222" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="706" />
       <source>&lt;p&gt;The device at serial port &lt;b&gt;{0}&lt;/b&gt; does not respond. It may not have a MicroPython firmware flashed.&lt;/p&gt;</source>
       <translation>&lt;p&gt;El dispositivo en el puerto de serie &lt;b&gt;{0}&lt;/b&gt; no responde. Puede que no tenga un firmware MicroPython flasheado.&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1233" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="717" />
       <source>&lt;p&gt;Cannot connect to device at serial port &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</source>
       <translation>&lt;p&gt;No se puede conectar el dispositovo en el puerto de serie &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1291" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1282" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1273" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="780" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="771" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="762" />
       <source>Run Script</source>
       <translation>Ejecutar Script</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1274" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="763" />
       <source>There is no editor open. Abort...</source>
       <translation>No hay editor abierto. Abortando...</translation>
     </message>
     <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="772" />
+      <source>The current editor does not contain a script. Abort...</source>
+      <translation>El editor actual no contiene un script. Abortando...</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="781" />
+      <source>&lt;p&gt;Cannot run script.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
+      <translation>&lt;p&gt;No se puede ejecutar el script.&lt;/p&gt;&lt;p&gt;Razón: {0}&lt;/p&gt;</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="817" />
+      <source>Start Chart</source>
+      <translation>Iniciar Gráfica</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="818" />
+      <source>&lt;p&gt;The Chart cannot be started.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
+      <translation>&lt;p&gt;No se puede iniciar la gráfica.&lt;/p&gt;&lt;p&gt;Razón: {0}&lt;/p&gt;</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="833" />
+      <source>µPy Chart</source>
+      <translation>Gráfico µPy</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="850" />
+      <source>Unsaved Chart Data</source>
+      <translation>Datos de Gráfica sin Guardar</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="851" />
+      <source>The chart contains unsaved data.</source>
+      <translation>La gráfica contiene datos sin guardar.</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="899" />
+      <source>Start File Manager</source>
+      <translation>Comenzar Gestor de Archivos</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="900" />
+      <source>&lt;p&gt;The File Manager cannot be started.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
+      <translation>&lt;p&gt;El Gestor de Archivos no se puede iniciar.&lt;/p&gt;&lt;p&gt;Razón: {0}&lt;/p&gt;</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="920" />
+      <source>µPy Files</source>
+      <translation>Archivos µPy</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="985" />
+      <source>Downloads</source>
+      <translation>Descargas</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1032" />
+      <source>Show Version</source>
+      <translation>Mostrar Versión</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1035" />
+      <source>Show Implementation</source>
+      <translation>Mostrar Implementación</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1038" />
+      <source>Show Board Data</source>
+      <translation>Mostrar Datos de Microprocesador</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1224" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1043" />
+      <source>Synchronize Time</source>
+      <translation>Sincronizar Hora</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1046" />
+      <source>Show Device Time</source>
+      <translation>Mostrar Hora del Dispositivo</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1048" />
+      <source>Show Local Time</source>
+      <translation>Mostrar Hora Local</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1051" />
+      <source>Show Time</source>
+      <translation>Mostrar Tiempo</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1055" />
+      <source>Show Builtin Modules</source>
+      <translation>Mostrar Módulos Incorporados</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1633" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1067" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1059" />
+      <source>Install Package</source>
+      <translation>Instalar Package</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1672" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1669" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1063" />
+      <source>Install Packages</source>
+      <translation>Instalar Packages</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1448" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1073" />
+      <source>Compile Python File</source>
+      <translation>Compilar Archivo de Python</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1472" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1463" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1077" />
+      <source>Compile Current Editor</source>
+      <translation>Compilar Editor Actual</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1098" />
+      <source>Download Firmware</source>
+      <translation>Descargar Firmware</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1105" />
+      <source>Show Documentation</source>
+      <translation>Mostrar Documentación</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1108" />
+      <source>Convert To UF2</source>
+      <translation>Convertir a UF2</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1109" />
+      <source>Flash UF2 Device</source>
+      <translation>Flashear Dispositivo UF2</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1112" />
+      <source>Manage Unknown Devices</source>
+      <translation>Gestión Dispositivos Desconocidos</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1115" />
+      <source>Ignored Serial Devices</source>
+      <translation>Dispositivos de Serie Ignorados</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1118" />
+      <source>Configure</source>
+      <translation>Configurar</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1127" />
+      <source>&lt;h3&gt;Device Version Information&lt;/h3&gt;</source>
+      <translation>&lt;h3&gt;Información de Versión de Dispositivo&lt;/h3&gt;</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1138" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1134" />
+      <source>Device Version Information</source>
+      <translation>Información de Versión de Dispositivo</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1139" />
+      <source>No version information available.</source>
+      <translation>No hay información de versión disponible.</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1163" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1155" />
+      <source>unknown</source>
+      <translation>desconocido</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1169" />
+      <source> ({0})</source>
+      <translation> ({0})</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1185" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1176" />
+      <source>Device Implementation Information</source>
+      <translation>Información de Implementación de Dispositivo</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1177" />
+      <source>&lt;h3&gt;Device Implementation Information&lt;/h3&gt;&lt;p&gt;This device contains &lt;b&gt;{0} {1}{2}&lt;/b&gt;.&lt;/p&gt;</source>
+      <translation>&lt;h3&gt;Información de Implementación de Dispositivo&lt;/h3&gt;&lt;p&gt;Este dispositivo contiene &lt;b&gt;{0} {1}{2}&lt;/b&gt;.&lt;/p&gt;</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1186" />
+      <source>No device implementation information available.</source>
+      <translation>Sin información disponible de implementación de dispositivo.</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1225" />
+      <source>&lt;p&gt;The time of the connected device was synchronized with the local time.&lt;/p&gt;</source>
+      <translation>&lt;p&gt;La hora del dispositivo conectado está sincronizada con la hora local.&lt;/p&gt;</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1247" />
+      <source>&lt;h3&gt;Device Date and Time&lt;/h3&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{1}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
+      <translation>&lt;h3&gt;Fecha y Hora del Dispositivo&lt;/h3&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Fecha&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Hora&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{1}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1255" />
+      <source>&lt;h3&gt;Device Date and Time&lt;/h3&gt;&lt;p&gt;{0}&lt;/p&gt;</source>
+      <translation>&lt;h3&gt;Fecha y Hora del Dispositivo&lt;/h3&gt;&lt;p&gt;{0}&lt;/p&gt;</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1271" />
+      <source>Device Date and Time</source>
+      <translation>Fecha y Hora del Dispositivo</translation>
+    </message>
+    <message>
       <location filename="../MicroPython/MicroPythonWidget.py" line="1283" />
-      <source>The current editor does not contain a script. Abort...</source>
-      <translation>El editor actual no contiene un script. Abortando...</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1292" />
-      <source>&lt;p&gt;Cannot run script.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
-      <translation>&lt;p&gt;No se puede ejecutar el script.&lt;/p&gt;&lt;p&gt;Razón: {0}&lt;/p&gt;</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1328" />
-      <source>Start Chart</source>
-      <translation>Iniciar Gráfica</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1329" />
-      <source>&lt;p&gt;The Chart cannot be started.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
-      <translation>&lt;p&gt;No se puede iniciar la gráfica.&lt;/p&gt;&lt;p&gt;Razón: {0}&lt;/p&gt;</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1344" />
-      <source>µPy Chart</source>
-      <translation>Gráfico µPy</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1361" />
-      <source>Unsaved Chart Data</source>
-      <translation>Datos de Gráfica sin Guardar</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1362" />
-      <source>The chart contains unsaved data.</source>
-      <translation>La gráfica contiene datos sin guardar.</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1410" />
-      <source>Start File Manager</source>
-      <translation>Comenzar Gestor de Archivos</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1411" />
-      <source>&lt;p&gt;The File Manager cannot be started.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
-      <translation>&lt;p&gt;El Gestor de Archivos no se puede iniciar.&lt;/p&gt;&lt;p&gt;Razón: {0}&lt;/p&gt;</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1431" />
-      <source>µPy Files</source>
-      <translation>Archivos µPy</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1496" />
-      <source>Downloads</source>
-      <translation>Descargas</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1543" />
-      <source>Show Version</source>
-      <translation>Mostrar Versión</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1546" />
-      <source>Show Implementation</source>
-      <translation>Mostrar Implementación</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1549" />
-      <source>Show Board Data</source>
-      <translation>Mostrar Datos de Microprocesador</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1735" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1554" />
-      <source>Synchronize Time</source>
-      <translation>Sincronizar Hora</translation>
+      <source>Local Date and Time</source>
+      <translation>Fecha y Hora Local</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1284" />
+      <source>&lt;h3&gt;Local Date and Time&lt;/h3&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{1}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
+      <translation>&lt;h3&gt;Fecha y Hora del Local&lt;/h3&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Fecha&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Hora&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{1}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1325" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1308" />
+      <source>Date and Time</source>
+      <translation>Fecha y Hora</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1309" />
+      <source>&lt;table&gt;&lt;tr&gt;&lt;th&gt;&lt;/th&gt;&lt;th&gt;Local Date and Time&lt;/th&gt;&lt;th&gt;Device Date and Time&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td align='center'&gt;{0}&lt;/td&gt;&lt;td align='center'&gt;{2}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td align='center'&gt;{1}&lt;/td&gt;&lt;td align='center'&gt;{3}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
+      <translation>&lt;table&gt;&lt;tr&gt;&lt;th&gt;&lt;/th&gt;&lt;th&gt;Fecha y Hora Local&lt;/th&gt;&lt;th&gt;Fecha y Hora del Dispositivo&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Fecha&lt;/b&gt;&lt;/td&gt;&lt;td align='center'&gt;{0}&lt;/td&gt;&lt;td align='center'&gt;{2}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Hora&lt;/b&gt;&lt;/td&gt;&lt;td align='center'&gt;{1}&lt;/td&gt;&lt;td align='center'&gt;{3}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1326" />
+      <source>&lt;table&gt;&lt;tr&gt;&lt;th&gt;Local Date and Time&lt;/th&gt;&lt;th&gt;Device Date and Time&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align='center'&gt;{0} {1}&lt;/td&gt;&lt;td align='center'&gt;{2}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
+      <translation>&lt;table&gt;&lt;tr&gt;&lt;th&gt;Fecha y Hora Local&lt;/th&gt;&lt;th&gt;Fecha y Hora del Dispositivo&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align='center'&gt;{0} {1}&lt;/td&gt;&lt;td align='center'&gt;{2}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1350" />
+      <source>Error handling device</source>
+      <translation>Error de gestión del dispositivo</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1351" />
+      <source>&lt;p&gt;There was an error communicating with the connected device.&lt;/p&gt;&lt;p&gt;Method: {0}&lt;/p&gt;&lt;p&gt;Message: {1}&lt;/p&gt;</source>
+      <translation>&lt;p&gt;Ha ocurrido un error al comunicar con el dispositivo conectado.&lt;/p&gt;&lt;p&gt;Método: {0}&lt;/p&gt;&lt;p&gt;Mensaje: {1}&lt;/p&gt;</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1393" />
+      <source>The MicroPython cross compiler &lt;b&gt;mpy-cross&lt;/b&gt; cannot be found. Ensure it is in the search path or configure it on the MicroPython configuration page.</source>
+      <translation>El compilador multiplataforma de MicroPython &lt;b&gt;mpy-cross&lt;/b&gt; no se encuentra. Asegúrese de que está en la ruta de búsqueda o configurarlo en la página de configuración de MicroPython.</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1419" />
+      <source>Python Files (*.py);;All Files (*)</source>
+      <translation>Archivos Python (*.py);;Todos los Archivos (*)</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1429" />
+      <source>The Python file &lt;b&gt;{0}&lt;/b&gt; does not exist. Aborting...</source>
+      <translation>El archivo de Python &lt;b&gt;{0}&lt;/b&gt; no existe. Abortando...</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1438" />
+      <source>'mpy-cross' Output</source>
+      <translation>Salida de 'mpy-cross'</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1464" />
+      <source>The current editor does not contain a Python file. Aborting...</source>
+      <translation>El editor actual no contiene un archivo de Python. Abortando...</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1556" />
+      <source>Add Unknown Devices</source>
+      <translation>Añadir Dispositivos Desconocidos</translation>
     </message>
     <message>
       <location filename="../MicroPython/MicroPythonWidget.py" line="1557" />
-      <source>Show Device Time</source>
-      <translation>Mostrar Hora del Dispositivo</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1559" />
-      <source>Show Local Time</source>
-      <translation>Mostrar Hora Local</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1562" />
-      <source>Show Time</source>
-      <translation>Mostrar Tiempo</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1566" />
-      <source>Show Builtin Modules</source>
-      <translation>Mostrar Módulos Incorporados</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2144" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1578" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1570" />
-      <source>Install Package</source>
-      <translation>Instalar Package</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2183" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2180" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1574" />
-      <source>Install Packages</source>
-      <translation>Instalar Packages</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1959" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1584" />
-      <source>Compile Python File</source>
-      <translation>Compilar Archivo de Python</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1983" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1974" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1588" />
-      <source>Compile Current Editor</source>
-      <translation>Compilar Editor Actual</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1609" />
-      <source>Download Firmware</source>
-      <translation>Descargar Firmware</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1616" />
-      <source>Show Documentation</source>
-      <translation>Mostrar Documentación</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1619" />
-      <source>Convert To UF2</source>
-      <translation>Convertir a UF2</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1620" />
-      <source>Flash UF2 Device</source>
-      <translation>Flashear Dispositivo UF2</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1623" />
-      <source>Manage Unknown Devices</source>
-      <translation>Gestión Dispositivos Desconocidos</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1626" />
-      <source>Ignored Serial Devices</source>
-      <translation>Dispositivos de Serie Ignorados</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1629" />
-      <source>Configure</source>
-      <translation>Configurar</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1638" />
-      <source>&lt;h3&gt;Device Version Information&lt;/h3&gt;</source>
-      <translation>&lt;h3&gt;Información de Versión de Dispositivo&lt;/h3&gt;</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1649" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1645" />
-      <source>Device Version Information</source>
-      <translation>Información de Versión de Dispositivo</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1650" />
-      <source>No version information available.</source>
-      <translation>No hay información de versión disponible.</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1674" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1666" />
-      <source>unknown</source>
-      <translation>desconocido</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1680" />
-      <source> ({0})</source>
-      <translation> ({0})</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1696" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1687" />
-      <source>Device Implementation Information</source>
-      <translation>Información de Implementación de Dispositivo</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1688" />
-      <source>&lt;h3&gt;Device Implementation Information&lt;/h3&gt;&lt;p&gt;This device contains &lt;b&gt;{0} {1}{2}&lt;/b&gt;.&lt;/p&gt;</source>
-      <translation>&lt;h3&gt;Información de Implementación de Dispositivo&lt;/h3&gt;&lt;p&gt;Este dispositivo contiene &lt;b&gt;{0} {1}{2}&lt;/b&gt;.&lt;/p&gt;</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1697" />
-      <source>No device implementation information available.</source>
-      <translation>Sin información disponible de implementación de dispositivo.</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1736" />
-      <source>&lt;p&gt;The time of the connected device was synchronized with the local time.&lt;/p&gt;</source>
-      <translation>&lt;p&gt;La hora del dispositivo conectado está sincronizada con la hora local.&lt;/p&gt;</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1758" />
-      <source>&lt;h3&gt;Device Date and Time&lt;/h3&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{1}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
-      <translation>&lt;h3&gt;Fecha y Hora del Dispositivo&lt;/h3&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Fecha&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Hora&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{1}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1766" />
-      <source>&lt;h3&gt;Device Date and Time&lt;/h3&gt;&lt;p&gt;{0}&lt;/p&gt;</source>
-      <translation>&lt;h3&gt;Fecha y Hora del Dispositivo&lt;/h3&gt;&lt;p&gt;{0}&lt;/p&gt;</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1782" />
-      <source>Device Date and Time</source>
-      <translation>Fecha y Hora del Dispositivo</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1794" />
-      <source>Local Date and Time</source>
-      <translation>Fecha y Hora Local</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1795" />
-      <source>&lt;h3&gt;Local Date and Time&lt;/h3&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{1}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
-      <translation>&lt;h3&gt;Fecha y Hora del Local&lt;/h3&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Fecha&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Hora&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{1}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1836" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1819" />
-      <source>Date and Time</source>
-      <translation>Fecha y Hora</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1820" />
-      <source>&lt;table&gt;&lt;tr&gt;&lt;th&gt;&lt;/th&gt;&lt;th&gt;Local Date and Time&lt;/th&gt;&lt;th&gt;Device Date and Time&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td align='center'&gt;{0}&lt;/td&gt;&lt;td align='center'&gt;{2}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td align='center'&gt;{1}&lt;/td&gt;&lt;td align='center'&gt;{3}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
-      <translation>&lt;table&gt;&lt;tr&gt;&lt;th&gt;&lt;/th&gt;&lt;th&gt;Fecha y Hora Local&lt;/th&gt;&lt;th&gt;Fecha y Hora del Dispositivo&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Fecha&lt;/b&gt;&lt;/td&gt;&lt;td align='center'&gt;{0}&lt;/td&gt;&lt;td align='center'&gt;{2}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Hora&lt;/b&gt;&lt;/td&gt;&lt;td align='center'&gt;{1}&lt;/td&gt;&lt;td align='center'&gt;{3}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1837" />
-      <source>&lt;table&gt;&lt;tr&gt;&lt;th&gt;Local Date and Time&lt;/th&gt;&lt;th&gt;Device Date and Time&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align='center'&gt;{0} {1}&lt;/td&gt;&lt;td align='center'&gt;{2}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
-      <translation>&lt;table&gt;&lt;tr&gt;&lt;th&gt;Fecha y Hora Local&lt;/th&gt;&lt;th&gt;Fecha y Hora del Dispositivo&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align='center'&gt;{0} {1}&lt;/td&gt;&lt;td align='center'&gt;{2}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1861" />
-      <source>Error handling device</source>
-      <translation>Error de gestión del dispositivo</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1862" />
-      <source>&lt;p&gt;There was an error communicating with the connected device.&lt;/p&gt;&lt;p&gt;Method: {0}&lt;/p&gt;&lt;p&gt;Message: {1}&lt;/p&gt;</source>
-      <translation>&lt;p&gt;Ha ocurrido un error al comunicar con el dispositivo conectado.&lt;/p&gt;&lt;p&gt;Método: {0}&lt;/p&gt;&lt;p&gt;Mensaje: {1}&lt;/p&gt;</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1904" />
-      <source>The MicroPython cross compiler &lt;b&gt;mpy-cross&lt;/b&gt; cannot be found. Ensure it is in the search path or configure it on the MicroPython configuration page.</source>
-      <translation>El compilador multiplataforma de MicroPython &lt;b&gt;mpy-cross&lt;/b&gt; no se encuentra. Asegúrese de que está en la ruta de búsqueda o configurarlo en la página de configuración de MicroPython.</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1930" />
-      <source>Python Files (*.py);;All Files (*)</source>
-      <translation>Archivos Python (*.py);;Todos los Archivos (*)</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1940" />
-      <source>The Python file &lt;b&gt;{0}&lt;/b&gt; does not exist. Aborting...</source>
-      <translation>El archivo de Python &lt;b&gt;{0}&lt;/b&gt; no existe. Abortando...</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1949" />
-      <source>'mpy-cross' Output</source>
-      <translation>Salida de 'mpy-cross'</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1975" />
-      <source>The current editor does not contain a Python file. Aborting...</source>
-      <translation>El editor actual no contiene un archivo de Python. Abortando...</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2067" />
-      <source>Add Unknown Devices</source>
-      <translation>Añadir Dispositivos Desconocidos</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2068" />
       <source>Select the devices to be added:</source>
       <translation>Seleccionar los dispositivos a añadir:</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2117" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1606" />
       <source>Plus any modules on the filesystem.</source>
       <translation>Más cualesquiera módulos en el sistema de archivos.</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2169" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1658" />
       <source>Package '{0}' was installed successfully.</source>
       <translation>El Package '{0}' se ha instalado correctamente.</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2184" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1673" />
       <source>Enter the packages to be installed separated by whitespace:</source>
       <translation>Introducir los packages a instalar separados por espacios:</translation>
     </message>
     <message>
       <location filename="../MicroPython/MicroPythonWidget.ui" line="0" />
-      <source>Press to check for connected devices</source>
-      <translation>Pulsar para comprobar dispositivos conectados</translation>
+      <source>Press to detect connected devices and repopulate the device selector.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.ui" line="0" />
+      <source>Press to edit the list of configured WebREPL connections.</source>
+      <translation type="unfinished" />
     </message>
     <message>
       <location filename="../MicroPython/MicroPythonWidget.ui" line="0" />
@@ -51258,6 +51536,37 @@
       <source>Press to open a chart window to display data receive from the selected device</source>
       <translation>Pulsar para abrir una ventana de gráfica para mostrar datos recibidos desde el dispositivo seleccionado</translation>
     </message>
+    <message numerus="yes">
+      <source>%n supported device(s) detected.</source>
+      <translation type="vanished">
+        <numerusform>%n dispositivo soportado detectado.</numerusform>
+        <numerusform>%n dispositivos soportados detectados.</numerusform>
+      </translation>
+    </message>
+    <message>
+      <source>No supported devices detected.</source>
+      <translation type="vanished">No se han detectado dispositivos soportados.</translation>
+    </message>
+    <message>
+      <source>Clear</source>
+      <translation type="vanished">Limpiar</translation>
+    </message>
+    <message>
+      <source>Copy</source>
+      <translation type="vanished">Copiar</translation>
+    </message>
+    <message>
+      <source>Paste</source>
+      <translation type="vanished">Pegar</translation>
+    </message>
+    <message>
+      <source>Select All</source>
+      <translation type="vanished">Seleccionar todo</translation>
+    </message>
+    <message>
+      <source>Press to check for connected devices</source>
+      <translation type="vanished">Pulsar para comprobar dispositivos conectados</translation>
+    </message>
   </context>
   <context>
     <name>MicrobitDevice</name>
@@ -51421,29 +51730,29 @@
       <translation>Script vacío. Abortando.</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="569" />
+      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="571" />
       <source>MicroPython Firmware for BBC micro:bit V1</source>
       <translation>Firmware MicroPython para BBC micro:bit V1</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="601" />
-      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="588" />
-      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="573" />
+      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="603" />
+      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="590" />
+      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="575" />
       <source>DAPLink Firmware</source>
       <translation>Firmware DAPLink</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="580" />
+      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="582" />
       <source>MicroPython Firmware for BBC micro:bit V2</source>
       <translation>Firmware MicroPython para BBC micro:bit V2</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="584" />
+      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="586" />
       <source>CircuitPython Firmware for BBC micro:bit V2</source>
       <translation>Firmware CircuitPython para BBC micro:bit V2</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="597" />
+      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="599" />
       <source>MicroPython Firmware</source>
       <translation>Firmware MicroPython</translation>
     </message>
@@ -58654,18 +58963,18 @@
   <context>
     <name>Preferences</name>
     <message>
-      <location filename="../Preferences/__init__.py" line="1815" />
+      <location filename="../Preferences/__init__.py" line="1817" />
       <source>Export Preferences</source>
       <translation>Exportar Preferencias</translation>
     </message>
     <message>
+      <location filename="../Preferences/__init__.py" line="1846" />
+      <location filename="../Preferences/__init__.py" line="1819" />
+      <source>Properties File (*.ini);;All Files (*)</source>
+      <translation>Archivo de Propiedades (*.ini);;Todos los archivos (*)</translation>
+    </message>
+    <message>
       <location filename="../Preferences/__init__.py" line="1844" />
-      <location filename="../Preferences/__init__.py" line="1817" />
-      <source>Properties File (*.ini);;All Files (*)</source>
-      <translation>Archivo de Propiedades (*.ini);;Todos los archivos (*)</translation>
-    </message>
-    <message>
-      <location filename="../Preferences/__init__.py" line="1842" />
       <source>Import Preferences</source>
       <translation>Importar Preferencias</translation>
     </message>
@@ -68802,88 +69111,88 @@
       <translation>Versión de MicroPython</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="364" />
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="365" />
       <source>MicroPython Firmware</source>
       <translation>MicroPython Firmware</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="368" />
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="369" />
       <source>Pimoroni Pico Firmware</source>
       <translation>Firmware de Pimoroni Pico</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="371" />
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="372" />
       <source>CircuitPython Firmware</source>
       <translation>CircuitPython Firmware</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="375" />
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="376" />
       <source>CircuitPython Libraries</source>
       <translation>Bibliotecas de CircuitPython</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="427" />
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="428" />
       <source>Set Country</source>
       <translation>Establecer País</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="983" />
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="618" />
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="978" />
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="617" />
       <source>unknown ({0})</source>
       <translation>({0}) desconocido</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1093" />
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1088" />
       <source>Pico Wireless does not support setting the IPv4 parameters of the WiFi access point.</source>
       <translation>La red inalámbrica Pico no soporta establecer parámetros IPv4 del punto de acceso WiFi.</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1168" />
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1161" />
       <source>Pico Wireless does not support reporting of connected clients.</source>
       <translation>La red inalámbrica Pico no soporta información de clientes conectados.</translation>
     </message>
     <message>
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1248" />
+      <source>Active</source>
+      <translation>Activa</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1249" />
+      <source>Connected</source>
+      <translation>conectada</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1252" />
+      <source>Status</source>
+      <translation>Estado</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1256" />
+      <source>Hostname</source>
+      <translation>Nombre de Host</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1257" />
+      <source>IPv4 Address</source>
+      <translation>Dirección IPv4</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1258" />
+      <source>Netmask</source>
+      <translation>Máscara de Red</translation>
+    </message>
+    <message>
       <location filename="../MicroPython/Devices/RP2040Devices.py" line="1259" />
-      <source>Active</source>
-      <translation>Activa</translation>
+      <source>Gateway</source>
+      <translation>Gateway</translation>
     </message>
     <message>
       <location filename="../MicroPython/Devices/RP2040Devices.py" line="1260" />
-      <source>Connected</source>
-      <translation>conectada</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1263" />
-      <source>Status</source>
-      <translation>Estado</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1267" />
-      <source>Hostname</source>
-      <translation>Nombre de Host</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1268" />
-      <source>IPv4 Address</source>
-      <translation>Dirección IPv4</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1269" />
-      <source>Netmask</source>
-      <translation>Máscara de Red</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1270" />
-      <source>Gateway</source>
-      <translation>Gateway</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1271" />
       <source>DNS</source>
       <translation>DNS</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1272" />
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1261" />
       <source>MAC-Address</source>
       <translation>Dirección MAC</translation>
     </message>
@@ -83016,7 +83325,7 @@
       <translation>Instrucciones para MicroPython Flash</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/TeensyDevices.py" line="315" />
+      <location filename="../MicroPython/Devices/TeensyDevices.py" line="316" />
       <location filename="../MicroPython/Devices/TeensyDevices.py" line="154" />
       <source>Flash MicroPython Firmware</source>
       <translation>Flash MicroPython Firmware</translation>
@@ -83057,17 +83366,17 @@
       <translation>Versión de MicroPython</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/TeensyDevices.py" line="316" />
+      <location filename="../MicroPython/Devices/TeensyDevices.py" line="317" />
       <source>&lt;p&gt;Teensy 4.0 and Teensy 4.1 are flashed using the 'Teensy Loader' application. Make sure you downloaded the MicroPython or CircuitPython .hex file.&lt;/p&gt;&lt;p&gt;See &lt;a href="{0}"&gt;the PJRC Teensy web site&lt;/a&gt; for details.&lt;/p&gt;</source>
       <translation>&lt;p&gt;Teensy 4.0 y Teensy 4.1 se flashean utilizando la aplicación 'Teensy Loader'. Asegurar que se ha descargado el archivo hex de MicroPython o CircuitPython.&lt;/p&gt;&lt;p&gt;Ver &lt;a href="{0}"&gt;el sitio web de PJRC Teensy&lt;/a&gt; para más detalles.&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/TeensyDevices.py" line="338" />
-      <source>Start 'Teensy Loader'</source>
-      <translation>Iniciar 'Teensy Loader'</translation>
-    </message>
-    <message>
       <location filename="../MicroPython/Devices/TeensyDevices.py" line="339" />
+      <source>Start 'Teensy Loader'</source>
+      <translation>Iniciar 'Teensy Loader'</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/Devices/TeensyDevices.py" line="340" />
       <source>&lt;p&gt;The 'Teensy Loader' application &lt;b&gt;teensy&lt;/b&gt; could not be started. Ensure it is in the application search path or start it manually.&lt;/p&gt;</source>
       <translation>&lt;p&gt;La aplicación 'Teensy Loader' &lt;b&gt;teensy&lt;/b&gt; no se ha podido iniciar. Asegurar que está en la ruta de búsqueda de aplicaciones o iniciarla manualmente.&lt;/p&gt;</translation>
     </message>
--- a/src/eric7/i18n/eric7_fr.ts	Tue May 02 11:39:09 2023 +0200
+++ b/src/eric7/i18n/eric7_fr.ts	Thu May 04 17:58:52 2023 +0200
@@ -1821,77 +1821,77 @@
   <context>
     <name>BaseDevice</name>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="196" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="199" />
       <source>Device Data Not Available</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="197" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="200" />
       <source>&lt;p&gt;The device data is not available. Try to connect to the device again. Aborting...&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="250" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="253" />
       <source>Unsupported Device</source>
       <translation type="unfinished">Matériel non supporté</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="260" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="263" />
       <source>REPL is not supported by this device.</source>
       <translation type="unfinished">REPL n'est pas supporté pour ce matériel.</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="279" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="282" />
       <source>Plotter is not supported by this device.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="298" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="301" />
       <source>Running scripts is not supported by this device.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="317" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="320" />
       <source>File Manager is not supported by this device.</source>
       <translation type="unfinished">Le gestionnaire de fichier n'est pas supporté pour ce matériel.</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="372" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="375" />
       <source>Select Device Directory</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="373" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="376" />
       <source>Select the directory for the connected device:</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="519" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="528" />
       <source>Detected an error without indications.</source>
       <translation type="unfinished">Supprimer une erreur sans indications.</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="1464" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="1473" />
       <source>Operation not supported.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="1772" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="1781" />
       <source>Yes</source>
       <translation type="unfinished">Oui</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="1772" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="1781" />
       <source>No</source>
       <translation type="unfinished">Non</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="1774" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="1783" />
       <source>yes</source>
       <translation type="unfinished">oui</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="1774" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="1783" />
       <source>no</source>
       <translation type="unfinished">non</translation>
     </message>
@@ -4252,14 +4252,14 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1128" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1126" />
       <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="865" />
       <source>unknown ({0})</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1577" />
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1500" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1567" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1490" />
       <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1040" />
       <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="961" />
       <source>The device volume is not available.</source>
@@ -4272,94 +4272,94 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1539" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1529" />
       <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1005" />
       <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="977" />
       <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; exists already. Shall it be replaced?&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1546" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1536" />
       <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1012" />
       <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="984" />
       <source>Aborted</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1195" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1193" />
       <source>CircuitPython does not support setting the IPv4 parameters of the WiFi access point.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1266" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1262" />
       <source>CircuitPython does not support reporting of connected clients.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1675" />
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1350" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1663" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1342" />
       <source>Active</source>
       <translation type="unfinished">Actif</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1681" />
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1351" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1669" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1343" />
       <source>Connected</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1352" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1344" />
       <source>IPv4 Address</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1353" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1345" />
       <source>Netmask</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1354" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1346" />
       <source>Gateway</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1355" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1347" />
       <source>DNS</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1677" />
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1356" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1665" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1348" />
       <source>MAC-Address</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1357" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1349" />
       <source>Chip Type</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1358" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1350" />
       <source>max. Sockets</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1538" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1528" />
       <source>Write Connect Script</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1676" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1664" />
       <source>Name</source>
       <translation type="unfinished">Nom</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1679" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1667" />
       <source>Address Type</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1682" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1670" />
       <source>Advertising</source>
       <translation type="unfinished" />
     </message>
@@ -20695,8 +20695,8 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1506" />
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1490" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1498" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1482" />
       <location filename="../MicroPython/Devices/EspDevices.py" line="196" />
       <source>Erase Flash</source>
       <translation type="unfinished" />
@@ -20707,7 +20707,7 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1591" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1583" />
       <location filename="../MicroPython/Devices/EspDevices.py" line="203" />
       <source>Flash Additional Firmware</source>
       <translation type="unfinished" />
@@ -20758,8 +20758,8 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1590" />
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1549" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1582" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1541" />
       <location filename="../MicroPython/Devices/EspDevices.py" line="363" />
       <source>'esptool write_flash' Output</source>
       <translation type="unfinished" />
@@ -20825,68 +20825,68 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="980" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="978" />
       <source>unknown ({0})</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1209" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1201" />
       <source>Active</source>
       <translation type="unfinished">Actif</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1210" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1202" />
       <source>Name</source>
       <translation type="unfinished">Nom</translation>
     </message>
     <message>
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1203" />
+      <source>MAC-Address</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1206" />
+      <source>Address Type</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1207" />
+      <source>Public</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1207" />
+      <source>Random</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
       <location filename="../MicroPython/Devices/EspDevices.py" line="1211" />
-      <source>MAC-Address</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1214" />
-      <source>Address Type</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1215" />
-      <source>Public</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1215" />
-      <source>Random</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1219" />
       <source>Rx-Buffer</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1221" />
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1219" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1213" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1211" />
       <source>{0} Bytes</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1221" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1213" />
       <source>MTU</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1491" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1483" />
       <source>Shall the flash of the selected device really be erased?</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1505" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1497" />
       <source>'esptool erase_flash' Output</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1550" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1542" />
       <source>Flash µPy/CPy Firmware</source>
       <translation type="unfinished" />
     </message>
@@ -50610,15 +50610,16 @@
     </message>
     <message>
       <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
-      <source>Serial Link</source>
+      <source>Device Communication</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
-      <source>Timeout for Serial Link Communication:</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
+      <source>Serial Link Timeout:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
       <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
       <source>Enter the timout value</source>
       <translation type="unfinished" />
@@ -50626,11 +50627,22 @@
     <message>
       <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
       <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
+      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
       <source> s</source>
       <translation> s</translation>
     </message>
     <message>
       <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
+      <source>WebRepl Timeout:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
+      <source>Device Time</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
       <source>Select to synchronize the time after connection is established</source>
       <translation>Cocher pour synchroniser le temps après l'établissement de la connection</translation>
     </message>
@@ -50723,8 +50735,8 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.py" line="354" />
-      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.py" line="337" />
+      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.py" line="364" />
+      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.py" line="347" />
       <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
       <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
       <source>Press to show the password</source>
@@ -51066,8 +51078,8 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.py" line="350" />
-      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.py" line="333" />
+      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.py" line="360" />
+      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.py" line="343" />
       <source>Press to hide the password</source>
       <translation type="unfinished">Cliquer pour cacher le mot de passe</translation>
     </message>
@@ -51081,38 +51093,298 @@
     </message>
   </context>
   <context>
+    <name>MicroPythonReplEdit</name>
+    <message>
+      <location filename="../MicroPython/MicroPythonReplWidget.py" line="322" />
+      <source>Clear</source>
+      <translation type="unfinished">Effacer</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonReplWidget.py" line="327" />
+      <source>Copy</source>
+      <translation type="unfinished">Copier</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonReplWidget.py" line="333" />
+      <source>Paste</source>
+      <translation type="unfinished">Coller</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonReplWidget.py" line="340" />
+      <source>Select All</source>
+      <translation type="unfinished">Tout sélectionner</translation>
+    </message>
+  </context>
+  <context>
+    <name>MicroPythonWebreplConnectionDialog</name>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.py" line="97" />
+      <source>Press to hide the password.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.ui" line="0" />
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.py" line="101" />
+      <source>Press to show the password.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.ui" line="0" />
+      <source>WebREPL Connection</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.ui" line="0" />
+      <source>Host:</source>
+      <translation type="unfinished">Hôte :</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.ui" line="0" />
+      <source>Enter the host name or IPv4 address of the device.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.ui" line="0" />
+      <source>Port:</source>
+      <translation type="unfinished">Port :</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.ui" line="0" />
+      <source>Enter the port of the WebREPL (empty for default port 8266).</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.ui" line="0" />
+      <source>Password:</source>
+      <translation type="unfinished">Mot de passe :</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.ui" line="0" />
+      <source>Enter the password for this device connection.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.ui" line="0" />
+      <source>Device Type:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.ui" line="0" />
+      <source>Select the device type</source>
+      <translation type="unfinished" />
+    </message>
+  </context>
+  <context>
+    <name>MicroPythonWebreplDeviceInterface</name>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplDeviceInterface.py" line="80" />
+      <source>WebREPL Password</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplDeviceInterface.py" line="81" />
+      <source>Enter the WebREPL password:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplDeviceInterface.py" line="100" />
+      <source>WebREPL Login</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplDeviceInterface.py" line="101" />
+      <source>The login to the selected device 'webrepl' failed. The given password may be incorrect.</source>
+      <translation type="unfinished" />
+    </message>
+  </context>
+  <context>
+    <name>MicroPythonWebreplUrlAddEditDialog</name>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>WebREPL URL</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Name:</source>
+      <translation type="unfinished">Nom :</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Enter a unique name for the WebREPL connection.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Description:</source>
+      <translation type="unfinished">Description:</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Enter a short description to be shown in the selector.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Host:</source>
+      <translation type="unfinished">Hôte :</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Enter the host name or IPv4 address of the device.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Port:</source>
+      <translation type="unfinished">Port :</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Enter the port of the WebREPL (empty for default port 8266).</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Password:</source>
+      <translation type="unfinished">Mot de passe :</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Enter the password for this device connection.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Device Type:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Select the device type</source>
+      <translation type="unfinished" />
+    </message>
+  </context>
+  <context>
+    <name>MicroPythonWebreplUrlsConfigDialog</name>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.py" line="133" />
+      <source>Remove Selected WebREPL URLs</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.py" line="134" />
+      <source>Shall the selected WebREPL URLs really be removed?</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.py" line="150" />
+      <source>Remove All WebREPL URLs</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.py" line="151" />
+      <source>Shall all WebREPL URLs really be removed?</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>WebREPL URLs</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>Name</source>
+      <translation type="unfinished">Nom</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>Description</source>
+      <translation type="unfinished">Description</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>URL</source>
+      <translation type="unfinished">URL</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>Press to add a new entry.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>Add...</source>
+      <translation type="unfinished">Ajouter...</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>Press to edit the selected entry.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>Edit...</source>
+      <translation type="unfinished">Éditer...</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>Press to remove the selected entries.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>Remove</source>
+      <translation type="unfinished">Supprimer</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>Press to remove all entries.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>Remove All</source>
+      <translation type="unfinished">Tout supprimer</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>&lt;b&gt;Note:&lt;/b&gt; The name of an entry must be unique amongst the list.</source>
+      <translation type="unfinished" />
+    </message>
+  </context>
+  <context>
     <name>MicroPythonWidget</name>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="247" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="109" />
       <source>MicroPython Menu</source>
       <translation>Menu MicroPython</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="306" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="145" />
       <source>&lt;h3&gt;The QtSerialPort package is not available.&lt;br/&gt;MicroPython support is deactivated.&lt;/h3&gt;</source>
       <translation type="unfinished" />
     </message>
     <message numerus="yes">
-      <location filename="../MicroPython/MicroPythonWidget.py" line="347" />
-      <source>%n supported device(s) detected.</source>
-      <translation>
-        <numerusform>%n matériel supporté détecté.</numerusform>
-        <numerusform>%n matériels supportés détectés.</numerusform>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="173" />
+      <source>%n supported serial device(s) detected.</source>
+      <translation type="unfinished">
+        <numerusform />
       </translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="361" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="187" />
       <source>{0} - {1} ({2})</source>
       <comment>board name, description, port name</comment>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="381" />
-      <source>No supported devices detected.</source>
-      <translation>Pas de matériel supporté détecté.</translation>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="210" />
+      <source>No supported serial devices detected.</source>
+      <translation type="unfinished" />
     </message>
     <message numerus="yes">
-      <location filename="../MicroPython/MicroPythonWidget.py" line="385" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="214" />
       <source>
 %n unknown device(s) for manual selection.</source>
       <translation type="unfinished">
@@ -51121,70 +51393,63 @@
       </translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="392" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="221" />
       <source>Manual Selection</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="456" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="427" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="232" />
+      <source>WebREPL (manual)</source>
+      <translation type="unfinished" />
+    </message>
+    <message numerus="yes">
+      <location filename="../MicroPython/MicroPythonWidget.py" line="251" />
+      <source>
+%n WebREPL connection(s) defined.</source>
+      <translation type="unfinished">
+        <numerusform />
+      </translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="311" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="282" />
       <source>Unknown MicroPython Device</source>
       <translation>Matériel MicroPython inconnu</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="428" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="283" />
       <source>&lt;p&gt;Detected these unknown serial devices&lt;/p&gt;&lt;ul&gt;&lt;li&gt;{0}&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Please report them together with the board name and a short description to &lt;a href="mailto:{1}"&gt; the eric bug reporting address&lt;/a&gt; if it is a MicroPython board.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="440" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="295" />
       <source>{0} (0x{1:04x}/0x{2:04x})</source>
       <comment>description, VId, PId</comment>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="457" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="312" />
       <source>Would you like to add them to the list of manually configured devices?</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="592" />
-      <source>Clear</source>
-      <translation>Effacer</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="597" />
-      <source>Copy</source>
-      <translation>Copier</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="603" />
-      <source>Paste</source>
-      <translation>Coller</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="610" />
-      <source>Select All</source>
-      <translation type="unfinished">Tout sélectionner</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="636" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="451" />
       <source>Press to disconnect the current device</source>
       <translation>Cliquer pour déconnecter le matériel courant</translation>
     </message>
     <message>
       <location filename="../MicroPython/MicroPythonWidget.ui" line="0" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="641" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="456" />
       <source>Press to connect the selected device</source>
       <translation>Cliquer pour se connecter au matériel sélectionné</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="673" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="488" />
       <source>No device attached</source>
       <translation>Pas de matériel relié</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="674" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="489" />
       <source>Please ensure the device is plugged into your computer and selected.
 
 It must have a version of MicroPython (or CircuitPython) flashed onto it before anything will work.
@@ -51193,354 +51458,359 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="703" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="518" />
       <source>Start REPL</source>
       <translation>Démarrer REPL</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="704" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="519" />
       <source>&lt;p&gt;The REPL cannot be started.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
       <translation>&lt;p&gt;REPL ne peut être démarré.&lt;/p&gt;&lt;p&gt;Raison : {0}&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1232" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1221" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="716" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="705" />
       <source>Serial Device Connect</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1222" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="706" />
       <source>&lt;p&gt;The device at serial port &lt;b&gt;{0}&lt;/b&gt; does not respond. It may not have a MicroPython firmware flashed.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1233" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="717" />
       <source>&lt;p&gt;Cannot connect to device at serial port &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</source>
       <translation>&lt;p&gt;Ne peut connecter un matériel sur le port série&lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1291" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1282" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1273" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="780" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="771" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="762" />
       <source>Run Script</source>
       <translation>Lancer le script</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1274" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="763" />
       <source>There is no editor open. Abort...</source>
       <translation>Il n'y a pas d'éditeur ouvert. Annulation...</translation>
     </message>
     <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="772" />
+      <source>The current editor does not contain a script. Abort...</source>
+      <translation>L'éditeur courant ne contient pas de script. Annulation...</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="781" />
+      <source>&lt;p&gt;Cannot run script.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
+      <translation>&lt;p&gt;Ne peut lancer le script.&lt;/p&gt;&lt;p&gt;Raison : {0}&lt;/p&gt;</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="817" />
+      <source>Start Chart</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="818" />
+      <source>&lt;p&gt;The Chart cannot be started.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="833" />
+      <source>µPy Chart</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="850" />
+      <source>Unsaved Chart Data</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="851" />
+      <source>The chart contains unsaved data.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="899" />
+      <source>Start File Manager</source>
+      <translation>Démarrer le gestionnaire de fichier</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="900" />
+      <source>&lt;p&gt;The File Manager cannot be started.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
+      <translation>&lt;p&gt;Le gestionnaire de fichier ne peut démarrer.&lt;/p&gt;&lt;p&gt;Raison : {0}&lt;/p&gt;</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="920" />
+      <source>µPy Files</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="985" />
+      <source>Downloads</source>
+      <translation type="unfinished">Téléchargements</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1032" />
+      <source>Show Version</source>
+      <translation>Montrer la version</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1035" />
+      <source>Show Implementation</source>
+      <translation>Montrer l'implémentation</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1038" />
+      <source>Show Board Data</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1224" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1043" />
+      <source>Synchronize Time</source>
+      <translation>Synchroniser le temps</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1046" />
+      <source>Show Device Time</source>
+      <translation>Montrer l'horloge matériel</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1048" />
+      <source>Show Local Time</source>
+      <translation>Montrer l'horloge locale</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1051" />
+      <source>Show Time</source>
+      <translation>Montrer l'horloge</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1055" />
+      <source>Show Builtin Modules</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1633" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1067" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1059" />
+      <source>Install Package</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1672" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1669" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1063" />
+      <source>Install Packages</source>
+      <translation type="unfinished">Installer des packages</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1448" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1073" />
+      <source>Compile Python File</source>
+      <translation>Compilier le fichier Python</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1472" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1463" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1077" />
+      <source>Compile Current Editor</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1098" />
+      <source>Download Firmware</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1105" />
+      <source>Show Documentation</source>
+      <translation>Montrer la documentation</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1108" />
+      <source>Convert To UF2</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1109" />
+      <source>Flash UF2 Device</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1112" />
+      <source>Manage Unknown Devices</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1115" />
+      <source>Ignored Serial Devices</source>
+      <translation>Matériels séries ignorés</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1118" />
+      <source>Configure</source>
+      <translation>Configuration</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1127" />
+      <source>&lt;h3&gt;Device Version Information&lt;/h3&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1138" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1134" />
+      <source>Device Version Information</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1139" />
+      <source>No version information available.</source>
+      <translation>Pas d'information de version disponible.</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1163" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1155" />
+      <source>unknown</source>
+      <translation>inconnu</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1169" />
+      <source> ({0})</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1185" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1176" />
+      <source>Device Implementation Information</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1177" />
+      <source>&lt;h3&gt;Device Implementation Information&lt;/h3&gt;&lt;p&gt;This device contains &lt;b&gt;{0} {1}{2}&lt;/b&gt;.&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1186" />
+      <source>No device implementation information available.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1225" />
+      <source>&lt;p&gt;The time of the connected device was synchronized with the local time.&lt;/p&gt;</source>
+      <translation>&lt;p&gt;L'horloge du matériel connecté a été synchronisée à l'horloge locale.&lt;/p&gt;</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1247" />
+      <source>&lt;h3&gt;Device Date and Time&lt;/h3&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{1}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
+      <translation>&lt;h3&gt;Date et heure matériel&lt;/h3&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Heure&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{1}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1255" />
+      <source>&lt;h3&gt;Device Date and Time&lt;/h3&gt;&lt;p&gt;{0}&lt;/p&gt;</source>
+      <translation>&lt;h3&gt;Date et heure matériel&lt;/h3&gt;&lt;p&gt;{0}&lt;/p&gt;</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1271" />
+      <source>Device Date and Time</source>
+      <translation>Date et heure matériel</translation>
+    </message>
+    <message>
       <location filename="../MicroPython/MicroPythonWidget.py" line="1283" />
-      <source>The current editor does not contain a script. Abort...</source>
-      <translation>L'éditeur courant ne contient pas de script. Annulation...</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1292" />
-      <source>&lt;p&gt;Cannot run script.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
-      <translation>&lt;p&gt;Ne peut lancer le script.&lt;/p&gt;&lt;p&gt;Raison : {0}&lt;/p&gt;</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1328" />
-      <source>Start Chart</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1329" />
-      <source>&lt;p&gt;The Chart cannot be started.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1344" />
-      <source>µPy Chart</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1361" />
-      <source>Unsaved Chart Data</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1362" />
-      <source>The chart contains unsaved data.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1410" />
-      <source>Start File Manager</source>
-      <translation>Démarrer le gestionnaire de fichier</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1411" />
-      <source>&lt;p&gt;The File Manager cannot be started.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
-      <translation>&lt;p&gt;Le gestionnaire de fichier ne peut démarrer.&lt;/p&gt;&lt;p&gt;Raison : {0}&lt;/p&gt;</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1431" />
-      <source>µPy Files</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1496" />
-      <source>Downloads</source>
-      <translation type="unfinished">Téléchargements</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1543" />
-      <source>Show Version</source>
-      <translation>Montrer la version</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1546" />
-      <source>Show Implementation</source>
-      <translation>Montrer l'implémentation</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1549" />
-      <source>Show Board Data</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1735" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1554" />
-      <source>Synchronize Time</source>
-      <translation>Synchroniser le temps</translation>
+      <source>Local Date and Time</source>
+      <translation>Date et heure locales</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1284" />
+      <source>&lt;h3&gt;Local Date and Time&lt;/h3&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{1}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
+      <translation>&lt;h3&gt;Date et heure locales&lt;/h3&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Heure&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{1}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1325" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1308" />
+      <source>Date and Time</source>
+      <translation>Date et heure</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1309" />
+      <source>&lt;table&gt;&lt;tr&gt;&lt;th&gt;&lt;/th&gt;&lt;th&gt;Local Date and Time&lt;/th&gt;&lt;th&gt;Device Date and Time&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td align='center'&gt;{0}&lt;/td&gt;&lt;td align='center'&gt;{2}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td align='center'&gt;{1}&lt;/td&gt;&lt;td align='center'&gt;{3}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
+      <translation>&lt;table&gt;&lt;tr&gt;&lt;th&gt;&lt;/th&gt;&lt;th&gt;Date et heure locales&lt;/th&gt;&lt;th&gt;Date et heure matériel&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td align='center'&gt;{0}&lt;/td&gt;&lt;td align='center'&gt;{2}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Heure&lt;/b&gt;&lt;/td&gt;&lt;td align='center'&gt;{1}&lt;/td&gt;&lt;td align='center'&gt;{3}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1326" />
+      <source>&lt;table&gt;&lt;tr&gt;&lt;th&gt;Local Date and Time&lt;/th&gt;&lt;th&gt;Device Date and Time&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align='center'&gt;{0} {1}&lt;/td&gt;&lt;td align='center'&gt;{2}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
+      <translation>&lt;table&gt;&lt;tr&gt;&lt;th&gt;Date et heure locales&lt;/th&gt;&lt;th&gt;Date et heure matériel&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align='center'&gt;{0} {1}&lt;/td&gt;&lt;td align='center'&gt;{2}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1350" />
+      <source>Error handling device</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1351" />
+      <source>&lt;p&gt;There was an error communicating with the connected device.&lt;/p&gt;&lt;p&gt;Method: {0}&lt;/p&gt;&lt;p&gt;Message: {1}&lt;/p&gt;</source>
+      <translation>&lt;p&gt;Il y a eu une erreur de communication avec le matériel connecté.&lt;/p&gt;&lt;p&gt;Méthode : {0}&lt;/p&gt;&lt;p&gt;Message : {1}&lt;/p&gt;</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1393" />
+      <source>The MicroPython cross compiler &lt;b&gt;mpy-cross&lt;/b&gt; cannot be found. Ensure it is in the search path or configure it on the MicroPython configuration page.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1419" />
+      <source>Python Files (*.py);;All Files (*)</source>
+      <translation>Fichiers Python (*.py);;Tous les fichiers (*)</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1429" />
+      <source>The Python file &lt;b&gt;{0}&lt;/b&gt; does not exist. Aborting...</source>
+      <translation>Le fichier Python &lt;b&gt;{0}&lt;/b&gt; n'existe pas. Annulation...</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1438" />
+      <source>'mpy-cross' Output</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1464" />
+      <source>The current editor does not contain a Python file. Aborting...</source>
+      <translation>L'éditeur courant ne contient pas un fichier Python. Annulation...</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1556" />
+      <source>Add Unknown Devices</source>
+      <translation type="unfinished" />
     </message>
     <message>
       <location filename="../MicroPython/MicroPythonWidget.py" line="1557" />
-      <source>Show Device Time</source>
-      <translation>Montrer l'horloge matériel</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1559" />
-      <source>Show Local Time</source>
-      <translation>Montrer l'horloge locale</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1562" />
-      <source>Show Time</source>
-      <translation>Montrer l'horloge</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1566" />
-      <source>Show Builtin Modules</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2144" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1578" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1570" />
-      <source>Install Package</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2183" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2180" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1574" />
-      <source>Install Packages</source>
-      <translation type="unfinished">Installer des packages</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1959" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1584" />
-      <source>Compile Python File</source>
-      <translation>Compilier le fichier Python</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1983" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1974" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1588" />
-      <source>Compile Current Editor</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1609" />
-      <source>Download Firmware</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1616" />
-      <source>Show Documentation</source>
-      <translation>Montrer la documentation</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1619" />
-      <source>Convert To UF2</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1620" />
-      <source>Flash UF2 Device</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1623" />
-      <source>Manage Unknown Devices</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1626" />
-      <source>Ignored Serial Devices</source>
-      <translation>Matériels séries ignorés</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1629" />
-      <source>Configure</source>
-      <translation>Configuration</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1638" />
-      <source>&lt;h3&gt;Device Version Information&lt;/h3&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1649" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1645" />
-      <source>Device Version Information</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1650" />
-      <source>No version information available.</source>
-      <translation>Pas d'information de version disponible.</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1674" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1666" />
-      <source>unknown</source>
-      <translation>inconnu</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1680" />
-      <source> ({0})</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1696" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1687" />
-      <source>Device Implementation Information</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1688" />
-      <source>&lt;h3&gt;Device Implementation Information&lt;/h3&gt;&lt;p&gt;This device contains &lt;b&gt;{0} {1}{2}&lt;/b&gt;.&lt;/p&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1697" />
-      <source>No device implementation information available.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1736" />
-      <source>&lt;p&gt;The time of the connected device was synchronized with the local time.&lt;/p&gt;</source>
-      <translation>&lt;p&gt;L'horloge du matériel connecté a été synchronisée à l'horloge locale.&lt;/p&gt;</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1758" />
-      <source>&lt;h3&gt;Device Date and Time&lt;/h3&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{1}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
-      <translation>&lt;h3&gt;Date et heure matériel&lt;/h3&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Heure&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{1}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1766" />
-      <source>&lt;h3&gt;Device Date and Time&lt;/h3&gt;&lt;p&gt;{0}&lt;/p&gt;</source>
-      <translation>&lt;h3&gt;Date et heure matériel&lt;/h3&gt;&lt;p&gt;{0}&lt;/p&gt;</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1782" />
-      <source>Device Date and Time</source>
-      <translation>Date et heure matériel</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1794" />
-      <source>Local Date and Time</source>
-      <translation>Date et heure locales</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1795" />
-      <source>&lt;h3&gt;Local Date and Time&lt;/h3&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{1}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
-      <translation>&lt;h3&gt;Date et heure locales&lt;/h3&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Heure&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{1}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1836" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1819" />
-      <source>Date and Time</source>
-      <translation>Date et heure</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1820" />
-      <source>&lt;table&gt;&lt;tr&gt;&lt;th&gt;&lt;/th&gt;&lt;th&gt;Local Date and Time&lt;/th&gt;&lt;th&gt;Device Date and Time&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td align='center'&gt;{0}&lt;/td&gt;&lt;td align='center'&gt;{2}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td align='center'&gt;{1}&lt;/td&gt;&lt;td align='center'&gt;{3}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
-      <translation>&lt;table&gt;&lt;tr&gt;&lt;th&gt;&lt;/th&gt;&lt;th&gt;Date et heure locales&lt;/th&gt;&lt;th&gt;Date et heure matériel&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td align='center'&gt;{0}&lt;/td&gt;&lt;td align='center'&gt;{2}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Heure&lt;/b&gt;&lt;/td&gt;&lt;td align='center'&gt;{1}&lt;/td&gt;&lt;td align='center'&gt;{3}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1837" />
-      <source>&lt;table&gt;&lt;tr&gt;&lt;th&gt;Local Date and Time&lt;/th&gt;&lt;th&gt;Device Date and Time&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align='center'&gt;{0} {1}&lt;/td&gt;&lt;td align='center'&gt;{2}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
-      <translation>&lt;table&gt;&lt;tr&gt;&lt;th&gt;Date et heure locales&lt;/th&gt;&lt;th&gt;Date et heure matériel&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align='center'&gt;{0} {1}&lt;/td&gt;&lt;td align='center'&gt;{2}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1861" />
-      <source>Error handling device</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1862" />
-      <source>&lt;p&gt;There was an error communicating with the connected device.&lt;/p&gt;&lt;p&gt;Method: {0}&lt;/p&gt;&lt;p&gt;Message: {1}&lt;/p&gt;</source>
-      <translation>&lt;p&gt;Il y a eu une erreur de communication avec le matériel connecté.&lt;/p&gt;&lt;p&gt;Méthode : {0}&lt;/p&gt;&lt;p&gt;Message : {1}&lt;/p&gt;</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1904" />
-      <source>The MicroPython cross compiler &lt;b&gt;mpy-cross&lt;/b&gt; cannot be found. Ensure it is in the search path or configure it on the MicroPython configuration page.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1930" />
-      <source>Python Files (*.py);;All Files (*)</source>
-      <translation>Fichiers Python (*.py);;Tous les fichiers (*)</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1940" />
-      <source>The Python file &lt;b&gt;{0}&lt;/b&gt; does not exist. Aborting...</source>
-      <translation>Le fichier Python &lt;b&gt;{0}&lt;/b&gt; n'existe pas. Annulation...</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1949" />
-      <source>'mpy-cross' Output</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1975" />
-      <source>The current editor does not contain a Python file. Aborting...</source>
-      <translation>L'éditeur courant ne contient pas un fichier Python. Annulation...</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2067" />
-      <source>Add Unknown Devices</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2068" />
       <source>Select the devices to be added:</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2117" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1606" />
       <source>Plus any modules on the filesystem.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2169" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1658" />
       <source>Package '{0}' was installed successfully.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2184" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1673" />
       <source>Enter the packages to be installed separated by whitespace:</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../MicroPython/MicroPythonWidget.ui" line="0" />
-      <source>Press to check for connected devices</source>
-      <translation>Cliquer pour vérifier les matériels connectés</translation>
+      <source>Press to detect connected devices and repopulate the device selector.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.ui" line="0" />
+      <source>Press to edit the list of configured WebREPL connections.</source>
+      <translation type="unfinished" />
     </message>
     <message>
       <location filename="../MicroPython/MicroPythonWidget.ui" line="0" />
@@ -51562,6 +51832,37 @@
       <source>Press to open a chart window to display data receive from the selected device</source>
       <translation type="unfinished" />
     </message>
+    <message numerus="yes">
+      <source>%n supported device(s) detected.</source>
+      <translation type="vanished">
+        <numerusform>%n matériel supporté détecté.</numerusform>
+        <numerusform>%n matériels supportés détectés.</numerusform>
+      </translation>
+    </message>
+    <message>
+      <source>No supported devices detected.</source>
+      <translation type="vanished">Pas de matériel supporté détecté.</translation>
+    </message>
+    <message>
+      <source>Clear</source>
+      <translation type="vanished">Effacer</translation>
+    </message>
+    <message>
+      <source>Copy</source>
+      <translation type="vanished">Copier</translation>
+    </message>
+    <message>
+      <source>Paste</source>
+      <translation type="vanished">Coller</translation>
+    </message>
+    <message>
+      <source>Select All</source>
+      <translation type="vanished">Tout sélectionner</translation>
+    </message>
+    <message>
+      <source>Press to check for connected devices</source>
+      <translation type="vanished">Cliquer pour vérifier les matériels connectés</translation>
+    </message>
     <message>
       <source>Open Python File</source>
       <translation type="vanished">Ouvrir un fichier Python</translation>
@@ -51737,29 +52038,29 @@
       <translation>Le script est vide. Annulation.</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="569" />
+      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="571" />
       <source>MicroPython Firmware for BBC micro:bit V1</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="601" />
-      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="588" />
-      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="573" />
+      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="603" />
+      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="590" />
+      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="575" />
       <source>DAPLink Firmware</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="580" />
+      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="582" />
       <source>MicroPython Firmware for BBC micro:bit V2</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="584" />
+      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="586" />
       <source>CircuitPython Firmware for BBC micro:bit V2</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="597" />
+      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="599" />
       <source>MicroPython Firmware</source>
       <translation type="unfinished" />
     </message>
@@ -59027,18 +59328,18 @@
   <context>
     <name>Preferences</name>
     <message>
-      <location filename="../Preferences/__init__.py" line="1815" />
+      <location filename="../Preferences/__init__.py" line="1817" />
       <source>Export Preferences</source>
       <translation>Export des préférences</translation>
     </message>
     <message>
+      <location filename="../Preferences/__init__.py" line="1846" />
+      <location filename="../Preferences/__init__.py" line="1819" />
+      <source>Properties File (*.ini);;All Files (*)</source>
+      <translation>Fichier propriétés (*.ini);;Tous les fichiers (*)</translation>
+    </message>
+    <message>
       <location filename="../Preferences/__init__.py" line="1844" />
-      <location filename="../Preferences/__init__.py" line="1817" />
-      <source>Properties File (*.ini);;All Files (*)</source>
-      <translation>Fichier propriétés (*.ini);;Tous les fichiers (*)</translation>
-    </message>
-    <message>
-      <location filename="../Preferences/__init__.py" line="1842" />
       <source>Import Preferences</source>
       <translation>Import des préférences</translation>
     </message>
@@ -69476,88 +69777,88 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="364" />
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="365" />
       <source>MicroPython Firmware</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="368" />
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="369" />
       <source>Pimoroni Pico Firmware</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="371" />
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="372" />
       <source>CircuitPython Firmware</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="375" />
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="376" />
       <source>CircuitPython Libraries</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="427" />
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="428" />
       <source>Set Country</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="983" />
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="618" />
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="978" />
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="617" />
       <source>unknown ({0})</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1093" />
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1088" />
       <source>Pico Wireless does not support setting the IPv4 parameters of the WiFi access point.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1168" />
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1161" />
       <source>Pico Wireless does not support reporting of connected clients.</source>
       <translation type="unfinished" />
     </message>
     <message>
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1248" />
+      <source>Active</source>
+      <translation type="unfinished">Actif</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1249" />
+      <source>Connected</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1252" />
+      <source>Status</source>
+      <translation type="unfinished">Etat (status)</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1256" />
+      <source>Hostname</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1257" />
+      <source>IPv4 Address</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1258" />
+      <source>Netmask</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
       <location filename="../MicroPython/Devices/RP2040Devices.py" line="1259" />
-      <source>Active</source>
-      <translation type="unfinished">Actif</translation>
+      <source>Gateway</source>
+      <translation type="unfinished" />
     </message>
     <message>
       <location filename="../MicroPython/Devices/RP2040Devices.py" line="1260" />
-      <source>Connected</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1263" />
-      <source>Status</source>
-      <translation type="unfinished">Etat (status)</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1267" />
-      <source>Hostname</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1268" />
-      <source>IPv4 Address</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1269" />
-      <source>Netmask</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1270" />
-      <source>Gateway</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1271" />
       <source>DNS</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1272" />
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1261" />
       <source>MAC-Address</source>
       <translation type="unfinished" />
     </message>
@@ -70507,19 +70808,19 @@
       <translation>Remplacer tout</translation>
     </message>
     <message>
-      <location filename="../QScintilla/SearchReplaceWidget.py" line="1045" />
+      <location filename="../QScintilla/SearchReplaceWidget.py" line="1046" />
       <location filename="../QScintilla/SearchReplaceWidget.py" line="597" />
       <location filename="../QScintilla/SearchReplaceWidget.py" line="559" />
       <source>'{0}' was not found.</source>
       <translation>'{0}' n'a pas été trouvé.</translation>
     </message>
     <message>
-      <location filename="../QScintilla/SearchReplaceWidget.py" line="1198" />
+      <location filename="../QScintilla/SearchReplaceWidget.py" line="1199" />
       <source>Replaced {0} occurrences.</source>
       <translation>{0} occurrences remplacées.</translation>
     </message>
     <message>
-      <location filename="../QScintilla/SearchReplaceWidget.py" line="1204" />
+      <location filename="../QScintilla/SearchReplaceWidget.py" line="1205" />
       <source>Nothing replaced because '{0}' was not found.</source>
       <translation>Rien de remplacé car '{0}' n'a pas été trouvé.</translation>
     </message>
@@ -83730,7 +84031,7 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/TeensyDevices.py" line="315" />
+      <location filename="../MicroPython/Devices/TeensyDevices.py" line="316" />
       <location filename="../MicroPython/Devices/TeensyDevices.py" line="154" />
       <source>Flash MicroPython Firmware</source>
       <translation type="unfinished" />
@@ -83771,17 +84072,17 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/TeensyDevices.py" line="316" />
+      <location filename="../MicroPython/Devices/TeensyDevices.py" line="317" />
       <source>&lt;p&gt;Teensy 4.0 and Teensy 4.1 are flashed using the 'Teensy Loader' application. Make sure you downloaded the MicroPython or CircuitPython .hex file.&lt;/p&gt;&lt;p&gt;See &lt;a href="{0}"&gt;the PJRC Teensy web site&lt;/a&gt; for details.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/TeensyDevices.py" line="338" />
-      <source>Start 'Teensy Loader'</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../MicroPython/Devices/TeensyDevices.py" line="339" />
+      <source>Start 'Teensy Loader'</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/Devices/TeensyDevices.py" line="340" />
       <source>&lt;p&gt;The 'Teensy Loader' application &lt;b&gt;teensy&lt;/b&gt; could not be started. Ensure it is in the application search path or start it manually.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
--- a/src/eric7/i18n/eric7_it.ts	Tue May 02 11:39:09 2023 +0200
+++ b/src/eric7/i18n/eric7_it.ts	Thu May 04 17:58:52 2023 +0200
@@ -1794,77 +1794,77 @@
   <context>
     <name>BaseDevice</name>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="196" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="199" />
       <source>Device Data Not Available</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="197" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="200" />
       <source>&lt;p&gt;The device data is not available. Try to connect to the device again. Aborting...&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="250" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="253" />
       <source>Unsupported Device</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="260" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="263" />
       <source>REPL is not supported by this device.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="279" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="282" />
       <source>Plotter is not supported by this device.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="298" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="301" />
       <source>Running scripts is not supported by this device.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="317" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="320" />
       <source>File Manager is not supported by this device.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="372" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="375" />
       <source>Select Device Directory</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="373" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="376" />
       <source>Select the directory for the connected device:</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="519" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="528" />
       <source>Detected an error without indications.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="1464" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="1473" />
       <source>Operation not supported.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="1772" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="1781" />
       <source>Yes</source>
       <translation type="unfinished">Si</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="1772" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="1781" />
       <source>No</source>
       <translation type="unfinished">No</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="1774" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="1783" />
       <source>yes</source>
       <translation type="unfinished">si</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="1774" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="1783" />
       <source>no</source>
       <translation type="unfinished">no</translation>
     </message>
@@ -4223,14 +4223,14 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1128" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1126" />
       <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="865" />
       <source>unknown ({0})</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1577" />
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1500" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1567" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1490" />
       <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1040" />
       <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="961" />
       <source>The device volume is not available.</source>
@@ -4243,94 +4243,94 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1539" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1529" />
       <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1005" />
       <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="977" />
       <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; exists already. Shall it be replaced?&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1546" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1536" />
       <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1012" />
       <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="984" />
       <source>Aborted</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1195" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1193" />
       <source>CircuitPython does not support setting the IPv4 parameters of the WiFi access point.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1266" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1262" />
       <source>CircuitPython does not support reporting of connected clients.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1675" />
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1350" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1663" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1342" />
       <source>Active</source>
       <translation type="unfinished">Attivo</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1681" />
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1351" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1669" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1343" />
       <source>Connected</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1352" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1344" />
       <source>IPv4 Address</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1353" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1345" />
       <source>Netmask</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1354" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1346" />
       <source>Gateway</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1355" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1347" />
       <source>DNS</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1677" />
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1356" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1665" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1348" />
       <source>MAC-Address</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1357" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1349" />
       <source>Chip Type</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1358" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1350" />
       <source>max. Sockets</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1538" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1528" />
       <source>Write Connect Script</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1676" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1664" />
       <source>Name</source>
       <translation type="unfinished">Nome</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1679" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1667" />
       <source>Address Type</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1682" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1670" />
       <source>Advertising</source>
       <translation type="unfinished" />
     </message>
@@ -20665,8 +20665,8 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1506" />
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1490" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1498" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1482" />
       <location filename="../MicroPython/Devices/EspDevices.py" line="196" />
       <source>Erase Flash</source>
       <translation type="unfinished" />
@@ -20677,7 +20677,7 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1591" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1583" />
       <location filename="../MicroPython/Devices/EspDevices.py" line="203" />
       <source>Flash Additional Firmware</source>
       <translation type="unfinished" />
@@ -20728,8 +20728,8 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1590" />
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1549" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1582" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1541" />
       <location filename="../MicroPython/Devices/EspDevices.py" line="363" />
       <source>'esptool write_flash' Output</source>
       <translation type="unfinished" />
@@ -20795,68 +20795,68 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="980" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="978" />
       <source>unknown ({0})</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1209" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1201" />
       <source>Active</source>
       <translation type="unfinished">Attivo</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1210" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1202" />
       <source>Name</source>
       <translation type="unfinished">Nome</translation>
     </message>
     <message>
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1203" />
+      <source>MAC-Address</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1206" />
+      <source>Address Type</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1207" />
+      <source>Public</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1207" />
+      <source>Random</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
       <location filename="../MicroPython/Devices/EspDevices.py" line="1211" />
-      <source>MAC-Address</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1214" />
-      <source>Address Type</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1215" />
-      <source>Public</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1215" />
-      <source>Random</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1219" />
       <source>Rx-Buffer</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1221" />
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1219" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1213" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1211" />
       <source>{0} Bytes</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1221" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1213" />
       <source>MTU</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1491" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1483" />
       <source>Shall the flash of the selected device really be erased?</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1505" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1497" />
       <source>'esptool erase_flash' Output</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1550" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1542" />
       <source>Flash µPy/CPy Firmware</source>
       <translation type="unfinished" />
     </message>
@@ -50537,15 +50537,16 @@
     </message>
     <message>
       <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
-      <source>Serial Link</source>
+      <source>Device Communication</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
-      <source>Timeout for Serial Link Communication:</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
+      <source>Serial Link Timeout:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
       <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
       <source>Enter the timout value</source>
       <translation type="unfinished" />
@@ -50553,11 +50554,22 @@
     <message>
       <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
       <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
+      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
       <source> s</source>
       <translation type="unfinished"> s</translation>
     </message>
     <message>
       <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
+      <source>WebRepl Timeout:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
+      <source>Device Time</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
       <source>Select to synchronize the time after connection is established</source>
       <translation type="unfinished" />
     </message>
@@ -50650,8 +50662,8 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.py" line="354" />
-      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.py" line="337" />
+      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.py" line="364" />
+      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.py" line="347" />
       <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
       <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
       <source>Press to show the password</source>
@@ -50993,8 +51005,8 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.py" line="350" />
-      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.py" line="333" />
+      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.py" line="360" />
+      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.py" line="343" />
       <source>Press to hide the password</source>
       <translation type="unfinished" />
     </message>
@@ -51008,38 +51020,298 @@
     </message>
   </context>
   <context>
+    <name>MicroPythonReplEdit</name>
+    <message>
+      <location filename="../MicroPython/MicroPythonReplWidget.py" line="322" />
+      <source>Clear</source>
+      <translation type="unfinished">Pulisci</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonReplWidget.py" line="327" />
+      <source>Copy</source>
+      <translation type="unfinished">Copia</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonReplWidget.py" line="333" />
+      <source>Paste</source>
+      <translation type="unfinished">Incolla</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonReplWidget.py" line="340" />
+      <source>Select All</source>
+      <translation type="unfinished">Seleziona tutti</translation>
+    </message>
+  </context>
+  <context>
+    <name>MicroPythonWebreplConnectionDialog</name>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.py" line="97" />
+      <source>Press to hide the password.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.ui" line="0" />
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.py" line="101" />
+      <source>Press to show the password.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.ui" line="0" />
+      <source>WebREPL Connection</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.ui" line="0" />
+      <source>Host:</source>
+      <translation type="unfinished">Host:</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.ui" line="0" />
+      <source>Enter the host name or IPv4 address of the device.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.ui" line="0" />
+      <source>Port:</source>
+      <translation type="unfinished">Porta:</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.ui" line="0" />
+      <source>Enter the port of the WebREPL (empty for default port 8266).</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.ui" line="0" />
+      <source>Password:</source>
+      <translation type="unfinished">Password:</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.ui" line="0" />
+      <source>Enter the password for this device connection.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.ui" line="0" />
+      <source>Device Type:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.ui" line="0" />
+      <source>Select the device type</source>
+      <translation type="unfinished" />
+    </message>
+  </context>
+  <context>
+    <name>MicroPythonWebreplDeviceInterface</name>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplDeviceInterface.py" line="80" />
+      <source>WebREPL Password</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplDeviceInterface.py" line="81" />
+      <source>Enter the WebREPL password:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplDeviceInterface.py" line="100" />
+      <source>WebREPL Login</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplDeviceInterface.py" line="101" />
+      <source>The login to the selected device 'webrepl' failed. The given password may be incorrect.</source>
+      <translation type="unfinished" />
+    </message>
+  </context>
+  <context>
+    <name>MicroPythonWebreplUrlAddEditDialog</name>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>WebREPL URL</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Name:</source>
+      <translation type="unfinished">Nome:</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Enter a unique name for the WebREPL connection.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Description:</source>
+      <translation type="unfinished">Descrizione:</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Enter a short description to be shown in the selector.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Host:</source>
+      <translation type="unfinished">Host:</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Enter the host name or IPv4 address of the device.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Port:</source>
+      <translation type="unfinished">Porta:</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Enter the port of the WebREPL (empty for default port 8266).</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Password:</source>
+      <translation type="unfinished">Password:</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Enter the password for this device connection.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Device Type:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Select the device type</source>
+      <translation type="unfinished" />
+    </message>
+  </context>
+  <context>
+    <name>MicroPythonWebreplUrlsConfigDialog</name>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.py" line="133" />
+      <source>Remove Selected WebREPL URLs</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.py" line="134" />
+      <source>Shall the selected WebREPL URLs really be removed?</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.py" line="150" />
+      <source>Remove All WebREPL URLs</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.py" line="151" />
+      <source>Shall all WebREPL URLs really be removed?</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>WebREPL URLs</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>Name</source>
+      <translation type="unfinished">Nome</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>Description</source>
+      <translation type="unfinished">Descrizione</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>URL</source>
+      <translation type="unfinished">URL</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>Press to add a new entry.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>Add...</source>
+      <translation type="unfinished">Aggiungi...</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>Press to edit the selected entry.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>Edit...</source>
+      <translation type="unfinished">Modifica...</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>Press to remove the selected entries.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>Remove</source>
+      <translation type="unfinished">Rimuovi</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>Press to remove all entries.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>Remove All</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>&lt;b&gt;Note:&lt;/b&gt; The name of an entry must be unique amongst the list.</source>
+      <translation type="unfinished" />
+    </message>
+  </context>
+  <context>
     <name>MicroPythonWidget</name>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="247" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="109" />
       <source>MicroPython Menu</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="306" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="145" />
       <source>&lt;h3&gt;The QtSerialPort package is not available.&lt;br/&gt;MicroPython support is deactivated.&lt;/h3&gt;</source>
       <translation type="unfinished" />
     </message>
     <message numerus="yes">
-      <location filename="../MicroPython/MicroPythonWidget.py" line="347" />
-      <source>%n supported device(s) detected.</source>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="173" />
+      <source>%n supported serial device(s) detected.</source>
       <translation type="unfinished">
         <numerusform />
-        <numerusform />
       </translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="361" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="187" />
       <source>{0} - {1} ({2})</source>
       <comment>board name, description, port name</comment>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="381" />
-      <source>No supported devices detected.</source>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="210" />
+      <source>No supported serial devices detected.</source>
       <translation type="unfinished" />
     </message>
     <message numerus="yes">
-      <location filename="../MicroPython/MicroPythonWidget.py" line="385" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="214" />
       <source>
 %n unknown device(s) for manual selection.</source>
       <translation type="unfinished">
@@ -51048,70 +51320,63 @@
       </translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="392" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="221" />
       <source>Manual Selection</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="456" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="427" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="232" />
+      <source>WebREPL (manual)</source>
+      <translation type="unfinished" />
+    </message>
+    <message numerus="yes">
+      <location filename="../MicroPython/MicroPythonWidget.py" line="251" />
+      <source>
+%n WebREPL connection(s) defined.</source>
+      <translation type="unfinished">
+        <numerusform />
+      </translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="311" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="282" />
       <source>Unknown MicroPython Device</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="428" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="283" />
       <source>&lt;p&gt;Detected these unknown serial devices&lt;/p&gt;&lt;ul&gt;&lt;li&gt;{0}&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Please report them together with the board name and a short description to &lt;a href="mailto:{1}"&gt; the eric bug reporting address&lt;/a&gt; if it is a MicroPython board.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="440" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="295" />
       <source>{0} (0x{1:04x}/0x{2:04x})</source>
       <comment>description, VId, PId</comment>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="457" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="312" />
       <source>Would you like to add them to the list of manually configured devices?</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="592" />
-      <source>Clear</source>
-      <translation type="unfinished">Pulisci</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="597" />
-      <source>Copy</source>
-      <translation type="unfinished">Copia</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="603" />
-      <source>Paste</source>
-      <translation type="unfinished">Incolla</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="610" />
-      <source>Select All</source>
-      <translation type="unfinished">Seleziona tutti</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="636" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="451" />
       <source>Press to disconnect the current device</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../MicroPython/MicroPythonWidget.ui" line="0" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="641" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="456" />
       <source>Press to connect the selected device</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="673" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="488" />
       <source>No device attached</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="674" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="489" />
       <source>Please ensure the device is plugged into your computer and selected.
 
 It must have a version of MicroPython (or CircuitPython) flashed onto it before anything will work.
@@ -51120,353 +51385,358 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="703" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="518" />
       <source>Start REPL</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="704" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="519" />
       <source>&lt;p&gt;The REPL cannot be started.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1232" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1221" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="716" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="705" />
       <source>Serial Device Connect</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1222" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="706" />
       <source>&lt;p&gt;The device at serial port &lt;b&gt;{0}&lt;/b&gt; does not respond. It may not have a MicroPython firmware flashed.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1233" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="717" />
       <source>&lt;p&gt;Cannot connect to device at serial port &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1291" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1282" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1273" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="780" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="771" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="762" />
       <source>Run Script</source>
       <translation type="unfinished">Esegui Script</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1274" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="763" />
       <source>There is no editor open. Abort...</source>
       <translation type="unfinished" />
     </message>
     <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="772" />
+      <source>The current editor does not contain a script. Abort...</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="781" />
+      <source>&lt;p&gt;Cannot run script.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="817" />
+      <source>Start Chart</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="818" />
+      <source>&lt;p&gt;The Chart cannot be started.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="833" />
+      <source>µPy Chart</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="850" />
+      <source>Unsaved Chart Data</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="851" />
+      <source>The chart contains unsaved data.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="899" />
+      <source>Start File Manager</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="900" />
+      <source>&lt;p&gt;The File Manager cannot be started.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="920" />
+      <source>µPy Files</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="985" />
+      <source>Downloads</source>
+      <translation type="unfinished">Downloads</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1032" />
+      <source>Show Version</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1035" />
+      <source>Show Implementation</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1038" />
+      <source>Show Board Data</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1224" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1043" />
+      <source>Synchronize Time</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1046" />
+      <source>Show Device Time</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1048" />
+      <source>Show Local Time</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1051" />
+      <source>Show Time</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1055" />
+      <source>Show Builtin Modules</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1633" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1067" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1059" />
+      <source>Install Package</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1672" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1669" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1063" />
+      <source>Install Packages</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1448" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1073" />
+      <source>Compile Python File</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1472" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1463" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1077" />
+      <source>Compile Current Editor</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1098" />
+      <source>Download Firmware</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1105" />
+      <source>Show Documentation</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1108" />
+      <source>Convert To UF2</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1109" />
+      <source>Flash UF2 Device</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1112" />
+      <source>Manage Unknown Devices</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1115" />
+      <source>Ignored Serial Devices</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1118" />
+      <source>Configure</source>
+      <translation type="unfinished">Configura</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1127" />
+      <source>&lt;h3&gt;Device Version Information&lt;/h3&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1138" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1134" />
+      <source>Device Version Information</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1139" />
+      <source>No version information available.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1163" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1155" />
+      <source>unknown</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1169" />
+      <source> ({0})</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1185" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1176" />
+      <source>Device Implementation Information</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1177" />
+      <source>&lt;h3&gt;Device Implementation Information&lt;/h3&gt;&lt;p&gt;This device contains &lt;b&gt;{0} {1}{2}&lt;/b&gt;.&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1186" />
+      <source>No device implementation information available.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1225" />
+      <source>&lt;p&gt;The time of the connected device was synchronized with the local time.&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1247" />
+      <source>&lt;h3&gt;Device Date and Time&lt;/h3&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{1}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1255" />
+      <source>&lt;h3&gt;Device Date and Time&lt;/h3&gt;&lt;p&gt;{0}&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1271" />
+      <source>Device Date and Time</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
       <location filename="../MicroPython/MicroPythonWidget.py" line="1283" />
-      <source>The current editor does not contain a script. Abort...</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1292" />
-      <source>&lt;p&gt;Cannot run script.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1328" />
-      <source>Start Chart</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1329" />
-      <source>&lt;p&gt;The Chart cannot be started.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1344" />
-      <source>µPy Chart</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1361" />
-      <source>Unsaved Chart Data</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1362" />
-      <source>The chart contains unsaved data.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1410" />
-      <source>Start File Manager</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1411" />
-      <source>&lt;p&gt;The File Manager cannot be started.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1431" />
-      <source>µPy Files</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1496" />
-      <source>Downloads</source>
-      <translation type="unfinished">Downloads</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1543" />
-      <source>Show Version</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1546" />
-      <source>Show Implementation</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1549" />
-      <source>Show Board Data</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1735" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1554" />
-      <source>Synchronize Time</source>
+      <source>Local Date and Time</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1284" />
+      <source>&lt;h3&gt;Local Date and Time&lt;/h3&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{1}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1325" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1308" />
+      <source>Date and Time</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1309" />
+      <source>&lt;table&gt;&lt;tr&gt;&lt;th&gt;&lt;/th&gt;&lt;th&gt;Local Date and Time&lt;/th&gt;&lt;th&gt;Device Date and Time&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td align='center'&gt;{0}&lt;/td&gt;&lt;td align='center'&gt;{2}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td align='center'&gt;{1}&lt;/td&gt;&lt;td align='center'&gt;{3}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1326" />
+      <source>&lt;table&gt;&lt;tr&gt;&lt;th&gt;Local Date and Time&lt;/th&gt;&lt;th&gt;Device Date and Time&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align='center'&gt;{0} {1}&lt;/td&gt;&lt;td align='center'&gt;{2}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1350" />
+      <source>Error handling device</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1351" />
+      <source>&lt;p&gt;There was an error communicating with the connected device.&lt;/p&gt;&lt;p&gt;Method: {0}&lt;/p&gt;&lt;p&gt;Message: {1}&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1393" />
+      <source>The MicroPython cross compiler &lt;b&gt;mpy-cross&lt;/b&gt; cannot be found. Ensure it is in the search path or configure it on the MicroPython configuration page.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1419" />
+      <source>Python Files (*.py);;All Files (*)</source>
+      <translation type="unfinished">File Python (*.py);;Tutti i File (*)</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1429" />
+      <source>The Python file &lt;b&gt;{0}&lt;/b&gt; does not exist. Aborting...</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1438" />
+      <source>'mpy-cross' Output</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1464" />
+      <source>The current editor does not contain a Python file. Aborting...</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1556" />
+      <source>Add Unknown Devices</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../MicroPython/MicroPythonWidget.py" line="1557" />
-      <source>Show Device Time</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1559" />
-      <source>Show Local Time</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1562" />
-      <source>Show Time</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1566" />
-      <source>Show Builtin Modules</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2144" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1578" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1570" />
-      <source>Install Package</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2183" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2180" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1574" />
-      <source>Install Packages</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1959" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1584" />
-      <source>Compile Python File</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1983" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1974" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1588" />
-      <source>Compile Current Editor</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1609" />
-      <source>Download Firmware</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1616" />
-      <source>Show Documentation</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1619" />
-      <source>Convert To UF2</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1620" />
-      <source>Flash UF2 Device</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1623" />
-      <source>Manage Unknown Devices</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1626" />
-      <source>Ignored Serial Devices</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1629" />
-      <source>Configure</source>
-      <translation type="unfinished">Configura</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1638" />
-      <source>&lt;h3&gt;Device Version Information&lt;/h3&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1649" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1645" />
-      <source>Device Version Information</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1650" />
-      <source>No version information available.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1674" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1666" />
-      <source>unknown</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1680" />
-      <source> ({0})</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1696" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1687" />
-      <source>Device Implementation Information</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1688" />
-      <source>&lt;h3&gt;Device Implementation Information&lt;/h3&gt;&lt;p&gt;This device contains &lt;b&gt;{0} {1}{2}&lt;/b&gt;.&lt;/p&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1697" />
-      <source>No device implementation information available.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1736" />
-      <source>&lt;p&gt;The time of the connected device was synchronized with the local time.&lt;/p&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1758" />
-      <source>&lt;h3&gt;Device Date and Time&lt;/h3&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{1}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1766" />
-      <source>&lt;h3&gt;Device Date and Time&lt;/h3&gt;&lt;p&gt;{0}&lt;/p&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1782" />
-      <source>Device Date and Time</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1794" />
-      <source>Local Date and Time</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1795" />
-      <source>&lt;h3&gt;Local Date and Time&lt;/h3&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{1}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1836" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1819" />
-      <source>Date and Time</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1820" />
-      <source>&lt;table&gt;&lt;tr&gt;&lt;th&gt;&lt;/th&gt;&lt;th&gt;Local Date and Time&lt;/th&gt;&lt;th&gt;Device Date and Time&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td align='center'&gt;{0}&lt;/td&gt;&lt;td align='center'&gt;{2}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td align='center'&gt;{1}&lt;/td&gt;&lt;td align='center'&gt;{3}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1837" />
-      <source>&lt;table&gt;&lt;tr&gt;&lt;th&gt;Local Date and Time&lt;/th&gt;&lt;th&gt;Device Date and Time&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align='center'&gt;{0} {1}&lt;/td&gt;&lt;td align='center'&gt;{2}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1861" />
-      <source>Error handling device</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1862" />
-      <source>&lt;p&gt;There was an error communicating with the connected device.&lt;/p&gt;&lt;p&gt;Method: {0}&lt;/p&gt;&lt;p&gt;Message: {1}&lt;/p&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1904" />
-      <source>The MicroPython cross compiler &lt;b&gt;mpy-cross&lt;/b&gt; cannot be found. Ensure it is in the search path or configure it on the MicroPython configuration page.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1930" />
-      <source>Python Files (*.py);;All Files (*)</source>
-      <translation type="unfinished">File Python (*.py);;Tutti i File (*)</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1940" />
-      <source>The Python file &lt;b&gt;{0}&lt;/b&gt; does not exist. Aborting...</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1949" />
-      <source>'mpy-cross' Output</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1975" />
-      <source>The current editor does not contain a Python file. Aborting...</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2067" />
-      <source>Add Unknown Devices</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2068" />
       <source>Select the devices to be added:</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2117" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1606" />
       <source>Plus any modules on the filesystem.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2169" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1658" />
       <source>Package '{0}' was installed successfully.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2184" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1673" />
       <source>Enter the packages to be installed separated by whitespace:</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../MicroPython/MicroPythonWidget.ui" line="0" />
-      <source>Press to check for connected devices</source>
+      <source>Press to detect connected devices and repopulate the device selector.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.ui" line="0" />
+      <source>Press to edit the list of configured WebREPL connections.</source>
       <translation type="unfinished" />
     </message>
     <message>
@@ -51489,6 +51759,29 @@
       <source>Press to open a chart window to display data receive from the selected device</source>
       <translation type="unfinished" />
     </message>
+    <message numerus="yes">
+      <source>%n supported device(s) detected.</source>
+      <translation type="vanished">
+        <numerusform />
+        <numerusform />
+      </translation>
+    </message>
+    <message>
+      <source>Clear</source>
+      <translation type="vanished">Pulisci</translation>
+    </message>
+    <message>
+      <source>Copy</source>
+      <translation type="vanished">Copia</translation>
+    </message>
+    <message>
+      <source>Paste</source>
+      <translation type="vanished">Incolla</translation>
+    </message>
+    <message>
+      <source>Select All</source>
+      <translation type="vanished">Seleziona tutti</translation>
+    </message>
   </context>
   <context>
     <name>MicrobitDevice</name>
@@ -51652,29 +51945,29 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="569" />
+      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="571" />
       <source>MicroPython Firmware for BBC micro:bit V1</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="601" />
-      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="588" />
-      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="573" />
+      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="603" />
+      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="590" />
+      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="575" />
       <source>DAPLink Firmware</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="580" />
+      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="582" />
       <source>MicroPython Firmware for BBC micro:bit V2</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="584" />
+      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="586" />
       <source>CircuitPython Firmware for BBC micro:bit V2</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="597" />
+      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="599" />
       <source>MicroPython Firmware</source>
       <translation type="unfinished" />
     </message>
@@ -58893,18 +59186,18 @@
   <context>
     <name>Preferences</name>
     <message>
-      <location filename="../Preferences/__init__.py" line="1815" />
+      <location filename="../Preferences/__init__.py" line="1817" />
       <source>Export Preferences</source>
       <translation>Esporta Preferenze</translation>
     </message>
     <message>
+      <location filename="../Preferences/__init__.py" line="1846" />
+      <location filename="../Preferences/__init__.py" line="1819" />
+      <source>Properties File (*.ini);;All Files (*)</source>
+      <translation>File proprietà (*.ini);;Tutti i file(*)</translation>
+    </message>
+    <message>
       <location filename="../Preferences/__init__.py" line="1844" />
-      <location filename="../Preferences/__init__.py" line="1817" />
-      <source>Properties File (*.ini);;All Files (*)</source>
-      <translation>File proprietà (*.ini);;Tutti i file(*)</translation>
-    </message>
-    <message>
-      <location filename="../Preferences/__init__.py" line="1842" />
       <source>Import Preferences</source>
       <translation>Importa Preferenze</translation>
     </message>
@@ -69285,88 +69578,88 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="364" />
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="365" />
       <source>MicroPython Firmware</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="368" />
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="369" />
       <source>Pimoroni Pico Firmware</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="371" />
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="372" />
       <source>CircuitPython Firmware</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="375" />
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="376" />
       <source>CircuitPython Libraries</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="427" />
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="428" />
       <source>Set Country</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="983" />
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="618" />
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="978" />
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="617" />
       <source>unknown ({0})</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1093" />
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1088" />
       <source>Pico Wireless does not support setting the IPv4 parameters of the WiFi access point.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1168" />
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1161" />
       <source>Pico Wireless does not support reporting of connected clients.</source>
       <translation type="unfinished" />
     </message>
     <message>
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1248" />
+      <source>Active</source>
+      <translation type="unfinished">Attivo</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1249" />
+      <source>Connected</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1252" />
+      <source>Status</source>
+      <translation type="unfinished">Stato</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1256" />
+      <source>Hostname</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1257" />
+      <source>IPv4 Address</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1258" />
+      <source>Netmask</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
       <location filename="../MicroPython/Devices/RP2040Devices.py" line="1259" />
-      <source>Active</source>
-      <translation type="unfinished">Attivo</translation>
+      <source>Gateway</source>
+      <translation type="unfinished" />
     </message>
     <message>
       <location filename="../MicroPython/Devices/RP2040Devices.py" line="1260" />
-      <source>Connected</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1263" />
-      <source>Status</source>
-      <translation type="unfinished">Stato</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1267" />
-      <source>Hostname</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1268" />
-      <source>IPv4 Address</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1269" />
-      <source>Netmask</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1270" />
-      <source>Gateway</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1271" />
       <source>DNS</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1272" />
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1261" />
       <source>MAC-Address</source>
       <translation type="unfinished" />
     </message>
@@ -70292,19 +70585,19 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/SearchReplaceWidget.py" line="1045" />
+      <location filename="../QScintilla/SearchReplaceWidget.py" line="1046" />
       <location filename="../QScintilla/SearchReplaceWidget.py" line="597" />
       <location filename="../QScintilla/SearchReplaceWidget.py" line="559" />
       <source>'{0}' was not found.</source>
       <translation>'{0}' non è stato trovato.</translation>
     </message>
     <message>
-      <location filename="../QScintilla/SearchReplaceWidget.py" line="1198" />
+      <location filename="../QScintilla/SearchReplaceWidget.py" line="1199" />
       <source>Replaced {0} occurrences.</source>
       <translation>Sostituite {0} ricorrenze.</translation>
     </message>
     <message>
-      <location filename="../QScintilla/SearchReplaceWidget.py" line="1204" />
+      <location filename="../QScintilla/SearchReplaceWidget.py" line="1205" />
       <source>Nothing replaced because '{0}' was not found.</source>
       <translation>Nessuna sostituzione perché '{0}' non è stato trovato.</translation>
     </message>
@@ -83466,7 +83759,7 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/TeensyDevices.py" line="315" />
+      <location filename="../MicroPython/Devices/TeensyDevices.py" line="316" />
       <location filename="../MicroPython/Devices/TeensyDevices.py" line="154" />
       <source>Flash MicroPython Firmware</source>
       <translation type="unfinished" />
@@ -83507,17 +83800,17 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/TeensyDevices.py" line="316" />
+      <location filename="../MicroPython/Devices/TeensyDevices.py" line="317" />
       <source>&lt;p&gt;Teensy 4.0 and Teensy 4.1 are flashed using the 'Teensy Loader' application. Make sure you downloaded the MicroPython or CircuitPython .hex file.&lt;/p&gt;&lt;p&gt;See &lt;a href="{0}"&gt;the PJRC Teensy web site&lt;/a&gt; for details.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/TeensyDevices.py" line="338" />
-      <source>Start 'Teensy Loader'</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../MicroPython/Devices/TeensyDevices.py" line="339" />
+      <source>Start 'Teensy Loader'</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/Devices/TeensyDevices.py" line="340" />
       <source>&lt;p&gt;The 'Teensy Loader' application &lt;b&gt;teensy&lt;/b&gt; could not be started. Ensure it is in the application search path or start it manually.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
--- a/src/eric7/i18n/eric7_pt.ts	Tue May 02 11:39:09 2023 +0200
+++ b/src/eric7/i18n/eric7_pt.ts	Thu May 04 17:58:52 2023 +0200
@@ -1804,77 +1804,77 @@
   <context>
     <name>BaseDevice</name>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="196" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="199" />
       <source>Device Data Not Available</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="197" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="200" />
       <source>&lt;p&gt;The device data is not available. Try to connect to the device again. Aborting...&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="250" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="253" />
       <source>Unsupported Device</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="260" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="263" />
       <source>REPL is not supported by this device.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="279" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="282" />
       <source>Plotter is not supported by this device.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="298" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="301" />
       <source>Running scripts is not supported by this device.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="317" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="320" />
       <source>File Manager is not supported by this device.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="372" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="375" />
       <source>Select Device Directory</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="373" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="376" />
       <source>Select the directory for the connected device:</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="519" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="528" />
       <source>Detected an error without indications.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="1464" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="1473" />
       <source>Operation not supported.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="1772" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="1781" />
       <source>Yes</source>
       <translation type="unfinished">Sim</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="1772" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="1781" />
       <source>No</source>
       <translation type="unfinished">Não</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="1774" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="1783" />
       <source>yes</source>
       <translation type="unfinished">sim</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="1774" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="1783" />
       <source>no</source>
       <translation type="unfinished">não</translation>
     </message>
@@ -4229,14 +4229,14 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1128" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1126" />
       <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="865" />
       <source>unknown ({0})</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1577" />
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1500" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1567" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1490" />
       <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1040" />
       <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="961" />
       <source>The device volume is not available.</source>
@@ -4249,94 +4249,94 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1539" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1529" />
       <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1005" />
       <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="977" />
       <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; exists already. Shall it be replaced?&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1546" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1536" />
       <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1012" />
       <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="984" />
       <source>Aborted</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1195" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1193" />
       <source>CircuitPython does not support setting the IPv4 parameters of the WiFi access point.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1266" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1262" />
       <source>CircuitPython does not support reporting of connected clients.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1675" />
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1350" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1663" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1342" />
       <source>Active</source>
       <translation type="unfinished">Ativo</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1681" />
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1351" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1669" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1343" />
       <source>Connected</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1352" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1344" />
       <source>IPv4 Address</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1353" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1345" />
       <source>Netmask</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1354" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1346" />
       <source>Gateway</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1355" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1347" />
       <source>DNS</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1677" />
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1356" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1665" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1348" />
       <source>MAC-Address</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1357" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1349" />
       <source>Chip Type</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1358" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1350" />
       <source>max. Sockets</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1538" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1528" />
       <source>Write Connect Script</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1676" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1664" />
       <source>Name</source>
       <translation type="unfinished">Nome</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1679" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1667" />
       <source>Address Type</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1682" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1670" />
       <source>Advertising</source>
       <translation type="unfinished" />
     </message>
@@ -20683,8 +20683,8 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1506" />
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1490" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1498" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1482" />
       <location filename="../MicroPython/Devices/EspDevices.py" line="196" />
       <source>Erase Flash</source>
       <translation type="unfinished" />
@@ -20695,7 +20695,7 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1591" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1583" />
       <location filename="../MicroPython/Devices/EspDevices.py" line="203" />
       <source>Flash Additional Firmware</source>
       <translation type="unfinished" />
@@ -20746,8 +20746,8 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1590" />
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1549" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1582" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1541" />
       <location filename="../MicroPython/Devices/EspDevices.py" line="363" />
       <source>'esptool write_flash' Output</source>
       <translation type="unfinished" />
@@ -20813,68 +20813,68 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="980" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="978" />
       <source>unknown ({0})</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1209" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1201" />
       <source>Active</source>
       <translation type="unfinished">Ativo</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1210" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1202" />
       <source>Name</source>
       <translation type="unfinished">Nome</translation>
     </message>
     <message>
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1203" />
+      <source>MAC-Address</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1206" />
+      <source>Address Type</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1207" />
+      <source>Public</source>
+      <translation type="unfinished">Público</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1207" />
+      <source>Random</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
       <location filename="../MicroPython/Devices/EspDevices.py" line="1211" />
-      <source>MAC-Address</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1214" />
-      <source>Address Type</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1215" />
-      <source>Public</source>
-      <translation type="unfinished">Público</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1215" />
-      <source>Random</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1219" />
       <source>Rx-Buffer</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1221" />
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1219" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1213" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1211" />
       <source>{0} Bytes</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1221" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1213" />
       <source>MTU</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1491" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1483" />
       <source>Shall the flash of the selected device really be erased?</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1505" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1497" />
       <source>'esptool erase_flash' Output</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1550" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1542" />
       <source>Flash µPy/CPy Firmware</source>
       <translation type="unfinished" />
     </message>
@@ -50531,15 +50531,16 @@
     </message>
     <message>
       <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
-      <source>Serial Link</source>
+      <source>Device Communication</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
-      <source>Timeout for Serial Link Communication:</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
+      <source>Serial Link Timeout:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
       <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
       <source>Enter the timout value</source>
       <translation type="unfinished" />
@@ -50547,11 +50548,22 @@
     <message>
       <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
       <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
+      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
       <source> s</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
+      <source>WebRepl Timeout:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
+      <source>Device Time</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
       <source>Select to synchronize the time after connection is established</source>
       <translation type="unfinished" />
     </message>
@@ -50644,8 +50656,8 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.py" line="354" />
-      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.py" line="337" />
+      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.py" line="364" />
+      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.py" line="347" />
       <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
       <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
       <source>Press to show the password</source>
@@ -50987,8 +50999,8 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.py" line="350" />
-      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.py" line="333" />
+      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.py" line="360" />
+      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.py" line="343" />
       <source>Press to hide the password</source>
       <translation type="unfinished" />
     </message>
@@ -51002,38 +51014,298 @@
     </message>
   </context>
   <context>
+    <name>MicroPythonReplEdit</name>
+    <message>
+      <location filename="../MicroPython/MicroPythonReplWidget.py" line="322" />
+      <source>Clear</source>
+      <translation type="unfinished">Limpar</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonReplWidget.py" line="327" />
+      <source>Copy</source>
+      <translation type="unfinished">Copiar</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonReplWidget.py" line="333" />
+      <source>Paste</source>
+      <translation type="unfinished">Colar</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonReplWidget.py" line="340" />
+      <source>Select All</source>
+      <translation type="unfinished">Selecionar Tudo</translation>
+    </message>
+  </context>
+  <context>
+    <name>MicroPythonWebreplConnectionDialog</name>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.py" line="97" />
+      <source>Press to hide the password.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.ui" line="0" />
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.py" line="101" />
+      <source>Press to show the password.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.ui" line="0" />
+      <source>WebREPL Connection</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.ui" line="0" />
+      <source>Host:</source>
+      <translation type="unfinished">Anfitrião:</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.ui" line="0" />
+      <source>Enter the host name or IPv4 address of the device.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.ui" line="0" />
+      <source>Port:</source>
+      <translation type="unfinished">Porto:</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.ui" line="0" />
+      <source>Enter the port of the WebREPL (empty for default port 8266).</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.ui" line="0" />
+      <source>Password:</source>
+      <translation type="unfinished">Senha:</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.ui" line="0" />
+      <source>Enter the password for this device connection.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.ui" line="0" />
+      <source>Device Type:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.ui" line="0" />
+      <source>Select the device type</source>
+      <translation type="unfinished" />
+    </message>
+  </context>
+  <context>
+    <name>MicroPythonWebreplDeviceInterface</name>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplDeviceInterface.py" line="80" />
+      <source>WebREPL Password</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplDeviceInterface.py" line="81" />
+      <source>Enter the WebREPL password:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplDeviceInterface.py" line="100" />
+      <source>WebREPL Login</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplDeviceInterface.py" line="101" />
+      <source>The login to the selected device 'webrepl' failed. The given password may be incorrect.</source>
+      <translation type="unfinished" />
+    </message>
+  </context>
+  <context>
+    <name>MicroPythonWebreplUrlAddEditDialog</name>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>WebREPL URL</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Name:</source>
+      <translation type="unfinished">Nome:</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Enter a unique name for the WebREPL connection.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Description:</source>
+      <translation type="unfinished">Descrição:</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Enter a short description to be shown in the selector.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Host:</source>
+      <translation type="unfinished">Anfitrião:</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Enter the host name or IPv4 address of the device.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Port:</source>
+      <translation type="unfinished">Porto:</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Enter the port of the WebREPL (empty for default port 8266).</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Password:</source>
+      <translation type="unfinished">Senha:</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Enter the password for this device connection.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Device Type:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Select the device type</source>
+      <translation type="unfinished" />
+    </message>
+  </context>
+  <context>
+    <name>MicroPythonWebreplUrlsConfigDialog</name>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.py" line="133" />
+      <source>Remove Selected WebREPL URLs</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.py" line="134" />
+      <source>Shall the selected WebREPL URLs really be removed?</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.py" line="150" />
+      <source>Remove All WebREPL URLs</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.py" line="151" />
+      <source>Shall all WebREPL URLs really be removed?</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>WebREPL URLs</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>Name</source>
+      <translation type="unfinished">Nome</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>Description</source>
+      <translation type="unfinished">Descrição</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>URL</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>Press to add a new entry.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>Add...</source>
+      <translation type="unfinished">Adicionar...</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>Press to edit the selected entry.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>Edit...</source>
+      <translation type="unfinished">Editar...</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>Press to remove the selected entries.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>Remove</source>
+      <translation type="unfinished">Retirar</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>Press to remove all entries.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>Remove All</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>&lt;b&gt;Note:&lt;/b&gt; The name of an entry must be unique amongst the list.</source>
+      <translation type="unfinished" />
+    </message>
+  </context>
+  <context>
     <name>MicroPythonWidget</name>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="247" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="109" />
       <source>MicroPython Menu</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="306" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="145" />
       <source>&lt;h3&gt;The QtSerialPort package is not available.&lt;br/&gt;MicroPython support is deactivated.&lt;/h3&gt;</source>
       <translation type="unfinished" />
     </message>
     <message numerus="yes">
-      <location filename="../MicroPython/MicroPythonWidget.py" line="347" />
-      <source>%n supported device(s) detected.</source>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="173" />
+      <source>%n supported serial device(s) detected.</source>
       <translation type="unfinished">
         <numerusform />
-        <numerusform />
       </translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="361" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="187" />
       <source>{0} - {1} ({2})</source>
       <comment>board name, description, port name</comment>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="381" />
-      <source>No supported devices detected.</source>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="210" />
+      <source>No supported serial devices detected.</source>
       <translation type="unfinished" />
     </message>
     <message numerus="yes">
-      <location filename="../MicroPython/MicroPythonWidget.py" line="385" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="214" />
       <source>
 %n unknown device(s) for manual selection.</source>
       <translation type="unfinished">
@@ -51042,70 +51314,63 @@
       </translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="392" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="221" />
       <source>Manual Selection</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="456" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="427" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="232" />
+      <source>WebREPL (manual)</source>
+      <translation type="unfinished" />
+    </message>
+    <message numerus="yes">
+      <location filename="../MicroPython/MicroPythonWidget.py" line="251" />
+      <source>
+%n WebREPL connection(s) defined.</source>
+      <translation type="unfinished">
+        <numerusform />
+      </translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="311" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="282" />
       <source>Unknown MicroPython Device</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="428" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="283" />
       <source>&lt;p&gt;Detected these unknown serial devices&lt;/p&gt;&lt;ul&gt;&lt;li&gt;{0}&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Please report them together with the board name and a short description to &lt;a href="mailto:{1}"&gt; the eric bug reporting address&lt;/a&gt; if it is a MicroPython board.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="440" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="295" />
       <source>{0} (0x{1:04x}/0x{2:04x})</source>
       <comment>description, VId, PId</comment>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="457" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="312" />
       <source>Would you like to add them to the list of manually configured devices?</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="592" />
-      <source>Clear</source>
-      <translation type="unfinished">Limpar</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="597" />
-      <source>Copy</source>
-      <translation type="unfinished">Copiar</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="603" />
-      <source>Paste</source>
-      <translation type="unfinished">Colar</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="610" />
-      <source>Select All</source>
-      <translation type="unfinished">Selecionar Tudo</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="636" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="451" />
       <source>Press to disconnect the current device</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../MicroPython/MicroPythonWidget.ui" line="0" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="641" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="456" />
       <source>Press to connect the selected device</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="673" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="488" />
       <source>No device attached</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="674" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="489" />
       <source>Please ensure the device is plugged into your computer and selected.
 
 It must have a version of MicroPython (or CircuitPython) flashed onto it before anything will work.
@@ -51114,353 +51379,358 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="703" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="518" />
       <source>Start REPL</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="704" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="519" />
       <source>&lt;p&gt;The REPL cannot be started.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1232" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1221" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="716" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="705" />
       <source>Serial Device Connect</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1222" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="706" />
       <source>&lt;p&gt;The device at serial port &lt;b&gt;{0}&lt;/b&gt; does not respond. It may not have a MicroPython firmware flashed.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1233" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="717" />
       <source>&lt;p&gt;Cannot connect to device at serial port &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1291" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1282" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1273" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="780" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="771" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="762" />
       <source>Run Script</source>
       <translation type="unfinished">Executar Script</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1274" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="763" />
       <source>There is no editor open. Abort...</source>
       <translation type="unfinished" />
     </message>
     <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="772" />
+      <source>The current editor does not contain a script. Abort...</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="781" />
+      <source>&lt;p&gt;Cannot run script.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="817" />
+      <source>Start Chart</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="818" />
+      <source>&lt;p&gt;The Chart cannot be started.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="833" />
+      <source>µPy Chart</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="850" />
+      <source>Unsaved Chart Data</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="851" />
+      <source>The chart contains unsaved data.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="899" />
+      <source>Start File Manager</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="900" />
+      <source>&lt;p&gt;The File Manager cannot be started.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="920" />
+      <source>µPy Files</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="985" />
+      <source>Downloads</source>
+      <translation type="unfinished">Descargas</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1032" />
+      <source>Show Version</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1035" />
+      <source>Show Implementation</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1038" />
+      <source>Show Board Data</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1224" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1043" />
+      <source>Synchronize Time</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1046" />
+      <source>Show Device Time</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1048" />
+      <source>Show Local Time</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1051" />
+      <source>Show Time</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1055" />
+      <source>Show Builtin Modules</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1633" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1067" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1059" />
+      <source>Install Package</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1672" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1669" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1063" />
+      <source>Install Packages</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1448" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1073" />
+      <source>Compile Python File</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1472" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1463" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1077" />
+      <source>Compile Current Editor</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1098" />
+      <source>Download Firmware</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1105" />
+      <source>Show Documentation</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1108" />
+      <source>Convert To UF2</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1109" />
+      <source>Flash UF2 Device</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1112" />
+      <source>Manage Unknown Devices</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1115" />
+      <source>Ignored Serial Devices</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1118" />
+      <source>Configure</source>
+      <translation type="unfinished">Configurar</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1127" />
+      <source>&lt;h3&gt;Device Version Information&lt;/h3&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1138" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1134" />
+      <source>Device Version Information</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1139" />
+      <source>No version information available.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1163" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1155" />
+      <source>unknown</source>
+      <translation type="unfinished">desconhecido</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1169" />
+      <source> ({0})</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1185" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1176" />
+      <source>Device Implementation Information</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1177" />
+      <source>&lt;h3&gt;Device Implementation Information&lt;/h3&gt;&lt;p&gt;This device contains &lt;b&gt;{0} {1}{2}&lt;/b&gt;.&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1186" />
+      <source>No device implementation information available.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1225" />
+      <source>&lt;p&gt;The time of the connected device was synchronized with the local time.&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1247" />
+      <source>&lt;h3&gt;Device Date and Time&lt;/h3&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{1}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1255" />
+      <source>&lt;h3&gt;Device Date and Time&lt;/h3&gt;&lt;p&gt;{0}&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1271" />
+      <source>Device Date and Time</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
       <location filename="../MicroPython/MicroPythonWidget.py" line="1283" />
-      <source>The current editor does not contain a script. Abort...</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1292" />
-      <source>&lt;p&gt;Cannot run script.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1328" />
-      <source>Start Chart</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1329" />
-      <source>&lt;p&gt;The Chart cannot be started.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1344" />
-      <source>µPy Chart</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1361" />
-      <source>Unsaved Chart Data</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1362" />
-      <source>The chart contains unsaved data.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1410" />
-      <source>Start File Manager</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1411" />
-      <source>&lt;p&gt;The File Manager cannot be started.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1431" />
-      <source>µPy Files</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1496" />
-      <source>Downloads</source>
-      <translation type="unfinished">Descargas</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1543" />
-      <source>Show Version</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1546" />
-      <source>Show Implementation</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1549" />
-      <source>Show Board Data</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1735" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1554" />
-      <source>Synchronize Time</source>
+      <source>Local Date and Time</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1284" />
+      <source>&lt;h3&gt;Local Date and Time&lt;/h3&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{1}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1325" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1308" />
+      <source>Date and Time</source>
+      <translation type="unfinished">Data e Hora</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1309" />
+      <source>&lt;table&gt;&lt;tr&gt;&lt;th&gt;&lt;/th&gt;&lt;th&gt;Local Date and Time&lt;/th&gt;&lt;th&gt;Device Date and Time&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td align='center'&gt;{0}&lt;/td&gt;&lt;td align='center'&gt;{2}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td align='center'&gt;{1}&lt;/td&gt;&lt;td align='center'&gt;{3}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1326" />
+      <source>&lt;table&gt;&lt;tr&gt;&lt;th&gt;Local Date and Time&lt;/th&gt;&lt;th&gt;Device Date and Time&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align='center'&gt;{0} {1}&lt;/td&gt;&lt;td align='center'&gt;{2}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1350" />
+      <source>Error handling device</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1351" />
+      <source>&lt;p&gt;There was an error communicating with the connected device.&lt;/p&gt;&lt;p&gt;Method: {0}&lt;/p&gt;&lt;p&gt;Message: {1}&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1393" />
+      <source>The MicroPython cross compiler &lt;b&gt;mpy-cross&lt;/b&gt; cannot be found. Ensure it is in the search path or configure it on the MicroPython configuration page.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1419" />
+      <source>Python Files (*.py);;All Files (*)</source>
+      <translation type="unfinished">Ficheiros Python (*.py);;Ficheiros Todos (*)</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1429" />
+      <source>The Python file &lt;b&gt;{0}&lt;/b&gt; does not exist. Aborting...</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1438" />
+      <source>'mpy-cross' Output</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1464" />
+      <source>The current editor does not contain a Python file. Aborting...</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1556" />
+      <source>Add Unknown Devices</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../MicroPython/MicroPythonWidget.py" line="1557" />
-      <source>Show Device Time</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1559" />
-      <source>Show Local Time</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1562" />
-      <source>Show Time</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1566" />
-      <source>Show Builtin Modules</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2144" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1578" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1570" />
-      <source>Install Package</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2183" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2180" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1574" />
-      <source>Install Packages</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1959" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1584" />
-      <source>Compile Python File</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1983" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1974" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1588" />
-      <source>Compile Current Editor</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1609" />
-      <source>Download Firmware</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1616" />
-      <source>Show Documentation</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1619" />
-      <source>Convert To UF2</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1620" />
-      <source>Flash UF2 Device</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1623" />
-      <source>Manage Unknown Devices</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1626" />
-      <source>Ignored Serial Devices</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1629" />
-      <source>Configure</source>
-      <translation type="unfinished">Configurar</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1638" />
-      <source>&lt;h3&gt;Device Version Information&lt;/h3&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1649" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1645" />
-      <source>Device Version Information</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1650" />
-      <source>No version information available.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1674" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1666" />
-      <source>unknown</source>
-      <translation type="unfinished">desconhecido</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1680" />
-      <source> ({0})</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1696" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1687" />
-      <source>Device Implementation Information</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1688" />
-      <source>&lt;h3&gt;Device Implementation Information&lt;/h3&gt;&lt;p&gt;This device contains &lt;b&gt;{0} {1}{2}&lt;/b&gt;.&lt;/p&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1697" />
-      <source>No device implementation information available.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1736" />
-      <source>&lt;p&gt;The time of the connected device was synchronized with the local time.&lt;/p&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1758" />
-      <source>&lt;h3&gt;Device Date and Time&lt;/h3&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{1}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1766" />
-      <source>&lt;h3&gt;Device Date and Time&lt;/h3&gt;&lt;p&gt;{0}&lt;/p&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1782" />
-      <source>Device Date and Time</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1794" />
-      <source>Local Date and Time</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1795" />
-      <source>&lt;h3&gt;Local Date and Time&lt;/h3&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{1}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1836" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1819" />
-      <source>Date and Time</source>
-      <translation type="unfinished">Data e Hora</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1820" />
-      <source>&lt;table&gt;&lt;tr&gt;&lt;th&gt;&lt;/th&gt;&lt;th&gt;Local Date and Time&lt;/th&gt;&lt;th&gt;Device Date and Time&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td align='center'&gt;{0}&lt;/td&gt;&lt;td align='center'&gt;{2}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td align='center'&gt;{1}&lt;/td&gt;&lt;td align='center'&gt;{3}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1837" />
-      <source>&lt;table&gt;&lt;tr&gt;&lt;th&gt;Local Date and Time&lt;/th&gt;&lt;th&gt;Device Date and Time&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align='center'&gt;{0} {1}&lt;/td&gt;&lt;td align='center'&gt;{2}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1861" />
-      <source>Error handling device</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1862" />
-      <source>&lt;p&gt;There was an error communicating with the connected device.&lt;/p&gt;&lt;p&gt;Method: {0}&lt;/p&gt;&lt;p&gt;Message: {1}&lt;/p&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1904" />
-      <source>The MicroPython cross compiler &lt;b&gt;mpy-cross&lt;/b&gt; cannot be found. Ensure it is in the search path or configure it on the MicroPython configuration page.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1930" />
-      <source>Python Files (*.py);;All Files (*)</source>
-      <translation type="unfinished">Ficheiros Python (*.py);;Ficheiros Todos (*)</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1940" />
-      <source>The Python file &lt;b&gt;{0}&lt;/b&gt; does not exist. Aborting...</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1949" />
-      <source>'mpy-cross' Output</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1975" />
-      <source>The current editor does not contain a Python file. Aborting...</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2067" />
-      <source>Add Unknown Devices</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2068" />
       <source>Select the devices to be added:</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2117" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1606" />
       <source>Plus any modules on the filesystem.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2169" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1658" />
       <source>Package '{0}' was installed successfully.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2184" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1673" />
       <source>Enter the packages to be installed separated by whitespace:</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../MicroPython/MicroPythonWidget.ui" line="0" />
-      <source>Press to check for connected devices</source>
+      <source>Press to detect connected devices and repopulate the device selector.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.ui" line="0" />
+      <source>Press to edit the list of configured WebREPL connections.</source>
       <translation type="unfinished" />
     </message>
     <message>
@@ -51483,6 +51753,29 @@
       <source>Press to open a chart window to display data receive from the selected device</source>
       <translation type="unfinished" />
     </message>
+    <message numerus="yes">
+      <source>%n supported device(s) detected.</source>
+      <translation type="vanished">
+        <numerusform />
+        <numerusform />
+      </translation>
+    </message>
+    <message>
+      <source>Clear</source>
+      <translation type="vanished">Limpar</translation>
+    </message>
+    <message>
+      <source>Copy</source>
+      <translation type="vanished">Copiar</translation>
+    </message>
+    <message>
+      <source>Paste</source>
+      <translation type="vanished">Colar</translation>
+    </message>
+    <message>
+      <source>Select All</source>
+      <translation type="vanished">Selecionar Tudo</translation>
+    </message>
   </context>
   <context>
     <name>MicrobitDevice</name>
@@ -51646,29 +51939,29 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="569" />
+      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="571" />
       <source>MicroPython Firmware for BBC micro:bit V1</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="601" />
-      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="588" />
-      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="573" />
+      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="603" />
+      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="590" />
+      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="575" />
       <source>DAPLink Firmware</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="580" />
+      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="582" />
       <source>MicroPython Firmware for BBC micro:bit V2</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="584" />
+      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="586" />
       <source>CircuitPython Firmware for BBC micro:bit V2</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="597" />
+      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="599" />
       <source>MicroPython Firmware</source>
       <translation type="unfinished" />
     </message>
@@ -58879,18 +59172,18 @@
   <context>
     <name>Preferences</name>
     <message>
-      <location filename="../Preferences/__init__.py" line="1815" />
+      <location filename="../Preferences/__init__.py" line="1817" />
       <source>Export Preferences</source>
       <translation>Exportar Preferências</translation>
     </message>
     <message>
+      <location filename="../Preferences/__init__.py" line="1846" />
+      <location filename="../Preferences/__init__.py" line="1819" />
+      <source>Properties File (*.ini);;All Files (*)</source>
+      <translation>Ficheiro de Propriedades (*.ini);;Ficheiros Todos (*)</translation>
+    </message>
+    <message>
       <location filename="../Preferences/__init__.py" line="1844" />
-      <location filename="../Preferences/__init__.py" line="1817" />
-      <source>Properties File (*.ini);;All Files (*)</source>
-      <translation>Ficheiro de Propriedades (*.ini);;Ficheiros Todos (*)</translation>
-    </message>
-    <message>
-      <location filename="../Preferences/__init__.py" line="1842" />
       <source>Import Preferences</source>
       <translation>Importar Preferências</translation>
     </message>
@@ -69139,88 +69432,88 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="364" />
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="365" />
       <source>MicroPython Firmware</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="368" />
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="369" />
       <source>Pimoroni Pico Firmware</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="371" />
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="372" />
       <source>CircuitPython Firmware</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="375" />
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="376" />
       <source>CircuitPython Libraries</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="427" />
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="428" />
       <source>Set Country</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="983" />
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="618" />
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="978" />
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="617" />
       <source>unknown ({0})</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1093" />
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1088" />
       <source>Pico Wireless does not support setting the IPv4 parameters of the WiFi access point.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1168" />
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1161" />
       <source>Pico Wireless does not support reporting of connected clients.</source>
       <translation type="unfinished" />
     </message>
     <message>
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1248" />
+      <source>Active</source>
+      <translation type="unfinished">Ativo</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1249" />
+      <source>Connected</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1252" />
+      <source>Status</source>
+      <translation type="unfinished">Estado</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1256" />
+      <source>Hostname</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1257" />
+      <source>IPv4 Address</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1258" />
+      <source>Netmask</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
       <location filename="../MicroPython/Devices/RP2040Devices.py" line="1259" />
-      <source>Active</source>
-      <translation type="unfinished">Ativo</translation>
+      <source>Gateway</source>
+      <translation type="unfinished" />
     </message>
     <message>
       <location filename="../MicroPython/Devices/RP2040Devices.py" line="1260" />
-      <source>Connected</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1263" />
-      <source>Status</source>
-      <translation type="unfinished">Estado</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1267" />
-      <source>Hostname</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1268" />
-      <source>IPv4 Address</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1269" />
-      <source>Netmask</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1270" />
-      <source>Gateway</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1271" />
       <source>DNS</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1272" />
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1261" />
       <source>MAC-Address</source>
       <translation type="unfinished" />
     </message>
@@ -70150,19 +70443,19 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/SearchReplaceWidget.py" line="1045" />
+      <location filename="../QScintilla/SearchReplaceWidget.py" line="1046" />
       <location filename="../QScintilla/SearchReplaceWidget.py" line="597" />
       <location filename="../QScintilla/SearchReplaceWidget.py" line="559" />
       <source>'{0}' was not found.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/SearchReplaceWidget.py" line="1198" />
+      <location filename="../QScintilla/SearchReplaceWidget.py" line="1199" />
       <source>Replaced {0} occurrences.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/SearchReplaceWidget.py" line="1204" />
+      <location filename="../QScintilla/SearchReplaceWidget.py" line="1205" />
       <source>Nothing replaced because '{0}' was not found.</source>
       <translation type="unfinished" />
     </message>
@@ -83276,7 +83569,7 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/TeensyDevices.py" line="315" />
+      <location filename="../MicroPython/Devices/TeensyDevices.py" line="316" />
       <location filename="../MicroPython/Devices/TeensyDevices.py" line="154" />
       <source>Flash MicroPython Firmware</source>
       <translation type="unfinished" />
@@ -83317,17 +83610,17 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/TeensyDevices.py" line="316" />
+      <location filename="../MicroPython/Devices/TeensyDevices.py" line="317" />
       <source>&lt;p&gt;Teensy 4.0 and Teensy 4.1 are flashed using the 'Teensy Loader' application. Make sure you downloaded the MicroPython or CircuitPython .hex file.&lt;/p&gt;&lt;p&gt;See &lt;a href="{0}"&gt;the PJRC Teensy web site&lt;/a&gt; for details.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/TeensyDevices.py" line="338" />
-      <source>Start 'Teensy Loader'</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../MicroPython/Devices/TeensyDevices.py" line="339" />
+      <source>Start 'Teensy Loader'</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/Devices/TeensyDevices.py" line="340" />
       <source>&lt;p&gt;The 'Teensy Loader' application &lt;b&gt;teensy&lt;/b&gt; could not be started. Ensure it is in the application search path or start it manually.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
--- a/src/eric7/i18n/eric7_ru.ts	Tue May 02 11:39:09 2023 +0200
+++ b/src/eric7/i18n/eric7_ru.ts	Thu May 04 17:58:52 2023 +0200
@@ -1730,77 +1730,77 @@
   <context>
     <name>BaseDevice</name>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="196" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="199" />
       <source>Device Data Not Available</source>
       <translation>Данные устройства недоступны</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="197" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="200" />
       <source>&lt;p&gt;The device data is not available. Try to connect to the device again. Aborting...&lt;/p&gt;</source>
       <translation>&lt;p&gt;Данные устройства недоступны. Попробуйте снова подключиться к устройству. Прерывание...&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="250" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="253" />
       <source>Unsupported Device</source>
       <translation>Неподдерживаемое устройство</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="260" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="263" />
       <source>REPL is not supported by this device.</source>
       <translation>REPL не поддерживается этим устройством.</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="279" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="282" />
       <source>Plotter is not supported by this device.</source>
       <translation>Плоттер не поддерживается этим устройством.</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="298" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="301" />
       <source>Running scripts is not supported by this device.</source>
       <translation>Выполнение скриптов не поддерживается этим устройством.</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="317" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="320" />
       <source>File Manager is not supported by this device.</source>
       <translation>Менеджер файлов не поддерживается этим устройством.</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="372" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="375" />
       <source>Select Device Directory</source>
       <translation>Выберите директорию устройства</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="373" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="376" />
       <source>Select the directory for the connected device:</source>
       <translation>Выберите директорию для подсоединенного устройства:</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="519" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="528" />
       <source>Detected an error without indications.</source>
       <translation>Обнаружена неиндексированная ошибка.</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="1464" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="1473" />
       <source>Operation not supported.</source>
       <translation>Операция не поддерживается.</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="1772" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="1781" />
       <source>Yes</source>
       <translation>Да</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="1772" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="1781" />
       <source>No</source>
       <translation>Нет</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="1774" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="1783" />
       <source>yes</source>
       <translation>да</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="1774" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="1783" />
       <source>no</source>
       <translation>нет</translation>
     </message>
@@ -4158,14 +4158,14 @@
       <translation>Выберите путь к подмонтированному устройству:</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1128" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1126" />
       <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="865" />
       <source>unknown ({0})</source>
       <translation>неизвестная ({0})</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1577" />
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1500" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1567" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1490" />
       <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1040" />
       <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="961" />
       <source>The device volume is not available.</source>
@@ -4178,94 +4178,94 @@
       <translation>Записать учетные данные WiFi</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1539" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1529" />
       <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1005" />
       <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="977" />
       <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; exists already. Shall it be replaced?&lt;/p&gt;</source>
       <translation>&lt;p&gt;Файл &lt;b&gt;{0}&lt;/b&gt; уже существует. Заменить?&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1546" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1536" />
       <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1012" />
       <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="984" />
       <source>Aborted</source>
       <translation>Прервано</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1195" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1193" />
       <source>CircuitPython does not support setting the IPv4 parameters of the WiFi access point.</source>
       <translation>CircuitPython не поддерживает настройку параметров IPv4 точки доступа WiFi.</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1266" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1262" />
       <source>CircuitPython does not support reporting of connected clients.</source>
       <translation>CircuitPython не поддерживает создание отчетов о подключенных клиентах.</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1675" />
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1350" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1663" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1342" />
       <source>Active</source>
       <translation>Активно</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1681" />
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1351" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1669" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1343" />
       <source>Connected</source>
       <translation>Подключено</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1352" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1344" />
       <source>IPv4 Address</source>
       <translation />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1353" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1345" />
       <source>Netmask</source>
       <translation>Сетевая маска</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1354" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1346" />
       <source>Gateway</source>
       <translation>Шлюз</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1355" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1347" />
       <source>DNS</source>
       <translation>DNS</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1677" />
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1356" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1665" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1348" />
       <source>MAC-Address</source>
       <translation>MAC-адрес</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1357" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1349" />
       <source>Chip Type</source>
       <translation>Тип чипа</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1358" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1350" />
       <source>max. Sockets</source>
       <translation>макс. сокетов</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1538" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1528" />
       <source>Write Connect Script</source>
       <translation>Записать сценарий подключения</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1676" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1664" />
       <source>Name</source>
       <translation>Имя</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1679" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1667" />
       <source>Address Type</source>
       <translation>Тип адреса</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1682" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1670" />
       <source>Advertising</source>
       <translation>Оповещение</translation>
     </message>
@@ -20576,8 +20576,8 @@
       <translation>Показать версии MicroPython</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1506" />
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1490" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1498" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1482" />
       <location filename="../MicroPython/Devices/EspDevices.py" line="196" />
       <source>Erase Flash</source>
       <translation>Очистить Flash-память</translation>
@@ -20588,7 +20588,7 @@
       <translation>Прошить микрокод MicroPython</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1591" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1583" />
       <location filename="../MicroPython/Devices/EspDevices.py" line="203" />
       <source>Flash Additional Firmware</source>
       <translation>Прошить дополнительный микрокод</translation>
@@ -20639,8 +20639,8 @@
       <translation>Вывод команды 'esptool read_flash'</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1590" />
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1549" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1582" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1541" />
       <location filename="../MicroPython/Devices/EspDevices.py" line="363" />
       <source>'esptool write_flash' Output</source>
       <translation>Вывод команды 'esptool write_flash'</translation>
@@ -20706,68 +20706,68 @@
       <translation>Ошибка удаления учетных данных: {0}</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="980" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="978" />
       <source>unknown ({0})</source>
       <translation>неизвестная ({0})</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1209" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1201" />
       <source>Active</source>
       <translation>Активно</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1210" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1202" />
       <source>Name</source>
       <translation>Имя</translation>
     </message>
     <message>
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1203" />
+      <source>MAC-Address</source>
+      <translation>MAC-адрес</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1206" />
+      <source>Address Type</source>
+      <translation>Тип адреса</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1207" />
+      <source>Public</source>
+      <translation>Публичный</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1207" />
+      <source>Random</source>
+      <translation>Случайный</translation>
+    </message>
+    <message>
       <location filename="../MicroPython/Devices/EspDevices.py" line="1211" />
-      <source>MAC-Address</source>
-      <translation>MAC-адрес</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1214" />
-      <source>Address Type</source>
-      <translation>Тип адреса</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1215" />
-      <source>Public</source>
-      <translation>Публичный</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1215" />
-      <source>Random</source>
-      <translation>Случайный</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1219" />
       <source>Rx-Buffer</source>
       <translation>Rx-буфер</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1221" />
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1219" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1213" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1211" />
       <source>{0} Bytes</source>
       <translation>{0} байт</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1221" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1213" />
       <source>MTU</source>
       <translation>MTU</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1491" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1483" />
       <source>Shall the flash of the selected device really be erased?</source>
       <translation>Действительно ли flash-память выбранного устройства должна быть очищена?</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1505" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1497" />
       <source>'esptool erase_flash' Output</source>
       <translation>Вывод команды 'esptool erase_flash'</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1550" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1542" />
       <source>Flash µPy/CPy Firmware</source>
       <translation>Прошить микропрограмму µPy/CPy</translation>
     </message>
@@ -50368,15 +50368,16 @@
     </message>
     <message>
       <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
-      <source>Serial Link</source>
-      <translation>Последовательный канал</translation>
+      <source>Device Communication</source>
+      <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
-      <source>Timeout for Serial Link Communication:</source>
-      <translation>Задержка соединения по последовательному каналу:</translation>
-    </message>
-    <message>
+      <source>Serial Link Timeout:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
       <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
       <source>Enter the timout value</source>
       <translation>Задайте значение времени ожидания</translation>
@@ -50384,11 +50385,22 @@
     <message>
       <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
       <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
+      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
       <source> s</source>
       <translation> с</translation>
     </message>
     <message>
       <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
+      <source>WebRepl Timeout:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
+      <source>Device Time</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
       <source>Select to synchronize the time after connection is established</source>
       <translation>Разрешить синхронизировать время после установки соединения</translation>
     </message>
@@ -50481,8 +50493,8 @@
       <translation>Введите сетевой пароль</translation>
     </message>
     <message>
-      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.py" line="354" />
-      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.py" line="337" />
+      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.py" line="364" />
+      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.py" line="347" />
       <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
       <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
       <source>Press to show the password</source>
@@ -50824,11 +50836,19 @@
       <translation>открыто</translation>
     </message>
     <message>
-      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.py" line="350" />
-      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.py" line="333" />
+      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.py" line="360" />
+      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.py" line="343" />
       <source>Press to hide the password</source>
       <translation>Скрыть пароль</translation>
     </message>
+    <message>
+      <source>Serial Link</source>
+      <translation type="vanished">Последовательный канал</translation>
+    </message>
+    <message>
+      <source>Timeout for Serial Link Communication:</source>
+      <translation type="vanished">Задержка соединения по последовательному каналу:</translation>
+    </message>
   </context>
   <context>
     <name>MicroPythonProgressInfoDialog</name>
@@ -50839,39 +50859,298 @@
     </message>
   </context>
   <context>
+    <name>MicroPythonReplEdit</name>
+    <message>
+      <location filename="../MicroPython/MicroPythonReplWidget.py" line="322" />
+      <source>Clear</source>
+      <translation type="unfinished">Очистить</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonReplWidget.py" line="327" />
+      <source>Copy</source>
+      <translation type="unfinished">Копировать</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonReplWidget.py" line="333" />
+      <source>Paste</source>
+      <translation type="unfinished">Вставить</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonReplWidget.py" line="340" />
+      <source>Select All</source>
+      <translation type="unfinished">Выделить всё</translation>
+    </message>
+  </context>
+  <context>
+    <name>MicroPythonWebreplConnectionDialog</name>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.py" line="97" />
+      <source>Press to hide the password.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.ui" line="0" />
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.py" line="101" />
+      <source>Press to show the password.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.ui" line="0" />
+      <source>WebREPL Connection</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.ui" line="0" />
+      <source>Host:</source>
+      <translation type="unfinished">Хост:</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.ui" line="0" />
+      <source>Enter the host name or IPv4 address of the device.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.ui" line="0" />
+      <source>Port:</source>
+      <translation type="unfinished">Порт:</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.ui" line="0" />
+      <source>Enter the port of the WebREPL (empty for default port 8266).</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.ui" line="0" />
+      <source>Password:</source>
+      <translation type="unfinished">Пароль:</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.ui" line="0" />
+      <source>Enter the password for this device connection.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.ui" line="0" />
+      <source>Device Type:</source>
+      <translation type="unfinished">Тип устройства:</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.ui" line="0" />
+      <source>Select the device type</source>
+      <translation type="unfinished">Выберите тип устройства</translation>
+    </message>
+  </context>
+  <context>
+    <name>MicroPythonWebreplDeviceInterface</name>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplDeviceInterface.py" line="80" />
+      <source>WebREPL Password</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplDeviceInterface.py" line="81" />
+      <source>Enter the WebREPL password:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplDeviceInterface.py" line="100" />
+      <source>WebREPL Login</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplDeviceInterface.py" line="101" />
+      <source>The login to the selected device 'webrepl' failed. The given password may be incorrect.</source>
+      <translation type="unfinished" />
+    </message>
+  </context>
+  <context>
+    <name>MicroPythonWebreplUrlAddEditDialog</name>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>WebREPL URL</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Name:</source>
+      <translation type="unfinished">Имя:</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Enter a unique name for the WebREPL connection.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Description:</source>
+      <translation type="unfinished">Описание:</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Enter a short description to be shown in the selector.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Host:</source>
+      <translation type="unfinished">Хост:</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Enter the host name or IPv4 address of the device.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Port:</source>
+      <translation type="unfinished">Порт:</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Enter the port of the WebREPL (empty for default port 8266).</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Password:</source>
+      <translation type="unfinished">Пароль:</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Enter the password for this device connection.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Device Type:</source>
+      <translation type="unfinished">Тип устройства:</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Select the device type</source>
+      <translation type="unfinished">Выберите тип устройства</translation>
+    </message>
+  </context>
+  <context>
+    <name>MicroPythonWebreplUrlsConfigDialog</name>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.py" line="133" />
+      <source>Remove Selected WebREPL URLs</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.py" line="134" />
+      <source>Shall the selected WebREPL URLs really be removed?</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.py" line="150" />
+      <source>Remove All WebREPL URLs</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.py" line="151" />
+      <source>Shall all WebREPL URLs really be removed?</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>WebREPL URLs</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>Name</source>
+      <translation type="unfinished">Имя</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>Description</source>
+      <translation type="unfinished">Описание</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>URL</source>
+      <translation type="unfinished">URL</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>Press to add a new entry.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>Add...</source>
+      <translation type="unfinished">Добавить...</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>Press to edit the selected entry.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>Edit...</source>
+      <translation type="unfinished">Правка...</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>Press to remove the selected entries.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>Remove</source>
+      <translation type="unfinished">Удалить</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>Press to remove all entries.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>Remove All</source>
+      <translation type="unfinished">Удалить все</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>&lt;b&gt;Note:&lt;/b&gt; The name of an entry must be unique amongst the list.</source>
+      <translation type="unfinished" />
+    </message>
+  </context>
+  <context>
     <name>MicroPythonWidget</name>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="247" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="109" />
       <source>MicroPython Menu</source>
       <translation>Меню MicroPython</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="306" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="145" />
       <source>&lt;h3&gt;The QtSerialPort package is not available.&lt;br/&gt;MicroPython support is deactivated.&lt;/h3&gt;</source>
       <translation>&lt;h3&gt;Пакет QtSerialPort недоступен.&lt;br/&gt;Поддержка MicroPython деактивирована.&lt;/h3&gt;</translation>
     </message>
     <message numerus="yes">
-      <location filename="../MicroPython/MicroPythonWidget.py" line="347" />
-      <source>%n supported device(s) detected.</source>
-      <translation>
-        <numerusform>Обнаружено %n поддерживаемое устройство.</numerusform>
-        <numerusform>Обнаружено %n поддерживаемых устройства.</numerusform>
-        <numerusform>Обнаружено %n поддерживаемых устройств.</numerusform>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="173" />
+      <source>%n supported serial device(s) detected.</source>
+      <translation type="unfinished">
+        <numerusform />
       </translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="361" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="187" />
       <source>{0} - {1} ({2})</source>
       <comment>board name, description, port name</comment>
       <translation>{0} - {1} ({2})</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="381" />
-      <source>No supported devices detected.</source>
-      <translation>Не обнаружены поддерживаемые устройства.</translation>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="210" />
+      <source>No supported serial devices detected.</source>
+      <translation type="unfinished" />
     </message>
     <message numerus="yes">
-      <location filename="../MicroPython/MicroPythonWidget.py" line="385" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="214" />
       <source>
 %n unknown device(s) for manual selection.</source>
       <translation>
@@ -50884,70 +51163,63 @@
       </translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="392" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="221" />
       <source>Manual Selection</source>
       <translation>Ручной выбор</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="456" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="427" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="232" />
+      <source>WebREPL (manual)</source>
+      <translation type="unfinished" />
+    </message>
+    <message numerus="yes">
+      <location filename="../MicroPython/MicroPythonWidget.py" line="251" />
+      <source>
+%n WebREPL connection(s) defined.</source>
+      <translation type="unfinished">
+        <numerusform />
+      </translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="311" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="282" />
       <source>Unknown MicroPython Device</source>
       <translation>Неизвестное устройство MicroPython</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="428" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="283" />
       <source>&lt;p&gt;Detected these unknown serial devices&lt;/p&gt;&lt;ul&gt;&lt;li&gt;{0}&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Please report them together with the board name and a short description to &lt;a href="mailto:{1}"&gt; the eric bug reporting address&lt;/a&gt; if it is a MicroPython board.&lt;/p&gt;</source>
       <translation>&lt;p&gt;Обнаружены следующие неизвестные последовательные устройства&lt;/p&gt;&lt;ul&gt;&lt;li&gt;{0}&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Если это плата MicroPython, то сообщите о ней вместе с названием платы и кратким описанием по адресу &lt;a href="mailto:{1}"&gt; the eric bug reporting&lt;/a&gt;.&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="440" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="295" />
       <source>{0} (0x{1:04x}/0x{2:04x})</source>
       <comment>description, VId, PId</comment>
       <translation>{0} (0x{1:04x}/0x{2:04x})</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="457" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="312" />
       <source>Would you like to add them to the list of manually configured devices?</source>
       <translation>Хотите добавить их в список вручную настроенных устройств?</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="592" />
-      <source>Clear</source>
-      <translation>Очистить</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="597" />
-      <source>Copy</source>
-      <translation>Копировать</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="603" />
-      <source>Paste</source>
-      <translation>Вставить</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="610" />
-      <source>Select All</source>
-      <translation>Выделить всё</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="636" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="451" />
       <source>Press to disconnect the current device</source>
       <translation>Отключить выбранное устройство</translation>
     </message>
     <message>
       <location filename="../MicroPython/MicroPythonWidget.ui" line="0" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="641" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="456" />
       <source>Press to connect the selected device</source>
       <translation>Подключить выбранное устройство</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="673" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="488" />
       <source>No device attached</source>
       <translation>Устройство не подключено</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="674" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="489" />
       <source>Please ensure the device is plugged into your computer and selected.
 
 It must have a version of MicroPython (or CircuitPython) flashed onto it before anything will work.
@@ -50960,354 +51232,359 @@
 И, наконец, нажмите кнопку перезагрузки устройства и подождите несколько секунд, прежде чем повторить попытку.</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="703" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="518" />
       <source>Start REPL</source>
       <translation>Запустить REPL</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="704" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="519" />
       <source>&lt;p&gt;The REPL cannot be started.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
       <translation>&lt;p&gt;Не удается запустить REPL.&lt;/p&gt;&lt;p&gt;Причина:&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1232" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1221" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="716" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="705" />
       <source>Serial Device Connect</source>
       <translation>Подсоединение последовательного устройства</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1222" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="706" />
       <source>&lt;p&gt;The device at serial port &lt;b&gt;{0}&lt;/b&gt; does not respond. It may not have a MicroPython firmware flashed.&lt;/p&gt;</source>
       <translation>&lt;p&gt;Устройство не отвечает через последовательный порт &lt;b&gt;{0}&lt;/b&gt;. Возможно на нем не установлена прошивка MicroPython.&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1233" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="717" />
       <source>&lt;p&gt;Cannot connect to device at serial port &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</source>
       <translation>&lt;p&gt;Не удается соединиться с устройством через последовательный порт &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1291" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1282" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1273" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="780" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="771" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="762" />
       <source>Run Script</source>
       <translation>Выполнить скрипт</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1274" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="763" />
       <source>There is no editor open. Abort...</source>
       <translation>Редактор не открыт. Прерывание...</translation>
     </message>
     <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="772" />
+      <source>The current editor does not contain a script. Abort...</source>
+      <translation>Текущий редактор не содержит скрипт. Прервать...</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="781" />
+      <source>&lt;p&gt;Cannot run script.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
+      <translation>&lt;p&gt;Не удается выполнить скрипт.&lt;/p&gt;&lt;p&gt;Причина: {0}&lt;/p&gt;</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="817" />
+      <source>Start Chart</source>
+      <translation>Построить диаграмму</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="818" />
+      <source>&lt;p&gt;The Chart cannot be started.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
+      <translation>&lt;p&gt;Не удается построить диаграмму.&lt;/p&gt;&lt;p&gt;Причина: {0}&lt;/p&gt;</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="833" />
+      <source>µPy Chart</source>
+      <translation>µPy диаграммы</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="850" />
+      <source>Unsaved Chart Data</source>
+      <translation>Несохраненные данные диаграммы</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="851" />
+      <source>The chart contains unsaved data.</source>
+      <translation>Диаграмма содержит несохраненные данные.</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="899" />
+      <source>Start File Manager</source>
+      <translation>Запустить менеджер файлов</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="900" />
+      <source>&lt;p&gt;The File Manager cannot be started.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
+      <translation>&lt;p&gt;Не удается запустить менеджер файлов.&lt;/p&gt;&lt;p&gt;Причина: {0}&lt;/p&gt;</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="920" />
+      <source>µPy Files</source>
+      <translation>µPy файлы</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="985" />
+      <source>Downloads</source>
+      <translation>Загрузить микрокод / библиотеки</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1032" />
+      <source>Show Version</source>
+      <translation>Показать версию</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1035" />
+      <source>Show Implementation</source>
+      <translation>Показать исполнение</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1038" />
+      <source>Show Board Data</source>
+      <translation>Показать данные платы</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1224" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1043" />
+      <source>Synchronize Time</source>
+      <translation>Синхронизировать время</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1046" />
+      <source>Show Device Time</source>
+      <translation>Показать время устройства</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1048" />
+      <source>Show Local Time</source>
+      <translation>Показать локальное время</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1051" />
+      <source>Show Time</source>
+      <translation>Показать время</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1055" />
+      <source>Show Builtin Modules</source>
+      <translation>Показать встроенные модули</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1633" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1067" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1059" />
+      <source>Install Package</source>
+      <translation>Установить пакет</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1672" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1669" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1063" />
+      <source>Install Packages</source>
+      <translation>Установить пакеты</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1448" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1073" />
+      <source>Compile Python File</source>
+      <translation>Компилировать файл Python</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1472" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1463" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1077" />
+      <source>Compile Current Editor</source>
+      <translation>Компилировать текущий редактор</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1098" />
+      <source>Download Firmware</source>
+      <translation>Загрузить микрокод</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1105" />
+      <source>Show Documentation</source>
+      <translation>Просмотр документации</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1108" />
+      <source>Convert To UF2</source>
+      <translation>Преобразовать в UF2</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1109" />
+      <source>Flash UF2 Device</source>
+      <translation>Прошивка UF2-устройств</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1112" />
+      <source>Manage Unknown Devices</source>
+      <translation>Менеджер неизвестных устройств</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1115" />
+      <source>Ignored Serial Devices</source>
+      <translation>Проигнорированные последовательные устройства</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1118" />
+      <source>Configure</source>
+      <translation>Настройки</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1127" />
+      <source>&lt;h3&gt;Device Version Information&lt;/h3&gt;</source>
+      <translation>&lt;h3&gt;Информация о версии устройства&lt;/h3&gt;</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1138" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1134" />
+      <source>Device Version Information</source>
+      <translation>Информация о версии устройства</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1139" />
+      <source>No version information available.</source>
+      <translation>Информация о версии недоступна.</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1163" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1155" />
+      <source>unknown</source>
+      <translation>unknown</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1169" />
+      <source> ({0})</source>
+      <translation> ({0})</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1185" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1176" />
+      <source>Device Implementation Information</source>
+      <translation>Информация о исполнении устройства</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1177" />
+      <source>&lt;h3&gt;Device Implementation Information&lt;/h3&gt;&lt;p&gt;This device contains &lt;b&gt;{0} {1}{2}&lt;/b&gt;.&lt;/p&gt;</source>
+      <translation>&lt;h3&gt;Информация о реализации устройства&lt;/h3&gt;&lt;p&gt;Это устройство содержит &lt;b&gt;{0} {1}&lt;/b&gt;.&lt;/p&gt;</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1186" />
+      <source>No device implementation information available.</source>
+      <translation>Информация о реализации устройства отсутствует.</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1225" />
+      <source>&lt;p&gt;The time of the connected device was synchronized with the local time.&lt;/p&gt;</source>
+      <translation>&lt;p&gt;Время подключенного устройства было синхронизировано с локальным временем.&lt;/p&gt;</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1247" />
+      <source>&lt;h3&gt;Device Date and Time&lt;/h3&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{1}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
+      <translation>&lt;h3&gt;Дата и время устройства&lt;/h3&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Дата&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Время&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{1}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1255" />
+      <source>&lt;h3&gt;Device Date and Time&lt;/h3&gt;&lt;p&gt;{0}&lt;/p&gt;</source>
+      <translation>&lt;h3&gt;Дата и время устройства&lt;/h3&gt;&lt;p&gt;{0}&lt;/p&gt;</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1271" />
+      <source>Device Date and Time</source>
+      <translation>Дата и время устройства</translation>
+    </message>
+    <message>
       <location filename="../MicroPython/MicroPythonWidget.py" line="1283" />
-      <source>The current editor does not contain a script. Abort...</source>
-      <translation>Текущий редактор не содержит скрипт. Прервать...</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1292" />
-      <source>&lt;p&gt;Cannot run script.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
-      <translation>&lt;p&gt;Не удается выполнить скрипт.&lt;/p&gt;&lt;p&gt;Причина: {0}&lt;/p&gt;</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1328" />
-      <source>Start Chart</source>
-      <translation>Построить диаграмму</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1329" />
-      <source>&lt;p&gt;The Chart cannot be started.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
-      <translation>&lt;p&gt;Не удается построить диаграмму.&lt;/p&gt;&lt;p&gt;Причина: {0}&lt;/p&gt;</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1344" />
-      <source>µPy Chart</source>
-      <translation>µPy диаграммы</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1361" />
-      <source>Unsaved Chart Data</source>
-      <translation>Несохраненные данные диаграммы</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1362" />
-      <source>The chart contains unsaved data.</source>
-      <translation>Диаграмма содержит несохраненные данные.</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1410" />
-      <source>Start File Manager</source>
-      <translation>Запустить менеджер файлов</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1411" />
-      <source>&lt;p&gt;The File Manager cannot be started.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
-      <translation>&lt;p&gt;Не удается запустить менеджер файлов.&lt;/p&gt;&lt;p&gt;Причина: {0}&lt;/p&gt;</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1431" />
-      <source>µPy Files</source>
-      <translation>µPy файлы</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1496" />
-      <source>Downloads</source>
-      <translation>Загрузить микрокод / библиотеки</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1543" />
-      <source>Show Version</source>
-      <translation>Показать версию</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1546" />
-      <source>Show Implementation</source>
-      <translation>Показать исполнение</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1549" />
-      <source>Show Board Data</source>
-      <translation>Показать данные платы</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1735" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1554" />
-      <source>Synchronize Time</source>
-      <translation>Синхронизировать время</translation>
+      <source>Local Date and Time</source>
+      <translation>Локальные дата и время</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1284" />
+      <source>&lt;h3&gt;Local Date and Time&lt;/h3&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{1}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
+      <translation>&lt;h3&gt;Локальные дата и время&lt;/h3&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Дата&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Время&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{1}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1325" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1308" />
+      <source>Date and Time</source>
+      <translation>Дата и время</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1309" />
+      <source>&lt;table&gt;&lt;tr&gt;&lt;th&gt;&lt;/th&gt;&lt;th&gt;Local Date and Time&lt;/th&gt;&lt;th&gt;Device Date and Time&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td align='center'&gt;{0}&lt;/td&gt;&lt;td align='center'&gt;{2}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td align='center'&gt;{1}&lt;/td&gt;&lt;td align='center'&gt;{3}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
+      <translation>&lt;table&gt;&lt;tr&gt;&lt;th&gt;&lt;/th&gt;&lt;th&gt;Дата и время локальные&lt;/th&gt;&lt;th&gt;Дата и время устройства&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Дата &lt;/b&gt;&lt;/td&gt;&lt;td align='center'&gt;{0}&lt;/td&gt;&lt;td align='center'&gt;{2}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Время &lt;/b&gt;&lt;/td&gt;&lt;td align='center'&gt;{1}&lt;/td&gt;&lt;td align='center'&gt;{3}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1326" />
+      <source>&lt;table&gt;&lt;tr&gt;&lt;th&gt;Local Date and Time&lt;/th&gt;&lt;th&gt;Device Date and Time&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align='center'&gt;{0} {1}&lt;/td&gt;&lt;td align='center'&gt;{2}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
+      <translation>&lt;table&gt;&lt;tr&gt;&lt;th&gt;Дата и время локальные&lt;/th&gt;&lt;th&gt;Дата и время устройства&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align='center'&gt;{0} {1}&lt;/td&gt;&lt;td align='center'&gt;{2}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1350" />
+      <source>Error handling device</source>
+      <translation>Ошибка при работе с устройством</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1351" />
+      <source>&lt;p&gt;There was an error communicating with the connected device.&lt;/p&gt;&lt;p&gt;Method: {0}&lt;/p&gt;&lt;p&gt;Message: {1}&lt;/p&gt;</source>
+      <translation>&lt;p&gt;Произошла ошибка при работе с подключаемым устройством.&lt;/p&gt;&lt;p&gt;Метод: {0}&lt;/p&gt;&lt;p&gt;Сообщение: {1}&lt;/p&gt;</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1393" />
+      <source>The MicroPython cross compiler &lt;b&gt;mpy-cross&lt;/b&gt; cannot be found. Ensure it is in the search path or configure it on the MicroPython configuration page.</source>
+      <translation>Кросс-компилятор MicroPython &lt;b&gt;mpy-cross&lt;/b&gt; не найден. Убедитесь, что он находится в пути поиска, или настройте его на странице конфигурации MicroPython.</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1419" />
+      <source>Python Files (*.py);;All Files (*)</source>
+      <translation>Файлы Python (*.py);;Все файлы (*)</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1429" />
+      <source>The Python file &lt;b&gt;{0}&lt;/b&gt; does not exist. Aborting...</source>
+      <translation>Файл Python &lt;b&gt;{0}&lt;/b&gt; не существует. Отмена...</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1438" />
+      <source>'mpy-cross' Output</source>
+      <translation>Вывод команды 'mpy-cross'</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1464" />
+      <source>The current editor does not contain a Python file. Aborting...</source>
+      <translation>Текущий редактор не содержит файл Python. Отмена...</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1556" />
+      <source>Add Unknown Devices</source>
+      <translation>Добавить неизвестное устройство</translation>
     </message>
     <message>
       <location filename="../MicroPython/MicroPythonWidget.py" line="1557" />
-      <source>Show Device Time</source>
-      <translation>Показать время устройства</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1559" />
-      <source>Show Local Time</source>
-      <translation>Показать локальное время</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1562" />
-      <source>Show Time</source>
-      <translation>Показать время</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1566" />
-      <source>Show Builtin Modules</source>
-      <translation>Показать встроенные модули</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2144" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1578" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1570" />
-      <source>Install Package</source>
-      <translation>Установить пакет</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2183" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2180" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1574" />
-      <source>Install Packages</source>
-      <translation>Установить пакеты</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1959" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1584" />
-      <source>Compile Python File</source>
-      <translation>Компилировать файл Python</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1983" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1974" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1588" />
-      <source>Compile Current Editor</source>
-      <translation>Компилировать текущий редактор</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1609" />
-      <source>Download Firmware</source>
-      <translation>Загрузить микрокод</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1616" />
-      <source>Show Documentation</source>
-      <translation>Просмотр документации</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1619" />
-      <source>Convert To UF2</source>
-      <translation>Преобразовать в UF2</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1620" />
-      <source>Flash UF2 Device</source>
-      <translation>Прошивка UF2-устройств</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1623" />
-      <source>Manage Unknown Devices</source>
-      <translation>Менеджер неизвестных устройств</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1626" />
-      <source>Ignored Serial Devices</source>
-      <translation>Проигнорированные последовательные устройства</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1629" />
-      <source>Configure</source>
-      <translation>Настройки</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1638" />
-      <source>&lt;h3&gt;Device Version Information&lt;/h3&gt;</source>
-      <translation>&lt;h3&gt;Информация о версии устройства&lt;/h3&gt;</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1649" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1645" />
-      <source>Device Version Information</source>
-      <translation>Информация о версии устройства</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1650" />
-      <source>No version information available.</source>
-      <translation>Информация о версии недоступна.</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1674" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1666" />
-      <source>unknown</source>
-      <translation>unknown</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1680" />
-      <source> ({0})</source>
-      <translation> ({0})</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1696" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1687" />
-      <source>Device Implementation Information</source>
-      <translation>Информация о исполнении устройства</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1688" />
-      <source>&lt;h3&gt;Device Implementation Information&lt;/h3&gt;&lt;p&gt;This device contains &lt;b&gt;{0} {1}{2}&lt;/b&gt;.&lt;/p&gt;</source>
-      <translation>&lt;h3&gt;Информация о реализации устройства&lt;/h3&gt;&lt;p&gt;Это устройство содержит &lt;b&gt;{0} {1}&lt;/b&gt;.&lt;/p&gt;</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1697" />
-      <source>No device implementation information available.</source>
-      <translation>Информация о реализации устройства отсутствует.</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1736" />
-      <source>&lt;p&gt;The time of the connected device was synchronized with the local time.&lt;/p&gt;</source>
-      <translation>&lt;p&gt;Время подключенного устройства было синхронизировано с локальным временем.&lt;/p&gt;</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1758" />
-      <source>&lt;h3&gt;Device Date and Time&lt;/h3&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{1}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
-      <translation>&lt;h3&gt;Дата и время устройства&lt;/h3&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Дата&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Время&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{1}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1766" />
-      <source>&lt;h3&gt;Device Date and Time&lt;/h3&gt;&lt;p&gt;{0}&lt;/p&gt;</source>
-      <translation>&lt;h3&gt;Дата и время устройства&lt;/h3&gt;&lt;p&gt;{0}&lt;/p&gt;</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1782" />
-      <source>Device Date and Time</source>
-      <translation>Дата и время устройства</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1794" />
-      <source>Local Date and Time</source>
-      <translation>Локальные дата и время</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1795" />
-      <source>&lt;h3&gt;Local Date and Time&lt;/h3&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{1}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
-      <translation>&lt;h3&gt;Локальные дата и время&lt;/h3&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Дата&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Время&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{1}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1836" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1819" />
-      <source>Date and Time</source>
-      <translation>Дата и время</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1820" />
-      <source>&lt;table&gt;&lt;tr&gt;&lt;th&gt;&lt;/th&gt;&lt;th&gt;Local Date and Time&lt;/th&gt;&lt;th&gt;Device Date and Time&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td align='center'&gt;{0}&lt;/td&gt;&lt;td align='center'&gt;{2}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td align='center'&gt;{1}&lt;/td&gt;&lt;td align='center'&gt;{3}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
-      <translation>&lt;table&gt;&lt;tr&gt;&lt;th&gt;&lt;/th&gt;&lt;th&gt;Дата и время локальные&lt;/th&gt;&lt;th&gt;Дата и время устройства&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Дата &lt;/b&gt;&lt;/td&gt;&lt;td align='center'&gt;{0}&lt;/td&gt;&lt;td align='center'&gt;{2}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Время &lt;/b&gt;&lt;/td&gt;&lt;td align='center'&gt;{1}&lt;/td&gt;&lt;td align='center'&gt;{3}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1837" />
-      <source>&lt;table&gt;&lt;tr&gt;&lt;th&gt;Local Date and Time&lt;/th&gt;&lt;th&gt;Device Date and Time&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align='center'&gt;{0} {1}&lt;/td&gt;&lt;td align='center'&gt;{2}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
-      <translation>&lt;table&gt;&lt;tr&gt;&lt;th&gt;Дата и время локальные&lt;/th&gt;&lt;th&gt;Дата и время устройства&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align='center'&gt;{0} {1}&lt;/td&gt;&lt;td align='center'&gt;{2}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1861" />
-      <source>Error handling device</source>
-      <translation>Ошибка при работе с устройством</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1862" />
-      <source>&lt;p&gt;There was an error communicating with the connected device.&lt;/p&gt;&lt;p&gt;Method: {0}&lt;/p&gt;&lt;p&gt;Message: {1}&lt;/p&gt;</source>
-      <translation>&lt;p&gt;Произошла ошибка при работе с подключаемым устройством.&lt;/p&gt;&lt;p&gt;Метод: {0}&lt;/p&gt;&lt;p&gt;Сообщение: {1}&lt;/p&gt;</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1904" />
-      <source>The MicroPython cross compiler &lt;b&gt;mpy-cross&lt;/b&gt; cannot be found. Ensure it is in the search path or configure it on the MicroPython configuration page.</source>
-      <translation>Кросс-компилятор MicroPython &lt;b&gt;mpy-cross&lt;/b&gt; не найден. Убедитесь, что он находится в пути поиска, или настройте его на странице конфигурации MicroPython.</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1930" />
-      <source>Python Files (*.py);;All Files (*)</source>
-      <translation>Файлы Python (*.py);;Все файлы (*)</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1940" />
-      <source>The Python file &lt;b&gt;{0}&lt;/b&gt; does not exist. Aborting...</source>
-      <translation>Файл Python &lt;b&gt;{0}&lt;/b&gt; не существует. Отмена...</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1949" />
-      <source>'mpy-cross' Output</source>
-      <translation>Вывод команды 'mpy-cross'</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1975" />
-      <source>The current editor does not contain a Python file. Aborting...</source>
-      <translation>Текущий редактор не содержит файл Python. Отмена...</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2067" />
-      <source>Add Unknown Devices</source>
-      <translation>Добавить неизвестное устройство</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2068" />
       <source>Select the devices to be added:</source>
       <translation>Выборите устройства для добавления:</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2117" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1606" />
       <source>Plus any modules on the filesystem.</source>
       <translation>Плюс любые модули в файловой системе.</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2169" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1658" />
       <source>Package '{0}' was installed successfully.</source>
       <translation>Пакет '{0}' успешно установлен.</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2184" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1673" />
       <source>Enter the packages to be installed separated by whitespace:</source>
       <translation>Введите через пробел пакеты для установки:</translation>
     </message>
     <message>
       <location filename="../MicroPython/MicroPythonWidget.ui" line="0" />
-      <source>Press to check for connected devices</source>
-      <translation>Проверить подключенные устройства</translation>
+      <source>Press to detect connected devices and repopulate the device selector.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.ui" line="0" />
+      <source>Press to edit the list of configured WebREPL connections.</source>
+      <translation type="unfinished" />
     </message>
     <message>
       <location filename="../MicroPython/MicroPythonWidget.ui" line="0" />
@@ -51329,6 +51606,38 @@
       <source>Press to open a chart window to display data receive from the selected device</source>
       <translation>Открыть окно для отображения данных, полученных с выбранного устройства</translation>
     </message>
+    <message numerus="yes">
+      <source>%n supported device(s) detected.</source>
+      <translation type="vanished">
+        <numerusform>Обнаружено %n поддерживаемое устройство.</numerusform>
+        <numerusform>Обнаружено %n поддерживаемых устройства.</numerusform>
+        <numerusform>Обнаружено %n поддерживаемых устройств.</numerusform>
+      </translation>
+    </message>
+    <message>
+      <source>No supported devices detected.</source>
+      <translation type="vanished">Не обнаружены поддерживаемые устройства.</translation>
+    </message>
+    <message>
+      <source>Clear</source>
+      <translation type="vanished">Очистить</translation>
+    </message>
+    <message>
+      <source>Copy</source>
+      <translation type="vanished">Копировать</translation>
+    </message>
+    <message>
+      <source>Paste</source>
+      <translation type="vanished">Вставить</translation>
+    </message>
+    <message>
+      <source>Select All</source>
+      <translation type="vanished">Выделить всё</translation>
+    </message>
+    <message>
+      <source>Press to check for connected devices</source>
+      <translation type="vanished">Проверить подключенные устройства</translation>
+    </message>
   </context>
   <context>
     <name>MicrobitDevice</name>
@@ -51493,29 +51802,29 @@
       <translation>Скрипт пуст. Прерывание.</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="569" />
+      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="571" />
       <source>MicroPython Firmware for BBC micro:bit V1</source>
       <translation>Микрокод MicroPython для BBC micro:bit V1</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="601" />
-      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="588" />
-      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="573" />
+      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="603" />
+      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="590" />
+      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="575" />
       <source>DAPLink Firmware</source>
       <translation>Микрокод DAPLink</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="580" />
+      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="582" />
       <source>MicroPython Firmware for BBC micro:bit V2</source>
       <translation>Микрокод MicroPython для BBC micro:bit V2</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="584" />
+      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="586" />
       <source>CircuitPython Firmware for BBC micro:bit V2</source>
       <translation>Микрокод CircuitPython для BBC micro:bit V2</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="597" />
+      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="599" />
       <source>MicroPython Firmware</source>
       <translation>Микрокод MicroPython</translation>
     </message>
@@ -58746,18 +59055,18 @@
   <context>
     <name>Preferences</name>
     <message>
-      <location filename="../Preferences/__init__.py" line="1815" />
+      <location filename="../Preferences/__init__.py" line="1817" />
       <source>Export Preferences</source>
       <translation>Экспорт Preferences</translation>
     </message>
     <message>
+      <location filename="../Preferences/__init__.py" line="1846" />
+      <location filename="../Preferences/__init__.py" line="1819" />
+      <source>Properties File (*.ini);;All Files (*)</source>
+      <translation>Файлы Preferences (*.ini);;Все файлы (*)</translation>
+    </message>
+    <message>
       <location filename="../Preferences/__init__.py" line="1844" />
-      <location filename="../Preferences/__init__.py" line="1817" />
-      <source>Properties File (*.ini);;All Files (*)</source>
-      <translation>Файлы Preferences (*.ini);;Все файлы (*)</translation>
-    </message>
-    <message>
-      <location filename="../Preferences/__init__.py" line="1842" />
       <source>Import Preferences</source>
       <translation>Импорт Preferences</translation>
     </message>
@@ -68966,88 +69275,88 @@
       <translation>Версия MicroPython</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="364" />
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="365" />
       <source>MicroPython Firmware</source>
       <translation>Микрокод MicroPython</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="368" />
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="369" />
       <source>Pimoroni Pico Firmware</source>
       <translation>Микрокод Pimoroni Pico</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="371" />
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="372" />
       <source>CircuitPython Firmware</source>
       <translation>Микрокод CircuitPython</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="375" />
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="376" />
       <source>CircuitPython Libraries</source>
       <translation>Библиотеки CircuitPython</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="427" />
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="428" />
       <source>Set Country</source>
       <translation>Определить страну</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="983" />
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="618" />
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="978" />
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="617" />
       <source>unknown ({0})</source>
       <translation>неизвестная ({0})</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1093" />
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1088" />
       <source>Pico Wireless does not support setting the IPv4 parameters of the WiFi access point.</source>
       <translation>Pico Wireless не поддерживает настройку параметров IPv4 точки доступа WiFi.</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1168" />
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1161" />
       <source>Pico Wireless does not support reporting of connected clients.</source>
       <translation>Pico Wireless не поддерживает создание отчетов о подключенных клиентах.</translation>
     </message>
     <message>
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1248" />
+      <source>Active</source>
+      <translation>Активно</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1249" />
+      <source>Connected</source>
+      <translation>Подключено</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1252" />
+      <source>Status</source>
+      <translation>Статус</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1256" />
+      <source>Hostname</source>
+      <translation>Имя хоста</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1257" />
+      <source>IPv4 Address</source>
+      <translation>IPv4-адрес</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1258" />
+      <source>Netmask</source>
+      <translation>Сетевая маска</translation>
+    </message>
+    <message>
       <location filename="../MicroPython/Devices/RP2040Devices.py" line="1259" />
-      <source>Active</source>
-      <translation>Активно</translation>
+      <source>Gateway</source>
+      <translation>Шлюз</translation>
     </message>
     <message>
       <location filename="../MicroPython/Devices/RP2040Devices.py" line="1260" />
-      <source>Connected</source>
-      <translation>Подключено</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1263" />
-      <source>Status</source>
-      <translation>Статус</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1267" />
-      <source>Hostname</source>
-      <translation>Имя хоста</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1268" />
-      <source>IPv4 Address</source>
-      <translation>IPv4-адрес</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1269" />
-      <source>Netmask</source>
-      <translation>Сетевая маска</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1270" />
-      <source>Gateway</source>
-      <translation>Шлюз</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1271" />
       <source>DNS</source>
       <translation>DNS</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1272" />
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1261" />
       <source>MAC-Address</source>
       <translation>MAC-адрес</translation>
     </message>
@@ -83188,7 +83497,7 @@
       <translation>Инструкция прошивки MicroPython</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/TeensyDevices.py" line="315" />
+      <location filename="../MicroPython/Devices/TeensyDevices.py" line="316" />
       <location filename="../MicroPython/Devices/TeensyDevices.py" line="154" />
       <source>Flash MicroPython Firmware</source>
       <translation>Прошить микрокод MicroPython</translation>
@@ -83229,17 +83538,17 @@
       <translation>Версия MicroPython</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/TeensyDevices.py" line="316" />
+      <location filename="../MicroPython/Devices/TeensyDevices.py" line="317" />
       <source>&lt;p&gt;Teensy 4.0 and Teensy 4.1 are flashed using the 'Teensy Loader' application. Make sure you downloaded the MicroPython or CircuitPython .hex file.&lt;/p&gt;&lt;p&gt;See &lt;a href="{0}"&gt;the PJRC Teensy web site&lt;/a&gt; for details.&lt;/p&gt;</source>
       <translation>&lt;p&gt;Teensy 4.0 и Teensy 4.1 прошиваются с помощью приложения 'Teensy Loader'. Убедитесь, что вы загрузили .hex-файл MicroPython или CircuitPython.&lt;/p&gt;&lt;p&gt;Подробности см. на веб-сайте PJRC Teensy &lt;a href="{0}"&gt;&lt;/a&gt;.&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/TeensyDevices.py" line="338" />
-      <source>Start 'Teensy Loader'</source>
-      <translation>Запустить 'Teensy Loader'</translation>
-    </message>
-    <message>
       <location filename="../MicroPython/Devices/TeensyDevices.py" line="339" />
+      <source>Start 'Teensy Loader'</source>
+      <translation>Запустить 'Teensy Loader'</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/Devices/TeensyDevices.py" line="340" />
       <source>&lt;p&gt;The 'Teensy Loader' application &lt;b&gt;teensy&lt;/b&gt; could not be started. Ensure it is in the application search path or start it manually.&lt;/p&gt;</source>
       <translation>&lt;p&gt;Не удалось запустить приложение 'Teensy Loader' &lt;b&gt;teensy&lt;/b&gt;. Убедитесь, что он указан в пути поиска приложений, или запустите его вручную.&lt;/p&gt;</translation>
     </message>
--- a/src/eric7/i18n/eric7_tr.ts	Tue May 02 11:39:09 2023 +0200
+++ b/src/eric7/i18n/eric7_tr.ts	Thu May 04 17:58:52 2023 +0200
@@ -1791,77 +1791,77 @@
   <context>
     <name>BaseDevice</name>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="196" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="199" />
       <source>Device Data Not Available</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="197" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="200" />
       <source>&lt;p&gt;The device data is not available. Try to connect to the device again. Aborting...&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="250" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="253" />
       <source>Unsupported Device</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="260" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="263" />
       <source>REPL is not supported by this device.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="279" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="282" />
       <source>Plotter is not supported by this device.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="298" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="301" />
       <source>Running scripts is not supported by this device.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="317" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="320" />
       <source>File Manager is not supported by this device.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="372" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="375" />
       <source>Select Device Directory</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="373" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="376" />
       <source>Select the directory for the connected device:</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="519" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="528" />
       <source>Detected an error without indications.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="1464" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="1473" />
       <source>Operation not supported.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="1772" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="1781" />
       <source>Yes</source>
       <translation type="unfinished">Evet</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="1772" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="1781" />
       <source>No</source>
       <translation type="unfinished">Hayır</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="1774" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="1783" />
       <source>yes</source>
       <translation type="unfinished">evet</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="1774" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="1783" />
       <source>no</source>
       <translation type="unfinished">no</translation>
     </message>
@@ -4215,14 +4215,14 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1128" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1126" />
       <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="865" />
       <source>unknown ({0})</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1577" />
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1500" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1567" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1490" />
       <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1040" />
       <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="961" />
       <source>The device volume is not available.</source>
@@ -4235,94 +4235,94 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1539" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1529" />
       <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1005" />
       <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="977" />
       <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; exists already. Shall it be replaced?&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1546" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1536" />
       <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1012" />
       <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="984" />
       <source>Aborted</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1195" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1193" />
       <source>CircuitPython does not support setting the IPv4 parameters of the WiFi access point.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1266" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1262" />
       <source>CircuitPython does not support reporting of connected clients.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1675" />
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1350" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1663" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1342" />
       <source>Active</source>
       <translation type="unfinished">Aktif</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1681" />
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1351" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1669" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1343" />
       <source>Connected</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1352" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1344" />
       <source>IPv4 Address</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1353" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1345" />
       <source>Netmask</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1354" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1346" />
       <source>Gateway</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1355" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1347" />
       <source>DNS</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1677" />
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1356" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1665" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1348" />
       <source>MAC-Address</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1357" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1349" />
       <source>Chip Type</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1358" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1350" />
       <source>max. Sockets</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1538" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1528" />
       <source>Write Connect Script</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1676" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1664" />
       <source>Name</source>
       <translation type="unfinished">Adı</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1679" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1667" />
       <source>Address Type</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1682" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1670" />
       <source>Advertising</source>
       <translation type="unfinished" />
     </message>
@@ -20600,8 +20600,8 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1506" />
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1490" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1498" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1482" />
       <location filename="../MicroPython/Devices/EspDevices.py" line="196" />
       <source>Erase Flash</source>
       <translation type="unfinished" />
@@ -20612,7 +20612,7 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1591" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1583" />
       <location filename="../MicroPython/Devices/EspDevices.py" line="203" />
       <source>Flash Additional Firmware</source>
       <translation type="unfinished" />
@@ -20663,8 +20663,8 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1590" />
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1549" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1582" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1541" />
       <location filename="../MicroPython/Devices/EspDevices.py" line="363" />
       <source>'esptool write_flash' Output</source>
       <translation type="unfinished" />
@@ -20730,68 +20730,68 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="980" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="978" />
       <source>unknown ({0})</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1209" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1201" />
       <source>Active</source>
       <translation type="unfinished">Aktif</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1210" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1202" />
       <source>Name</source>
       <translation type="unfinished">Adı</translation>
     </message>
     <message>
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1203" />
+      <source>MAC-Address</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1206" />
+      <source>Address Type</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1207" />
+      <source>Public</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1207" />
+      <source>Random</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
       <location filename="../MicroPython/Devices/EspDevices.py" line="1211" />
-      <source>MAC-Address</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1214" />
-      <source>Address Type</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1215" />
-      <source>Public</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1215" />
-      <source>Random</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1219" />
       <source>Rx-Buffer</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1221" />
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1219" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1213" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1211" />
       <source>{0} Bytes</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1221" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1213" />
       <source>MTU</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1491" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1483" />
       <source>Shall the flash of the selected device really be erased?</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1505" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1497" />
       <source>'esptool erase_flash' Output</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1550" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1542" />
       <source>Flash µPy/CPy Firmware</source>
       <translation type="unfinished" />
     </message>
@@ -50403,15 +50403,16 @@
     </message>
     <message>
       <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
-      <source>Serial Link</source>
+      <source>Device Communication</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
-      <source>Timeout for Serial Link Communication:</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
+      <source>Serial Link Timeout:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
       <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
       <source>Enter the timout value</source>
       <translation type="unfinished" />
@@ -50419,11 +50420,22 @@
     <message>
       <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
       <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
+      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
       <source> s</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
+      <source>WebRepl Timeout:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
+      <source>Device Time</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
       <source>Select to synchronize the time after connection is established</source>
       <translation type="unfinished" />
     </message>
@@ -50516,8 +50528,8 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.py" line="354" />
-      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.py" line="337" />
+      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.py" line="364" />
+      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.py" line="347" />
       <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
       <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
       <source>Press to show the password</source>
@@ -50859,8 +50871,8 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.py" line="350" />
-      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.py" line="333" />
+      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.py" line="360" />
+      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.py" line="343" />
       <source>Press to hide the password</source>
       <translation type="unfinished" />
     </message>
@@ -50874,38 +50886,298 @@
     </message>
   </context>
   <context>
+    <name>MicroPythonReplEdit</name>
+    <message>
+      <location filename="../MicroPython/MicroPythonReplWidget.py" line="322" />
+      <source>Clear</source>
+      <translation type="unfinished">Temizle</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonReplWidget.py" line="327" />
+      <source>Copy</source>
+      <translation type="unfinished">Kopyala</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonReplWidget.py" line="333" />
+      <source>Paste</source>
+      <translation type="unfinished">Yapıştır</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonReplWidget.py" line="340" />
+      <source>Select All</source>
+      <translation type="unfinished">Hepsini Seç</translation>
+    </message>
+  </context>
+  <context>
+    <name>MicroPythonWebreplConnectionDialog</name>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.py" line="97" />
+      <source>Press to hide the password.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.ui" line="0" />
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.py" line="101" />
+      <source>Press to show the password.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.ui" line="0" />
+      <source>WebREPL Connection</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.ui" line="0" />
+      <source>Host:</source>
+      <translation type="unfinished">Sunucu:</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.ui" line="0" />
+      <source>Enter the host name or IPv4 address of the device.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.ui" line="0" />
+      <source>Port:</source>
+      <translation type="unfinished">Bağlantı Noktası:</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.ui" line="0" />
+      <source>Enter the port of the WebREPL (empty for default port 8266).</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.ui" line="0" />
+      <source>Password:</source>
+      <translation type="unfinished">Parola:</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.ui" line="0" />
+      <source>Enter the password for this device connection.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.ui" line="0" />
+      <source>Device Type:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.ui" line="0" />
+      <source>Select the device type</source>
+      <translation type="unfinished" />
+    </message>
+  </context>
+  <context>
+    <name>MicroPythonWebreplDeviceInterface</name>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplDeviceInterface.py" line="80" />
+      <source>WebREPL Password</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplDeviceInterface.py" line="81" />
+      <source>Enter the WebREPL password:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplDeviceInterface.py" line="100" />
+      <source>WebREPL Login</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplDeviceInterface.py" line="101" />
+      <source>The login to the selected device 'webrepl' failed. The given password may be incorrect.</source>
+      <translation type="unfinished" />
+    </message>
+  </context>
+  <context>
+    <name>MicroPythonWebreplUrlAddEditDialog</name>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>WebREPL URL</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Name:</source>
+      <translation type="unfinished">Adı:</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Enter a unique name for the WebREPL connection.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Description:</source>
+      <translation type="unfinished">Açıklama:</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Enter a short description to be shown in the selector.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Host:</source>
+      <translation type="unfinished">Sunucu:</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Enter the host name or IPv4 address of the device.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Port:</source>
+      <translation type="unfinished">Bağlantı Noktası:</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Enter the port of the WebREPL (empty for default port 8266).</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Password:</source>
+      <translation type="unfinished">Parola:</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Enter the password for this device connection.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Device Type:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Select the device type</source>
+      <translation type="unfinished" />
+    </message>
+  </context>
+  <context>
+    <name>MicroPythonWebreplUrlsConfigDialog</name>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.py" line="133" />
+      <source>Remove Selected WebREPL URLs</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.py" line="134" />
+      <source>Shall the selected WebREPL URLs really be removed?</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.py" line="150" />
+      <source>Remove All WebREPL URLs</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.py" line="151" />
+      <source>Shall all WebREPL URLs really be removed?</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>WebREPL URLs</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>Name</source>
+      <translation type="unfinished">Adı</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>Description</source>
+      <translation type="unfinished">Açıklama</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>URL</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>Press to add a new entry.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>Add...</source>
+      <translation type="unfinished">Ekle...</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>Press to edit the selected entry.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>Edit...</source>
+      <translation type="unfinished">Düzenle...</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>Press to remove the selected entries.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>Remove</source>
+      <translation type="unfinished">Kaldır</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>Press to remove all entries.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>Remove All</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>&lt;b&gt;Note:&lt;/b&gt; The name of an entry must be unique amongst the list.</source>
+      <translation type="unfinished" />
+    </message>
+  </context>
+  <context>
     <name>MicroPythonWidget</name>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="247" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="109" />
       <source>MicroPython Menu</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="306" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="145" />
       <source>&lt;h3&gt;The QtSerialPort package is not available.&lt;br/&gt;MicroPython support is deactivated.&lt;/h3&gt;</source>
       <translation type="unfinished" />
     </message>
     <message numerus="yes">
-      <location filename="../MicroPython/MicroPythonWidget.py" line="347" />
-      <source>%n supported device(s) detected.</source>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="173" />
+      <source>%n supported serial device(s) detected.</source>
       <translation type="unfinished">
         <numerusform />
-        <numerusform />
       </translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="361" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="187" />
       <source>{0} - {1} ({2})</source>
       <comment>board name, description, port name</comment>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="381" />
-      <source>No supported devices detected.</source>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="210" />
+      <source>No supported serial devices detected.</source>
       <translation type="unfinished" />
     </message>
     <message numerus="yes">
-      <location filename="../MicroPython/MicroPythonWidget.py" line="385" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="214" />
       <source>
 %n unknown device(s) for manual selection.</source>
       <translation type="unfinished">
@@ -50914,70 +51186,63 @@
       </translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="392" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="221" />
       <source>Manual Selection</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="456" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="427" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="232" />
+      <source>WebREPL (manual)</source>
+      <translation type="unfinished" />
+    </message>
+    <message numerus="yes">
+      <location filename="../MicroPython/MicroPythonWidget.py" line="251" />
+      <source>
+%n WebREPL connection(s) defined.</source>
+      <translation type="unfinished">
+        <numerusform />
+      </translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="311" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="282" />
       <source>Unknown MicroPython Device</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="428" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="283" />
       <source>&lt;p&gt;Detected these unknown serial devices&lt;/p&gt;&lt;ul&gt;&lt;li&gt;{0}&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Please report them together with the board name and a short description to &lt;a href="mailto:{1}"&gt; the eric bug reporting address&lt;/a&gt; if it is a MicroPython board.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="440" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="295" />
       <source>{0} (0x{1:04x}/0x{2:04x})</source>
       <comment>description, VId, PId</comment>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="457" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="312" />
       <source>Would you like to add them to the list of manually configured devices?</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="592" />
-      <source>Clear</source>
-      <translation type="unfinished">Temizle</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="597" />
-      <source>Copy</source>
-      <translation type="unfinished">Kopyala</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="603" />
-      <source>Paste</source>
-      <translation type="unfinished">Yapıştır</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="610" />
-      <source>Select All</source>
-      <translation type="unfinished">Hepsini Seç</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="636" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="451" />
       <source>Press to disconnect the current device</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../MicroPython/MicroPythonWidget.ui" line="0" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="641" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="456" />
       <source>Press to connect the selected device</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="673" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="488" />
       <source>No device attached</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="674" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="489" />
       <source>Please ensure the device is plugged into your computer and selected.
 
 It must have a version of MicroPython (or CircuitPython) flashed onto it before anything will work.
@@ -50986,353 +51251,358 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="703" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="518" />
       <source>Start REPL</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="704" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="519" />
       <source>&lt;p&gt;The REPL cannot be started.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1232" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1221" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="716" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="705" />
       <source>Serial Device Connect</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1222" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="706" />
       <source>&lt;p&gt;The device at serial port &lt;b&gt;{0}&lt;/b&gt; does not respond. It may not have a MicroPython firmware flashed.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1233" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="717" />
       <source>&lt;p&gt;Cannot connect to device at serial port &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1291" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1282" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1273" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="780" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="771" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="762" />
       <source>Run Script</source>
       <translation type="unfinished">Betiği Çalıştır</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1274" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="763" />
       <source>There is no editor open. Abort...</source>
       <translation type="unfinished" />
     </message>
     <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="772" />
+      <source>The current editor does not contain a script. Abort...</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="781" />
+      <source>&lt;p&gt;Cannot run script.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="817" />
+      <source>Start Chart</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="818" />
+      <source>&lt;p&gt;The Chart cannot be started.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="833" />
+      <source>µPy Chart</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="850" />
+      <source>Unsaved Chart Data</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="851" />
+      <source>The chart contains unsaved data.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="899" />
+      <source>Start File Manager</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="900" />
+      <source>&lt;p&gt;The File Manager cannot be started.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="920" />
+      <source>µPy Files</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="985" />
+      <source>Downloads</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1032" />
+      <source>Show Version</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1035" />
+      <source>Show Implementation</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1038" />
+      <source>Show Board Data</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1224" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1043" />
+      <source>Synchronize Time</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1046" />
+      <source>Show Device Time</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1048" />
+      <source>Show Local Time</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1051" />
+      <source>Show Time</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1055" />
+      <source>Show Builtin Modules</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1633" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1067" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1059" />
+      <source>Install Package</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1672" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1669" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1063" />
+      <source>Install Packages</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1448" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1073" />
+      <source>Compile Python File</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1472" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1463" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1077" />
+      <source>Compile Current Editor</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1098" />
+      <source>Download Firmware</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1105" />
+      <source>Show Documentation</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1108" />
+      <source>Convert To UF2</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1109" />
+      <source>Flash UF2 Device</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1112" />
+      <source>Manage Unknown Devices</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1115" />
+      <source>Ignored Serial Devices</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1118" />
+      <source>Configure</source>
+      <translation type="unfinished">Yapılandırma</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1127" />
+      <source>&lt;h3&gt;Device Version Information&lt;/h3&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1138" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1134" />
+      <source>Device Version Information</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1139" />
+      <source>No version information available.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1163" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1155" />
+      <source>unknown</source>
+      <translation type="unfinished">bilinmeyen</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1169" />
+      <source> ({0})</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1185" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1176" />
+      <source>Device Implementation Information</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1177" />
+      <source>&lt;h3&gt;Device Implementation Information&lt;/h3&gt;&lt;p&gt;This device contains &lt;b&gt;{0} {1}{2}&lt;/b&gt;.&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1186" />
+      <source>No device implementation information available.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1225" />
+      <source>&lt;p&gt;The time of the connected device was synchronized with the local time.&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1247" />
+      <source>&lt;h3&gt;Device Date and Time&lt;/h3&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{1}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1255" />
+      <source>&lt;h3&gt;Device Date and Time&lt;/h3&gt;&lt;p&gt;{0}&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1271" />
+      <source>Device Date and Time</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
       <location filename="../MicroPython/MicroPythonWidget.py" line="1283" />
-      <source>The current editor does not contain a script. Abort...</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1292" />
-      <source>&lt;p&gt;Cannot run script.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1328" />
-      <source>Start Chart</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1329" />
-      <source>&lt;p&gt;The Chart cannot be started.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1344" />
-      <source>µPy Chart</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1361" />
-      <source>Unsaved Chart Data</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1362" />
-      <source>The chart contains unsaved data.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1410" />
-      <source>Start File Manager</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1411" />
-      <source>&lt;p&gt;The File Manager cannot be started.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1431" />
-      <source>µPy Files</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1496" />
-      <source>Downloads</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1543" />
-      <source>Show Version</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1546" />
-      <source>Show Implementation</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1549" />
-      <source>Show Board Data</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1735" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1554" />
-      <source>Synchronize Time</source>
+      <source>Local Date and Time</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1284" />
+      <source>&lt;h3&gt;Local Date and Time&lt;/h3&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{1}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1325" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1308" />
+      <source>Date and Time</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1309" />
+      <source>&lt;table&gt;&lt;tr&gt;&lt;th&gt;&lt;/th&gt;&lt;th&gt;Local Date and Time&lt;/th&gt;&lt;th&gt;Device Date and Time&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td align='center'&gt;{0}&lt;/td&gt;&lt;td align='center'&gt;{2}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td align='center'&gt;{1}&lt;/td&gt;&lt;td align='center'&gt;{3}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1326" />
+      <source>&lt;table&gt;&lt;tr&gt;&lt;th&gt;Local Date and Time&lt;/th&gt;&lt;th&gt;Device Date and Time&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align='center'&gt;{0} {1}&lt;/td&gt;&lt;td align='center'&gt;{2}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1350" />
+      <source>Error handling device</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1351" />
+      <source>&lt;p&gt;There was an error communicating with the connected device.&lt;/p&gt;&lt;p&gt;Method: {0}&lt;/p&gt;&lt;p&gt;Message: {1}&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1393" />
+      <source>The MicroPython cross compiler &lt;b&gt;mpy-cross&lt;/b&gt; cannot be found. Ensure it is in the search path or configure it on the MicroPython configuration page.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1419" />
+      <source>Python Files (*.py);;All Files (*)</source>
+      <translation type="unfinished">Python Dosyaları (*.py);;Tüm Dosyalar (*)</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1429" />
+      <source>The Python file &lt;b&gt;{0}&lt;/b&gt; does not exist. Aborting...</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1438" />
+      <source>'mpy-cross' Output</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1464" />
+      <source>The current editor does not contain a Python file. Aborting...</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1556" />
+      <source>Add Unknown Devices</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../MicroPython/MicroPythonWidget.py" line="1557" />
-      <source>Show Device Time</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1559" />
-      <source>Show Local Time</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1562" />
-      <source>Show Time</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1566" />
-      <source>Show Builtin Modules</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2144" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1578" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1570" />
-      <source>Install Package</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2183" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2180" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1574" />
-      <source>Install Packages</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1959" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1584" />
-      <source>Compile Python File</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1983" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1974" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1588" />
-      <source>Compile Current Editor</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1609" />
-      <source>Download Firmware</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1616" />
-      <source>Show Documentation</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1619" />
-      <source>Convert To UF2</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1620" />
-      <source>Flash UF2 Device</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1623" />
-      <source>Manage Unknown Devices</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1626" />
-      <source>Ignored Serial Devices</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1629" />
-      <source>Configure</source>
-      <translation type="unfinished">Yapılandırma</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1638" />
-      <source>&lt;h3&gt;Device Version Information&lt;/h3&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1649" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1645" />
-      <source>Device Version Information</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1650" />
-      <source>No version information available.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1674" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1666" />
-      <source>unknown</source>
-      <translation type="unfinished">bilinmeyen</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1680" />
-      <source> ({0})</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1696" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1687" />
-      <source>Device Implementation Information</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1688" />
-      <source>&lt;h3&gt;Device Implementation Information&lt;/h3&gt;&lt;p&gt;This device contains &lt;b&gt;{0} {1}{2}&lt;/b&gt;.&lt;/p&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1697" />
-      <source>No device implementation information available.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1736" />
-      <source>&lt;p&gt;The time of the connected device was synchronized with the local time.&lt;/p&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1758" />
-      <source>&lt;h3&gt;Device Date and Time&lt;/h3&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{1}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1766" />
-      <source>&lt;h3&gt;Device Date and Time&lt;/h3&gt;&lt;p&gt;{0}&lt;/p&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1782" />
-      <source>Device Date and Time</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1794" />
-      <source>Local Date and Time</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1795" />
-      <source>&lt;h3&gt;Local Date and Time&lt;/h3&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{1}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1836" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1819" />
-      <source>Date and Time</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1820" />
-      <source>&lt;table&gt;&lt;tr&gt;&lt;th&gt;&lt;/th&gt;&lt;th&gt;Local Date and Time&lt;/th&gt;&lt;th&gt;Device Date and Time&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td align='center'&gt;{0}&lt;/td&gt;&lt;td align='center'&gt;{2}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td align='center'&gt;{1}&lt;/td&gt;&lt;td align='center'&gt;{3}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1837" />
-      <source>&lt;table&gt;&lt;tr&gt;&lt;th&gt;Local Date and Time&lt;/th&gt;&lt;th&gt;Device Date and Time&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align='center'&gt;{0} {1}&lt;/td&gt;&lt;td align='center'&gt;{2}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1861" />
-      <source>Error handling device</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1862" />
-      <source>&lt;p&gt;There was an error communicating with the connected device.&lt;/p&gt;&lt;p&gt;Method: {0}&lt;/p&gt;&lt;p&gt;Message: {1}&lt;/p&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1904" />
-      <source>The MicroPython cross compiler &lt;b&gt;mpy-cross&lt;/b&gt; cannot be found. Ensure it is in the search path or configure it on the MicroPython configuration page.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1930" />
-      <source>Python Files (*.py);;All Files (*)</source>
-      <translation type="unfinished">Python Dosyaları (*.py);;Tüm Dosyalar (*)</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1940" />
-      <source>The Python file &lt;b&gt;{0}&lt;/b&gt; does not exist. Aborting...</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1949" />
-      <source>'mpy-cross' Output</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1975" />
-      <source>The current editor does not contain a Python file. Aborting...</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2067" />
-      <source>Add Unknown Devices</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2068" />
       <source>Select the devices to be added:</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2117" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1606" />
       <source>Plus any modules on the filesystem.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2169" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1658" />
       <source>Package '{0}' was installed successfully.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2184" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1673" />
       <source>Enter the packages to be installed separated by whitespace:</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../MicroPython/MicroPythonWidget.ui" line="0" />
-      <source>Press to check for connected devices</source>
+      <source>Press to detect connected devices and repopulate the device selector.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.ui" line="0" />
+      <source>Press to edit the list of configured WebREPL connections.</source>
       <translation type="unfinished" />
     </message>
     <message>
@@ -51355,6 +51625,29 @@
       <source>Press to open a chart window to display data receive from the selected device</source>
       <translation type="unfinished" />
     </message>
+    <message numerus="yes">
+      <source>%n supported device(s) detected.</source>
+      <translation type="vanished">
+        <numerusform />
+        <numerusform />
+      </translation>
+    </message>
+    <message>
+      <source>Clear</source>
+      <translation type="vanished">Temizle</translation>
+    </message>
+    <message>
+      <source>Copy</source>
+      <translation type="vanished">Kopyala</translation>
+    </message>
+    <message>
+      <source>Paste</source>
+      <translation type="vanished">Yapıştır</translation>
+    </message>
+    <message>
+      <source>Select All</source>
+      <translation type="vanished">Hepsini Seç</translation>
+    </message>
   </context>
   <context>
     <name>MicrobitDevice</name>
@@ -51518,29 +51811,29 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="569" />
+      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="571" />
       <source>MicroPython Firmware for BBC micro:bit V1</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="601" />
-      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="588" />
-      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="573" />
+      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="603" />
+      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="590" />
+      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="575" />
       <source>DAPLink Firmware</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="580" />
+      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="582" />
       <source>MicroPython Firmware for BBC micro:bit V2</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="584" />
+      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="586" />
       <source>CircuitPython Firmware for BBC micro:bit V2</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="597" />
+      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="599" />
       <source>MicroPython Firmware</source>
       <translation type="unfinished" />
     </message>
@@ -58749,18 +59042,18 @@
   <context>
     <name>Preferences</name>
     <message>
-      <location filename="../Preferences/__init__.py" line="1815" />
+      <location filename="../Preferences/__init__.py" line="1817" />
       <source>Export Preferences</source>
       <translation>Seçenekleri Dışa Aktar</translation>
     </message>
     <message>
+      <location filename="../Preferences/__init__.py" line="1846" />
+      <location filename="../Preferences/__init__.py" line="1819" />
+      <source>Properties File (*.ini);;All Files (*)</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
       <location filename="../Preferences/__init__.py" line="1844" />
-      <location filename="../Preferences/__init__.py" line="1817" />
-      <source>Properties File (*.ini);;All Files (*)</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Preferences/__init__.py" line="1842" />
       <source>Import Preferences</source>
       <translation>Seçenekleri İçe Aktar</translation>
     </message>
@@ -69051,88 +69344,88 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="364" />
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="365" />
       <source>MicroPython Firmware</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="368" />
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="369" />
       <source>Pimoroni Pico Firmware</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="371" />
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="372" />
       <source>CircuitPython Firmware</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="375" />
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="376" />
       <source>CircuitPython Libraries</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="427" />
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="428" />
       <source>Set Country</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="983" />
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="618" />
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="978" />
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="617" />
       <source>unknown ({0})</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1093" />
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1088" />
       <source>Pico Wireless does not support setting the IPv4 parameters of the WiFi access point.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1168" />
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1161" />
       <source>Pico Wireless does not support reporting of connected clients.</source>
       <translation type="unfinished" />
     </message>
     <message>
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1248" />
+      <source>Active</source>
+      <translation type="unfinished">Aktif</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1249" />
+      <source>Connected</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1252" />
+      <source>Status</source>
+      <translation type="unfinished">Durum</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1256" />
+      <source>Hostname</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1257" />
+      <source>IPv4 Address</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1258" />
+      <source>Netmask</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
       <location filename="../MicroPython/Devices/RP2040Devices.py" line="1259" />
-      <source>Active</source>
-      <translation type="unfinished">Aktif</translation>
+      <source>Gateway</source>
+      <translation type="unfinished" />
     </message>
     <message>
       <location filename="../MicroPython/Devices/RP2040Devices.py" line="1260" />
-      <source>Connected</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1263" />
-      <source>Status</source>
-      <translation type="unfinished">Durum</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1267" />
-      <source>Hostname</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1268" />
-      <source>IPv4 Address</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1269" />
-      <source>Netmask</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1270" />
-      <source>Gateway</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1271" />
       <source>DNS</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1272" />
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1261" />
       <source>MAC-Address</source>
       <translation type="unfinished" />
     </message>
@@ -70058,19 +70351,19 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/SearchReplaceWidget.py" line="1045" />
+      <location filename="../QScintilla/SearchReplaceWidget.py" line="1046" />
       <location filename="../QScintilla/SearchReplaceWidget.py" line="597" />
       <location filename="../QScintilla/SearchReplaceWidget.py" line="559" />
       <source>'{0}' was not found.</source>
       <translation>'{0}' bulunamadı.</translation>
     </message>
     <message>
-      <location filename="../QScintilla/SearchReplaceWidget.py" line="1198" />
+      <location filename="../QScintilla/SearchReplaceWidget.py" line="1199" />
       <source>Replaced {0} occurrences.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/SearchReplaceWidget.py" line="1204" />
+      <location filename="../QScintilla/SearchReplaceWidget.py" line="1205" />
       <source>Nothing replaced because '{0}' was not found.</source>
       <translation type="unfinished" />
     </message>
@@ -83189,7 +83482,7 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/TeensyDevices.py" line="315" />
+      <location filename="../MicroPython/Devices/TeensyDevices.py" line="316" />
       <location filename="../MicroPython/Devices/TeensyDevices.py" line="154" />
       <source>Flash MicroPython Firmware</source>
       <translation type="unfinished" />
@@ -83230,17 +83523,17 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/TeensyDevices.py" line="316" />
+      <location filename="../MicroPython/Devices/TeensyDevices.py" line="317" />
       <source>&lt;p&gt;Teensy 4.0 and Teensy 4.1 are flashed using the 'Teensy Loader' application. Make sure you downloaded the MicroPython or CircuitPython .hex file.&lt;/p&gt;&lt;p&gt;See &lt;a href="{0}"&gt;the PJRC Teensy web site&lt;/a&gt; for details.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/TeensyDevices.py" line="338" />
-      <source>Start 'Teensy Loader'</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../MicroPython/Devices/TeensyDevices.py" line="339" />
+      <source>Start 'Teensy Loader'</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/Devices/TeensyDevices.py" line="340" />
       <source>&lt;p&gt;The 'Teensy Loader' application &lt;b&gt;teensy&lt;/b&gt; could not be started. Ensure it is in the application search path or start it manually.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
--- a/src/eric7/i18n/eric7_zh_CN.ts	Tue May 02 11:39:09 2023 +0200
+++ b/src/eric7/i18n/eric7_zh_CN.ts	Thu May 04 17:58:52 2023 +0200
@@ -1819,77 +1819,77 @@
   <context>
     <name>BaseDevice</name>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="196" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="199" />
       <source>Device Data Not Available</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="197" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="200" />
       <source>&lt;p&gt;The device data is not available. Try to connect to the device again. Aborting...&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="250" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="253" />
       <source>Unsupported Device</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="260" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="263" />
       <source>REPL is not supported by this device.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="279" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="282" />
       <source>Plotter is not supported by this device.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="298" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="301" />
       <source>Running scripts is not supported by this device.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="317" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="320" />
       <source>File Manager is not supported by this device.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="372" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="375" />
       <source>Select Device Directory</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="373" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="376" />
       <source>Select the directory for the connected device:</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="519" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="528" />
       <source>Detected an error without indications.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="1464" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="1473" />
       <source>Operation not supported.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="1772" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="1781" />
       <source>Yes</source>
       <translation type="unfinished">是</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="1772" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="1781" />
       <source>No</source>
       <translation type="unfinished">否</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="1774" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="1783" />
       <source>yes</source>
       <translation type="unfinished">是</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/DeviceBase.py" line="1774" />
+      <location filename="../MicroPython/Devices/DeviceBase.py" line="1783" />
       <source>no</source>
       <translation type="unfinished">否</translation>
     </message>
@@ -4249,14 +4249,14 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1128" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1126" />
       <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="865" />
       <source>unknown ({0})</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1577" />
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1500" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1567" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1490" />
       <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1040" />
       <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="961" />
       <source>The device volume is not available.</source>
@@ -4269,94 +4269,94 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1539" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1529" />
       <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1005" />
       <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="977" />
       <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; exists already. Shall it be replaced?&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1546" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1536" />
       <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1012" />
       <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="984" />
       <source>Aborted</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1195" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1193" />
       <source>CircuitPython does not support setting the IPv4 parameters of the WiFi access point.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1266" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1262" />
       <source>CircuitPython does not support reporting of connected clients.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1675" />
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1350" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1663" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1342" />
       <source>Active</source>
       <translation type="unfinished">活动的</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1681" />
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1351" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1669" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1343" />
       <source>Connected</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1352" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1344" />
       <source>IPv4 Address</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1353" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1345" />
       <source>Netmask</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1354" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1346" />
       <source>Gateway</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1355" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1347" />
       <source>DNS</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1677" />
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1356" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1665" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1348" />
       <source>MAC-Address</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1357" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1349" />
       <source>Chip Type</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1358" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1350" />
       <source>max. Sockets</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1538" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1528" />
       <source>Write Connect Script</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1676" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1664" />
       <source>Name</source>
       <translation type="unfinished">名称</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1679" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1667" />
       <source>Address Type</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1682" />
+      <location filename="../MicroPython/Devices/CircuitPythonDevices.py" line="1670" />
       <source>Advertising</source>
       <translation type="unfinished" />
     </message>
@@ -20676,8 +20676,8 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1506" />
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1490" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1498" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1482" />
       <location filename="../MicroPython/Devices/EspDevices.py" line="196" />
       <source>Erase Flash</source>
       <translation type="unfinished" />
@@ -20688,7 +20688,7 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1591" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1583" />
       <location filename="../MicroPython/Devices/EspDevices.py" line="203" />
       <source>Flash Additional Firmware</source>
       <translation type="unfinished" />
@@ -20739,8 +20739,8 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1590" />
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1549" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1582" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1541" />
       <location filename="../MicroPython/Devices/EspDevices.py" line="363" />
       <source>'esptool write_flash' Output</source>
       <translation type="unfinished" />
@@ -20806,68 +20806,68 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="980" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="978" />
       <source>unknown ({0})</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1209" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1201" />
       <source>Active</source>
       <translation type="unfinished">活动的</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1210" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1202" />
       <source>Name</source>
       <translation type="unfinished">名称</translation>
     </message>
     <message>
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1203" />
+      <source>MAC-Address</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1206" />
+      <source>Address Type</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1207" />
+      <source>Public</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1207" />
+      <source>Random</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
       <location filename="../MicroPython/Devices/EspDevices.py" line="1211" />
-      <source>MAC-Address</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1214" />
-      <source>Address Type</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1215" />
-      <source>Public</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1215" />
-      <source>Random</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1219" />
       <source>Rx-Buffer</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1221" />
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1219" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1213" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1211" />
       <source>{0} Bytes</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1221" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1213" />
       <source>MTU</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1491" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1483" />
       <source>Shall the flash of the selected device really be erased?</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1505" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1497" />
       <source>'esptool erase_flash' Output</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/EspDevices.py" line="1550" />
+      <location filename="../MicroPython/Devices/EspDevices.py" line="1542" />
       <source>Flash µPy/CPy Firmware</source>
       <translation type="unfinished" />
     </message>
@@ -50509,15 +50509,16 @@
     </message>
     <message>
       <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
-      <source>Serial Link</source>
+      <source>Device Communication</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
-      <source>Timeout for Serial Link Communication:</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
+      <source>Serial Link Timeout:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
       <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
       <source>Enter the timout value</source>
       <translation type="unfinished" />
@@ -50525,11 +50526,22 @@
     <message>
       <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
       <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
+      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
       <source> s</source>
       <translation type="unfinished"> 秒</translation>
     </message>
     <message>
       <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
+      <source>WebRepl Timeout:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
+      <source>Device Time</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
       <source>Select to synchronize the time after connection is established</source>
       <translation type="unfinished" />
     </message>
@@ -50622,8 +50634,8 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.py" line="354" />
-      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.py" line="337" />
+      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.py" line="364" />
+      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.py" line="347" />
       <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
       <location filename="../Preferences/ConfigurationPages/MicroPythonPage.ui" line="0" />
       <source>Press to show the password</source>
@@ -50965,8 +50977,8 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.py" line="350" />
-      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.py" line="333" />
+      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.py" line="360" />
+      <location filename="../Preferences/ConfigurationPages/MicroPythonPage.py" line="343" />
       <source>Press to hide the password</source>
       <translation type="unfinished" />
     </message>
@@ -50980,37 +50992,298 @@
     </message>
   </context>
   <context>
+    <name>MicroPythonReplEdit</name>
+    <message>
+      <location filename="../MicroPython/MicroPythonReplWidget.py" line="322" />
+      <source>Clear</source>
+      <translation type="unfinished">清除</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonReplWidget.py" line="327" />
+      <source>Copy</source>
+      <translation type="unfinished">复制</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonReplWidget.py" line="333" />
+      <source>Paste</source>
+      <translation type="unfinished">粘贴</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonReplWidget.py" line="340" />
+      <source>Select All</source>
+      <translation type="unfinished">全选</translation>
+    </message>
+  </context>
+  <context>
+    <name>MicroPythonWebreplConnectionDialog</name>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.py" line="97" />
+      <source>Press to hide the password.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.ui" line="0" />
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.py" line="101" />
+      <source>Press to show the password.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.ui" line="0" />
+      <source>WebREPL Connection</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.ui" line="0" />
+      <source>Host:</source>
+      <translation type="unfinished">主机:</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.ui" line="0" />
+      <source>Enter the host name or IPv4 address of the device.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.ui" line="0" />
+      <source>Port:</source>
+      <translation type="unfinished">端口:</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.ui" line="0" />
+      <source>Enter the port of the WebREPL (empty for default port 8266).</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.ui" line="0" />
+      <source>Password:</source>
+      <translation type="unfinished">密码:</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.ui" line="0" />
+      <source>Enter the password for this device connection.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.ui" line="0" />
+      <source>Device Type:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplConnectionDialog.ui" line="0" />
+      <source>Select the device type</source>
+      <translation type="unfinished" />
+    </message>
+  </context>
+  <context>
+    <name>MicroPythonWebreplDeviceInterface</name>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplDeviceInterface.py" line="80" />
+      <source>WebREPL Password</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplDeviceInterface.py" line="81" />
+      <source>Enter the WebREPL password:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplDeviceInterface.py" line="100" />
+      <source>WebREPL Login</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplDeviceInterface.py" line="101" />
+      <source>The login to the selected device 'webrepl' failed. The given password may be incorrect.</source>
+      <translation type="unfinished" />
+    </message>
+  </context>
+  <context>
+    <name>MicroPythonWebreplUrlAddEditDialog</name>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>WebREPL URL</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Name:</source>
+      <translation type="unfinished">名称:</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Enter a unique name for the WebREPL connection.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Description:</source>
+      <translation type="unfinished">描述:</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Enter a short description to be shown in the selector.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Host:</source>
+      <translation type="unfinished">主机:</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Enter the host name or IPv4 address of the device.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Port:</source>
+      <translation type="unfinished">端口:</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Enter the port of the WebREPL (empty for default port 8266).</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Password:</source>
+      <translation type="unfinished">密码:</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Enter the password for this device connection.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Device Type:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlAddEditDialog.ui" line="0" />
+      <source>Select the device type</source>
+      <translation type="unfinished" />
+    </message>
+  </context>
+  <context>
+    <name>MicroPythonWebreplUrlsConfigDialog</name>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.py" line="133" />
+      <source>Remove Selected WebREPL URLs</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.py" line="134" />
+      <source>Shall the selected WebREPL URLs really be removed?</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.py" line="150" />
+      <source>Remove All WebREPL URLs</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.py" line="151" />
+      <source>Shall all WebREPL URLs really be removed?</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>WebREPL URLs</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>Name</source>
+      <translation type="unfinished">名称</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>Description</source>
+      <translation type="unfinished">描述</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>URL</source>
+      <translation type="unfinished">URL</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>Press to add a new entry.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>Add...</source>
+      <translation type="unfinished">添加…</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>Press to edit the selected entry.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>Edit...</source>
+      <translation type="unfinished">编辑…</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>Press to remove the selected entries.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>Remove</source>
+      <translation type="unfinished">移除</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>Press to remove all entries.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>Remove All</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWebreplUrlsConfigDialog.ui" line="0" />
+      <source>&lt;b&gt;Note:&lt;/b&gt; The name of an entry must be unique amongst the list.</source>
+      <translation type="unfinished" />
+    </message>
+  </context>
+  <context>
     <name>MicroPythonWidget</name>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="247" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="109" />
       <source>MicroPython Menu</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="306" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="145" />
       <source>&lt;h3&gt;The QtSerialPort package is not available.&lt;br/&gt;MicroPython support is deactivated.&lt;/h3&gt;</source>
       <translation type="unfinished" />
     </message>
     <message numerus="yes">
-      <location filename="../MicroPython/MicroPythonWidget.py" line="347" />
-      <source>%n supported device(s) detected.</source>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="173" />
+      <source>%n supported serial device(s) detected.</source>
       <translation type="unfinished">
         <numerusform />
       </translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="361" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="187" />
       <source>{0} - {1} ({2})</source>
       <comment>board name, description, port name</comment>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="381" />
-      <source>No supported devices detected.</source>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="210" />
+      <source>No supported serial devices detected.</source>
       <translation type="unfinished" />
     </message>
     <message numerus="yes">
-      <location filename="../MicroPython/MicroPythonWidget.py" line="385" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="214" />
       <source>
 %n unknown device(s) for manual selection.</source>
       <translation type="unfinished">
@@ -51018,70 +51291,63 @@
       </translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="392" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="221" />
       <source>Manual Selection</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="456" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="427" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="232" />
+      <source>WebREPL (manual)</source>
+      <translation type="unfinished" />
+    </message>
+    <message numerus="yes">
+      <location filename="../MicroPython/MicroPythonWidget.py" line="251" />
+      <source>
+%n WebREPL connection(s) defined.</source>
+      <translation type="unfinished">
+        <numerusform />
+      </translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="311" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="282" />
       <source>Unknown MicroPython Device</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="428" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="283" />
       <source>&lt;p&gt;Detected these unknown serial devices&lt;/p&gt;&lt;ul&gt;&lt;li&gt;{0}&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Please report them together with the board name and a short description to &lt;a href="mailto:{1}"&gt; the eric bug reporting address&lt;/a&gt; if it is a MicroPython board.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="440" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="295" />
       <source>{0} (0x{1:04x}/0x{2:04x})</source>
       <comment>description, VId, PId</comment>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="457" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="312" />
       <source>Would you like to add them to the list of manually configured devices?</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="592" />
-      <source>Clear</source>
-      <translation type="unfinished">清除</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="597" />
-      <source>Copy</source>
-      <translation type="unfinished">复制</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="603" />
-      <source>Paste</source>
-      <translation type="unfinished">粘贴</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="610" />
-      <source>Select All</source>
-      <translation type="unfinished">全选</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="636" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="451" />
       <source>Press to disconnect the current device</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../MicroPython/MicroPythonWidget.ui" line="0" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="641" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="456" />
       <source>Press to connect the selected device</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="673" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="488" />
       <source>No device attached</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="674" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="489" />
       <source>Please ensure the device is plugged into your computer and selected.
 
 It must have a version of MicroPython (or CircuitPython) flashed onto it before anything will work.
@@ -51090,353 +51356,358 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="703" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="518" />
       <source>Start REPL</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="704" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="519" />
       <source>&lt;p&gt;The REPL cannot be started.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1232" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1221" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="716" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="705" />
       <source>Serial Device Connect</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1222" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="706" />
       <source>&lt;p&gt;The device at serial port &lt;b&gt;{0}&lt;/b&gt; does not respond. It may not have a MicroPython firmware flashed.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1233" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="717" />
       <source>&lt;p&gt;Cannot connect to device at serial port &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1291" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1282" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1273" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="780" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="771" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="762" />
       <source>Run Script</source>
       <translation type="unfinished">运行脚本</translation>
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1274" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="763" />
       <source>There is no editor open. Abort...</source>
       <translation type="unfinished" />
     </message>
     <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="772" />
+      <source>The current editor does not contain a script. Abort...</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="781" />
+      <source>&lt;p&gt;Cannot run script.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="817" />
+      <source>Start Chart</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="818" />
+      <source>&lt;p&gt;The Chart cannot be started.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="833" />
+      <source>µPy Chart</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="850" />
+      <source>Unsaved Chart Data</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="851" />
+      <source>The chart contains unsaved data.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="899" />
+      <source>Start File Manager</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="900" />
+      <source>&lt;p&gt;The File Manager cannot be started.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="920" />
+      <source>µPy Files</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="985" />
+      <source>Downloads</source>
+      <translation type="unfinished">下载</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1032" />
+      <source>Show Version</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1035" />
+      <source>Show Implementation</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1038" />
+      <source>Show Board Data</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1224" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1043" />
+      <source>Synchronize Time</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1046" />
+      <source>Show Device Time</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1048" />
+      <source>Show Local Time</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1051" />
+      <source>Show Time</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1055" />
+      <source>Show Builtin Modules</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1633" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1067" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1059" />
+      <source>Install Package</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1672" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1669" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1063" />
+      <source>Install Packages</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1448" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1073" />
+      <source>Compile Python File</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1472" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1463" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1077" />
+      <source>Compile Current Editor</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1098" />
+      <source>Download Firmware</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1105" />
+      <source>Show Documentation</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1108" />
+      <source>Convert To UF2</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1109" />
+      <source>Flash UF2 Device</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1112" />
+      <source>Manage Unknown Devices</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1115" />
+      <source>Ignored Serial Devices</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1118" />
+      <source>Configure</source>
+      <translation type="unfinished">配置</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1127" />
+      <source>&lt;h3&gt;Device Version Information&lt;/h3&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1138" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1134" />
+      <source>Device Version Information</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1139" />
+      <source>No version information available.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1163" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1155" />
+      <source>unknown</source>
+      <translation type="unfinished">未知</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1169" />
+      <source> ({0})</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1185" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1176" />
+      <source>Device Implementation Information</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1177" />
+      <source>&lt;h3&gt;Device Implementation Information&lt;/h3&gt;&lt;p&gt;This device contains &lt;b&gt;{0} {1}{2}&lt;/b&gt;.&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1186" />
+      <source>No device implementation information available.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1225" />
+      <source>&lt;p&gt;The time of the connected device was synchronized with the local time.&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1247" />
+      <source>&lt;h3&gt;Device Date and Time&lt;/h3&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{1}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1255" />
+      <source>&lt;h3&gt;Device Date and Time&lt;/h3&gt;&lt;p&gt;{0}&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1271" />
+      <source>Device Date and Time</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
       <location filename="../MicroPython/MicroPythonWidget.py" line="1283" />
-      <source>The current editor does not contain a script. Abort...</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1292" />
-      <source>&lt;p&gt;Cannot run script.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1328" />
-      <source>Start Chart</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1329" />
-      <source>&lt;p&gt;The Chart cannot be started.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1344" />
-      <source>µPy Chart</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1361" />
-      <source>Unsaved Chart Data</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1362" />
-      <source>The chart contains unsaved data.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1410" />
-      <source>Start File Manager</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1411" />
-      <source>&lt;p&gt;The File Manager cannot be started.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1431" />
-      <source>µPy Files</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1496" />
-      <source>Downloads</source>
-      <translation type="unfinished">下载</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1543" />
-      <source>Show Version</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1546" />
-      <source>Show Implementation</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1549" />
-      <source>Show Board Data</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1735" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1554" />
-      <source>Synchronize Time</source>
+      <source>Local Date and Time</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1284" />
+      <source>&lt;h3&gt;Local Date and Time&lt;/h3&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{1}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1325" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1308" />
+      <source>Date and Time</source>
+      <translation type="unfinished">日期和时间</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1309" />
+      <source>&lt;table&gt;&lt;tr&gt;&lt;th&gt;&lt;/th&gt;&lt;th&gt;Local Date and Time&lt;/th&gt;&lt;th&gt;Device Date and Time&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td align='center'&gt;{0}&lt;/td&gt;&lt;td align='center'&gt;{2}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td align='center'&gt;{1}&lt;/td&gt;&lt;td align='center'&gt;{3}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1326" />
+      <source>&lt;table&gt;&lt;tr&gt;&lt;th&gt;Local Date and Time&lt;/th&gt;&lt;th&gt;Device Date and Time&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align='center'&gt;{0} {1}&lt;/td&gt;&lt;td align='center'&gt;{2}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1350" />
+      <source>Error handling device</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1351" />
+      <source>&lt;p&gt;There was an error communicating with the connected device.&lt;/p&gt;&lt;p&gt;Method: {0}&lt;/p&gt;&lt;p&gt;Message: {1}&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1393" />
+      <source>The MicroPython cross compiler &lt;b&gt;mpy-cross&lt;/b&gt; cannot be found. Ensure it is in the search path or configure it on the MicroPython configuration page.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1419" />
+      <source>Python Files (*.py);;All Files (*)</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1429" />
+      <source>The Python file &lt;b&gt;{0}&lt;/b&gt; does not exist. Aborting...</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1438" />
+      <source>'mpy-cross' Output</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1464" />
+      <source>The current editor does not contain a Python file. Aborting...</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1556" />
+      <source>Add Unknown Devices</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../MicroPython/MicroPythonWidget.py" line="1557" />
-      <source>Show Device Time</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1559" />
-      <source>Show Local Time</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1562" />
-      <source>Show Time</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1566" />
-      <source>Show Builtin Modules</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2144" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1578" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1570" />
-      <source>Install Package</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2183" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2180" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1574" />
-      <source>Install Packages</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1959" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1584" />
-      <source>Compile Python File</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1983" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1974" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1588" />
-      <source>Compile Current Editor</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1609" />
-      <source>Download Firmware</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1616" />
-      <source>Show Documentation</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1619" />
-      <source>Convert To UF2</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1620" />
-      <source>Flash UF2 Device</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1623" />
-      <source>Manage Unknown Devices</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1626" />
-      <source>Ignored Serial Devices</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1629" />
-      <source>Configure</source>
-      <translation type="unfinished">配置</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1638" />
-      <source>&lt;h3&gt;Device Version Information&lt;/h3&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1649" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1645" />
-      <source>Device Version Information</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1650" />
-      <source>No version information available.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1674" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1666" />
-      <source>unknown</source>
-      <translation type="unfinished">未知</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1680" />
-      <source> ({0})</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1696" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1687" />
-      <source>Device Implementation Information</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1688" />
-      <source>&lt;h3&gt;Device Implementation Information&lt;/h3&gt;&lt;p&gt;This device contains &lt;b&gt;{0} {1}{2}&lt;/b&gt;.&lt;/p&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1697" />
-      <source>No device implementation information available.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1736" />
-      <source>&lt;p&gt;The time of the connected device was synchronized with the local time.&lt;/p&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1758" />
-      <source>&lt;h3&gt;Device Date and Time&lt;/h3&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{1}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1766" />
-      <source>&lt;h3&gt;Device Date and Time&lt;/h3&gt;&lt;p&gt;{0}&lt;/p&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1782" />
-      <source>Device Date and Time</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1794" />
-      <source>Local Date and Time</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1795" />
-      <source>&lt;h3&gt;Local Date and Time&lt;/h3&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{1}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1836" />
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1819" />
-      <source>Date and Time</source>
-      <translation type="unfinished">日期和时间</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1820" />
-      <source>&lt;table&gt;&lt;tr&gt;&lt;th&gt;&lt;/th&gt;&lt;th&gt;Local Date and Time&lt;/th&gt;&lt;th&gt;Device Date and Time&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td align='center'&gt;{0}&lt;/td&gt;&lt;td align='center'&gt;{2}&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Time&lt;/b&gt;&lt;/td&gt;&lt;td align='center'&gt;{1}&lt;/td&gt;&lt;td align='center'&gt;{3}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1837" />
-      <source>&lt;table&gt;&lt;tr&gt;&lt;th&gt;Local Date and Time&lt;/th&gt;&lt;th&gt;Device Date and Time&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align='center'&gt;{0} {1}&lt;/td&gt;&lt;td align='center'&gt;{2}&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1861" />
-      <source>Error handling device</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1862" />
-      <source>&lt;p&gt;There was an error communicating with the connected device.&lt;/p&gt;&lt;p&gt;Method: {0}&lt;/p&gt;&lt;p&gt;Message: {1}&lt;/p&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1904" />
-      <source>The MicroPython cross compiler &lt;b&gt;mpy-cross&lt;/b&gt; cannot be found. Ensure it is in the search path or configure it on the MicroPython configuration page.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1930" />
-      <source>Python Files (*.py);;All Files (*)</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1940" />
-      <source>The Python file &lt;b&gt;{0}&lt;/b&gt; does not exist. Aborting...</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1949" />
-      <source>'mpy-cross' Output</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="1975" />
-      <source>The current editor does not contain a Python file. Aborting...</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2067" />
-      <source>Add Unknown Devices</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2068" />
       <source>Select the devices to be added:</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2117" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1606" />
       <source>Plus any modules on the filesystem.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2169" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1658" />
       <source>Package '{0}' was installed successfully.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/MicroPythonWidget.py" line="2184" />
+      <location filename="../MicroPython/MicroPythonWidget.py" line="1673" />
       <source>Enter the packages to be installed separated by whitespace:</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../MicroPython/MicroPythonWidget.ui" line="0" />
-      <source>Press to check for connected devices</source>
+      <source>Press to detect connected devices and repopulate the device selector.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/MicroPythonWidget.ui" line="0" />
+      <source>Press to edit the list of configured WebREPL connections.</source>
       <translation type="unfinished" />
     </message>
     <message>
@@ -51459,6 +51730,28 @@
       <source>Press to open a chart window to display data receive from the selected device</source>
       <translation type="unfinished" />
     </message>
+    <message numerus="yes">
+      <source>%n supported device(s) detected.</source>
+      <translation type="vanished">
+        <numerusform />
+      </translation>
+    </message>
+    <message>
+      <source>Clear</source>
+      <translation type="vanished">清除</translation>
+    </message>
+    <message>
+      <source>Copy</source>
+      <translation type="vanished">复制</translation>
+    </message>
+    <message>
+      <source>Paste</source>
+      <translation type="vanished">粘贴</translation>
+    </message>
+    <message>
+      <source>Select All</source>
+      <translation type="vanished">全选</translation>
+    </message>
   </context>
   <context>
     <name>MicrobitDevice</name>
@@ -51622,29 +51915,29 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="569" />
+      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="571" />
       <source>MicroPython Firmware for BBC micro:bit V1</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="601" />
-      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="588" />
-      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="573" />
+      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="603" />
+      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="590" />
+      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="575" />
       <source>DAPLink Firmware</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="580" />
+      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="582" />
       <source>MicroPython Firmware for BBC micro:bit V2</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="584" />
+      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="586" />
       <source>CircuitPython Firmware for BBC micro:bit V2</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="597" />
+      <location filename="../MicroPython/Devices/MicrobitDevices.py" line="599" />
       <source>MicroPython Firmware</source>
       <translation type="unfinished" />
     </message>
@@ -58878,18 +59171,18 @@
   <context>
     <name>Preferences</name>
     <message>
-      <location filename="../Preferences/__init__.py" line="1815" />
+      <location filename="../Preferences/__init__.py" line="1817" />
       <source>Export Preferences</source>
       <translation>导出首选项</translation>
     </message>
     <message>
+      <location filename="../Preferences/__init__.py" line="1846" />
+      <location filename="../Preferences/__init__.py" line="1819" />
+      <source>Properties File (*.ini);;All Files (*)</source>
+      <translation>属性文件 (*.ini);;所有文件 (*)</translation>
+    </message>
+    <message>
       <location filename="../Preferences/__init__.py" line="1844" />
-      <location filename="../Preferences/__init__.py" line="1817" />
-      <source>Properties File (*.ini);;All Files (*)</source>
-      <translation>属性文件 (*.ini);;所有文件 (*)</translation>
-    </message>
-    <message>
-      <location filename="../Preferences/__init__.py" line="1842" />
       <source>Import Preferences</source>
       <translation>导入首选项</translation>
     </message>
@@ -69301,88 +69594,88 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="364" />
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="365" />
       <source>MicroPython Firmware</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="368" />
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="369" />
       <source>Pimoroni Pico Firmware</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="371" />
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="372" />
       <source>CircuitPython Firmware</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="375" />
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="376" />
       <source>CircuitPython Libraries</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="427" />
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="428" />
       <source>Set Country</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="983" />
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="618" />
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="978" />
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="617" />
       <source>unknown ({0})</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1093" />
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1088" />
       <source>Pico Wireless does not support setting the IPv4 parameters of the WiFi access point.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1168" />
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1161" />
       <source>Pico Wireless does not support reporting of connected clients.</source>
       <translation type="unfinished" />
     </message>
     <message>
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1248" />
+      <source>Active</source>
+      <translation type="unfinished">活动的</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1249" />
+      <source>Connected</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1252" />
+      <source>Status</source>
+      <translation type="unfinished">状态</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1256" />
+      <source>Hostname</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1257" />
+      <source>IPv4 Address</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1258" />
+      <source>Netmask</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
       <location filename="../MicroPython/Devices/RP2040Devices.py" line="1259" />
-      <source>Active</source>
-      <translation type="unfinished">活动的</translation>
+      <source>Gateway</source>
+      <translation type="unfinished" />
     </message>
     <message>
       <location filename="../MicroPython/Devices/RP2040Devices.py" line="1260" />
-      <source>Connected</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1263" />
-      <source>Status</source>
-      <translation type="unfinished">状态</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1267" />
-      <source>Hostname</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1268" />
-      <source>IPv4 Address</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1269" />
-      <source>Netmask</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1270" />
-      <source>Gateway</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1271" />
       <source>DNS</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1272" />
+      <location filename="../MicroPython/Devices/RP2040Devices.py" line="1261" />
       <source>MAC-Address</source>
       <translation type="unfinished" />
     </message>
@@ -70316,19 +70609,19 @@
       <translation>替换全部</translation>
     </message>
     <message>
-      <location filename="../QScintilla/SearchReplaceWidget.py" line="1045" />
+      <location filename="../QScintilla/SearchReplaceWidget.py" line="1046" />
       <location filename="../QScintilla/SearchReplaceWidget.py" line="597" />
       <location filename="../QScintilla/SearchReplaceWidget.py" line="559" />
       <source>'{0}' was not found.</source>
       <translation>“{0}”未找到。</translation>
     </message>
     <message>
-      <location filename="../QScintilla/SearchReplaceWidget.py" line="1198" />
+      <location filename="../QScintilla/SearchReplaceWidget.py" line="1199" />
       <source>Replaced {0} occurrences.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/SearchReplaceWidget.py" line="1204" />
+      <location filename="../QScintilla/SearchReplaceWidget.py" line="1205" />
       <source>Nothing replaced because '{0}' was not found.</source>
       <translation type="unfinished" />
     </message>
@@ -83513,7 +83806,7 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/TeensyDevices.py" line="315" />
+      <location filename="../MicroPython/Devices/TeensyDevices.py" line="316" />
       <location filename="../MicroPython/Devices/TeensyDevices.py" line="154" />
       <source>Flash MicroPython Firmware</source>
       <translation type="unfinished" />
@@ -83554,17 +83847,17 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/TeensyDevices.py" line="316" />
+      <location filename="../MicroPython/Devices/TeensyDevices.py" line="317" />
       <source>&lt;p&gt;Teensy 4.0 and Teensy 4.1 are flashed using the 'Teensy Loader' application. Make sure you downloaded the MicroPython or CircuitPython .hex file.&lt;/p&gt;&lt;p&gt;See &lt;a href="{0}"&gt;the PJRC Teensy web site&lt;/a&gt; for details.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/TeensyDevices.py" line="338" />
-      <source>Start 'Teensy Loader'</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../MicroPython/Devices/TeensyDevices.py" line="339" />
+      <source>Start 'Teensy Loader'</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/Devices/TeensyDevices.py" line="340" />
       <source>&lt;p&gt;The 'Teensy Loader' application &lt;b&gt;teensy&lt;/b&gt; could not be started. Ensure it is in the application search path or start it manually.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>

eric ide

mercurial