Merged with default branch to prepare a new release. maintenance release-21.02

Mon, 01 Feb 2021 10:38:16 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Mon, 01 Feb 2021 10:38:16 +0100
branch
maintenance
changeset 8043
0acf98cd089a
parent 7991
866adc8c315b (current diff)
parent 8042
3ded0527855a (diff)
child 8044
874fdd14d3a2

Merged with default branch to prepare a new release.

docs/changelog file | annotate | diff | comparison | revisions
eric6.e4p file | annotate | diff | comparison | revisions
eric6/APIs/Python3/eric6.api file | annotate | diff | comparison | revisions
eric6/DebugClients/Python/AsyncFile.py file | annotate | diff | comparison | revisions
eric6/DebugClients/Python/BreakpointWatch.py file | annotate | diff | comparison | revisions
eric6/DebugClients/Python/DebugBase.py file | annotate | diff | comparison | revisions
eric6/DebugClients/Python/DebugClient.py file | annotate | diff | comparison | revisions
eric6/DebugClients/Python/DebugClientBase.py file | annotate | diff | comparison | revisions
eric6/DebugClients/Python/DebugConfig.py file | annotate | diff | comparison | revisions
eric6/DebugClients/Python/DebugUtilities.py file | annotate | diff | comparison | revisions
eric6/DebugClients/Python/DebugVariables.py file | annotate | diff | comparison | revisions
eric6/DebugClients/Python/ThreadExtension.py file | annotate | diff | comparison | revisions
eric6/DebugClients/Python/eric6dbgstub.py file | annotate | diff | comparison | revisions
eric6/Debugger/BreakPointModel.py file | annotate | diff | comparison | revisions
eric6/Debugger/BreakPointViewer.py file | annotate | diff | comparison | revisions
eric6/Debugger/CallStackViewer.py file | annotate | diff | comparison | revisions
eric6/Debugger/CallTraceViewer.py file | annotate | diff | comparison | revisions
eric6/Debugger/Config.py file | annotate | diff | comparison | revisions
eric6/Debugger/DebugServer.py file | annotate | diff | comparison | revisions
eric6/Debugger/DebugUI.py file | annotate | diff | comparison | revisions
eric6/Debugger/DebugViewer.py file | annotate | diff | comparison | revisions
eric6/Debugger/DebuggerInterfaceNone.py file | annotate | diff | comparison | revisions
eric6/Debugger/DebuggerInterfacePython.py file | annotate | diff | comparison | revisions
eric6/Debugger/ExceptionLogger.py file | annotate | diff | comparison | revisions
eric6/Debugger/StartDialog.py file | annotate | diff | comparison | revisions
eric6/Debugger/VariablesFilterDialog.py file | annotate | diff | comparison | revisions
eric6/Debugger/VariablesViewer.py file | annotate | diff | comparison | revisions
eric6/Documentation/Help/source.qch file | annotate | diff | comparison | revisions
eric6/Documentation/Help/source.qhp file | annotate | diff | comparison | revisions
eric6/Documentation/Source/eric6.QScintilla.Editor.html file | annotate | diff | comparison | revisions
eric6/DocumentationTools/ModuleDocumentor.py file | annotate | diff | comparison | revisions
eric6/DocumentationTools/QtHelpGenerator.py file | annotate | diff | comparison | revisions
eric6/E5Gui/E5Completers.py file | annotate | diff | comparison | revisions
eric6/E5Gui/E5LineEdit.py file | annotate | diff | comparison | revisions
eric6/E5Gui/E5MessageBox.py file | annotate | diff | comparison | revisions
eric6/E5Gui/E5ProgressDialog.py file | annotate | diff | comparison | revisions
eric6/E5Gui/E5TabWidget.py file | annotate | diff | comparison | revisions
eric6/E5Gui/E5TextEditSearchWidget.py file | annotate | diff | comparison | revisions
eric6/E5Gui/E5ZoomWidget.py file | annotate | diff | comparison | revisions
eric6/E5Network/E5NetworkIcon.py file | annotate | diff | comparison | revisions
eric6/E5Network/E5SslErrorHandler.py file | annotate | diff | comparison | revisions
eric6/E5Network/E5SslInfoWidget.py file | annotate | diff | comparison | revisions
eric6/Globals/__init__.py file | annotate | diff | comparison | revisions
eric6/Graphics/ApplicationDiagramBuilder.py file | annotate | diff | comparison | revisions
eric6/Graphics/ImportsDiagramBuilder.py file | annotate | diff | comparison | revisions
eric6/Graphics/PackageDiagramBuilder.py file | annotate | diff | comparison | revisions
eric6/Graphics/UMLClassDiagramBuilder.py file | annotate | diff | comparison | revisions
eric6/Graphics/UMLDialog.py file | annotate | diff | comparison | revisions
eric6/Graphics/UMLGraphicsView.py file | annotate | diff | comparison | revisions
eric6/HexEdit/HexEditMainWindow.py file | annotate | diff | comparison | revisions
eric6/IconEditor/IconEditorGrid.py file | annotate | diff | comparison | revisions
eric6/IconEditor/IconEditorWindow.py file | annotate | diff | comparison | revisions
eric6/Network/IRC/IrcMessageEdit.py file | annotate | diff | comparison | revisions
eric6/Network/IRC/IrcNetworkWidget.py file | annotate | diff | comparison | revisions
eric6/PipInterface/PipDialog.py file | annotate | diff | comparison | revisions
eric6/PipInterface/PipFreezeDialog.py file | annotate | diff | comparison | revisions
eric6/PluginManager/PluginManager.py file | annotate | diff | comparison | revisions
eric6/Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleChecker.py file | annotate | diff | comparison | revisions
eric6/Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleFixer.py file | annotate | diff | comparison | revisions
eric6/Plugins/CheckerPlugins/CodeStyleChecker/DocStyle/DocStyleChecker.py file | annotate | diff | comparison | revisions
eric6/Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/MiscellaneousChecker.py file | annotate | diff | comparison | revisions
eric6/Plugins/CheckerPlugins/CodeStyleChecker/Naming/NamingStyleChecker.py file | annotate | diff | comparison | revisions
eric6/Plugins/CheckerPlugins/CodeStyleChecker/Security/SecurityContext.py file | annotate | diff | comparison | revisions
eric6/Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheck.py file | annotate | diff | comparison | revisions
eric6/Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py file | annotate | diff | comparison | revisions
eric6/Plugins/CheckerPlugins/SyntaxChecker/pyflakes/checker.py file | annotate | diff | comparison | revisions
eric6/Plugins/CheckerPlugins/SyntaxChecker/pyflakes/messages.py file | annotate | diff | comparison | revisions
eric6/Plugins/PluginWizardQFileDialog.py file | annotate | diff | comparison | revisions
eric6/Plugins/UiExtensionPlugins/Translator/TranslatorRequest.py file | annotate | diff | comparison | revisions
eric6/Plugins/VcsPlugins/vcsGit/GitDialog.py file | annotate | diff | comparison | revisions
eric6/Plugins/VcsPlugins/vcsGit/GitLogBrowserDialog.py file | annotate | diff | comparison | revisions
eric6/Plugins/VcsPlugins/vcsGit/git.py file | annotate | diff | comparison | revisions
eric6/Plugins/VcsPlugins/vcsMercurial/HgDialog.py file | annotate | diff | comparison | revisions
eric6/Plugins/VcsPlugins/vcsMercurial/HgDiffDialog.py file | annotate | diff | comparison | revisions
eric6/Plugins/VcsPlugins/vcsMercurial/HgDiffGenerator.py file | annotate | diff | comparison | revisions
eric6/Plugins/VcsPlugins/vcsMercurial/HgLogBrowserDialog.py file | annotate | diff | comparison | revisions
eric6/Plugins/VcsPlugins/vcsMercurial/HgRevisionSelectionDialog.py file | annotate | diff | comparison | revisions
eric6/Plugins/VcsPlugins/vcsMercurial/HisteditExtension/HgHisteditConfigDialog.py file | annotate | diff | comparison | revisions
eric6/Plugins/VcsPlugins/vcsMercurial/HisteditExtension/histedit.py file | annotate | diff | comparison | revisions
eric6/Plugins/VcsPlugins/vcsMercurial/QueuesExtension/HgQueuesGuardsSelectionDialog.py file | annotate | diff | comparison | revisions
eric6/Plugins/VcsPlugins/vcsMercurial/QueuesExtension/ProjectHelper.py file | annotate | diff | comparison | revisions
eric6/Plugins/VcsPlugins/vcsMercurial/QueuesExtension/queues.py file | annotate | diff | comparison | revisions
eric6/Plugins/VcsPlugins/vcsMercurial/ShelveExtension/shelve.py file | annotate | diff | comparison | revisions
eric6/Plugins/VcsPlugins/vcsMercurial/StripExtension/HgStripDialog.py file | annotate | diff | comparison | revisions
eric6/Plugins/VcsPlugins/vcsMercurial/StripExtension/strip.py file | annotate | diff | comparison | revisions
eric6/Plugins/VcsPlugins/vcsMercurial/hg.py file | annotate | diff | comparison | revisions
eric6/Plugins/VcsPlugins/vcsPySvn/SvnDialog.py file | annotate | diff | comparison | revisions
eric6/Plugins/VcsPlugins/vcsPySvn/SvnDiffDialog.py file | annotate | diff | comparison | revisions
eric6/Plugins/VcsPlugins/vcsPySvn/SvnLogBrowserDialog.py file | annotate | diff | comparison | revisions
eric6/Plugins/VcsPlugins/vcsPySvn/subversion.py file | annotate | diff | comparison | revisions
eric6/Plugins/VcsPlugins/vcsSubversion/SvnDiffDialog.py file | annotate | diff | comparison | revisions
eric6/Plugins/VcsPlugins/vcsSubversion/SvnLogBrowserDialog.py file | annotate | diff | comparison | revisions
eric6/Plugins/VcsPlugins/vcsSubversion/subversion.py file | annotate | diff | comparison | revisions
eric6/Plugins/ViewManagerPlugins/Listspace/Listspace.py file | annotate | diff | comparison | revisions
eric6/Plugins/ViewManagerPlugins/Tabview/Tabview.py file | annotate | diff | comparison | revisions
eric6/Plugins/WizardPlugins/E5MessageBoxWizard/E5MessageBoxWizardDialog.py file | annotate | diff | comparison | revisions
eric6/Plugins/WizardPlugins/FileDialogWizard/FileDialogWizardDialog.py file | annotate | diff | comparison | revisions
eric6/Preferences/ConfigurationDialog.py file | annotate | diff | comparison | revisions
eric6/Preferences/ConfigurationPages/ConfigurationPageBase.py file | annotate | diff | comparison | revisions
eric6/Preferences/ConfigurationPages/DebuggerGeneralPage.py file | annotate | diff | comparison | revisions
eric6/Preferences/ConfigurationPages/EditorAutocompletionPage.py file | annotate | diff | comparison | revisions
eric6/Preferences/ConfigurationPages/HelpDocumentationPage.py file | annotate | diff | comparison | revisions
eric6/Preferences/ConfigurationPages/NotificationsPage.py file | annotate | diff | comparison | revisions
eric6/Preferences/ConfigurationPages/ProjectBrowserPage.py file | annotate | diff | comparison | revisions
eric6/Preferences/ConfigurationPages/QtPage.py file | annotate | diff | comparison | revisions
eric6/Preferences/ProgramsDialog.py file | annotate | diff | comparison | revisions
eric6/Preferences/Shortcuts.py file | annotate | diff | comparison | revisions
eric6/Preferences/ShortcutsDialog.py file | annotate | diff | comparison | revisions
eric6/Preferences/__init__.py file | annotate | diff | comparison | revisions
eric6/Project/CreateDialogCodeDialog.py file | annotate | diff | comparison | revisions
eric6/Project/Project.py file | annotate | diff | comparison | revisions
eric6/Project/ProjectBrowserModel.py file | annotate | diff | comparison | revisions
eric6/Project/ProjectFormsBrowser.py file | annotate | diff | comparison | revisions
eric6/Project/ProjectResourcesBrowser.py file | annotate | diff | comparison | revisions
eric6/Project/ProjectTranslationsBrowser.py file | annotate | diff | comparison | revisions
eric6/Project/UicCompilerOptionsDialog.py file | annotate | diff | comparison | revisions
eric6/Project/UicLoadUi.py file | annotate | diff | comparison | revisions
eric6/Project/UicLoadUi5.py file | annotate | diff | comparison | revisions
eric6/Project/UicLoadUi6.py file | annotate | diff | comparison | revisions
eric6/PyUnit/UnittestDialog.py file | annotate | diff | comparison | revisions
eric6/QScintilla/APIsManager.py file | annotate | diff | comparison | revisions
eric6/QScintilla/Editor.py file | annotate | diff | comparison | revisions
eric6/QScintilla/Exporters/ExporterHTML.py file | annotate | diff | comparison | revisions
eric6/QScintilla/Lexers/LexerPygments.py file | annotate | diff | comparison | revisions
eric6/QScintilla/Lexers/__init__.py file | annotate | diff | comparison | revisions
eric6/QScintilla/MiniEditor.py file | annotate | diff | comparison | revisions
eric6/QScintilla/Shell.py file | annotate | diff | comparison | revisions
eric6/QScintilla/SpellChecker.py file | annotate | diff | comparison | revisions
eric6/Tasks/TaskViewer.py file | annotate | diff | comparison | revisions
eric6/ThirdParty/Pygments/pygments/formatters/_mapping.py file | annotate | diff | comparison | revisions
eric6/Toolbox/Startup.py file | annotate | diff | comparison | revisions
eric6/UI/BrowserModel.py file | annotate | diff | comparison | revisions
eric6/UI/CompareDialog.py file | annotate | diff | comparison | revisions
eric6/UI/FindFileDialog.py file | annotate | diff | comparison | revisions
eric6/UI/Previewers/PreviewerHTML.py file | annotate | diff | comparison | revisions
eric6/UI/UserInterface.py file | annotate | diff | comparison | revisions
eric6/Utilities/BackgroundClient.py file | annotate | diff | comparison | revisions
eric6/Utilities/BackgroundService.py file | annotate | diff | comparison | revisions
eric6/Utilities/ModuleParser.py file | annotate | diff | comparison | revisions
eric6/Utilities/PySideImporter.py file | annotate | diff | comparison | revisions
eric6/Utilities/__init__.py file | annotate | diff | comparison | revisions
eric6/Utilities/crypto/__init__.py file | annotate | diff | comparison | revisions
eric6/VCS/VersionControl.py file | annotate | diff | comparison | revisions
eric6/ViewManager/ViewManager.py file | annotate | diff | comparison | revisions
eric6/VirtualEnv/VirtualenvAddEditDialog.py file | annotate | diff | comparison | revisions
eric6/VirtualEnv/VirtualenvConfigurationDialog.py file | annotate | diff | comparison | revisions
eric6/VirtualEnv/VirtualenvExecDialog.py file | annotate | diff | comparison | revisions
eric6/VirtualEnv/VirtualenvManager.py file | annotate | diff | comparison | revisions
eric6/VirtualEnv/VirtualenvManagerDialog.py file | annotate | diff | comparison | revisions
eric6/WebBrowser/Bookmarks/BookmarksManager.py file | annotate | diff | comparison | revisions
eric6/WebBrowser/Download/DownloadItem.py file | annotate | diff | comparison | revisions
eric6/WebBrowser/Network/EricSchemeHandler.py file | annotate | diff | comparison | revisions
eric6/WebBrowser/Network/NetworkManager.py file | annotate | diff | comparison | revisions
eric6/WebBrowser/Network/QtHelpSchemeHandler.py file | annotate | diff | comparison | revisions
eric6/WebBrowser/QtHelp/HelpIndexWidget.py file | annotate | diff | comparison | revisions
eric6/WebBrowser/Sync/DirectorySyncHandler.py file | annotate | diff | comparison | revisions
eric6/WebBrowser/Sync/FtpSyncHandler.py file | annotate | diff | comparison | revisions
eric6/WebBrowser/Sync/SyncHandler.py file | annotate | diff | comparison | revisions
eric6/WebBrowser/Sync/SyncManager.py file | annotate | diff | comparison | revisions
eric6/WebBrowser/WebBrowserTabWidget.py file | annotate | diff | comparison | revisions
eric6/WebBrowser/WebBrowserView.py file | annotate | diff | comparison | revisions
eric6/WebBrowser/WebBrowserWindow.py file | annotate | diff | comparison | revisions
eric6/i18n/eric6_cs.ts file | annotate | diff | comparison | revisions
eric6/i18n/eric6_de.qm file | annotate | diff | comparison | revisions
eric6/i18n/eric6_de.ts file | annotate | diff | comparison | revisions
eric6/i18n/eric6_empty.ts file | annotate | diff | comparison | revisions
eric6/i18n/eric6_en.ts file | annotate | diff | comparison | revisions
eric6/i18n/eric6_es.qm file | annotate | diff | comparison | revisions
eric6/i18n/eric6_es.ts file | annotate | diff | comparison | revisions
eric6/i18n/eric6_fr.ts file | annotate | diff | comparison | revisions
eric6/i18n/eric6_it.ts file | annotate | diff | comparison | revisions
eric6/i18n/eric6_pt.ts file | annotate | diff | comparison | revisions
eric6/i18n/eric6_ru.qm file | annotate | diff | comparison | revisions
eric6/i18n/eric6_ru.ts file | annotate | diff | comparison | revisions
eric6/i18n/eric6_tr.ts file | annotate | diff | comparison | revisions
eric6/i18n/eric6_zh_CN.ts file | annotate | diff | comparison | revisions
scripts/install-debugclients.py file | annotate | diff | comparison | revisions
scripts/install.py file | annotate | diff | comparison | revisions
--- a/DTDs/Project-6.4.dtd	Sun Jan 17 13:53:08 2021 +0100
+++ b/DTDs/Project-6.4.dtd	Mon Feb 01 10:38:16 2021 +0100
@@ -1,4 +1,4 @@
-<!-- This is the DTD for eric's project file version 6.3 -->
+<!-- This is the DTD for eric's project file version 6.4 -->
 
 <!-- This is a copy of the Basic DTD -->
 <!ELEMENT   int         (#PCDATA)>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DTDs/Project-6.5.dtd	Mon Feb 01 10:38:16 2021 +0100
@@ -0,0 +1,191 @@
+<!-- This is the DTD for eric's project file version 6.4 -->
+
+<!-- This is a copy of the Basic DTD -->
+<!ELEMENT   int         (#PCDATA)>
+<!ELEMENT   long        (#PCDATA)>
+<!ELEMENT   float       (#PCDATA)>
+<!ELEMENT   complex     (#PCDATA)>
+<!ELEMENT   bool        (#PCDATA)>
+<!ELEMENT   string      (#PCDATA)>
+<!ELEMENT   bytes       (#PCDATA)>
+<!ELEMENT   bytearray   (#PCDATA)>
+<!ELEMENT   none        EMPTY>
+
+<!ELEMENT   pickle      (#PCDATA)>
+<!ATTLIST   pickle
+    method      CDATA   #REQUIRED
+    encoding    CDATA   #REQUIRED>
+
+<!ELEMENT   key         (int | long | float | complex | string | bytes)>
+<!ELEMENT   value       (int | long | float | complex | bool | string | bytes | 
+    bytearray | none | dict | tuple | list | set | frozenset | pickle)>
+
+<!ELEMENT   dict        (key, value)*>
+
+<!ELEMENT   tuple       (int | long | float | complex | bool | string | bytes | 
+    bytearray | none | dict | tuple | list | set | frozenset | pickle)*>
+
+<!ELEMENT   list        (int | long | float | complex | bool | string | bytes | 
+    bytearray | none | dict | tuple | list | set | frozenset | pickle)*>
+
+<!ELEMENT   set         (int | long | float | complex | bool | string | bytes | 
+    bytearray | none | dict | tuple | list | set | frozenset | pickle)*>
+
+<!ELEMENT   frozenset   (int | long | float | complex | bool | string | bytes | 
+    bytearray | none | dict | tuple | list | set | frozenset | pickle)*>
+<!-- End of the Basic DTD -->
+
+<!ELEMENT   ProgLanguage        (#PCDATA)>
+<!ATTLIST   ProgLanguage
+    mixed       CDATA   #REQUIRED>
+
+<!ELEMENT   ProjectType         (#PCDATA)>
+
+<!ELEMENT   Description         (#PCDATA)>
+
+<!ELEMENT   Version             (#PCDATA)>
+
+<!ELEMENT   Author              (#PCDATA)>
+
+<!ELEMENT   Email               (#PCDATA)>
+
+<!ELEMENT   TranslationPattern  (#PCDATA)>
+
+<!ELEMENT   TranslationsBinPath (#PCDATA)>
+
+<!ELEMENT   Source              (#PCDATA)>
+
+<!ELEMENT   Sources             (Source*)>
+
+<!ELEMENT   Form                (#PCDATA)>
+
+<!ELEMENT   Forms               (Form*)>
+
+<!ELEMENT   Translation         (#PCDATA)>
+
+<!ELEMENT   Translations        (Translation*)>
+
+<!ELEMENT   TranslationException  (#PCDATA)>
+
+<!ELEMENT   TranslationExceptions (TranslationException*)>
+
+<!ELEMENT   Resource            (#PCDATA)>
+
+<!ELEMENT   Resources           (Resource*)>
+
+<!ELEMENT   Interface           (#PCDATA)>
+
+<!ELEMENT   Interfaces          (Interface*)>
+
+<!ELEMENT   Protocol            (#PCDATA)>
+
+<!ELEMENT   Protocols           (Protocol*)>
+
+<!ELEMENT   Other               (#PCDATA)>
+
+<!ELEMENT   Others              (Other*)>
+
+<!ELEMENT   MainScript          (#PCDATA)>
+
+<!ELEMENT   VcsType             (#PCDATA)>
+<!ELEMENT   VcsOptions          (dict)>
+<!ELEMENT   VcsOtherData        (dict)>
+
+<!ELEMENT   Vcs                 (VcsType?,
+                                 VcsOptions?,
+                                 VcsOtherData?)>
+
+<!ELEMENT   FiletypeAssociation EMPTY>
+<!ATTLIST   FiletypeAssociation
+    pattern     CDATA   #REQUIRED
+    type        CDATA   #REQUIRED>
+
+<!ELEMENT   FiletypeAssociations (FiletypeAssociation*)>
+
+<!ELEMENT   LexerAssociation EMPTY>
+<!ATTLIST   LexerAssociation
+    pattern     CDATA   #REQUIRED
+    lexer       CDATA   #REQUIRED>
+
+<!ELEMENT   LexerAssociations   (LexerAssociation*)>
+
+<!ELEMENT   MakeParameters      (dict)>
+
+<!ELEMENT   Make                (MakeParameters?)>
+
+<!ELEMENT   IdlCompiler         (IdlCompilerParameters?)>
+
+<!ELEMENT   UicCompiler         (UicCompilerParameters?)>
+
+<!ELEMENT   RccCompiler         (RccCompilerParameters?)>
+
+<!ELEMENT   DocstringStyle      (#PCDATA)
+
+<!ELEMENT   ProjectTypeSpecificData (dict)>
+
+<!ELEMENT   ProjectTypeSpecific (ProjectTypeSpecific?)>
+
+<!ELEMENT   DocumentationParams (dict)>
+
+<!ELEMENT   Documentation       (DocumentationParams?)>
+
+<!ELEMENT   PackagersParams     (dict)>
+
+<!ELEMENT   Packagers           (PackagersParams?)>
+
+<!ELEMENT   CheckersParams      (dict)>
+
+<!ELEMENT   Checkers            (CheckersParams?)>
+
+<!ELEMENT   OtherToolsParams    (dict)>
+
+<!ELEMENT   OtherTools          (OtherToolsParams?)>
+
+<!ELEMENT   Language            (#PCDATA)>
+
+<!ELEMENT   ProjectWordList     (#PCDATA)>
+
+<!ELEMENT   ProjectExcludeList  (#PCDATA)>
+
+<!ELEMENT   Hash                (#PCDATA)>
+
+<!ELEMENT   Eol EMPTY>
+<!ATTLIST   Eol
+    index       CDATA   #REQUIRED>
+
+<!ELEMENT   Project             (Language,
+                                 ProjectWordList?,
+                                 ProjectExcludeList?,
+                                 Hash,
+                                 ProgLanguage,
+                                 ProjectType,
+                                 Description?,
+                                 Version?,
+                                 Author?,
+                                 Email?,
+                                 TranslationPattern?,
+                                 TranslationsBinPath?,
+                                 Eol?,
+                                 Sources,
+                                 Forms,
+                                 Translations,
+                                 TranslationExceptions?,
+                                 Resources,
+                                 Interfaces,
+                                 Others,
+                                 MainScript?,
+                                 Vcs,
+                                 FiletypeAssociations,
+                                 LexerAssociations?,
+                                 Make?,
+                                 IdlCompiler?,
+                                 UicCompiler?,
+                                 RccCompiler?,
+                                 DocstringStyle?,
+                                 ProjectTypeSpecific?,
+                                 Documentation?,
+                                 Packagers?,
+                                 Checkers?,
+                                 OtherTools?)>
+<!ATTLIST   Project
+    version     CDATA   #REQUIRED>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DTDs/Session-6.3.dtd	Mon Feb 01 10:38:16 2021 +0100
@@ -0,0 +1,131 @@
+<!-- This is the DTD for eric's (project) session file version 6.3 -->
+
+<!ELEMENT   MultiProject    (#PCDATA)>
+
+<!ELEMENT   Project         (#PCDATA)>
+
+<!ELEMENT   ViewManagerSplits   (#PCDATA)>
+<!ATTLIST   ViewManagerSplits
+    count       CDATA   #REQUIRED
+    orientation CDATA   #REQUIRED>
+
+<!ELEMENT   Filename        (#PCDATA)>
+<!ATTLIST   Filename
+    cline       CDATA   #REQUIRED
+    cindex      CDATA   #REQUIRED
+    folds       CDATA   #REQUIRED
+    zoom        CDATA   #REQUIRED
+    cloned      CDATA   #REQUIRED
+    splitindex  CDATA   #REQUIRED
+    editorindex CDATA   #REQUIRED>
+
+<!ELEMENT   Filenames       (Filename*)>
+
+<!ELEMENT   ActiveWindow    (#PCDATA)>
+<!ATTLIST   ActiveWindow
+    cline       CDATA   #REQUIRED
+    cindex      CDATA   #REQUIRED>
+
+<!ELEMENT   BpFilename      (#PCDATA)>
+<!ELEMENT   Linenumber      EMPTY>
+<!ATTLIST   Linenumber
+    value       CDATA   #REQUIRED>
+<!ELEMENT   Condition       (#PCDATA)>
+<!ELEMENT   Temporary       EMPTY>
+<!ATTLIST   Temporary
+    value       CDATA   #REQUIRED>
+<!ELEMENT   Enabled         EMPTY>
+<!ATTLIST   Enabled
+    value       CDATA   #REQUIRED>
+<!ELEMENT   Count           EMPTY>
+<!ATTLIST   Count
+    value       CDATA   #REQUIRED>
+
+<!ELEMENT   Breakpoint      (BpFilename,
+                             Linenumber,
+                             Condition,
+                             Temporary,
+                             Enabled,
+                             Count)>
+
+<!ELEMENT   Breakpoints     (Breakpoint*)>
+
+<!ELEMENT   Special         (#PCDATA)>
+
+<!ELEMENT   Watchexpression (Condition,
+                             Temporary,
+                             Enabled,
+                             Count,
+                             Special)>
+
+<!ELEMENT   Watchexpressions (Watchexpression*)>
+
+<!ELEMENT   Exception       (#PCDATA)>
+
+<!ELEMENT   IgnoredException (#PCDATA)>
+
+<!ELEMENT   VirtualEnv       (#PCDATA)>
+<!ELEMENT   CommandLine      (#PCDATA)>
+<!ELEMENT   WorkingDirectory (#PCDATA)>
+<!ELEMENT   Environment      (#PCDATA)>
+<!ELEMENT   ReportExceptions EMPTY>
+<!ATTLIST   ReportExceptions
+    value       CDATA   #REQUIRED>
+<!ELEMENT   Exceptions       (Exception*)>
+<!ELEMENT   IgnoredExceptions (IgnoredException*)>
+<!ELEMENT   AutoClearShell   EMPTY>
+<!ATTLIST   AutoClearShell
+    value       CDATA   #REQUIRED>
+<!ELEMENT   TracePython      EMPTY>
+<!ATTLIST   TracePython
+    value       CDATA   #REQUIRED>
+<!ELEMENT   AutoContinue     EMPTY>
+<!ATTLIST   AutoContinue
+    value       CDATA   #REQUIRED>
+<!ELEMENT   EnableMultiprocess EMPTY>
+<!ATTLIST   EnableMultiprocess
+    value       CDATA   #REQUIRED>
+<!ELEMENT   MultiprocessNoDebug (#PCDATA)>
+<!ELEMENT   CovexcPattern    (#PCDATA)>
+
+<!ELEMENT   DebugInfo       (VirtualEnv,
+                             CommandLine,
+                             WorkingDirectory,
+                             Environment,
+                             ReportExceptions,
+                             Exceptions,
+                             IgnoredExceptions,
+                             AutoClearShell,
+                             TracePython,
+                             AutoContinue,
+                             EnableMultiprocess,
+                             MultiprocessNoDebug,
+                             CovexcPattern)>
+
+<!ELEMENT   BmFilename      (#PCDATA)>
+
+<!ELEMENT   Bookmark        (BmFilename,
+                             Linenumber)>
+
+<!ELEMENT   Bookmarks       (Bookmark*)>
+
+<!ELEMENT   ExpandedItemName     (#PCDATA)>
+
+<!ELEMENT   ProjectBrowserState  (ExpandedItemName*)>
+<!ATTLIST   ProjectBrowserState
+    name        CDATA   #REQUIRED>
+
+<!ELEMENT   ProjectBrowserStates (ProjectBrowserState*)>
+
+<!ELEMENT   Session         (MultiProject?,
+                             Project?,
+                             ViewManagerSplits?,
+                             Filenames,
+                             ActiveWindow?,
+                             Breakpoints,
+                             Watchexpressions,
+                             DebugInfo,
+                             Bookmarks,
+                             ProjectBrowserStates?)>
+<!ATTLIST   Session
+    version     CDATA   #REQUIRED>
--- a/docs/changelog	Sun Jan 17 13:53:08 2021 +0100
+++ b/docs/changelog	Mon Feb 01 10:38:16 2021 +0100
@@ -1,5 +1,55 @@
 Change Log
 ----------
+Version 21.2:
+- bug fixes
+- General
+  -- added support for PyQt6
+  -- added support for PySide6
+- Code Style Checker
+  -- added a commented code whitelist patterns to the Miscellaneous Checker
+  -- added support for the '@yield' and '@ytype' tags
+- Debugger
+  -- added support for debugging multiprocess scripts using these methods
+     --- QProcess.start(), QProcess.startDetached()
+     --- subprocess.Popen()
+     --- multiprocessing.Process()
+     --- os.spawnl...(), os.spawnv...(), os.posix_spawn...(), os.fork(),
+       os.fork_exec()
+     --- _winapi.CreateProcess(), _subprocess.CreateProcess()
+  -- added support for debugging code strings (-c, --code) or script modules
+     (-m, --module)
+  -- added support for the "Continue Until" action execution code until the
+     current cursor line (if it is greater than the current line) or until
+     returning from the current frame
+- Documentation Generator
+  -- added support for the '@yield' and '@ytype' tags to document generators
+- Editor
+  -- added code to enclose the current selection by entering ", ' or a bracket
+     ( (, ), [, ], {, }, <, > ) characters
+  -- extended the exporters to support sub-styles
+  -- added functionality to insert docstring templates via the context menu
+     (cursor placed on first line of function definition), after entering
+     the docstring start string (e.g. """ for Python) or via a keyboard
+     shortcut (default: Ctrl+Alt+D) when cursor is either placed on the
+     function definition line or after the end of the function definition
+- Find File Dialog
+  -- added option to exclude hidden files and directories
+  -- changed directory tree search logic to derive the file patterns from the
+     project file type associations, if the directory to be searched is a
+     sub-directory of the project
+- User Interface
+  -- added capability to show Qt6 documentation (configurable)
+- VirtualEnv Manager
+  -- improved the handling of virtual environments slightly
+- Web-Browser
+  -- added an error page for not supported eric: URLs
+- Third Party packages
+  -- updated eradicate.py to 2.0.0
+  -- updated chardet to 4.0.0
+  -- updated coverage.py to 5.3.1
+  -- updated editorconfig to 0.12.3
+  -- updated Pygments to 2.7.4
+
 Version 21.1:
 - bug fixes
 
--- a/eric6.e4p	Sun Jan 17 13:53:08 2021 +0100
+++ b/eric6.e4p	Mon Feb 01 10:38:16 2021 +0100
@@ -1,15 +1,15 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE Project SYSTEM "Project-6.3.dtd">
+<!DOCTYPE Project SYSTEM "Project-6.5.dtd">
 <!-- eric project file for project eric6 -->
-<!-- Copyright (C) 2020 Detlev Offenbach, detlev@die-offenbachs.de -->
-<Project version="6.3">
+<!-- Copyright (C) 2021 Detlev Offenbach, detlev@die-offenbachs.de -->
+<Project version="6.5">
   <Language>en_US</Language>
   <ProjectWordList>Dictionaries/words.dic</ProjectWordList>
   <ProjectExcludeList>Dictionaries/excludes.dic</ProjectExcludeList>
   <Hash>df7daa8781250f7664e6ecaeaf1361fa2efd39ee</Hash>
-  <ProgLanguage mixed="1">Python3</ProgLanguage>
+  <ProgLanguage mixed="0">Python3</ProgLanguage>
   <ProjectType>PyQt5</ProjectType>
-  <Description>eric6 is an integrated development environment for the Python language. It uses the PyQt5 bindings and the QScintilla2 editor widget. It may be used with PyQt4 as well.</Description>
+  <Description>eric6 is an integrated development environment for the Python language. It uses the PyQt5 bindings and the QScintilla2 editor widget.</Description>
   <Version>6.x</Version>
   <Author>Detlev Offenbach</Author>
   <Email>detlev@die-offenbachs.de</Email>
@@ -49,7 +49,12 @@
     <Source>eric6/DebugClients/Python/DebugUtilities.py</Source>
     <Source>eric6/DebugClients/Python/DebugVariables.py</Source>
     <Source>eric6/DebugClients/Python/FlexCompleter.py</Source>
+    <Source>eric6/DebugClients/Python/ModuleLoader.py</Source>
+    <Source>eric6/DebugClients/Python/MultiProcessDebugExtension.py</Source>
+    <Source>eric6/DebugClients/Python/MultiprocessingExtension.py</Source>
     <Source>eric6/DebugClients/Python/PyProfile.py</Source>
+    <Source>eric6/DebugClients/Python/QProcessExtension.py</Source>
+    <Source>eric6/DebugClients/Python/SubprocessExtension.py</Source>
     <Source>eric6/DebugClients/Python/ThreadExtension.py</Source>
     <Source>eric6/DebugClients/Python/__init__.py</Source>
     <Source>eric6/DebugClients/Python/coverage/__init__.py</Source>
@@ -133,6 +138,7 @@
     <Source>eric6/E5Gui/E5Application.py</Source>
     <Source>eric6/E5Gui/E5ClickableLabel.py</Source>
     <Source>eric6/E5Gui/E5ComboBox.py</Source>
+    <Source>eric6/E5Gui/E5ComboSelectionDialog.py</Source>
     <Source>eric6/E5Gui/E5Completers.py</Source>
     <Source>eric6/E5Gui/E5ErrorMessage.py</Source>
     <Source>eric6/E5Gui/E5ErrorMessageFilterDialog.py</Source>
@@ -180,7 +186,6 @@
     <Source>eric6/E5Network/E5GoogleMail.py</Source>
     <Source>eric6/E5Network/E5GoogleMailHelpers.py</Source>
     <Source>eric6/E5Network/E5NetworkHeaderDetailsDialog.py</Source>
-    <Source>eric6/E5Network/E5NetworkIcon.py</Source>
     <Source>eric6/E5Network/E5NetworkProxyFactory.py</Source>
     <Source>eric6/E5Network/E5RFC6266.py</Source>
     <Source>eric6/E5Network/E5SslCertificateSelectionDialog.py</Source>
@@ -325,6 +330,7 @@
     <Source>eric6/Plugins/CheckerPlugins/CodeStyleChecker/DocStyle/__init__.py</Source>
     <Source>eric6/Plugins/CheckerPlugins/CodeStyleChecker/DocStyle/translations.py</Source>
     <Source>eric6/Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/MiscellaneousChecker.py</Source>
+    <Source>eric6/Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/MiscellaneousDefaults.py</Source>
     <Source>eric6/Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/__init__.py</Source>
     <Source>eric6/Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py</Source>
     <Source>eric6/Plugins/CheckerPlugins/CodeStyleChecker/Naming/NamingStyleChecker.py</Source>
@@ -808,12 +814,20 @@
     <Source>eric6/Project/SpellingPropertiesDialog.py</Source>
     <Source>eric6/Project/TranslationPropertiesDialog.py</Source>
     <Source>eric6/Project/UicCompilerOptionsDialog.py</Source>
-    <Source>eric6/Project/UicLoadUi.py</Source>
+    <Source>eric6/Project/UicLoadUi5.py</Source>
+    <Source>eric6/Project/UicLoadUi6.py</Source>
     <Source>eric6/Project/UserPropertiesDialog.py</Source>
     <Source>eric6/Project/__init__.py</Source>
     <Source>eric6/PyUnit/UnittestDialog.py</Source>
     <Source>eric6/PyUnit/__init__.py</Source>
     <Source>eric6/QScintilla/APIsManager.py</Source>
+    <Source>eric6/QScintilla/DocstringGenerator/BaseDocstringGenerator.py</Source>
+    <Source>eric6/QScintilla/DocstringGenerator/EricdocGenerator.py</Source>
+    <Source>eric6/QScintilla/DocstringGenerator/GoogledocGenerator.py</Source>
+    <Source>eric6/QScintilla/DocstringGenerator/NumpydocGenerator.py</Source>
+    <Source>eric6/QScintilla/DocstringGenerator/PyDocstringGenerator.py</Source>
+    <Source>eric6/QScintilla/DocstringGenerator/SphinxdocGenerator.py</Source>
+    <Source>eric6/QScintilla/DocstringGenerator/__init__.py</Source>
     <Source>eric6/QScintilla/Editor.py</Source>
     <Source>eric6/QScintilla/EditorAssembly.py</Source>
     <Source>eric6/QScintilla/EditorButtonsWidget.py</Source>
@@ -946,16 +960,18 @@
     <Source>eric6/ThirdParty/CharDet/chardet/jisfreq.py</Source>
     <Source>eric6/ThirdParty/CharDet/chardet/jpcntx.py</Source>
     <Source>eric6/ThirdParty/CharDet/chardet/langbulgarianmodel.py</Source>
-    <Source>eric6/ThirdParty/CharDet/chardet/langcyrillicmodel.py</Source>
     <Source>eric6/ThirdParty/CharDet/chardet/langgreekmodel.py</Source>
     <Source>eric6/ThirdParty/CharDet/chardet/langhebrewmodel.py</Source>
     <Source>eric6/ThirdParty/CharDet/chardet/langhungarianmodel.py</Source>
+    <Source>eric6/ThirdParty/CharDet/chardet/langrussianmodel.py</Source>
     <Source>eric6/ThirdParty/CharDet/chardet/langthaimodel.py</Source>
     <Source>eric6/ThirdParty/CharDet/chardet/langturkishmodel.py</Source>
     <Source>eric6/ThirdParty/CharDet/chardet/latin1prober.py</Source>
     <Source>eric6/ThirdParty/CharDet/chardet/mbcharsetprober.py</Source>
     <Source>eric6/ThirdParty/CharDet/chardet/mbcsgroupprober.py</Source>
     <Source>eric6/ThirdParty/CharDet/chardet/mbcssm.py</Source>
+    <Source>eric6/ThirdParty/CharDet/chardet/metadata/__init__.py</Source>
+    <Source>eric6/ThirdParty/CharDet/chardet/metadata/languages.py</Source>
     <Source>eric6/ThirdParty/CharDet/chardet/sbcharsetprober.py</Source>
     <Source>eric6/ThirdParty/CharDet/chardet/sbcsgroupprober.py</Source>
     <Source>eric6/ThirdParty/CharDet/chardet/sjisprober.py</Source>
@@ -964,12 +980,13 @@
     <Source>eric6/ThirdParty/CharDet/chardet/version.py</Source>
     <Source>eric6/ThirdParty/EditorConfig/__init__.py</Source>
     <Source>eric6/ThirdParty/EditorConfig/editorconfig/__init__.py</Source>
+    <Source>eric6/ThirdParty/EditorConfig/editorconfig/__main__.py</Source>
     <Source>eric6/ThirdParty/EditorConfig/editorconfig/compat.py</Source>
     <Source>eric6/ThirdParty/EditorConfig/editorconfig/exceptions.py</Source>
     <Source>eric6/ThirdParty/EditorConfig/editorconfig/fnmatch.py</Source>
     <Source>eric6/ThirdParty/EditorConfig/editorconfig/handler.py</Source>
     <Source>eric6/ThirdParty/EditorConfig/editorconfig/ini.py</Source>
-    <Source>eric6/ThirdParty/EditorConfig/editorconfig/main.py</Source>
+    <Source>eric6/ThirdParty/EditorConfig/editorconfig/version.py</Source>
     <Source>eric6/ThirdParty/EditorConfig/editorconfig/versiontools.py</Source>
     <Source>eric6/ThirdParty/Jasy/__init__.py</Source>
     <Source>eric6/ThirdParty/Jasy/jasy/__init__.py</Source>
@@ -1636,6 +1653,7 @@
     <Form>eric6/Debugger/StartRunDialog.ui</Form>
     <Form>eric6/Debugger/VariableDetailDialog.ui</Form>
     <Form>eric6/Debugger/VariablesFilterDialog.ui</Form>
+    <Form>eric6/E5Gui/E5ComboSelectionDialog.ui</Form>
     <Form>eric6/E5Gui/E5ErrorMessageFilterDialog.ui</Form>
     <Form>eric6/E5Gui/E5ListSelectionDialog.ui</Form>
     <Form>eric6/E5Gui/E5PlainTextDialog.ui</Form>
@@ -1987,7 +2005,7 @@
     <Form>eric6/UI/FindFileDialog.ui</Form>
     <Form>eric6/UI/FindFileNameDialog.ui</Form>
     <Form>eric6/UI/InstallInfoDialog.ui</Form>
-    <Form>eric6/UI/NotificationWidget.ui</Form>
+    <Form>eric6/UI/NotificationFrame.ui</Form>
     <Form>eric6/UI/NumbersWidget.ui</Form>
     <Form>eric6/UI/Previewers/PreviewerQSS.ui</Form>
     <Form>eric6/UI/PythonDisViewer.ui</Form>
@@ -2262,6 +2280,7 @@
     <Other>eric6/WebBrowser/UserAgent/UserAgentDefaults.xml</Other>
     <Other>eric6/WebBrowser/data/html/adblockPage.html</Other>
     <Other>eric6/WebBrowser/data/html/authenticationErrorPage.html</Other>
+    <Other>eric6/WebBrowser/data/html/ericErrorPage.html</Other>
     <Other>eric6/WebBrowser/data/html/speeddialPage.html</Other>
     <Other>eric6/WebBrowser/data/html/startPage.html</Other>
     <Other>eric6/WebBrowser/data/html/tabCrashPage.html</Other>
@@ -2436,6 +2455,7 @@
       </dict>
     </UicCompilerParameters>
   </UicCompiler>
+  <DocstringStyle>ericdoc</DocstringStyle>
   <Documentation>
     <DocumentationParams>
       <dict>
@@ -2745,6 +2765,26 @@
                 <value>
                   <bool>False</bool>
                 </value>
+                <key>
+                  <string>WhiteList</string>
+                </key>
+                <value>
+                  <list>
+                    <string>pylint</string>
+                    <string>pyright</string>
+                    <string>noqa</string>
+                    <string>type:\s*ignore</string>
+                    <string>fmt:\s*(on|off)</string>
+                    <string>TODO</string>
+                    <string>FIXME</string>
+                    <string>WARNING</string>
+                    <string>NOTE</string>
+                    <string>TEST</string>
+                    <string>DOCU</string>
+                    <string>XXX</string>
+                    <string>- </string>
+                  </list>
+                </value>
               </dict>
             </value>
             <key>
--- a/eric6/APIs/Python3/eric6.api	Sun Jan 17 13:53:08 2021 +0100
+++ b/eric6/APIs/Python3/eric6.api	Mon Feb 01 10:38:16 2021 +0100
@@ -250,7 +250,7 @@
 eric6.DebugClients.Python.DCTestResult.DCTestResult.stopTest?4(test)
 eric6.DebugClients.Python.DCTestResult.DCTestResult?1(dbgClient, failfast)
 eric6.DebugClients.Python.DebugBase.DebugBase._fnCache?8
-eric6.DebugClients.Python.DebugBase.DebugBase._set_stopinfo?5(stopframe, returnframe)
+eric6.DebugClients.Python.DebugBase.DebugBase._set_stopinfo?5(stopframe, returnframe, stoplineno=0)
 eric6.DebugClients.Python.DebugBase.DebugBase.bootstrap?4(target, args, kwargs)
 eric6.DebugClients.Python.DebugBase.DebugBase.break_here?4(frame)
 eric6.DebugClients.Python.DebugBase.DebugBase.filesToSkip?7
@@ -265,7 +265,7 @@
 eric6.DebugClients.Python.DebugBase.DebugBase.pollTimerEnabled?7
 eric6.DebugClients.Python.DebugBase.DebugBase.profile?4(frame, event, arg)
 eric6.DebugClients.Python.DebugBase.DebugBase.profileWithRecursion?4(frame, event, arg)
-eric6.DebugClients.Python.DebugBase.DebugBase.run?4(cmd, globalsDict=None, localsDict=None, debug=True)
+eric6.DebugClients.Python.DebugBase.DebugBase.run?4(cmd, globalsDict=None, localsDict=None, debug=True, closeSession=True)
 eric6.DebugClients.Python.DebugBase.DebugBase.setRecursionDepth?4(frame)
 eric6.DebugClients.Python.DebugBase.DebugBase.set_continue?4(special)
 eric6.DebugClients.Python.DebugBase.DebugBase.set_next?4(frame)
@@ -273,6 +273,7 @@
 eric6.DebugClients.Python.DebugBase.DebugBase.set_return?4(frame)
 eric6.DebugClients.Python.DebugBase.DebugBase.set_step?4()
 eric6.DebugClients.Python.DebugBase.DebugBase.set_trace?4(frame=None)
+eric6.DebugClients.Python.DebugBase.DebugBase.set_until?4(frame=None, lineno=None)
 eric6.DebugClients.Python.DebugBase.DebugBase.step?4(traceMode)
 eric6.DebugClients.Python.DebugBase.DebugBase.stepOut?4()
 eric6.DebugClients.Python.DebugBase.DebugBase.stop_here?4(frame)
@@ -291,34 +292,34 @@
 eric6.DebugClients.Python.DebugClientBase.DebugClientBase.arrayTypes?7
 eric6.DebugClients.Python.DebugClientBase.DebugClientBase.clientCapabilities?7
 eric6.DebugClients.Python.DebugClientBase.DebugClientBase.close?4(fd)
-eric6.DebugClients.Python.DebugClientBase.DebugClientBase.connectDebugger?4(port, remoteAddress=None, redirect=True)
+eric6.DebugClients.Python.DebugClientBase.DebugClientBase.connectDebugger?4(port, remoteAddress=None, redirect=True, name="")
 eric6.DebugClients.Python.DebugClientBase.DebugClientBase.eventLoop?4(disablePolling=False)
 eric6.DebugClients.Python.DebugClientBase.DebugClientBase.eventPoll?4()
-eric6.DebugClients.Python.DebugClientBase.DebugClientBase.fork?4()
 eric6.DebugClients.Python.DebugClientBase.DebugClientBase.getCoding?4()
 eric6.DebugClients.Python.DebugClientBase.DebugClientBase.getRunning?4()
 eric6.DebugClients.Python.DebugClientBase.DebugClientBase.handleJsonCommand?4(jsonStr)
 eric6.DebugClients.Python.DebugClientBase.DebugClientBase.input?4(prompt, echo=True)
 eric6.DebugClients.Python.DebugClientBase.DebugClientBase.main?4()
-eric6.DebugClients.Python.DebugClientBase.DebugClientBase.progTerminated?4(status, message="")
+eric6.DebugClients.Python.DebugClientBase.DebugClientBase.progTerminated?4(status, message="", closeSession=True)
 eric6.DebugClients.Python.DebugClientBase.DebugClientBase.readReady?4(stream)
 eric6.DebugClients.Python.DebugClientBase.DebugClientBase.run_call?4(scriptname, func, *args)
 eric6.DebugClients.Python.DebugClientBase.DebugClientBase.sendCallTrace?4(event, fromInfo, toInfo)
 eric6.DebugClients.Python.DebugClientBase.DebugClientBase.sendClearTemporaryBreakpoint?4(filename, lineno)
 eric6.DebugClients.Python.DebugClientBase.DebugClientBase.sendClearTemporaryWatch?4(condition)
-eric6.DebugClients.Python.DebugClientBase.DebugClientBase.sendException?4(exceptionType, exceptionMessage, stack)
+eric6.DebugClients.Python.DebugClientBase.DebugClientBase.sendDebuggerId?4(debuggerId)
+eric6.DebugClients.Python.DebugClientBase.DebugClientBase.sendException?4(exceptionType, exceptionMessage, stack, threadName)
 eric6.DebugClients.Python.DebugClientBase.DebugClientBase.sendJsonCommand?4(method, params)
 eric6.DebugClients.Python.DebugClientBase.DebugClientBase.sendPassiveStartup?4(filename, exceptions)
-eric6.DebugClients.Python.DebugClientBase.DebugClientBase.sendResponseLine?4(stack)
-eric6.DebugClients.Python.DebugClientBase.DebugClientBase.sendSyntaxError?4(message, filename, lineno, charno)
+eric6.DebugClients.Python.DebugClientBase.DebugClientBase.sendResponseLine?4(stack, threadName)
+eric6.DebugClients.Python.DebugClientBase.DebugClientBase.sendSyntaxError?4(message, filename, lineno, charno, threadName)
 eric6.DebugClients.Python.DebugClientBase.DebugClientBase.sessionClose?4(terminate=True)
 eric6.DebugClients.Python.DebugClientBase.DebugClientBase.setDisassembly?4(disassembly)
-eric6.DebugClients.Python.DebugClientBase.DebugClientBase.startDebugger?4(filename=None, host=None, port=None, enableTrace=True, exceptions=True, tracePython=False, redirect=True)
-eric6.DebugClients.Python.DebugClientBase.DebugClientBase.startProgInDebugger?4(progargs, wd='', host=None, port=None, exceptions=True, tracePython=False, redirect=True)
+eric6.DebugClients.Python.DebugClientBase.DebugClientBase.skipMultiProcessDebugging?4(scriptName)
+eric6.DebugClients.Python.DebugClientBase.DebugClientBase.startDebugger?4(filename=None, host=None, port=None, enableTrace=True, exceptions=True, tracePython=False, redirect=True, passive=True, multiprocessSupport=False)
+eric6.DebugClients.Python.DebugClientBase.DebugClientBase.startProgInDebugger?4(progargs, wd='', host=None, port=None, exceptions=True, tracePython=False, redirect=True, passive=True, multiprocessSupport=False, codeStr="", scriptModule="")
 eric6.DebugClients.Python.DebugClientBase.DebugClientBase.writeReady?4(stream)
 eric6.DebugClients.Python.DebugClientBase.DebugClientBase?1()
 eric6.DebugClients.Python.DebugClientBase.DebugClientClose?4(fd)
-eric6.DebugClients.Python.DebugClientBase.DebugClientFork?4()
 eric6.DebugClients.Python.DebugClientBase.DebugClientInput?4(prompt="")
 eric6.DebugClients.Python.DebugClientBase.DebugClientInstance?7
 eric6.DebugClients.Python.DebugClientBase.DebugClientSetRecursionLimit?4(limit)
@@ -333,12 +334,22 @@
 eric6.DebugClients.Python.DebugConfig.BatchSize?7
 eric6.DebugClients.Python.DebugConfig.ConfigKnownQtTypes?7
 eric6.DebugClients.Python.DebugConfig.ConfigQtNames?7
-eric6.DebugClients.Python.DebugConfig.ConfigVarTypeStrings?7
+eric6.DebugClients.Python.DebugConfig.SpecialAttributes?7
 eric6.DebugClients.Python.DebugUtilities.ArgInfo?7
+eric6.DebugClients.Python.DebugUtilities.PYTHON_NAMES?7
 eric6.DebugClients.Python.DebugUtilities._getfullargs?5(co)
 eric6.DebugClients.Python.DebugUtilities.formatargvalues?4(args, varargs, varkw, localsDict, formatarg=str, formatvarargs=lambda name: '*' + name, formatvarkw=lambda name: '**' + name, formatvalue=lambda value: '=' + repr(value))
 eric6.DebugClients.Python.DebugUtilities.getargvalues?4(frame)
+eric6.DebugClients.Python.DebugUtilities.isExecutable?4(program)
+eric6.DebugClients.Python.DebugUtilities.isPythonProgram?4(program)
+eric6.DebugClients.Python.DebugUtilities.isWindowsPlatform?4()
+eric6.DebugClients.Python.DebugUtilities.patchArgumentStringWindows?4(debugClient, argStr)
+eric6.DebugClients.Python.DebugUtilities.patchArguments?4(debugClient, arguments, noRedirect=False)
 eric6.DebugClients.Python.DebugUtilities.prepareJsonCommand?4(method, params)
+eric6.DebugClients.Python.DebugUtilities.quoteArgs?4(args)
+eric6.DebugClients.Python.DebugUtilities.removeQuotesFromArgs?4(args)
+eric6.DebugClients.Python.DebugUtilities.startsWithShebang?4(program)
+eric6.DebugClients.Python.DebugUtilities.stringToArgumentsWindows?4(args)
 eric6.DebugClients.Python.DebugVariables.ArrayResolver.TypeCodeMap?7
 eric6.DebugClients.Python.DebugVariables.ArrayResolver.getDictionary?4(var)
 eric6.DebugClients.Python.DebugVariables.ArrayResolver.resolve?4(var, attribute)
@@ -375,6 +386,39 @@
 eric6.DebugClients.Python.FlexCompleter.Completer.global_matches?4(text)
 eric6.DebugClients.Python.FlexCompleter.Completer?1(namespace=None)
 eric6.DebugClients.Python.FlexCompleter.get_class_members?4(klass)
+eric6.DebugClients.Python.ModuleLoader.ModuleLoader.create_module?4(spec)
+eric6.DebugClients.Python.ModuleLoader.ModuleLoader.exec_module?4(module)
+eric6.DebugClients.Python.ModuleLoader.ModuleLoader.find_spec?4(fullname, path, target=None)
+eric6.DebugClients.Python.ModuleLoader.ModuleLoader?1(debugClient)
+eric6.DebugClients.Python.MultiProcessDebugExtension._debugClient?8
+eric6.DebugClients.Python.MultiProcessDebugExtension._shallPatch?5()
+eric6.DebugClients.Python.MultiProcessDebugExtension.createCreateProcess?4(originalName)
+eric6.DebugClients.Python.MultiProcessDebugExtension.createExecl?4(originalName)
+eric6.DebugClients.Python.MultiProcessDebugExtension.createExecv?4(originalName)
+eric6.DebugClients.Python.MultiProcessDebugExtension.createExecve?4(originalName)
+eric6.DebugClients.Python.MultiProcessDebugExtension.createFork?4(originalName)
+eric6.DebugClients.Python.MultiProcessDebugExtension.createForkExec?4(originalName)
+eric6.DebugClients.Python.MultiProcessDebugExtension.createPosixSpawn?4(originalName)
+eric6.DebugClients.Python.MultiProcessDebugExtension.createSpawnl?4(originalName)
+eric6.DebugClients.Python.MultiProcessDebugExtension.createSpawnv?4(originalName)
+eric6.DebugClients.Python.MultiProcessDebugExtension.createSpawnve?4(originalName)
+eric6.DebugClients.Python.MultiProcessDebugExtension.newCreateProcess?4(appName, cmdline, *args)
+eric6.DebugClients.Python.MultiProcessDebugExtension.newExecl?4(path, *args)
+eric6.DebugClients.Python.MultiProcessDebugExtension.newExecv?4(path, args)
+eric6.DebugClients.Python.MultiProcessDebugExtension.newExecve?4(path, args, env)
+eric6.DebugClients.Python.MultiProcessDebugExtension.newFork?4()
+eric6.DebugClients.Python.MultiProcessDebugExtension.newForkExec?4(args, *other_args)
+eric6.DebugClients.Python.MultiProcessDebugExtension.newPosixSpawn?4(path, argv, env, **kwargs)
+eric6.DebugClients.Python.MultiProcessDebugExtension.newSpawnl?4(mode, path, *args)
+eric6.DebugClients.Python.MultiProcessDebugExtension.newSpawnv?4(mode, path, args)
+eric6.DebugClients.Python.MultiProcessDebugExtension.newSpawnve?4(mode, path, args, env)
+eric6.DebugClients.Python.MultiProcessDebugExtension.patchModule?4(module, functionName, createFunction)
+eric6.DebugClients.Python.MultiProcessDebugExtension.patchNewProcessFunctions?4(multiprocessEnabled, debugClient)
+eric6.DebugClients.Python.MultiprocessingExtension.ProcessWrapper._bootstrap?5(*args, **kwargs)
+eric6.DebugClients.Python.MultiprocessingExtension._debugClient?8
+eric6.DebugClients.Python.MultiprocessingExtension._originalBootstrap?8
+eric6.DebugClients.Python.MultiprocessingExtension._originalProcess?8
+eric6.DebugClients.Python.MultiprocessingExtension.patchMultiprocessing?4(module, debugClient)
 eric6.DebugClients.Python.PyProfile.PyProfile.dispatch?7
 eric6.DebugClients.Python.PyProfile.PyProfile.dump_stats?4(file)
 eric6.DebugClients.Python.PyProfile.PyProfile.erase?4()
@@ -382,6 +426,16 @@
 eric6.DebugClients.Python.PyProfile.PyProfile.save?4()
 eric6.DebugClients.Python.PyProfile.PyProfile.trace_dispatch_call?4(frame, t)
 eric6.DebugClients.Python.PyProfile.PyProfile?1(basename, timer=None, bias=None)
+eric6.DebugClients.Python.QProcessExtension.QProcessWrapper._origQProcessStartDetached?8
+eric6.DebugClients.Python.QProcessExtension.QProcessWrapper.start?4(*args, **kwargs)
+eric6.DebugClients.Python.QProcessExtension.QProcessWrapper.startDetached?4(*args, **kwargs)
+eric6.DebugClients.Python.QProcessExtension.QProcessWrapper.startDetachedStatic?4(**kwargs)
+eric6.DebugClients.Python.QProcessExtension.QProcessWrapper?1(parent=None)
+eric6.DebugClients.Python.QProcessExtension._debugClient?8
+eric6.DebugClients.Python.QProcessExtension.patchQProcess?4(module, debugClient)
+eric6.DebugClients.Python.SubprocessExtension.PopenWrapper?1(arguments, *args, **kwargs)
+eric6.DebugClients.Python.SubprocessExtension._debugClient?8
+eric6.DebugClients.Python.SubprocessExtension.patchSubprocess?4(module, debugClient)
 eric6.DebugClients.Python.ThreadExtension.DummyThreadWrapper?1(*args, **kwargs)
 eric6.DebugClients.Python.ThreadExtension.QRunnableWrapper?1(*args, **kwargs)
 eric6.DebugClients.Python.ThreadExtension.QThreadWrapper?1(*args, **kwargs)
@@ -389,10 +443,12 @@
 eric6.DebugClients.Python.ThreadExtension.ThreadExtension._bootstrapQThread?5(run)
 eric6.DebugClients.Python.ThreadExtension.ThreadExtension.attachThread?4(target=None, args=None, kwargs=None, mainThread=False)
 eric6.DebugClients.Python.ThreadExtension.ThreadExtension.dumpThreadList?4()
-eric6.DebugClients.Python.ThreadExtension.ThreadExtension.find_module?4(fullname, path=None)
 eric6.DebugClients.Python.ThreadExtension.ThreadExtension.getExecutedFrame?4(frame)
-eric6.DebugClients.Python.ThreadExtension.ThreadExtension.load_module?4(fullname)
 eric6.DebugClients.Python.ThreadExtension.ThreadExtension.lockClient?4(blocking=True)
+eric6.DebugClients.Python.ThreadExtension.ThreadExtension.patchGreenlet?4(module)
+eric6.DebugClients.Python.ThreadExtension.ThreadExtension.patchPyThread?4(module)
+eric6.DebugClients.Python.ThreadExtension.ThreadExtension.patchPyThreading?4(module)
+eric6.DebugClients.Python.ThreadExtension.ThreadExtension.patchQThread?4(module)
 eric6.DebugClients.Python.ThreadExtension.ThreadExtension.setCurrentThread?4(threadId)
 eric6.DebugClients.Python.ThreadExtension.ThreadExtension.threadTerminated?4(threadId)
 eric6.DebugClients.Python.ThreadExtension.ThreadExtension.unlockClient?4()
@@ -441,6 +497,7 @@
 eric6.Debugger.BreakPointViewer.BreakPointViewer?1(parent=None)
 eric6.Debugger.CallStackViewer.CallStackViewer.FilenameRole?7
 eric6.Debugger.CallStackViewer.CallStackViewer.LinenoRole?7
+eric6.Debugger.CallStackViewer.CallStackViewer.clear?4()
 eric6.Debugger.CallStackViewer.CallStackViewer.frameSelected?7
 eric6.Debugger.CallStackViewer.CallStackViewer.setDebugger?4(debugUI)
 eric6.Debugger.CallStackViewer.CallStackViewer.setProjectMode?4(enabled)
@@ -457,9 +514,8 @@
 eric6.Debugger.CallTraceViewer.CallTraceViewer.on_stopTraceButton_clicked?4()
 eric6.Debugger.CallTraceViewer.CallTraceViewer.setProjectMode?4(enabled)
 eric6.Debugger.CallTraceViewer.CallTraceViewer.sourceFile?7
-eric6.Debugger.CallTraceViewer.CallTraceViewer?1(debugServer, parent=None)
+eric6.Debugger.CallTraceViewer.CallTraceViewer?1(debugServer, debugViewer, parent=None)
 eric6.Debugger.Config.ConfigVarTypeDispStrings?7
-eric6.Debugger.Config.ConfigVarTypeFilters?7
 eric6.Debugger.DebugClientCapabilities.HasAll?7
 eric6.Debugger.DebugClientCapabilities.HasCompleter?7
 eric6.Debugger.DebugClientCapabilities.HasCoverage?7
@@ -476,7 +532,9 @@
 eric6.Debugger.DebugServer.DebugServer.clientClearBreak?7
 eric6.Debugger.DebugServer.DebugServer.clientClearWatch?7
 eric6.Debugger.DebugServer.DebugServer.clientCompletionList?7
+eric6.Debugger.DebugServer.DebugServer.clientDebuggerId?7
 eric6.Debugger.DebugServer.DebugServer.clientDisassembly?7
+eric6.Debugger.DebugServer.DebugServer.clientDisconnected?7
 eric6.Debugger.DebugServer.DebugServer.clientException?7
 eric6.Debugger.DebugServer.DebugServer.clientExit?7
 eric6.Debugger.DebugServer.DebugServer.clientGone?7
@@ -510,69 +568,78 @@
 eric6.Debugger.DebugServer.DebugServer.getClientCapabilities?4(clientType)
 eric6.Debugger.DebugServer.DebugServer.getClientInterpreter?4()
 eric6.Debugger.DebugServer.DebugServer.getClientType?4()
+eric6.Debugger.DebugServer.DebugServer.getDebuggerIds?4()
 eric6.Debugger.DebugServer.DebugServer.getExtensions?4(language)
 eric6.Debugger.DebugServer.DebugServer.getHostAddress?4(localhost)
 eric6.Debugger.DebugServer.DebugServer.getSupportedLanguages?4(shellOnly=False)
 eric6.Debugger.DebugServer.DebugServer.getWatchPointModel?4()
+eric6.Debugger.DebugServer.DebugServer.initializeClient?4(debuggerId)
 eric6.Debugger.DebugServer.DebugServer.isClientProcessUp?4()
 eric6.Debugger.DebugServer.DebugServer.isConnected?4()
 eric6.Debugger.DebugServer.DebugServer.isDebugging?4()
+eric6.Debugger.DebugServer.DebugServer.lastClientExited?7
+eric6.Debugger.DebugServer.DebugServer.masterClientConnected?4()
 eric6.Debugger.DebugServer.DebugServer.passiveDebugStarted?7
-eric6.Debugger.DebugServer.DebugServer.passiveStartUp?4(fn, exc)
+eric6.Debugger.DebugServer.DebugServer.passiveStartUp?4(fn, exc, debuggerId)
 eric6.Debugger.DebugServer.DebugServer.preferencesChanged?4()
 eric6.Debugger.DebugServer.DebugServer.registerDebuggerInterface?4(interfaceName, getRegistryData, reregister=False)
 eric6.Debugger.DebugServer.DebugServer.remoteBanner?4()
-eric6.Debugger.DebugServer.DebugServer.remoteBreakpoint?4(fn, line, setBreakpoint, cond=None, temp=False)
+eric6.Debugger.DebugServer.DebugServer.remoteBreakpoint?4(debuggerId, fn, line, setBreakpoint, cond=None, temp=False)
 eric6.Debugger.DebugServer.DebugServer.remoteCapabilities?4()
-eric6.Debugger.DebugServer.DebugServer.remoteClientDisassembly?4()
-eric6.Debugger.DebugServer.DebugServer.remoteClientSetFilter?4(scope, filterStr)
-eric6.Debugger.DebugServer.DebugServer.remoteClientVariable?4(scope, filterList, var, framenr=0)
-eric6.Debugger.DebugServer.DebugServer.remoteClientVariables?4(scope, filterList, framenr=0)
-eric6.Debugger.DebugServer.DebugServer.remoteCompletion?4(text)
-eric6.Debugger.DebugServer.DebugServer.remoteContinue?4(special=False)
+eric6.Debugger.DebugServer.DebugServer.remoteClientDisassembly?4(debuggerId)
+eric6.Debugger.DebugServer.DebugServer.remoteClientSetFilter?4(debuggerId, scope, filterStr)
+eric6.Debugger.DebugServer.DebugServer.remoteClientStack?4(debuggerId)
+eric6.Debugger.DebugServer.DebugServer.remoteClientVariable?4(debuggerId, scope, filterList, var, framenr=0, maxSize=0)
+eric6.Debugger.DebugServer.DebugServer.remoteClientVariables?4(debuggerId, scope, filterList, framenr=0)
+eric6.Debugger.DebugServer.DebugServer.remoteCompletion?4(debuggerId, text)
+eric6.Debugger.DebugServer.DebugServer.remoteContinue?4(debuggerId, special=False)
+eric6.Debugger.DebugServer.DebugServer.remoteContinueUntil?4(debuggerId, line)
 eric6.Debugger.DebugServer.DebugServer.remoteCoverage?4(venvName, fn, argv, wd, env, autoClearShell=True, erase=False, forProject=False, runInConsole=False, clientType="")
 eric6.Debugger.DebugServer.DebugServer.remoteEnvironment?4(env)
-eric6.Debugger.DebugServer.DebugServer.remoteLoad?4(venvName, fn, argv, wd, env, autoClearShell=True, tracePython=False, autoContinue=True, forProject=False, runInConsole=False, autoFork=False, forkChild=False, clientType="", enableCallTrace=False)
-eric6.Debugger.DebugServer.DebugServer.remoteMoveIP?4(line)
+eric6.Debugger.DebugServer.DebugServer.remoteLoad?4(venvName, fn, argv, wd, env, autoClearShell=True, tracePython=False, autoContinue=True, forProject=False, runInConsole=False, clientType="", enableCallTrace=False, enableMultiprocess=False, multiprocessNoDebug="")
+eric6.Debugger.DebugServer.DebugServer.remoteMoveIP?4(debuggerId, line)
 eric6.Debugger.DebugServer.DebugServer.remoteProfile?4(venvName, fn, argv, wd, env, autoClearShell=True, erase=False, forProject=False, runInConsole=False, clientType="")
-eric6.Debugger.DebugServer.DebugServer.remoteRawInput?4(s)
-eric6.Debugger.DebugServer.DebugServer.remoteRun?4(venvName, fn, argv, wd, env, autoClearShell=True, forProject=False, runInConsole=False, autoFork=False, forkChild=False, clientType="")
-eric6.Debugger.DebugServer.DebugServer.remoteSetThread?4(tid)
-eric6.Debugger.DebugServer.DebugServer.remoteStatement?4(stmt)
-eric6.Debugger.DebugServer.DebugServer.remoteStep?4()
-eric6.Debugger.DebugServer.DebugServer.remoteStepOut?4()
-eric6.Debugger.DebugServer.DebugServer.remoteStepOver?4()
-eric6.Debugger.DebugServer.DebugServer.remoteStepQuit?4()
-eric6.Debugger.DebugServer.DebugServer.remoteThreadList?4()
+eric6.Debugger.DebugServer.DebugServer.remoteRawInput?4(debuggerId, inputString)
+eric6.Debugger.DebugServer.DebugServer.remoteRun?4(venvName, fn, argv, wd, env, autoClearShell=True, forProject=False, runInConsole=False, clientType="")
+eric6.Debugger.DebugServer.DebugServer.remoteSetThread?4(debuggerId, tid)
+eric6.Debugger.DebugServer.DebugServer.remoteStatement?4(debuggerId, stmt)
+eric6.Debugger.DebugServer.DebugServer.remoteStep?4(debuggerId)
+eric6.Debugger.DebugServer.DebugServer.remoteStepOut?4(debuggerId)
+eric6.Debugger.DebugServer.DebugServer.remoteStepOver?4(debuggerId)
+eric6.Debugger.DebugServer.DebugServer.remoteStepQuit?4(debuggerId)
+eric6.Debugger.DebugServer.DebugServer.remoteThreadList?4(debuggerId)
 eric6.Debugger.DebugServer.DebugServer.remoteUTDiscover?4(clientType, forProject, venvName, syspath, workdir, discoveryStart)
 eric6.Debugger.DebugServer.DebugServer.remoteUTPrepare?4(fn, tn, tfn, failed, cov, covname, coverase, clientType="", forProject=False, venvName="", syspath=None, workdir="", discover=False, discoveryStart="", testCases=None, debug=False)
 eric6.Debugger.DebugServer.DebugServer.remoteUTRun?4(debug=False, failfast=False)
 eric6.Debugger.DebugServer.DebugServer.remoteUTStop?4()
-eric6.Debugger.DebugServer.DebugServer.setCallTraceEnabled?4(on)
+eric6.Debugger.DebugServer.DebugServer.setCallTraceEnabled?4(debuggerId, on)
 eric6.Debugger.DebugServer.DebugServer.setDebugging?4(on)
 eric6.Debugger.DebugServer.DebugServer.shutdownServer?4()
-eric6.Debugger.DebugServer.DebugServer.signalClientBanner?4(version, platform, debugClient, venvName)
-eric6.Debugger.DebugServer.DebugServer.signalClientBreakConditionError?4(filename, lineno)
-eric6.Debugger.DebugServer.DebugServer.signalClientCallTrace?4(isCall, fromFile, fromLine, fromFunction, toFile, toLine, toFunction)
+eric6.Debugger.DebugServer.DebugServer.signalClientBanner?4(version, platform, venvName)
+eric6.Debugger.DebugServer.DebugServer.signalClientBreakConditionError?4(filename, lineno, debuggerId)
+eric6.Debugger.DebugServer.DebugServer.signalClientCallTrace?4(isCall, fromFile, fromLine, fromFunction, toFile, toLine, toFunction, debuggerId)
 eric6.Debugger.DebugServer.DebugServer.signalClientCapabilities?4(capabilities, clientType, venvName)
-eric6.Debugger.DebugServer.DebugServer.signalClientClearBreak?4(filename, lineno)
-eric6.Debugger.DebugServer.DebugServer.signalClientClearWatch?4(condition)
-eric6.Debugger.DebugServer.DebugServer.signalClientCompletionList?4(completionList, text)
-eric6.Debugger.DebugServer.DebugServer.signalClientDisassembly?4(disassembly)
-eric6.Debugger.DebugServer.DebugServer.signalClientException?4(exceptionType, exceptionMessage, stackTrace)
-eric6.Debugger.DebugServer.DebugServer.signalClientExit?4(status, message="")
-eric6.Debugger.DebugServer.DebugServer.signalClientLine?4(filename, lineno, forStack=False)
-eric6.Debugger.DebugServer.DebugServer.signalClientOutput?4(line)
-eric6.Debugger.DebugServer.DebugServer.signalClientRawInput?4(prompt, echo)
-eric6.Debugger.DebugServer.DebugServer.signalClientSignal?4(message, filename, lineNo, funcName, funcArgs)
-eric6.Debugger.DebugServer.DebugServer.signalClientStack?4(stack)
-eric6.Debugger.DebugServer.DebugServer.signalClientStatement?4(more)
-eric6.Debugger.DebugServer.DebugServer.signalClientSyntaxError?4(message, filename, lineNo, characterNo)
-eric6.Debugger.DebugServer.DebugServer.signalClientThreadList?4(currentId, threadList)
-eric6.Debugger.DebugServer.DebugServer.signalClientThreadSet?4()
-eric6.Debugger.DebugServer.DebugServer.signalClientVariable?4(scope, variables)
-eric6.Debugger.DebugServer.DebugServer.signalClientVariables?4(scope, variables)
-eric6.Debugger.DebugServer.DebugServer.signalClientWatchConditionError?4(condition)
+eric6.Debugger.DebugServer.DebugServer.signalClientClearBreak?4(filename, lineno, debuggerId)
+eric6.Debugger.DebugServer.DebugServer.signalClientClearWatch?4(condition, debuggerId)
+eric6.Debugger.DebugServer.DebugServer.signalClientCompletionList?4(completionList, text, debuggerId)
+eric6.Debugger.DebugServer.DebugServer.signalClientDebuggerId?4(debuggerId)
+eric6.Debugger.DebugServer.DebugServer.signalClientDisassembly?4(disassembly, debuggerId)
+eric6.Debugger.DebugServer.DebugServer.signalClientDisconnected?4(debuggerId)
+eric6.Debugger.DebugServer.DebugServer.signalClientException?4(exceptionType, exceptionMessage, stackTrace, debuggerId, threadName="")
+eric6.Debugger.DebugServer.DebugServer.signalClientExit?4(program, status, message, debuggerId)
+eric6.Debugger.DebugServer.DebugServer.signalClientLine?4(filename, lineno, debuggerId, forStack=False, threadName="")
+eric6.Debugger.DebugServer.DebugServer.signalClientOutput?4(line, debuggerId)
+eric6.Debugger.DebugServer.DebugServer.signalClientRawInput?4(prompt, echo, debuggerId)
+eric6.Debugger.DebugServer.DebugServer.signalClientSignal?4(message, filename, lineNo, funcName, funcArgs, debuggerId)
+eric6.Debugger.DebugServer.DebugServer.signalClientStack?4(stack, debuggerId, threadName="")
+eric6.Debugger.DebugServer.DebugServer.signalClientStatement?4(more, debuggerId)
+eric6.Debugger.DebugServer.DebugServer.signalClientSyntaxError?4(message, filename, lineNo, characterNo, debuggerId, threadName="")
+eric6.Debugger.DebugServer.DebugServer.signalClientThreadList?4(currentId, threadList, debuggerId)
+eric6.Debugger.DebugServer.DebugServer.signalClientThreadSet?4(debuggerId)
+eric6.Debugger.DebugServer.DebugServer.signalClientVariable?4(scope, variables, debuggerId)
+eric6.Debugger.DebugServer.DebugServer.signalClientVariables?4(scope, variables, debuggerId)
+eric6.Debugger.DebugServer.DebugServer.signalClientWatchConditionError?4(condition, debuggerId)
+eric6.Debugger.DebugServer.DebugServer.signalLastClientExited?4()
 eric6.Debugger.DebugServer.DebugServer.startClient?4(unplanned=True, clType=None, forProject=False, runInConsole=False, venvName="", workingDir=None)
 eric6.Debugger.DebugServer.DebugServer.unregisterDebuggerInterface?4(interfaceName)
 eric6.Debugger.DebugServer.DebugServer.utDiscovered?7
@@ -596,6 +663,7 @@
 eric6.Debugger.DebugUI.DebugUI.exceptionInterrupt?7
 eric6.Debugger.DebugUI.DebugUI.executeMake?7
 eric6.Debugger.DebugUI.DebugUI.getActions?4()
+eric6.Debugger.DebugUI.DebugUI.getSelectedDebuggerId?4()
 eric6.Debugger.DebugUI.DebugUI.initActions?4()
 eric6.Debugger.DebugUI.DebugUI.initMenus?4()
 eric6.Debugger.DebugUI.DebugUI.initToolbars?4(toolbarManager)
@@ -603,24 +671,35 @@
 eric6.Debugger.DebugUI.DebugUI.setArgvHistory?4(argsStr, clearHistories=False, history=None)
 eric6.Debugger.DebugUI.DebugUI.setAutoClearShell?4(autoClearShell)
 eric6.Debugger.DebugUI.DebugUI.setAutoContinue?4(autoContinue)
+eric6.Debugger.DebugUI.DebugUI.setDebugActionsEnabled?4(enable)
+eric6.Debugger.DebugUI.DebugUI.setEnableMultiprocess?4(enableMultiprocess)
 eric6.Debugger.DebugUI.DebugUI.setEnvHistory?4(envStr, clearHistories=False, history=None)
 eric6.Debugger.DebugUI.DebugUI.setExcIgnoreList?4(excIgnoreList)
 eric6.Debugger.DebugUI.DebugUI.setExcList?4(excList)
 eric6.Debugger.DebugUI.DebugUI.setExceptionReporting?4(exceptions)
+eric6.Debugger.DebugUI.DebugUI.setMultiprocessNoDebugHistory?4(noDebugList, clearHistories=False, history=None)
 eric6.Debugger.DebugUI.DebugUI.setTracePython?4(tracePython)
 eric6.Debugger.DebugUI.DebugUI.setWdHistory?4(wdStr, clearHistories=False, history=None)
+eric6.Debugger.DebugUI.DebugUI.showNotification?4(notification, kind=NotificationTypes.Information, timeout=None)
 eric6.Debugger.DebugUI.DebugUI.shutdown?4()
 eric6.Debugger.DebugUI.DebugUI.shutdownServer?4()
 eric6.Debugger.DebugUI.DebugUI.variablesFilter?4(scope)
 eric6.Debugger.DebugUI.DebugUI?1(ui, vm, debugServer, debugViewer, project)
+eric6.Debugger.DebugViewer.DebugViewer.DebuggerStateRole?7
+eric6.Debugger.DebugViewer.DebugViewer.StateIcon?7
+eric6.Debugger.DebugViewer.DebugViewer.StateMessage?7
+eric6.Debugger.DebugViewer.DebugViewer.ThreadIdRole?7
 eric6.Debugger.DebugViewer.DebugViewer.clearCallTrace?4()
 eric6.Debugger.DebugViewer.DebugViewer.currentWidget?4()
-eric6.Debugger.DebugViewer.DebugViewer.handleClientStack?4(stack)
+eric6.Debugger.DebugViewer.DebugViewer.getSelectedDebuggerId?4()
+eric6.Debugger.DebugViewer.DebugViewer.getSelectedDebuggerState?4()
+eric6.Debugger.DebugViewer.DebugViewer.handleClientStack?4(stack, debuggerId)
 eric6.Debugger.DebugViewer.DebugViewer.handleDebuggingStarted?4()
 eric6.Debugger.DebugViewer.DebugViewer.handlePreferencesChanged?4()
-eric6.Debugger.DebugViewer.DebugViewer.handleResetUI?4()
+eric6.Debugger.DebugViewer.DebugViewer.handleResetUI?4(fullReset)
 eric6.Debugger.DebugViewer.DebugViewer.initCallStackViewer?4(projectMode)
 eric6.Debugger.DebugViewer.DebugViewer.isCallTraceEnabled?4()
+eric6.Debugger.DebugViewer.DebugViewer.isOnlyDebugger?4()
 eric6.Debugger.DebugViewer.DebugViewer.preferencesChanged?7
 eric6.Debugger.DebugViewer.DebugViewer.setCallTraceToProjectMode?4(enabled)
 eric6.Debugger.DebugViewer.DebugViewer.setCurrentWidget?4(widget)
@@ -628,7 +707,6 @@
 eric6.Debugger.DebugViewer.DebugViewer.setGlobalsFilter?4()
 eric6.Debugger.DebugViewer.DebugViewer.setLocalsFilter?4()
 eric6.Debugger.DebugViewer.DebugViewer.setVariablesFilter?4(globalsFilter, localsFilter)
-eric6.Debugger.DebugViewer.DebugViewer.showThreadList?4(currentID, threadList)
 eric6.Debugger.DebugViewer.DebugViewer.showVariable?4(vlist, showGlobals)
 eric6.Debugger.DebugViewer.DebugViewer.showVariables?4(vlist, showGlobals)
 eric6.Debugger.DebugViewer.DebugViewer.showVariablesTab?4(showGlobals)
@@ -636,43 +714,46 @@
 eric6.Debugger.DebugViewer.DebugViewer?1(debugServer, parent=None)
 eric6.Debugger.DebuggerInterfaceNone.ClientDefaultCapabilities?7
 eric6.Debugger.DebuggerInterfaceNone.ClientTypeAssociations?7
-eric6.Debugger.DebuggerInterfaceNone.DebuggerInterfaceNone.flush?4()
 eric6.Debugger.DebuggerInterfaceNone.DebuggerInterfaceNone.getClientCapabilities?4()
+eric6.Debugger.DebuggerInterfaceNone.DebuggerInterfaceNone.getDebuggerIds?4()
 eric6.Debugger.DebuggerInterfaceNone.DebuggerInterfaceNone.isConnected?4()
 eric6.Debugger.DebuggerInterfaceNone.DebuggerInterfaceNone.newConnection?4(sock)
 eric6.Debugger.DebuggerInterfaceNone.DebuggerInterfaceNone.remoteBanner?4()
-eric6.Debugger.DebuggerInterfaceNone.DebuggerInterfaceNone.remoteBreakpoint?4(fn, line, setBreakpoint, cond=None, temp=False)
-eric6.Debugger.DebuggerInterfaceNone.DebuggerInterfaceNone.remoteBreakpointEnable?4(fn, line, enable)
-eric6.Debugger.DebuggerInterfaceNone.DebuggerInterfaceNone.remoteBreakpointIgnore?4(fn, line, count)
-eric6.Debugger.DebuggerInterfaceNone.DebuggerInterfaceNone.remoteCapabilities?4()
-eric6.Debugger.DebuggerInterfaceNone.DebuggerInterfaceNone.remoteClientSetFilter?4(scope, filterStr)
-eric6.Debugger.DebuggerInterfaceNone.DebuggerInterfaceNone.remoteClientVariable?4(scope, filterList, var, framenr=0, maxSize=0)
-eric6.Debugger.DebuggerInterfaceNone.DebuggerInterfaceNone.remoteClientVariables?4(scope, filterList, framenr=0, maxSize=0)
-eric6.Debugger.DebuggerInterfaceNone.DebuggerInterfaceNone.remoteCompletion?4(text)
-eric6.Debugger.DebuggerInterfaceNone.DebuggerInterfaceNone.remoteContinue?4(special=False)
+eric6.Debugger.DebuggerInterfaceNone.DebuggerInterfaceNone.remoteBreakpoint?4(debuggerId, fn, line, setBreakpoint, cond=None, temp=False)
+eric6.Debugger.DebuggerInterfaceNone.DebuggerInterfaceNone.remoteBreakpointEnable?4(debuggerId, fn, line, enable)
+eric6.Debugger.DebuggerInterfaceNone.DebuggerInterfaceNone.remoteBreakpointIgnore?4(debuggerId, fn, line, count)
+eric6.Debugger.DebuggerInterfaceNone.DebuggerInterfaceNone.remoteCapabilities?4(debuggerId)
+eric6.Debugger.DebuggerInterfaceNone.DebuggerInterfaceNone.remoteClientDisassembly?4(debuggerId)
+eric6.Debugger.DebuggerInterfaceNone.DebuggerInterfaceNone.remoteClientSetFilter?4(debuggerId, scope, filterStr)
+eric6.Debugger.DebuggerInterfaceNone.DebuggerInterfaceNone.remoteClientStack?4(debuggerId)
+eric6.Debugger.DebuggerInterfaceNone.DebuggerInterfaceNone.remoteClientVariable?4(debuggerId, scope, filterList, var, framenr=0, maxSize=0)
+eric6.Debugger.DebuggerInterfaceNone.DebuggerInterfaceNone.remoteClientVariables?4(debuggerId, scope, filterList, framenr=0, maxSize=0)
+eric6.Debugger.DebuggerInterfaceNone.DebuggerInterfaceNone.remoteCompletion?4(debuggerId, text)
+eric6.Debugger.DebuggerInterfaceNone.DebuggerInterfaceNone.remoteContinue?4(debuggerId, special=False)
+eric6.Debugger.DebuggerInterfaceNone.DebuggerInterfaceNone.remoteContinueUntil?4(debuggerId, line)
 eric6.Debugger.DebuggerInterfaceNone.DebuggerInterfaceNone.remoteCoverage?4(fn, argv, wd, erase=False)
 eric6.Debugger.DebuggerInterfaceNone.DebuggerInterfaceNone.remoteEnvironment?4(env)
-eric6.Debugger.DebuggerInterfaceNone.DebuggerInterfaceNone.remoteEval?4(arg)
-eric6.Debugger.DebuggerInterfaceNone.DebuggerInterfaceNone.remoteLoad?4(fn, argv, wd, traceInterpreter=False, autoContinue=True, autoFork=False, forkChild=False)
-eric6.Debugger.DebuggerInterfaceNone.DebuggerInterfaceNone.remoteMoveIP?4(line)
+eric6.Debugger.DebuggerInterfaceNone.DebuggerInterfaceNone.remoteLoad?4(fn, argv, wd, traceInterpreter=False, autoContinue=True, enableMultiprocess=False)
+eric6.Debugger.DebuggerInterfaceNone.DebuggerInterfaceNone.remoteMoveIP?4(debuggerId, line)
+eric6.Debugger.DebuggerInterfaceNone.DebuggerInterfaceNone.remoteNoDebugList?4(debuggerId, noDebugList)
 eric6.Debugger.DebuggerInterfaceNone.DebuggerInterfaceNone.remoteProfile?4(fn, argv, wd, erase=False)
-eric6.Debugger.DebuggerInterfaceNone.DebuggerInterfaceNone.remoteRawInput?4(s)
-eric6.Debugger.DebuggerInterfaceNone.DebuggerInterfaceNone.remoteRun?4(fn, argv, wd, autoFork=False, forkChild=False)
-eric6.Debugger.DebuggerInterfaceNone.DebuggerInterfaceNone.remoteSetThread?4(tid)
-eric6.Debugger.DebuggerInterfaceNone.DebuggerInterfaceNone.remoteStatement?4(stmt)
-eric6.Debugger.DebuggerInterfaceNone.DebuggerInterfaceNone.remoteStep?4()
-eric6.Debugger.DebuggerInterfaceNone.DebuggerInterfaceNone.remoteStepOut?4()
-eric6.Debugger.DebuggerInterfaceNone.DebuggerInterfaceNone.remoteStepOver?4()
-eric6.Debugger.DebuggerInterfaceNone.DebuggerInterfaceNone.remoteStepQuit?4()
-eric6.Debugger.DebuggerInterfaceNone.DebuggerInterfaceNone.remoteThreadList?4()
+eric6.Debugger.DebuggerInterfaceNone.DebuggerInterfaceNone.remoteRawInput?4(debuggerId, inputString)
+eric6.Debugger.DebuggerInterfaceNone.DebuggerInterfaceNone.remoteRun?4(fn, argv, wd)
+eric6.Debugger.DebuggerInterfaceNone.DebuggerInterfaceNone.remoteSetThread?4(debuggerId, tid)
+eric6.Debugger.DebuggerInterfaceNone.DebuggerInterfaceNone.remoteStatement?4(debuggerId, stmt)
+eric6.Debugger.DebuggerInterfaceNone.DebuggerInterfaceNone.remoteStep?4(debuggerId)
+eric6.Debugger.DebuggerInterfaceNone.DebuggerInterfaceNone.remoteStepOut?4(debuggerId)
+eric6.Debugger.DebuggerInterfaceNone.DebuggerInterfaceNone.remoteStepOver?4(debuggerId)
+eric6.Debugger.DebuggerInterfaceNone.DebuggerInterfaceNone.remoteStepQuit?4(debuggerId)
+eric6.Debugger.DebuggerInterfaceNone.DebuggerInterfaceNone.remoteThreadList?4(debuggerId)
 eric6.Debugger.DebuggerInterfaceNone.DebuggerInterfaceNone.remoteUTDiscover?4(syspath, workdir, discoveryStart)
 eric6.Debugger.DebuggerInterfaceNone.DebuggerInterfaceNone.remoteUTPrepare?4(fn, tn, tfn, failed, cov, covname, coverase, syspath, workdir, discover, discoveryStart, testCases, debug)
 eric6.Debugger.DebuggerInterfaceNone.DebuggerInterfaceNone.remoteUTRun?4(debug, failfast)
 eric6.Debugger.DebuggerInterfaceNone.DebuggerInterfaceNone.remoteUTStop?4()
-eric6.Debugger.DebuggerInterfaceNone.DebuggerInterfaceNone.remoteWatchpoint?4(cond, setWatch, temp=False)
-eric6.Debugger.DebuggerInterfaceNone.DebuggerInterfaceNone.remoteWatchpointEnable?4(cond, enable)
-eric6.Debugger.DebuggerInterfaceNone.DebuggerInterfaceNone.remoteWatchpointIgnore?4(cond, count)
-eric6.Debugger.DebuggerInterfaceNone.DebuggerInterfaceNone.setCallTraceEnabled?4(on)
+eric6.Debugger.DebuggerInterfaceNone.DebuggerInterfaceNone.remoteWatchpoint?4(debuggerId, cond, setWatch, temp=False)
+eric6.Debugger.DebuggerInterfaceNone.DebuggerInterfaceNone.remoteWatchpointEnable?4(debuggerId, cond, enable)
+eric6.Debugger.DebuggerInterfaceNone.DebuggerInterfaceNone.remoteWatchpointIgnore?4(debuggerId, cond, count)
+eric6.Debugger.DebuggerInterfaceNone.DebuggerInterfaceNone.setCallTraceEnabled?4(debuggerId, on)
 eric6.Debugger.DebuggerInterfaceNone.DebuggerInterfaceNone.shutdown?4()
 eric6.Debugger.DebuggerInterfaceNone.DebuggerInterfaceNone.startRemote?4(port, runInConsole, venvName, originalPathString, workingDir=None)
 eric6.Debugger.DebuggerInterfaceNone.DebuggerInterfaceNone.startRemoteForProject?4(port, runInConsole, venvName, originalPathString, workingDir=None)
@@ -680,43 +761,46 @@
 eric6.Debugger.DebuggerInterfaceNone.createDebuggerInterfaceNone?4(debugServer, passive)
 eric6.Debugger.DebuggerInterfaceNone.getRegistryData?4()
 eric6.Debugger.DebuggerInterfacePython.ClientDefaultCapabilities?7
-eric6.Debugger.DebuggerInterfacePython.DebuggerInterfacePython.flush?4()
 eric6.Debugger.DebuggerInterfacePython.DebuggerInterfacePython.getClientCapabilities?4()
+eric6.Debugger.DebuggerInterfacePython.DebuggerInterfacePython.getDebuggerIds?4()
 eric6.Debugger.DebuggerInterfacePython.DebuggerInterfacePython.isConnected?4()
 eric6.Debugger.DebuggerInterfacePython.DebuggerInterfacePython.newConnection?4(sock)
 eric6.Debugger.DebuggerInterfacePython.DebuggerInterfacePython.remoteBanner?4()
-eric6.Debugger.DebuggerInterfacePython.DebuggerInterfacePython.remoteBreakpoint?4(fn, line, setBreakpoint, cond=None, temp=False)
-eric6.Debugger.DebuggerInterfacePython.DebuggerInterfacePython.remoteBreakpointEnable?4(fn, line, enable)
-eric6.Debugger.DebuggerInterfacePython.DebuggerInterfacePython.remoteBreakpointIgnore?4(fn, line, count)
-eric6.Debugger.DebuggerInterfacePython.DebuggerInterfacePython.remoteCapabilities?4()
-eric6.Debugger.DebuggerInterfacePython.DebuggerInterfacePython.remoteClientDisassembly?4()
-eric6.Debugger.DebuggerInterfacePython.DebuggerInterfacePython.remoteClientSetFilter?4(scope, filterStr)
-eric6.Debugger.DebuggerInterfacePython.DebuggerInterfacePython.remoteClientVariable?4(scope, filterList, var, framenr=0, maxSize=0)
-eric6.Debugger.DebuggerInterfacePython.DebuggerInterfacePython.remoteClientVariables?4(scope, filterList, framenr=0, maxSize=0)
-eric6.Debugger.DebuggerInterfacePython.DebuggerInterfacePython.remoteCompletion?4(text)
-eric6.Debugger.DebuggerInterfacePython.DebuggerInterfacePython.remoteContinue?4(special=False)
+eric6.Debugger.DebuggerInterfacePython.DebuggerInterfacePython.remoteBreakpoint?4(debuggerId, fn, line, setBreakpoint, cond=None, temp=False)
+eric6.Debugger.DebuggerInterfacePython.DebuggerInterfacePython.remoteBreakpointEnable?4(debuggerId, fn, line, enable)
+eric6.Debugger.DebuggerInterfacePython.DebuggerInterfacePython.remoteBreakpointIgnore?4(debuggerId, fn, line, count)
+eric6.Debugger.DebuggerInterfacePython.DebuggerInterfacePython.remoteCapabilities?4(debuggerId)
+eric6.Debugger.DebuggerInterfacePython.DebuggerInterfacePython.remoteClientDisassembly?4(debuggerId)
+eric6.Debugger.DebuggerInterfacePython.DebuggerInterfacePython.remoteClientSetFilter?4(debuggerId, scope, filterStr)
+eric6.Debugger.DebuggerInterfacePython.DebuggerInterfacePython.remoteClientStack?4(debuggerId)
+eric6.Debugger.DebuggerInterfacePython.DebuggerInterfacePython.remoteClientVariable?4(debuggerId, scope, filterList, var, framenr=0, maxSize=0)
+eric6.Debugger.DebuggerInterfacePython.DebuggerInterfacePython.remoteClientVariables?4(debuggerId, scope, filterList, framenr=0, maxSize=0)
+eric6.Debugger.DebuggerInterfacePython.DebuggerInterfacePython.remoteCompletion?4(debuggerId, text)
+eric6.Debugger.DebuggerInterfacePython.DebuggerInterfacePython.remoteContinue?4(debuggerId, special=False)
+eric6.Debugger.DebuggerInterfacePython.DebuggerInterfacePython.remoteContinueUntil?4(debuggerId, line)
 eric6.Debugger.DebuggerInterfacePython.DebuggerInterfacePython.remoteCoverage?4(fn, argv, wd, erase=False)
 eric6.Debugger.DebuggerInterfacePython.DebuggerInterfacePython.remoteEnvironment?4(env)
-eric6.Debugger.DebuggerInterfacePython.DebuggerInterfacePython.remoteLoad?4(fn, argv, wd, traceInterpreter=False, autoContinue=True, autoFork=False, forkChild=False)
-eric6.Debugger.DebuggerInterfacePython.DebuggerInterfacePython.remoteMoveIP?4(line)
+eric6.Debugger.DebuggerInterfacePython.DebuggerInterfacePython.remoteLoad?4(fn, argv, wd, traceInterpreter=False, autoContinue=True, enableMultiprocess=False)
+eric6.Debugger.DebuggerInterfacePython.DebuggerInterfacePython.remoteMoveIP?4(debuggerId, line)
+eric6.Debugger.DebuggerInterfacePython.DebuggerInterfacePython.remoteNoDebugList?4(debuggerId, noDebugList)
 eric6.Debugger.DebuggerInterfacePython.DebuggerInterfacePython.remoteProfile?4(fn, argv, wd, erase=False)
-eric6.Debugger.DebuggerInterfacePython.DebuggerInterfacePython.remoteRawInput?4(s)
-eric6.Debugger.DebuggerInterfacePython.DebuggerInterfacePython.remoteRun?4(fn, argv, wd, autoFork=False, forkChild=False)
-eric6.Debugger.DebuggerInterfacePython.DebuggerInterfacePython.remoteSetThread?4(tid)
-eric6.Debugger.DebuggerInterfacePython.DebuggerInterfacePython.remoteStatement?4(stmt)
-eric6.Debugger.DebuggerInterfacePython.DebuggerInterfacePython.remoteStep?4()
-eric6.Debugger.DebuggerInterfacePython.DebuggerInterfacePython.remoteStepOut?4()
-eric6.Debugger.DebuggerInterfacePython.DebuggerInterfacePython.remoteStepOver?4()
-eric6.Debugger.DebuggerInterfacePython.DebuggerInterfacePython.remoteStepQuit?4()
-eric6.Debugger.DebuggerInterfacePython.DebuggerInterfacePython.remoteThreadList?4()
+eric6.Debugger.DebuggerInterfacePython.DebuggerInterfacePython.remoteRawInput?4(debuggerId, inputString)
+eric6.Debugger.DebuggerInterfacePython.DebuggerInterfacePython.remoteRun?4(fn, argv, wd)
+eric6.Debugger.DebuggerInterfacePython.DebuggerInterfacePython.remoteSetThread?4(debuggerId, tid)
+eric6.Debugger.DebuggerInterfacePython.DebuggerInterfacePython.remoteStatement?4(debuggerId, stmt)
+eric6.Debugger.DebuggerInterfacePython.DebuggerInterfacePython.remoteStep?4(debuggerId)
+eric6.Debugger.DebuggerInterfacePython.DebuggerInterfacePython.remoteStepOut?4(debuggerId)
+eric6.Debugger.DebuggerInterfacePython.DebuggerInterfacePython.remoteStepOver?4(debuggerId)
+eric6.Debugger.DebuggerInterfacePython.DebuggerInterfacePython.remoteStepQuit?4(debuggerId)
+eric6.Debugger.DebuggerInterfacePython.DebuggerInterfacePython.remoteThreadList?4(debuggerId)
 eric6.Debugger.DebuggerInterfacePython.DebuggerInterfacePython.remoteUTDiscover?4(syspath, workdir, discoveryStart)
 eric6.Debugger.DebuggerInterfacePython.DebuggerInterfacePython.remoteUTPrepare?4(fn, tn, tfn, failed, cov, covname, coverase, syspath, workdir, discover, discoveryStart, testCases, debug)
 eric6.Debugger.DebuggerInterfacePython.DebuggerInterfacePython.remoteUTRun?4(debug, failfast)
 eric6.Debugger.DebuggerInterfacePython.DebuggerInterfacePython.remoteUTStop?4()
-eric6.Debugger.DebuggerInterfacePython.DebuggerInterfacePython.remoteWatchpoint?4(cond, setWatch, temp=False)
-eric6.Debugger.DebuggerInterfacePython.DebuggerInterfacePython.remoteWatchpointEnable?4(cond, enable)
-eric6.Debugger.DebuggerInterfacePython.DebuggerInterfacePython.remoteWatchpointIgnore?4(cond, count)
-eric6.Debugger.DebuggerInterfacePython.DebuggerInterfacePython.setCallTraceEnabled?4(on)
+eric6.Debugger.DebuggerInterfacePython.DebuggerInterfacePython.remoteWatchpoint?4(debuggerId, cond, setWatch, temp=False)
+eric6.Debugger.DebuggerInterfacePython.DebuggerInterfacePython.remoteWatchpointEnable?4(debuggerId, cond, enable)
+eric6.Debugger.DebuggerInterfacePython.DebuggerInterfacePython.remoteWatchpointIgnore?4(debuggerId, cond, count)
+eric6.Debugger.DebuggerInterfacePython.DebuggerInterfacePython.setCallTraceEnabled?4(debuggerId, on)
 eric6.Debugger.DebuggerInterfacePython.DebuggerInterfacePython.shutdown?4()
 eric6.Debugger.DebuggerInterfacePython.DebuggerInterfacePython.startRemote?4(port, runInConsole, venvName, originalPathString, workingDir=None)
 eric6.Debugger.DebuggerInterfacePython.DebuggerInterfacePython.startRemoteForProject?4(port, runInConsole, venvName, originalPathString, workingDir=None)
@@ -729,7 +813,7 @@
 eric6.Debugger.EditBreakpointDialog.EditBreakpointDialog?1(breakPointId, properties, condHistory, parent=None, name=None, modal=False, addMode=False, filenameHistory=None)
 eric6.Debugger.EditWatchpointDialog.EditWatchpointDialog.getData?4()
 eric6.Debugger.EditWatchpointDialog.EditWatchpointDialog?1(properties, parent=None, name=None, modal=False)
-eric6.Debugger.ExceptionLogger.ExceptionLogger.addException?4(exceptionType, exceptionMessage, stackTrace)
+eric6.Debugger.ExceptionLogger.ExceptionLogger.addException?4(exceptionType, exceptionMessage, stackTrace, debuggerId)
 eric6.Debugger.ExceptionLogger.ExceptionLogger.debuggingStarted?4()
 eric6.Debugger.ExceptionLogger.ExceptionLogger.sourceFile?7
 eric6.Debugger.ExceptionLogger.ExceptionLogger?1(parent=None)
@@ -746,11 +830,10 @@
 eric6.Debugger.StartDialog.StartDialog.getDebugData?4()
 eric6.Debugger.StartDialog.StartDialog.getHistories?4()
 eric6.Debugger.StartDialog.StartDialog.getProfilingData?4()
-eric6.Debugger.StartDialog.StartDialog.getRunData?4()
 eric6.Debugger.StartDialog.StartDialog.historiesModified?4()
 eric6.Debugger.StartDialog.StartDialog.on_buttonBox_clicked?4(button)
 eric6.Debugger.StartDialog.StartDialog.on_modFuncCombo_editTextChanged?4()
-eric6.Debugger.StartDialog.StartDialog?1(caption, lastUsedVenvName, argvList, wdList, envList, exceptions, parent=None, dialogType=0, modfuncList=None, tracePython=False, autoClearShell=True, autoContinue=True, autoFork=False, forkChild=False)
+eric6.Debugger.StartDialog.StartDialog?1(caption, lastUsedVenvName, argvList, wdList, envList, exceptions, parent=None, dialogType=0, modfuncList=None, tracePython=False, autoClearShell=True, autoContinue=True, enableMultiprocess=False, multiprocessNoDebugHistory=None)
 eric6.Debugger.StartHistoryEditDialog.StartHistoryEditDialog.getHistory?4()
 eric6.Debugger.StartHistoryEditDialog.StartHistoryEditDialog.on_deleteAllButton_clicked?4()
 eric6.Debugger.StartHistoryEditDialog.StartHistoryEditDialog.on_deleteButton_clicked?4()
@@ -768,7 +851,6 @@
 eric6.Debugger.VariablesViewer.VariableItem.arrayTypes?7
 eric6.Debugger.VariablesViewer.VariableItem.noOfItemsStr?7
 eric6.Debugger.VariablesViewer.VariableItem.nonExpandableTypes?7
-eric6.Debugger.VariablesViewer.VariableItem.populated?4()
 eric6.Debugger.VariablesViewer.VariableItem.rx_nonprintable?7
 eric6.Debugger.VariablesViewer.VariableItem.unsized?7
 eric6.Debugger.VariablesViewer.VariableItem?1(parent, dvar, dtype, dvalue)
@@ -881,6 +963,8 @@
 eric6.DocumentationTools.TemplatesListsStyle.signalsListEntryTemplate?7
 eric6.DocumentationTools.TemplatesListsStyle.signalsListTemplate?7
 eric6.DocumentationTools.TemplatesListsStyle.sinceInfoTemplate?7
+eric6.DocumentationTools.TemplatesListsStyle.yieldTypesTemplate?7
+eric6.DocumentationTools.TemplatesListsStyle.yieldsTemplate?7
 eric6.DocumentationTools.TemplatesListsStyleCSS.authorInfoTemplate?7
 eric6.DocumentationTools.TemplatesListsStyleCSS.classTemplate?7
 eric6.DocumentationTools.TemplatesListsStyleCSS.constructorTemplate?7
@@ -918,6 +1002,8 @@
 eric6.DocumentationTools.TemplatesListsStyleCSS.signalsListEntryTemplate?7
 eric6.DocumentationTools.TemplatesListsStyleCSS.signalsListTemplate?7
 eric6.DocumentationTools.TemplatesListsStyleCSS.sinceInfoTemplate?7
+eric6.DocumentationTools.TemplatesListsStyleCSS.yieldTypesTemplate?7
+eric6.DocumentationTools.TemplatesListsStyleCSS.yieldsTemplate?7
 eric6.DocumentationTools.supportedExtensionsDictForApis?7
 eric6.E5Graphics.E5ArrowItem.ArrowheadAngleFactor?7
 eric6.E5Graphics.E5ArrowItem.E5ArrowItem.boundingRect?4()
@@ -993,6 +1079,9 @@
 eric6.E5Gui.E5ComboBox.E5ComboBox.inactiveText?4()
 eric6.E5Gui.E5ComboBox.E5ComboBox.setInactiveText?4(inactiveText)
 eric6.E5Gui.E5ComboBox.E5ComboBox?1(parent=None, inactiveText="")
+eric6.E5Gui.E5ComboSelectionDialog.E5ComboSelectionDialog.getSelection?4()
+eric6.E5Gui.E5ComboSelectionDialog.E5ComboSelectionDialog.on_selectionComboBox_currentTextChanged?4(txt)
+eric6.E5Gui.E5ComboSelectionDialog.E5ComboSelectionDialog?1(entries, title="", message="", parent=None)
 eric6.E5Gui.E5Completers.E5DirCompleter.rootPath?4()
 eric6.E5Gui.E5Completers.E5DirCompleter.setRootPath?4(path)
 eric6.E5Gui.E5Completers.E5DirCompleter?1(parent=None, completionMode=QCompleter.PopupCompletion, showHidden=False)
@@ -1581,9 +1670,6 @@
 eric6.E5Network.E5GoogleMailHelpers.isClientSecretFileAvailable?4()
 eric6.E5Network.E5NetworkHeaderDetailsDialog.E5NetworkHeaderDetailsDialog.setData?4(name, value)
 eric6.E5Network.E5NetworkHeaderDetailsDialog.E5NetworkHeaderDetailsDialog?1(parent=None)
-eric6.E5Network.E5NetworkIcon.E5NetworkIcon.isOnline?4()
-eric6.E5Network.E5NetworkIcon.E5NetworkIcon.onlineStateChanged?7
-eric6.E5Network.E5NetworkIcon.E5NetworkIcon?1(parent=None)
 eric6.E5Network.E5NetworkProxyFactory.E5NetworkProxyFactory.queryProxy?4(query)
 eric6.E5Network.E5NetworkProxyFactory.E5NetworkProxyFactory?1()
 eric6.E5Network.E5NetworkProxyFactory.HostnameMatcher.match?4(host)
@@ -1728,6 +1814,7 @@
 eric6.E5XML.Config.projectFileFormatVersionIdl?7
 eric6.E5XML.Config.projectFileFormatVersionMake?7
 eric6.E5XML.Config.projectFileFormatVersionProto?7
+eric6.E5XML.Config.projectFileFormatVersionRcc?7
 eric6.E5XML.Config.projectFileFormatVersionUic?7
 eric6.E5XML.Config.sessionFileFormatVersion?7
 eric6.E5XML.Config.shortcutsFileFormatVersion?7
@@ -2315,6 +2402,7 @@
 eric6.MicroPython.MicroPythonDevices.MicroPythonDevice.canStartPlotter?4()
 eric6.MicroPython.MicroPythonDevices.MicroPythonDevice.canStartRepl?4()
 eric6.MicroPython.MicroPythonDevices.MicroPythonDevice.deviceName?4()
+eric6.MicroPython.MicroPythonDevices.MicroPythonDevice.downloadFirmware?4()
 eric6.MicroPython.MicroPythonDevices.MicroPythonDevice.forceInterrupt?4()
 eric6.MicroPython.MicroPythonDevices.MicroPythonDevice.getDocumentationUrl?4()
 eric6.MicroPython.MicroPythonDevices.MicroPythonDevice.getFirmwareUrl?4()
@@ -2428,9 +2516,10 @@
 eric6.MicroPython.MicrobitDevices.MicrobitDevice.canStartPlotter?4()
 eric6.MicroPython.MicrobitDevices.MicrobitDevice.canStartRepl?4()
 eric6.MicroPython.MicrobitDevices.MicrobitDevice.deviceName?4()
+eric6.MicroPython.MicrobitDevices.MicrobitDevice.downloadFirmware?4()
 eric6.MicroPython.MicrobitDevices.MicrobitDevice.forceInterrupt?4()
 eric6.MicroPython.MicrobitDevices.MicrobitDevice.getDocumentationUrl?4()
-eric6.MicroPython.MicrobitDevices.MicrobitDevice.getFirmwareUrl?4()
+eric6.MicroPython.MicrobitDevices.MicrobitDevice.getFirmwareUrl?4(fwtype="mpy")
 eric6.MicroPython.MicrobitDevices.MicrobitDevice.getWorkspace?4()
 eric6.MicroPython.MicrobitDevices.MicrobitDevice.hasTimeCommands?4()
 eric6.MicroPython.MicrobitDevices.MicrobitDevice.runScript?4(script)
@@ -2964,10 +3053,12 @@
 eric6.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleCheckerDialog.CodeStyleCheckerDialog.noFiles?7
 eric6.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleCheckerDialog.CodeStyleCheckerDialog.noResults?7
 eric6.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleCheckerDialog.CodeStyleCheckerDialog.on_addBuiltinButton_clicked?4()
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleCheckerDialog.CodeStyleCheckerDialog.on_addWhitelistButton_clicked?4()
 eric6.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleCheckerDialog.CodeStyleCheckerDialog.on_builtinsAssignmentList_itemSelectionChanged?4()
 eric6.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleCheckerDialog.CodeStyleCheckerDialog.on_buttonBox_clicked?4(button)
 eric6.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleCheckerDialog.CodeStyleCheckerDialog.on_cancelButton_clicked?4()
 eric6.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleCheckerDialog.CodeStyleCheckerDialog.on_deleteBuiltinButton_clicked?4()
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleCheckerDialog.CodeStyleCheckerDialog.on_deleteWhitelistButton_clicked?4()
 eric6.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleCheckerDialog.CodeStyleCheckerDialog.on_excludeMessagesSelectButton_clicked?4()
 eric6.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleCheckerDialog.CodeStyleCheckerDialog.on_fixButton_clicked?4()
 eric6.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleCheckerDialog.CodeStyleCheckerDialog.on_fixIssuesSelectButton_clicked?4()
@@ -2982,6 +3073,7 @@
 eric6.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleCheckerDialog.CodeStyleCheckerDialog.on_startButton_clicked?4()
 eric6.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleCheckerDialog.CodeStyleCheckerDialog.on_statisticsButton_clicked?4()
 eric6.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleCheckerDialog.CodeStyleCheckerDialog.on_storeDefaultButton_clicked?4()
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleCheckerDialog.CodeStyleCheckerDialog.on_whitelistWidget_itemSelectionChanged?4()
 eric6.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleCheckerDialog.CodeStyleCheckerDialog.positionRole?7
 eric6.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleCheckerDialog.CodeStyleCheckerDialog.prepare?4(fileList, project)
 eric6.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleCheckerDialog.CodeStyleCheckerDialog.start?4(fn, save=False, repeat=None)
@@ -3086,6 +3178,7 @@
 eric6.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.TextVisitor.visit_Str?4(node)
 eric6.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.TextVisitor?1()
 eric6.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.composeCallPath?4(node)
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousDefaults.MiscellaneousCheckerDefaultArgs?7
 eric6.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.translations._miscellaneousMessages?8
 eric6.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.translations._miscellaneousMessagesSampleArgs?8
 eric6.Plugins.CheckerPlugins.CodeStyleChecker.Naming.NamingStyleChecker.NamingStyleChecker.CamelcaseRegexp?7
@@ -3239,16 +3332,30 @@
 eric6.Plugins.CheckerPlugins.CodeStyleChecker.Security.SecurityUtils.namespacePathSplit?4(path)
 eric6.Plugins.CheckerPlugins.CodeStyleChecker.Security.translations._securityMessages?8
 eric6.Plugins.CheckerPlugins.CodeStyleChecker.Security.translations._securityMessagesSampleArgs?8
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.eradicate.MULTILINE_ASSIGNMENT_REGEX?7
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.eradicate.PARTIAL_DICTIONARY_REGEX?7
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.eradicate.comment_contains_code?4(line, aggressive=True)
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.eradicate.commented_out_code_line_numbers?4(source, aggressive=True)
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.eradicate.detect_encoding?4(filename)
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.eradicate.filter_commented_out_code?4(source, aggressive=True)
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.eradicate.fix_file?4(filename, args, standard_out)
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.eradicate.Eradicator.BRACKET_REGEX?7
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.eradicate.Eradicator.CODE_INDICATORS?7
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.eradicate.Eradicator.CODE_KEYWORDS?7
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.eradicate.Eradicator.CODE_KEYWORDS_AGGR?7
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.eradicate.Eradicator.CODING_COMMENT_REGEX?7
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.eradicate.Eradicator.DEFAULT_WHITELIST?7
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.eradicate.Eradicator.DEF_STATEMENT_REGEX?7
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.eradicate.Eradicator.FOR_STATEMENT_REGEX?7
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.eradicate.Eradicator.HASH_NUMBER?7
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.eradicate.Eradicator.MULTILINE_ASSIGNMENT_REGEX?7
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.eradicate.Eradicator.PARTIAL_DICTIONARY_REGEX?7
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.eradicate.Eradicator.PRINT_RETURN_REGEX?7
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.eradicate.Eradicator.WHITELIST_REGEX?7
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.eradicate.Eradicator.WHITESPACE_HASH?7
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.eradicate.Eradicator.WITH_STATEMENT_REGEX?7
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.eradicate.Eradicator.comment_contains_code?4(line, aggressive=True)
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.eradicate.Eradicator.commented_out_code_line_numbers?4(source, aggressive=True)
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.eradicate.Eradicator.detect_encoding?4(filename)
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.eradicate.Eradicator.filter_commented_out_code?4(source, aggressive=True)
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.eradicate.Eradicator.fix_file?4(filename, args, standard_out)
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.eradicate.Eradicator.multiline_case?4(line, aggressive=True)
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.eradicate.Eradicator.open_with_encoding?4(filename, encoding, mode='r')
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.eradicate.Eradicator.update_whitelist?4(new_whitelist, extend_default=True)
 eric6.Plugins.CheckerPlugins.CodeStyleChecker.eradicate.main?4(argv, standard_out, standard_error)
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.eradicate.multiline_case?4(line, aggressive=True)
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.eradicate.open_with_encoding?4(filename, encoding, mode='r')
 eric6.Plugins.CheckerPlugins.CodeStyleChecker.mccabe.ASTVisitor.default?4(node, *args)
 eric6.Plugins.CheckerPlugins.CodeStyleChecker.mccabe.ASTVisitor.dispatch?4(node, *args)
 eric6.Plugins.CheckerPlugins.CodeStyleChecker.mccabe.ASTVisitor.preorder?4(tree, visitor, *args)
@@ -4561,12 +4668,12 @@
 eric6.Plugins.VcsPlugins.vcsGit.git.Git?1(plugin, parent=None, name=None)
 eric6.Plugins.VcsPlugins.vcsMercurial.CloseheadExtension.HgCloseHeadSelectionDialog.HgCloseHeadSelectionDialog.getData?4()
 eric6.Plugins.VcsPlugins.vcsMercurial.CloseheadExtension.HgCloseHeadSelectionDialog.HgCloseHeadSelectionDialog.on_headsList_itemSelectionChanged?4()
-eric6.Plugins.VcsPlugins.vcsMercurial.CloseheadExtension.HgCloseHeadSelectionDialog.HgCloseHeadSelectionDialog?1(vcs, ppath, parent=None)
+eric6.Plugins.VcsPlugins.vcsMercurial.CloseheadExtension.HgCloseHeadSelectionDialog.HgCloseHeadSelectionDialog?1(vcs, parent=None)
 eric6.Plugins.VcsPlugins.vcsMercurial.CloseheadExtension.ProjectHelper.CloseheadProjectHelper.initActions?4()
 eric6.Plugins.VcsPlugins.vcsMercurial.CloseheadExtension.ProjectHelper.CloseheadProjectHelper.initMenu?4(mainMenu)
 eric6.Plugins.VcsPlugins.vcsMercurial.CloseheadExtension.ProjectHelper.CloseheadProjectHelper.menuTitle?4()
 eric6.Plugins.VcsPlugins.vcsMercurial.CloseheadExtension.ProjectHelper.CloseheadProjectHelper?1()
-eric6.Plugins.VcsPlugins.vcsMercurial.CloseheadExtension.closehead.Closehead.hgCloseheads?4(name, revisions=None)
+eric6.Plugins.VcsPlugins.vcsMercurial.CloseheadExtension.closehead.Closehead.hgCloseheads?4(revisions=None)
 eric6.Plugins.VcsPlugins.vcsMercurial.CloseheadExtension.closehead.Closehead?1(vcs)
 eric6.Plugins.VcsPlugins.vcsMercurial.Config.ConfigHgSchemes?7
 eric6.Plugins.VcsPlugins.vcsMercurial.ConfigurationPage.MercurialPage.MercurialPage.on_configButton_clicked?4()
@@ -4588,15 +4695,15 @@
 eric6.Plugins.VcsPlugins.vcsMercurial.GpgExtension.HgGpgSignaturesDialog.HgGpgSignaturesDialog.on_rxEdit_textChanged?4(txt)
 eric6.Plugins.VcsPlugins.vcsMercurial.GpgExtension.HgGpgSignaturesDialog.HgGpgSignaturesDialog.on_signaturesList_itemSelectionChanged?4()
 eric6.Plugins.VcsPlugins.vcsMercurial.GpgExtension.HgGpgSignaturesDialog.HgGpgSignaturesDialog.on_verifyButton_clicked?4()
-eric6.Plugins.VcsPlugins.vcsMercurial.GpgExtension.HgGpgSignaturesDialog.HgGpgSignaturesDialog.start?4(path)
+eric6.Plugins.VcsPlugins.vcsMercurial.GpgExtension.HgGpgSignaturesDialog.HgGpgSignaturesDialog.start?4()
 eric6.Plugins.VcsPlugins.vcsMercurial.GpgExtension.HgGpgSignaturesDialog.HgGpgSignaturesDialog?1(vcs, parent=None)
 eric6.Plugins.VcsPlugins.vcsMercurial.GpgExtension.ProjectHelper.GpgProjectHelper.initActions?4()
 eric6.Plugins.VcsPlugins.vcsMercurial.GpgExtension.ProjectHelper.GpgProjectHelper.initMenu?4(mainMenu)
 eric6.Plugins.VcsPlugins.vcsMercurial.GpgExtension.ProjectHelper.GpgProjectHelper.menuTitle?4()
 eric6.Plugins.VcsPlugins.vcsMercurial.GpgExtension.ProjectHelper.GpgProjectHelper?1()
-eric6.Plugins.VcsPlugins.vcsMercurial.GpgExtension.gpg.Gpg.hgGpgSign?4(path, revisions=None)
-eric6.Plugins.VcsPlugins.vcsMercurial.GpgExtension.gpg.Gpg.hgGpgSignatures?4(path)
-eric6.Plugins.VcsPlugins.vcsMercurial.GpgExtension.gpg.Gpg.hgGpgVerifySignatures?4(path, rev=None)
+eric6.Plugins.VcsPlugins.vcsMercurial.GpgExtension.gpg.Gpg.hgGpgSign?4(revisions=None)
+eric6.Plugins.VcsPlugins.vcsMercurial.GpgExtension.gpg.Gpg.hgGpgSignatures?4()
+eric6.Plugins.VcsPlugins.vcsMercurial.GpgExtension.gpg.Gpg.hgGpgVerifySignatures?4(rev=None)
 eric6.Plugins.VcsPlugins.vcsMercurial.GpgExtension.gpg.Gpg.shutdown?4()
 eric6.Plugins.VcsPlugins.vcsMercurial.GpgExtension.gpg.Gpg?1(vcs)
 eric6.Plugins.VcsPlugins.vcsMercurial.HgAddSubrepositoryDialog.HgAddSubrepositoryDialog.getData?4()
@@ -4645,13 +4752,13 @@
 eric6.Plugins.VcsPlugins.vcsMercurial.HgBookmarksInOutDialog.HgBookmarksInOutDialog.OUTGOING?7
 eric6.Plugins.VcsPlugins.vcsMercurial.HgBookmarksInOutDialog.HgBookmarksInOutDialog.closeEvent?4(e)
 eric6.Plugins.VcsPlugins.vcsMercurial.HgBookmarksInOutDialog.HgBookmarksInOutDialog.on_buttonBox_clicked?4(button)
-eric6.Plugins.VcsPlugins.vcsMercurial.HgBookmarksInOutDialog.HgBookmarksInOutDialog.start?4(path)
+eric6.Plugins.VcsPlugins.vcsMercurial.HgBookmarksInOutDialog.HgBookmarksInOutDialog.start?4()
 eric6.Plugins.VcsPlugins.vcsMercurial.HgBookmarksInOutDialog.HgBookmarksInOutDialog?1(vcs, mode, parent=None)
 eric6.Plugins.VcsPlugins.vcsMercurial.HgBookmarksListDialog.HgBookmarksListDialog.closeEvent?4(e)
 eric6.Plugins.VcsPlugins.vcsMercurial.HgBookmarksListDialog.HgBookmarksListDialog.on_bookmarksList_customContextMenuRequested?4(pos)
 eric6.Plugins.VcsPlugins.vcsMercurial.HgBookmarksListDialog.HgBookmarksListDialog.on_buttonBox_clicked?4(button)
 eric6.Plugins.VcsPlugins.vcsMercurial.HgBookmarksListDialog.HgBookmarksListDialog.on_refreshButton_clicked?4()
-eric6.Plugins.VcsPlugins.vcsMercurial.HgBookmarksListDialog.HgBookmarksListDialog.start?4(path, bookmarksList)
+eric6.Plugins.VcsPlugins.vcsMercurial.HgBookmarksListDialog.HgBookmarksListDialog.start?4(bookmarksList)
 eric6.Plugins.VcsPlugins.vcsMercurial.HgBookmarksListDialog.HgBookmarksListDialog?1(vcs, parent=None)
 eric6.Plugins.VcsPlugins.vcsMercurial.HgBranchInputDialog.HgBranchInputDialog.getData?4()
 eric6.Plugins.VcsPlugins.vcsMercurial.HgBranchInputDialog.HgBranchInputDialog.on_branchComboBox_editTextChanged?4(txt)
@@ -4673,6 +4780,7 @@
 eric6.Plugins.VcsPlugins.vcsMercurial.HgClient.HgClient.ReturnFormat?7
 eric6.Plugins.VcsPlugins.vcsMercurial.HgClient.HgClient.cancel?4()
 eric6.Plugins.VcsPlugins.vcsMercurial.HgClient.HgClient.func?4()
+eric6.Plugins.VcsPlugins.vcsMercurial.HgClient.HgClient.getRepository?4()
 eric6.Plugins.VcsPlugins.vcsMercurial.HgClient.HgClient.isExecuting?4()
 eric6.Plugins.VcsPlugins.vcsMercurial.HgClient.HgClient.myprompt?4()
 eric6.Plugins.VcsPlugins.vcsMercurial.HgClient.HgClient.restartServer?4()
@@ -4710,7 +4818,7 @@
 eric6.Plugins.VcsPlugins.vcsMercurial.HgConflictsListDialog.HgConflictsListDialog.on_resolvedButton_clicked?4()
 eric6.Plugins.VcsPlugins.vcsMercurial.HgConflictsListDialog.HgConflictsListDialog.on_unresolvedButton_clicked?4()
 eric6.Plugins.VcsPlugins.vcsMercurial.HgConflictsListDialog.HgConflictsListDialog.show?4()
-eric6.Plugins.VcsPlugins.vcsMercurial.HgConflictsListDialog.HgConflictsListDialog.start?4(path)
+eric6.Plugins.VcsPlugins.vcsMercurial.HgConflictsListDialog.HgConflictsListDialog.start?4()
 eric6.Plugins.VcsPlugins.vcsMercurial.HgConflictsListDialog.HgConflictsListDialog?1(vcs, parent=None)
 eric6.Plugins.VcsPlugins.vcsMercurial.HgCopyDialog.HgCopyDialog.getData?4()
 eric6.Plugins.VcsPlugins.vcsMercurial.HgCopyDialog.HgCopyDialog.on_targetPicker_textChanged?4(txt)
@@ -4719,7 +4827,7 @@
 eric6.Plugins.VcsPlugins.vcsMercurial.HgDialog.HgDialog.normalExit?4()
 eric6.Plugins.VcsPlugins.vcsMercurial.HgDialog.HgDialog.normalExitWithoutErrors?4()
 eric6.Plugins.VcsPlugins.vcsMercurial.HgDialog.HgDialog.on_buttonBox_clicked?4(button)
-eric6.Plugins.VcsPlugins.vcsMercurial.HgDialog.HgDialog.startProcess?4(args, workingDir=None, showArgs=True, environment=None)
+eric6.Plugins.VcsPlugins.vcsMercurial.HgDialog.HgDialog.startProcess?4(args, showArgs=True, environment=None, client=None)
 eric6.Plugins.VcsPlugins.vcsMercurial.HgDialog.HgDialog?1(text, hg=None, useClient=True, parent=None)
 eric6.Plugins.VcsPlugins.vcsMercurial.HgDiffDialog.HgDiffDialog.closeEvent?4(e)
 eric6.Plugins.VcsPlugins.vcsMercurial.HgDiffDialog.HgDiffDialog.on_buttonBox_clicked?4(button)
@@ -4802,7 +4910,7 @@
 eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.HgLogBrowserDialog.on_toDate_dateChanged?4(date)
 eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.HgLogBrowserDialog.on_upButton_clicked?4()
 eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.HgLogBrowserDialog.show?4()
-eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.HgLogBrowserDialog.start?4(fn, bundle=None, isFile=False, noEntries=0)
+eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.HgLogBrowserDialog.start?4(name=None, bundle=None, isFile=False, noEntries=0)
 eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.HgLogBrowserDialog?1(vcs, mode="", parent=None)
 eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.LIGHTCOLORS?7
 eric6.Plugins.VcsPlugins.vcsMercurial.HgMergeDialog.HgMergeDialog.getParameters?4()
@@ -4879,13 +4987,13 @@
 eric6.Plugins.VcsPlugins.vcsMercurial.HgStatusMonitorThread.HgStatusMonitorThread?1(interval, project, vcs, parent=None)
 eric6.Plugins.VcsPlugins.vcsMercurial.HgSummaryDialog.HgSummaryDialog.on_buttonBox_clicked?4(button)
 eric6.Plugins.VcsPlugins.vcsMercurial.HgSummaryDialog.HgSummaryDialog.on_refreshButton_clicked?4()
-eric6.Plugins.VcsPlugins.vcsMercurial.HgSummaryDialog.HgSummaryDialog.start?4(path, mq=False, largefiles=False)
+eric6.Plugins.VcsPlugins.vcsMercurial.HgSummaryDialog.HgSummaryDialog.start?4(mq=False, largefiles=False)
 eric6.Plugins.VcsPlugins.vcsMercurial.HgSummaryDialog.HgSummaryDialog?1(vcs, parent=None)
 eric6.Plugins.VcsPlugins.vcsMercurial.HgTagBranchListDialog.HgTagBranchListDialog.closeEvent?4(e)
 eric6.Plugins.VcsPlugins.vcsMercurial.HgTagBranchListDialog.HgTagBranchListDialog.on_buttonBox_clicked?4(button)
 eric6.Plugins.VcsPlugins.vcsMercurial.HgTagBranchListDialog.HgTagBranchListDialog.on_refreshButton_clicked?4()
 eric6.Plugins.VcsPlugins.vcsMercurial.HgTagBranchListDialog.HgTagBranchListDialog.on_tagList_customContextMenuRequested?4(pos)
-eric6.Plugins.VcsPlugins.vcsMercurial.HgTagBranchListDialog.HgTagBranchListDialog.start?4(path, tags, tagsList, allTagsList)
+eric6.Plugins.VcsPlugins.vcsMercurial.HgTagBranchListDialog.HgTagBranchListDialog.start?4(tags, tagsList, allTagsList)
 eric6.Plugins.VcsPlugins.vcsMercurial.HgTagBranchListDialog.HgTagBranchListDialog?1(vcs, parent=None)
 eric6.Plugins.VcsPlugins.vcsMercurial.HgTagDialog.HgTagDialog.CreateGlobalTag?7
 eric6.Plugins.VcsPlugins.vcsMercurial.HgTagDialog.HgTagDialog.CreateLocalTag?7
@@ -4956,9 +5064,9 @@
 eric6.Plugins.VcsPlugins.vcsMercurial.HisteditExtension.ProjectHelper.HisteditProjectHelper.menuTitle?4()
 eric6.Plugins.VcsPlugins.vcsMercurial.HisteditExtension.ProjectHelper.HisteditProjectHelper?1()
 eric6.Plugins.VcsPlugins.vcsMercurial.HisteditExtension.histedit.Histedit.hgHisteditAbort?4(name)
-eric6.Plugins.VcsPlugins.vcsMercurial.HisteditExtension.histedit.Histedit.hgHisteditContinue?4(name)
-eric6.Plugins.VcsPlugins.vcsMercurial.HisteditExtension.histedit.Histedit.hgHisteditEditPlan?4(name)
-eric6.Plugins.VcsPlugins.vcsMercurial.HisteditExtension.histedit.Histedit.hgHisteditStart?4(name, rev="")
+eric6.Plugins.VcsPlugins.vcsMercurial.HisteditExtension.histedit.Histedit.hgHisteditContinue?4()
+eric6.Plugins.VcsPlugins.vcsMercurial.HisteditExtension.histedit.Histedit.hgHisteditEditPlan?4()
+eric6.Plugins.VcsPlugins.vcsMercurial.HisteditExtension.histedit.Histedit.hgHisteditStart?4(rev="")
 eric6.Plugins.VcsPlugins.vcsMercurial.HisteditExtension.histedit.Histedit?1(vcs)
 eric6.Plugins.VcsPlugins.vcsMercurial.LargefilesExtension.LfConvertDataDialog.LfConvertDataDialog.getData?4()
 eric6.Plugins.VcsPlugins.vcsMercurial.LargefilesExtension.LfConvertDataDialog.LfConvertDataDialog.on_newProjectPicker_textChanged?4(txt)
@@ -4977,8 +5085,8 @@
 eric6.Plugins.VcsPlugins.vcsMercurial.LargefilesExtension.ProjectHelper.LargefilesProjectHelper?1()
 eric6.Plugins.VcsPlugins.vcsMercurial.LargefilesExtension.getDefaults?4()
 eric6.Plugins.VcsPlugins.vcsMercurial.LargefilesExtension.largefiles.Largefiles.hgAdd?4(names, mode)
-eric6.Plugins.VcsPlugins.vcsMercurial.LargefilesExtension.largefiles.Largefiles.hgLfPull?4(projectDir, revisions=None)
-eric6.Plugins.VcsPlugins.vcsMercurial.LargefilesExtension.largefiles.Largefiles.hgLfVerify?4(projectDir, mode)
+eric6.Plugins.VcsPlugins.vcsMercurial.LargefilesExtension.largefiles.Largefiles.hgLfPull?4(revisions=None)
+eric6.Plugins.VcsPlugins.vcsMercurial.LargefilesExtension.largefiles.Largefiles.hgLfVerify?4(mode)
 eric6.Plugins.VcsPlugins.vcsMercurial.LargefilesExtension.largefiles.Largefiles.hgLfconvert?4(direction, projectFile)
 eric6.Plugins.VcsPlugins.vcsMercurial.LargefilesExtension.largefiles.Largefiles?1(vcs)
 eric6.Plugins.VcsPlugins.vcsMercurial.ProjectBrowserHelper.HgProjectBrowserHelper._addVCSMenu?5(mainMenu)
@@ -5006,8 +5114,8 @@
 eric6.Plugins.VcsPlugins.vcsMercurial.PurgeExtension.ProjectHelper.PurgeProjectHelper.initMenu?4(mainMenu)
 eric6.Plugins.VcsPlugins.vcsMercurial.PurgeExtension.ProjectHelper.PurgeProjectHelper.menuTitle?4()
 eric6.Plugins.VcsPlugins.vcsMercurial.PurgeExtension.ProjectHelper.PurgeProjectHelper?1()
-eric6.Plugins.VcsPlugins.vcsMercurial.PurgeExtension.purge.Purge.hgPurge?4(name, deleteAll=False)
-eric6.Plugins.VcsPlugins.vcsMercurial.PurgeExtension.purge.Purge.hgPurgeList?4(name, deleteAll=False)
+eric6.Plugins.VcsPlugins.vcsMercurial.PurgeExtension.purge.Purge.hgPurge?4(deleteAll=False)
+eric6.Plugins.VcsPlugins.vcsMercurial.PurgeExtension.purge.Purge.hgPurgeList?4(deleteAll=False)
 eric6.Plugins.VcsPlugins.vcsMercurial.PurgeExtension.purge.Purge.shutdown?4()
 eric6.Plugins.VcsPlugins.vcsMercurial.PurgeExtension.purge.Purge?1(vcs)
 eric6.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.HgQueuesDefineGuardsDialog.HgQueuesDefineGuardsDialog.closeEvent?4(e)
@@ -5017,7 +5125,7 @@
 eric6.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.HgQueuesDefineGuardsDialog.HgQueuesDefineGuardsDialog.on_guardsList_itemSelectionChanged?4()
 eric6.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.HgQueuesDefineGuardsDialog.HgQueuesDefineGuardsDialog.on_patchSelector_activated?4(patch)
 eric6.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.HgQueuesDefineGuardsDialog.HgQueuesDefineGuardsDialog.on_removeButton_clicked?4()
-eric6.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.HgQueuesDefineGuardsDialog.HgQueuesDefineGuardsDialog.start?4(path)
+eric6.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.HgQueuesDefineGuardsDialog.HgQueuesDefineGuardsDialog.start?4()
 eric6.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.HgQueuesDefineGuardsDialog.HgQueuesDefineGuardsDialog?1(vcs, extension, patchesList, parent=None)
 eric6.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.HgQueuesFoldDialog.HgQueuesFoldDialog.getData?4()
 eric6.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.HgQueuesFoldDialog.HgQueuesFoldDialog.on_addButton_clicked?4()
@@ -5031,17 +5139,17 @@
 eric6.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.HgQueuesGuardsSelectionDialog.HgQueuesGuardsSelectionDialog?1(guards, activeGuards=None, listOnly=False, parent=None)
 eric6.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.HgQueuesHeaderDialog.HgQueuesHeaderDialog.closeEvent?4(e)
 eric6.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.HgQueuesHeaderDialog.HgQueuesHeaderDialog.on_buttonBox_clicked?4(button)
-eric6.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.HgQueuesHeaderDialog.HgQueuesHeaderDialog.start?4(path)
+eric6.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.HgQueuesHeaderDialog.HgQueuesHeaderDialog.start?4()
 eric6.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.HgQueuesHeaderDialog.HgQueuesHeaderDialog?1(vcs, parent=None)
-eric6.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.HgQueuesListAllGuardsDialog.HgQueuesListAllGuardsDialog.start?4(path)
+eric6.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.HgQueuesListAllGuardsDialog.HgQueuesListAllGuardsDialog.start?4()
 eric6.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.HgQueuesListAllGuardsDialog.HgQueuesListAllGuardsDialog?1(vcs, parent=None)
 eric6.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.HgQueuesListDialog.HgQueuesListDialog.closeEvent?4(e)
 eric6.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.HgQueuesListDialog.HgQueuesListDialog.on_buttonBox_clicked?4(button)
-eric6.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.HgQueuesListDialog.HgQueuesListDialog.start?4(path)
+eric6.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.HgQueuesListDialog.HgQueuesListDialog.start?4()
 eric6.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.HgQueuesListDialog.HgQueuesListDialog?1(vcs, parent=None)
 eric6.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.HgQueuesListGuardsDialog.HgQueuesListGuardsDialog.closeEvent?4(e)
 eric6.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.HgQueuesListGuardsDialog.HgQueuesListGuardsDialog.on_patchSelector_activated?4(patch)
-eric6.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.HgQueuesListGuardsDialog.HgQueuesListGuardsDialog.start?4(path)
+eric6.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.HgQueuesListGuardsDialog.HgQueuesListGuardsDialog.start?4()
 eric6.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.HgQueuesListGuardsDialog.HgQueuesListGuardsDialog?1(vcs, patchesList, parent=None)
 eric6.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.HgQueuesNewPatchDialog.HgQueuesNewPatchDialog.NEW_MODE?7
 eric6.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.HgQueuesNewPatchDialog.HgQueuesNewPatchDialog.REFRESH_MODE?7
@@ -5060,7 +5168,7 @@
 eric6.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.HgQueuesQueueManagementDialog.HgQueuesQueueManagementDialog.on_nameEdit_textChanged?4(txt)
 eric6.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.HgQueuesQueueManagementDialog.HgQueuesQueueManagementDialog.on_queuesList_itemSelectionChanged?4()
 eric6.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.HgQueuesQueueManagementDialog.HgQueuesQueueManagementDialog.refresh?4()
-eric6.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.HgQueuesQueueManagementDialog.HgQueuesQueueManagementDialog?1(mode, title, suppressActive, repodir, vcs, parent=None)
+eric6.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.HgQueuesQueueManagementDialog.HgQueuesQueueManagementDialog?1(mode, title, suppressActive, vcs, parent=None)
 eric6.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.HgQueuesRenamePatchDialog.HgQueuesRenamePatchDialog.getData?4()
 eric6.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.HgQueuesRenamePatchDialog.HgQueuesRenamePatchDialog.on_nameCombo_currentIndexChanged?4(txt)
 eric6.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.HgQueuesRenamePatchDialog.HgQueuesRenamePatchDialog.on_nameEdit_textChanged?4(txt)
@@ -5079,27 +5187,27 @@
 eric6.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.queues.Queues.QUEUE_PURGE?7
 eric6.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.queues.Queues.SERIES_LIST?7
 eric6.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.queues.Queues.UNAPPLIED_LIST?7
-eric6.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.queues.Queues.getGuardsList?4(repodir, allGuards=True)
-eric6.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.queues.Queues.hgQueueCreateRenameQueue?4(name, isCreate)
-eric6.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.queues.Queues.hgQueueDeletePatch?4(name)
-eric6.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.queues.Queues.hgQueueDeletePurgeActivateQueue?4(name, operation)
-eric6.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.queues.Queues.hgQueueFinishAppliedPatches?4(name)
-eric6.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.queues.Queues.hgQueueFoldUnappliedPatches?4(name)
-eric6.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.queues.Queues.hgQueueGuardsDeactivate?4(name)
-eric6.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.queues.Queues.hgQueueGuardsDefine?4(name)
-eric6.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.queues.Queues.hgQueueGuardsDropAll?4(name)
-eric6.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.queues.Queues.hgQueueGuardsIdentifyActive?4(name)
-eric6.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.queues.Queues.hgQueueGuardsList?4(name)
-eric6.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.queues.Queues.hgQueueGuardsListAll?4(name)
-eric6.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.queues.Queues.hgQueueGuardsSetActive?4(name)
+eric6.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.queues.Queues.getGuardsList?4(allGuards=True)
+eric6.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.queues.Queues.hgQueueCreateRenameQueue?4(isCreate)
+eric6.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.queues.Queues.hgQueueDeletePatch?4()
+eric6.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.queues.Queues.hgQueueDeletePurgeActivateQueue?4(operation)
+eric6.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.queues.Queues.hgQueueFinishAppliedPatches?4()
+eric6.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.queues.Queues.hgQueueFoldUnappliedPatches?4()
+eric6.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.queues.Queues.hgQueueGuardsDeactivate?4()
+eric6.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.queues.Queues.hgQueueGuardsDefine?4()
+eric6.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.queues.Queues.hgQueueGuardsDropAll?4()
+eric6.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.queues.Queues.hgQueueGuardsIdentifyActive?4()
+eric6.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.queues.Queues.hgQueueGuardsList?4()
+eric6.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.queues.Queues.hgQueueGuardsListAll?4()
+eric6.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.queues.Queues.hgQueueGuardsSetActive?4()
 eric6.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.queues.Queues.hgQueueInit?4(name)
-eric6.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.queues.Queues.hgQueueListPatches?4(name)
-eric6.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.queues.Queues.hgQueueListQueues?4(name)
-eric6.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.queues.Queues.hgQueueNewPatch?4(name)
-eric6.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.queues.Queues.hgQueuePushPopPatches?4(name, operation, doAll=False, named=False, force=False)
-eric6.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.queues.Queues.hgQueueRefreshPatch?4(name, editMessage=False)
-eric6.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.queues.Queues.hgQueueRenamePatch?4(name)
-eric6.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.queues.Queues.hgQueueShowHeader?4(name)
+eric6.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.queues.Queues.hgQueueListPatches?4()
+eric6.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.queues.Queues.hgQueueListQueues?4()
+eric6.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.queues.Queues.hgQueueNewPatch?4()
+eric6.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.queues.Queues.hgQueuePushPopPatches?4(operation, doAll=False, named=False, force=False)
+eric6.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.queues.Queues.hgQueueRefreshPatch?4(editMessage=False)
+eric6.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.queues.Queues.hgQueueRenamePatch?4()
+eric6.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.queues.Queues.hgQueueShowHeader?4()
 eric6.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.queues.Queues.hgQueueShowPatch?4(name)
 eric6.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.queues.Queues.hgQueueStatus?4(name)
 eric6.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.queues.Queues.shutdown?4()
@@ -5126,9 +5234,9 @@
 eric6.Plugins.VcsPlugins.vcsMercurial.RebaseExtension.ProjectHelper.RebaseProjectHelper.initMenu?4(mainMenu)
 eric6.Plugins.VcsPlugins.vcsMercurial.RebaseExtension.ProjectHelper.RebaseProjectHelper.menuTitle?4()
 eric6.Plugins.VcsPlugins.vcsMercurial.RebaseExtension.ProjectHelper.RebaseProjectHelper?1()
-eric6.Plugins.VcsPlugins.vcsMercurial.RebaseExtension.rebase.Rebase.hgRebase?4(path)
-eric6.Plugins.VcsPlugins.vcsMercurial.RebaseExtension.rebase.Rebase.hgRebaseAbort?4(path)
-eric6.Plugins.VcsPlugins.vcsMercurial.RebaseExtension.rebase.Rebase.hgRebaseContinue?4(path)
+eric6.Plugins.VcsPlugins.vcsMercurial.RebaseExtension.rebase.Rebase.hgRebase?4()
+eric6.Plugins.VcsPlugins.vcsMercurial.RebaseExtension.rebase.Rebase.hgRebaseAbort?4()
+eric6.Plugins.VcsPlugins.vcsMercurial.RebaseExtension.rebase.Rebase.hgRebaseContinue?4()
 eric6.Plugins.VcsPlugins.vcsMercurial.RebaseExtension.rebase.Rebase?1(vcs)
 eric6.Plugins.VcsPlugins.vcsMercurial.ShelveExtension.HgShelveBrowserDialog.HgShelveBrowserDialog.AgeColumn?7
 eric6.Plugins.VcsPlugins.vcsMercurial.ShelveExtension.HgShelveBrowserDialog.HgShelveBrowserDialog.MessageColumn?7
@@ -5139,7 +5247,7 @@
 eric6.Plugins.VcsPlugins.vcsMercurial.ShelveExtension.HgShelveBrowserDialog.HgShelveBrowserDialog.on_shelveList_currentItemChanged?4(current, previous)
 eric6.Plugins.VcsPlugins.vcsMercurial.ShelveExtension.HgShelveBrowserDialog.HgShelveBrowserDialog.on_shelveList_customContextMenuRequested?4(pos)
 eric6.Plugins.VcsPlugins.vcsMercurial.ShelveExtension.HgShelveBrowserDialog.HgShelveBrowserDialog.show?4()
-eric6.Plugins.VcsPlugins.vcsMercurial.ShelveExtension.HgShelveBrowserDialog.HgShelveBrowserDialog.start?4(projectDir)
+eric6.Plugins.VcsPlugins.vcsMercurial.ShelveExtension.HgShelveBrowserDialog.HgShelveBrowserDialog.start?4()
 eric6.Plugins.VcsPlugins.vcsMercurial.ShelveExtension.HgShelveBrowserDialog.HgShelveBrowserDialog?1(vcs, parent=None)
 eric6.Plugins.VcsPlugins.vcsMercurial.ShelveExtension.HgShelveDataDialog.HgShelveDataDialog.getData?4()
 eric6.Plugins.VcsPlugins.vcsMercurial.ShelveExtension.HgShelveDataDialog.HgShelveDataDialog?1(version, parent=None)
@@ -5156,13 +5264,13 @@
 eric6.Plugins.VcsPlugins.vcsMercurial.ShelveExtension.ProjectHelper.ShelveProjectHelper.initMenu?4(mainMenu)
 eric6.Plugins.VcsPlugins.vcsMercurial.ShelveExtension.ProjectHelper.ShelveProjectHelper.menuTitle?4()
 eric6.Plugins.VcsPlugins.vcsMercurial.ShelveExtension.ProjectHelper.ShelveProjectHelper?1()
-eric6.Plugins.VcsPlugins.vcsMercurial.ShelveExtension.shelve.Shelve.hgCleanupShelves?4(name)
-eric6.Plugins.VcsPlugins.vcsMercurial.ShelveExtension.shelve.Shelve.hgDeleteShelves?4(name, shelveNames=None)
+eric6.Plugins.VcsPlugins.vcsMercurial.ShelveExtension.shelve.Shelve.hgCleanupShelves?4()
+eric6.Plugins.VcsPlugins.vcsMercurial.ShelveExtension.shelve.Shelve.hgDeleteShelves?4(shelveNames=None)
 eric6.Plugins.VcsPlugins.vcsMercurial.ShelveExtension.shelve.Shelve.hgShelve?4(name)
-eric6.Plugins.VcsPlugins.vcsMercurial.ShelveExtension.shelve.Shelve.hgShelveBrowser?4(projectDir)
-eric6.Plugins.VcsPlugins.vcsMercurial.ShelveExtension.shelve.Shelve.hgUnshelve?4(name, shelveName="")
-eric6.Plugins.VcsPlugins.vcsMercurial.ShelveExtension.shelve.Shelve.hgUnshelveAbort?4(name)
-eric6.Plugins.VcsPlugins.vcsMercurial.ShelveExtension.shelve.Shelve.hgUnshelveContinue?4(name)
+eric6.Plugins.VcsPlugins.vcsMercurial.ShelveExtension.shelve.Shelve.hgShelveBrowser?4()
+eric6.Plugins.VcsPlugins.vcsMercurial.ShelveExtension.shelve.Shelve.hgUnshelve?4(shelveName="")
+eric6.Plugins.VcsPlugins.vcsMercurial.ShelveExtension.shelve.Shelve.hgUnshelveAbort?4()
+eric6.Plugins.VcsPlugins.vcsMercurial.ShelveExtension.shelve.Shelve.hgUnshelveContinue?4()
 eric6.Plugins.VcsPlugins.vcsMercurial.ShelveExtension.shelve.Shelve.shutdown?4()
 eric6.Plugins.VcsPlugins.vcsMercurial.ShelveExtension.shelve.Shelve?1(vcs)
 eric6.Plugins.VcsPlugins.vcsMercurial.StripExtension.HgStripDialog.HgStripDialog.getData?4()
@@ -5179,12 +5287,12 @@
 eric6.Plugins.VcsPlugins.vcsMercurial.StripExtension.ProjectHelper.StripProjectHelper.initMenu?4(mainMenu)
 eric6.Plugins.VcsPlugins.vcsMercurial.StripExtension.ProjectHelper.StripProjectHelper.menuTitle?4()
 eric6.Plugins.VcsPlugins.vcsMercurial.StripExtension.ProjectHelper.StripProjectHelper?1()
-eric6.Plugins.VcsPlugins.vcsMercurial.StripExtension.strip.Strip.hgStrip?4(name, rev="")
+eric6.Plugins.VcsPlugins.vcsMercurial.StripExtension.strip.Strip.hgStrip?4(rev="")
 eric6.Plugins.VcsPlugins.vcsMercurial.StripExtension.strip.Strip?1(vcs)
 eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.IgnoreFileName?7
 eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg._createStatusMonitorThread?5(interval, project)
 eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.activeExtensionsChanged?7
-eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.canCommitMerge?4(name)
+eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.canCommitMerge?4()
 eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.canPull?4()
 eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.canPush?4()
 eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.clearStatusCache?4()
@@ -5195,65 +5303,65 @@
 eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.getHgSubPath?4()
 eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.getPlugin?4()
 eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hasSubrepositories?4()
-eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgAbortMerge?4(name)
+eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgAbortMerge?4()
 eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgAddSubrepository?4()
 eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgAnnotate?4(name)
 eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgArchive?4()
-eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgBackout?4(name)
-eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgBisect?4(name, subcommand)
-eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgBookmarkDefine?4(name, revision=None, bookmark=None)
-eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgBookmarkDelete?4(name, bookmark=None)
-eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgBookmarkIncoming?4(name)
-eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgBookmarkMove?4(name, revision=None, bookmark=None)
-eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgBookmarkOutgoing?4(name)
-eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgBookmarkPull?4(name, current=False, bookmark=None)
-eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgBookmarkPush?4(name, current=False, bookmark=None)
-eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgBookmarkRename?4(name, renameInfo=None)
-eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgBranch?4(name)
-eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgBundle?4(name, bundleData=None)
-eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgConflicts?4(name)
+eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgBackout?4()
+eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgBisect?4(subcommand)
+eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgBookmarkDefine?4(revision=None, bookmark=None)
+eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgBookmarkDelete?4(bookmark=None)
+eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgBookmarkIncoming?4()
+eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgBookmarkMove?4(revision=None, bookmark=None)
+eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgBookmarkOutgoing?4()
+eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgBookmarkPull?4(current=False, bookmark=None)
+eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgBookmarkPush?4(current=False, bookmark=None)
+eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgBookmarkRename?4(renameInfo=None)
+eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgBranch?4()
+eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgBundle?4(bundleData=None)
+eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgConflicts?4()
 eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgCopy?4(name, project)
 eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgCreateIgnoreFile?4(name, autoAdd=False)
 eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgDeleteBackups?4()
-eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgEditConfig?4(name, withLargefiles=True, largefilesData=None)
+eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgEditConfig?4(repoName=None, withLargefiles=True, largefilesData=None)
 eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgEditUserConfig?4()
-eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgExport?4(name)
+eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgExport?4()
 eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgExtendedDiff?4(name)
 eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgForget?4(name)
-eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgGetBookmarksList?4(repodir)
-eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgGetBranchesList?4(repodir)
-eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgGetCurrentBranch?4(repodir)
-eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgGetTagsList?4(repodir, withType=False)
-eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgGraft?4(path, revs=None)
+eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgGetBookmarksList?4()
+eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgGetBranchesList?4()
+eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgGetCurrentBranch?4()
+eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgGetTagsList?4(withType=False)
+eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgGraft?4(revs=None)
 eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgGraftAbort?4(path)
 eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgGraftContinue?4(path)
 eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgGraftStop?4(path)
-eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgIdentify?4(name)
-eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgImport?4(name)
-eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgIncoming?4(name)
-eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgInfo?4(ppath, mode="heads")
-eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgListBookmarks?4(path)
-eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgListTagBranch?4(path, tags=True)
+eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgIdentify?4()
+eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgImport?4()
+eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgIncoming?4()
+eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgInfo?4(mode="heads")
+eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgListBookmarks?4()
+eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgListTagBranch?4(tags=True)
 eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgNormalizeURL?4(url)
-eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgOutgoing?4(name)
-eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgPhase?4(name, data=None)
-eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgPreviewBundle?4(name)
-eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgPull?4(name, revisions=None)
-eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgPush?4(name, force=False, newBranch=False, rev=None)
+eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgOutgoing?4()
+eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgPhase?4(data=None)
+eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgPreviewBundle?4()
+eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgPull?4(revisions=None)
+eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgPush?4(force=False, newBranch=False, rev=None)
 eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgReMerge?4(name)
-eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgRecover?4(name)
+eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgRecover?4()
 eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgRemoveSubrepositories?4()
 eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgResolved?4(name, unresolve=False)
 eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgRevert?4(name)
-eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgRollback?4(name)
+eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgRollback?4()
 eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgSbsDiff?4(name, extended=False, revisions=None)
-eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgServe?4(name)
-eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgShowBranch?4(name)
-eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgShowConfig?4(name)
-eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgShowPaths?4(name)
+eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgServe?4(repoPath)
+eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgShowBranch?4()
+eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgShowConfig?4()
+eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgShowPaths?4()
 eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgSummary?4(mq=False, largefiles=False)
-eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgUnbundle?4(name, files=None)
-eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgVerify?4(name)
+eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgUnbundle?4(files=None)
+eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgVerify?4()
 eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.iniFileChanged?7
 eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.initCommand?4(command)
 eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.isExtensionActive?4(extensionName)
@@ -5275,7 +5383,7 @@
 eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.vcsImport?4(vcsDataDict, projectDir, noDialog=False, addAll=True)
 eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.vcsInit?4(vcsDir, noDialog=False)
 eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.vcsInitConfig?4(project)
-eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.vcsLogBrowser?4(name, isFile=False)
+eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.vcsLogBrowser?4(name=None, isFile=False)
 eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.vcsMerge?4(name, rev="")
 eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.vcsMove?4(name, project, target=None, noDialog=False)
 eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.vcsName?4()
@@ -5288,8 +5396,8 @@
 eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.vcsStatus?4(name)
 eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.vcsSupportCommandOptions?4()
 eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.vcsSwitch?4(name)
-eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.vcsTag?4(name, revision=None, tagName=None)
-eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.vcsUpdate?4(name, noDialog=False, revision=None)
+eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.vcsTag?4(name=None, revision=None, tagName=None)
+eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg.vcsUpdate?4(name=None, noDialog=False, revision=None)
 eric6.Plugins.VcsPlugins.vcsMercurial.hg.Hg?1(plugin, parent=None, name=None)
 eric6.Plugins.VcsPlugins.vcsPySvn.Config.ConfigSvnProtocols?7
 eric6.Plugins.VcsPlugins.vcsPySvn.Config.DefaultConfig?7
@@ -6375,7 +6483,15 @@
 eric6.Preferences.ConfigurationPages.NetworkPage.NetworkPage.setMode?4(displayMode)
 eric6.Preferences.ConfigurationPages.NetworkPage.NetworkPage?1(configDialog)
 eric6.Preferences.ConfigurationPages.NetworkPage.create?4(dlg)
+eric6.Preferences.ConfigurationPages.NotificationsPage.NotificationsPage.on_criticalBgButton_clicked?4()
+eric6.Preferences.ConfigurationPages.NotificationsPage.NotificationsPage.on_criticalDefaultButton_clicked?4()
+eric6.Preferences.ConfigurationPages.NotificationsPage.NotificationsPage.on_criticalFgButton_clicked?4()
+eric6.Preferences.ConfigurationPages.NotificationsPage.NotificationsPage.on_criticalResetButton_clicked?4()
 eric6.Preferences.ConfigurationPages.NotificationsPage.NotificationsPage.on_visualButton_clicked?4(checked)
+eric6.Preferences.ConfigurationPages.NotificationsPage.NotificationsPage.on_warningBgButton_clicked?4()
+eric6.Preferences.ConfigurationPages.NotificationsPage.NotificationsPage.on_warningDefaultButton_clicked?4()
+eric6.Preferences.ConfigurationPages.NotificationsPage.NotificationsPage.on_warningFgButton_clicked?4()
+eric6.Preferences.ConfigurationPages.NotificationsPage.NotificationsPage.on_warningResetButton_clicked?4()
 eric6.Preferences.ConfigurationPages.NotificationsPage.NotificationsPage.save?4()
 eric6.Preferences.ConfigurationPages.NotificationsPage.NotificationsPage?1()
 eric6.Preferences.ConfigurationPages.NotificationsPage.create?4(dlg)
@@ -6407,6 +6523,10 @@
 eric6.Preferences.ConfigurationPages.PythonPage.PythonPage.save?4()
 eric6.Preferences.ConfigurationPages.PythonPage.PythonPage?1()
 eric6.Preferences.ConfigurationPages.PythonPage.create?4(dlg)
+eric6.Preferences.ConfigurationPages.QtPage.QtPage.on_pyqt5VenvDlgButton_clicked?4()
+eric6.Preferences.ConfigurationPages.QtPage.QtPage.on_pyqt6VenvDlgButton_clicked?4()
+eric6.Preferences.ConfigurationPages.QtPage.QtPage.on_pyside2VenvDlgButton_clicked?4()
+eric6.Preferences.ConfigurationPages.QtPage.QtPage.on_pyside6VenvDlgButton_clicked?4()
 eric6.Preferences.ConfigurationPages.QtPage.QtPage.on_qtPostfixEdit_textChanged?4(txt)
 eric6.Preferences.ConfigurationPages.QtPage.QtPage.on_qtPrefixEdit_textChanged?4(txt)
 eric6.Preferences.ConfigurationPages.QtPage.QtPage.save?4()
@@ -6644,8 +6764,8 @@
 eric6.Preferences.getProjectBrowserFlags?4(key, prefClass=Prefs)
 eric6.Preferences.getProtobuf?4(key, prefClass=Prefs)
 eric6.Preferences.getPython?4(key, prefClass=Prefs)
-eric6.Preferences.getQt5DocDir?4(prefClass=Prefs)
 eric6.Preferences.getQt?4(key, prefClass=Prefs)
+eric6.Preferences.getQtDocDir?4(version, prefClass=Prefs)
 eric6.Preferences.getQtTranslationsDir?4(prefClass=Prefs)
 eric6.Preferences.getShell?4(key, prefClass=Prefs)
 eric6.Preferences.getSystem?4(key, prefClass=Prefs)
@@ -6844,9 +6964,11 @@
 eric6.Project.Project.Project.getDebuggerFilters?4(language)
 eric6.Project.Project.Project.getDefaultRccCompilerParameters?4()
 eric6.Project.Project.Project.getDefaultSourceExtension?4()
+eric6.Project.Project.Project.getDocstringType?4()
 eric6.Project.Project.Project.getEditorLexerAssoc?4(filename)
 eric6.Project.Project.Project.getEolString?4()
 eric6.Project.Project.Project.getFiles?4(start)
+eric6.Project.Project.Project.getFiletypeAssociations?4(associationType)
 eric6.Project.Project.Project.getHash?4()
 eric6.Project.Project.Project.getMainScript?4(normalized=False)
 eric6.Project.Project.Project.getMenu?4(menuName)
@@ -6877,6 +6999,7 @@
 eric6.Project.Project.Project.getVcs?4()
 eric6.Project.Project.Project.handleApplicationDiagram?4()
 eric6.Project.Project.Project.handlePreferencesChanged?4()
+eric6.Project.Project.Project.hasDefaultDocstringParameter?4()
 eric6.Project.Project.Project.hasDefaultIdlCompilerParameters?4()
 eric6.Project.Project.Project.hasDefaultMakeParameters?4()
 eric6.Project.Project.Project.hasDefaultRccCompilerParameters?4()
@@ -6953,7 +7076,7 @@
 eric6.Project.Project.Project.saveProject?4()
 eric6.Project.Project.Project.saveProjectAs?4()
 eric6.Project.Project.Project.setData?4(category, key, data)
-eric6.Project.Project.Project.setDbgInfo?4(venvName, argv, wd, env, excReporting, excList, excIgnoreList, autoClearShell, tracePython=None, autoContinue=None)
+eric6.Project.Project.Project.setDbgInfo?4(venvName, argv, wd, env, excReporting, excList, excIgnoreList, autoClearShell, tracePython=None, autoContinue=None, enableMultiprocess=None, multiprocessNoDebug=None)
 eric6.Project.Project.Project.setDirty?4(dirty)
 eric6.Project.Project.Project.setStatusMonitorAutoUpdate?4(auto)
 eric6.Project.Project.Project.setStatusMonitorInterval?4(interval)
@@ -7082,7 +7205,8 @@
 eric6.Project.ProjectBrowserSortFilterProxyModel.ProjectBrowserSortFilterProxyModel.filterAcceptsRow?4(source_row, source_parent)
 eric6.Project.ProjectBrowserSortFilterProxyModel.ProjectBrowserSortFilterProxyModel.preferencesChanged?4()
 eric6.Project.ProjectBrowserSortFilterProxyModel.ProjectBrowserSortFilterProxyModel?1(filterType, parent=None)
-eric6.Project.ProjectFormsBrowser.ProjectFormsBrowser.PyuicIndentDefault?7
+eric6.Project.ProjectFormsBrowser.ProjectFormsBrowser.Pyuic5IndentDefault?7
+eric6.Project.ProjectFormsBrowser.ProjectFormsBrowser.Pyuic6IndentDefault?7
 eric6.Project.ProjectFormsBrowser.ProjectFormsBrowser._contextMenuRequested?5(coord)
 eric6.Project.ProjectFormsBrowser.ProjectFormsBrowser._createPopupMenus?5()
 eric6.Project.ProjectFormsBrowser.ProjectFormsBrowser._initHookMethods?5()
@@ -7185,9 +7309,12 @@
 eric6.Project.TranslationPropertiesDialog.TranslationPropertiesDialog?1(project, new, parent)
 eric6.Project.UicCompilerOptionsDialog.UicCompilerOptionsDialog.getData?4()
 eric6.Project.UicCompilerOptionsDialog.UicCompilerOptionsDialog?1(compilerOptions, compiler, parent=None)
-eric6.Project.UicLoadUi.className?4(formFile, projectPath)
-eric6.Project.UicLoadUi.objectName?4(formFile, projectPath)
-eric6.Project.UicLoadUi.signatures?4(formFile, projectPath)
+eric6.Project.UicLoadUi5.className?4(formFile, projectPath)
+eric6.Project.UicLoadUi5.objectName?4(formFile, projectPath)
+eric6.Project.UicLoadUi5.signatures?4(formFile, projectPath)
+eric6.Project.UicLoadUi6.className?4(formFile, projectPath)
+eric6.Project.UicLoadUi6.objectName?4(formFile, projectPath)
+eric6.Project.UicLoadUi6.signatures?4(formFile, projectPath)
 eric6.Project.UserPropertiesDialog.UserPropertiesDialog.storeData?4()
 eric6.Project.UserPropertiesDialog.UserPropertiesDialog?1(project, parent=None, name=None)
 eric6.PyUnit.UnittestDialog.QtTestResult.addError?4(test, err)
@@ -7199,6 +7326,12 @@
 eric6.PyUnit.UnittestDialog.QtTestResult.stopTest?4(test)
 eric6.PyUnit.UnittestDialog.QtTestResult?1(parent, failfast)
 eric6.PyUnit.UnittestDialog.UnittestDialog.ErrorsInfoRole?7
+eric6.PyUnit.UnittestDialog.UnittestDialog.FailedExpectedColorDarkTheme?7
+eric6.PyUnit.UnittestDialog.UnittestDialog.FailedExpectedColorLightTheme?7
+eric6.PyUnit.UnittestDialog.UnittestDialog.SkippedColorDarkTheme?7
+eric6.PyUnit.UnittestDialog.UnittestDialog.SkippedColorLightTheme?7
+eric6.PyUnit.UnittestDialog.UnittestDialog.SucceededUnexpectedColorDarkTheme?7
+eric6.PyUnit.UnittestDialog.UnittestDialog.SucceededUnexpectedColorLightTheme?7
 eric6.PyUnit.UnittestDialog.UnittestDialog.TestCaseFileRole?7
 eric6.PyUnit.UnittestDialog.UnittestDialog.TestCaseNameRole?7
 eric6.PyUnit.UnittestDialog.UnittestDialog.closeEvent?4(event)
@@ -7243,6 +7376,33 @@
 eric6.QScintilla.APIsManager.APIsManager.getAPIs?4(language, projectType="", forPreparation=False)
 eric6.QScintilla.APIsManager.APIsManager.reloadAPIs?4()
 eric6.QScintilla.APIsManager.APIsManager?1(parent=None)
+eric6.QScintilla.DocstringGenerator.BaseDocstringGenerator.BaseDocstringGenerator._generateDocstringList?5(functionInfo, docstringType)
+eric6.QScintilla.DocstringGenerator.BaseDocstringGenerator.BaseDocstringGenerator.getDocstringType?4()
+eric6.QScintilla.DocstringGenerator.BaseDocstringGenerator.BaseDocstringGenerator.hasFunctionDefinition?4(cursorPosition)
+eric6.QScintilla.DocstringGenerator.BaseDocstringGenerator.BaseDocstringGenerator.insertDocstring?4(cursorPosition, fromStart=True)
+eric6.QScintilla.DocstringGenerator.BaseDocstringGenerator.BaseDocstringGenerator.insertDocstringFromShortcut?4(cursorPosition)
+eric6.QScintilla.DocstringGenerator.BaseDocstringGenerator.BaseDocstringGenerator.isDocstringIntro?4(cursorPosition)
+eric6.QScintilla.DocstringGenerator.BaseDocstringGenerator.BaseDocstringGenerator.isFunctionStart?4(text)
+eric6.QScintilla.DocstringGenerator.BaseDocstringGenerator.BaseDocstringGenerator?1(editor)
+eric6.QScintilla.DocstringGenerator.BaseDocstringGenerator.DocstringMenuForEnterOnly.keyPressEvent?4(evt)
+eric6.QScintilla.DocstringGenerator.BaseDocstringGenerator.DocstringMenuForEnterOnly?1(editor)
+eric6.QScintilla.DocstringGenerator.BaseDocstringGenerator.FunctionInfo?1()
+eric6.QScintilla.DocstringGenerator.BaseDocstringGenerator.getIndentStr?4(text)
+eric6.QScintilla.DocstringGenerator.EricdocGenerator.generateEricDoc?4(functionInfo)
+eric6.QScintilla.DocstringGenerator.GoogledocGenerator.generateGoogleDoc?4(functionInfo, editor)
+eric6.QScintilla.DocstringGenerator.NumpydocGenerator.generateNumpyDoc?4(functionInfo, editor)
+eric6.QScintilla.DocstringGenerator.PyDocstringGenerator.PyDocstringGenerator.hasFunctionDefinition?4(cursorPosition)
+eric6.QScintilla.DocstringGenerator.PyDocstringGenerator.PyDocstringGenerator.insertDocstring?4(cursorPosition, fromStart=True)
+eric6.QScintilla.DocstringGenerator.PyDocstringGenerator.PyDocstringGenerator.insertDocstringFromShortcut?4(cursorPosition)
+eric6.QScintilla.DocstringGenerator.PyDocstringGenerator.PyDocstringGenerator.isDocstringIntro?4(cursorPosition)
+eric6.QScintilla.DocstringGenerator.PyDocstringGenerator.PyDocstringGenerator.isFunctionStart?4(text)
+eric6.QScintilla.DocstringGenerator.PyDocstringGenerator.PyDocstringGenerator?1(editor)
+eric6.QScintilla.DocstringGenerator.PyDocstringGenerator.PyFunctionInfo.parseBody?4(text)
+eric6.QScintilla.DocstringGenerator.PyDocstringGenerator.PyFunctionInfo.parseDefinition?4(text, quote, quoteReplace)
+eric6.QScintilla.DocstringGenerator.PyDocstringGenerator.PyFunctionInfo?1()
+eric6.QScintilla.DocstringGenerator.SphinxdocGenerator.generateSphinxDoc?4(functionInfo)
+eric6.QScintilla.DocstringGenerator.getDocstringGenerator?4(editor)
+eric6.QScintilla.DocstringGenerator.getSupportedDocstringTypes?4()
 eric6.QScintilla.Editor.Editor.AttributeID?7
 eric6.QScintilla.Editor.Editor.AttributePrivateID?7
 eric6.QScintilla.Editor.Editor.AttributeProtectedID?7
@@ -7250,6 +7410,7 @@
 eric6.QScintilla.Editor.Editor.ClassID?7
 eric6.QScintilla.Editor.Editor.ClassPrivateID?7
 eric6.QScintilla.Editor.Editor.ClassProtectedID?7
+eric6.QScintilla.Editor.Editor.EncloseChars?7
 eric6.QScintilla.Editor.Editor.EndEditToken?7
 eric6.QScintilla.Editor.Editor.EnumID?7
 eric6.QScintilla.Editor.Editor.FromDocumentID?7
@@ -7321,6 +7482,7 @@
 eric6.QScintilla.Editor.Editor.editorCommand?4(cmd)
 eric6.QScintilla.Editor.Editor.editorRenamed?7
 eric6.QScintilla.Editor.Editor.editorSaved?7
+eric6.QScintilla.Editor.Editor.encloseSelectedText?4()
 eric6.QScintilla.Editor.Editor.encodingChanged?7
 eric6.QScintilla.Editor.Editor.ensureVisible?4(line, expand=False)
 eric6.QScintilla.Editor.Editor.ensureVisibleTop?4(line, expand=False)
@@ -7344,6 +7506,7 @@
 eric6.QScintilla.Editor.Editor.getCoverageLines?4()
 eric6.QScintilla.Editor.Editor.getCurrentWord?4()
 eric6.QScintilla.Editor.Editor.getCurrentWordBoundaries?4()
+eric6.QScintilla.Editor.Editor.getDocstringGenerator?4()
 eric6.QScintilla.Editor.Editor.getEditorConfig?4(option)
 eric6.QScintilla.Editor.Editor.getEncoding?4()
 eric6.QScintilla.Editor.Editor.getFileName?4()
@@ -7387,6 +7550,7 @@
 eric6.QScintilla.Editor.Editor.highlight?4(line=None, error=False, syntaxError=False)
 eric6.QScintilla.Editor.Editor.highlightVisible?4()
 eric6.QScintilla.Editor.Editor.indentLineOrSelection?4()
+eric6.QScintilla.Editor.Editor.insertDocstring?4()
 eric6.QScintilla.Editor.Editor.isClone?4(editor)
 eric6.QScintilla.Editor.Editor.isJavascriptFile?4()
 eric6.QScintilla.Editor.Editor.isLastEditPositionAvailable?4()
@@ -8062,9 +8226,12 @@
 eric6.QScintilla.MiniEditor.MiniEditor.showSearchWidget?4()
 eric6.QScintilla.MiniEditor.MiniEditor.textForFind?4()
 eric6.QScintilla.MiniEditor.MiniEditor?1(filename="", filetype="", parent=None, name=None)
+eric6.QScintilla.MiniEditor.MiniScintilla.EncloseChars?7
+eric6.QScintilla.MiniEditor.MiniScintilla.encloseSelectedText?4()
 eric6.QScintilla.MiniEditor.MiniScintilla.focusInEvent?4(event)
 eric6.QScintilla.MiniEditor.MiniScintilla.focusOutEvent?4(event)
 eric6.QScintilla.MiniEditor.MiniScintilla.getFileName?4()
+eric6.QScintilla.MiniEditor.MiniScintilla.keyPressEvent?4(ev)
 eric6.QScintilla.MiniEditor.MiniScintilla.removeTrailingWhitespace?4()
 eric6.QScintilla.MiniEditor.MiniScintilla?1(parent=None)
 eric6.QScintilla.Printer.Printer.formatPage?4(painter, drawing, area, pagenr)
@@ -8120,6 +8287,7 @@
 eric6.QScintilla.QsciScintillaCompat.QsciScintillaCompat.getEolIndicator?4()
 eric6.QScintilla.QsciScintillaCompat.QsciScintillaCompat.getFileName?4()
 eric6.QScintilla.QsciScintillaCompat.QsciScintillaCompat.getFoundTarget?4()
+eric6.QScintilla.QsciScintillaCompat.QsciScintillaCompat.getGlobalCursorPosition?4()
 eric6.QScintilla.QsciScintillaCompat.QsciScintillaCompat.getIndicatorEndPos?4(indicator, pos)
 eric6.QScintilla.QsciScintillaCompat.QsciScintillaCompat.getIndicatorStartPos?4(indicator, pos)
 eric6.QScintilla.QsciScintillaCompat.QsciScintillaCompat.getLineSeparator?4()
@@ -8127,6 +8295,7 @@
 eric6.QScintilla.QsciScintillaCompat.QsciScintillaCompat.getSelectionCount?4()
 eric6.QScintilla.QsciScintillaCompat.QsciScintillaCompat.getSelectionN?4(index)
 eric6.QScintilla.QsciScintillaCompat.QsciScintillaCompat.getSelections?4()
+eric6.QScintilla.QsciScintillaCompat.QsciScintillaCompat.getSubStyleRange?4(styleNr)
 eric6.QScintilla.QsciScintillaCompat.QsciScintillaCompat.getVisibleLineFromDocLine?4(docLine)
 eric6.QScintilla.QsciScintillaCompat.QsciScintillaCompat.getZoom?4()
 eric6.QScintilla.QsciScintillaCompat.QsciScintillaCompat.gotoNextIndicator?4(indicator, wrap)
@@ -8243,7 +8412,7 @@
 eric6.QScintilla.Shell.Shell.keyPressEvent?4(ev)
 eric6.QScintilla.Shell.Shell.loadHistory?4(clientType)
 eric6.QScintilla.Shell.Shell.mousePressEvent?4(event)
-eric6.QScintilla.Shell.Shell.paste?4()
+eric6.QScintilla.Shell.Shell.paste?4(lines=None)
 eric6.QScintilla.Shell.Shell.queueText?7
 eric6.QScintilla.Shell.Shell.reloadHistory?4()
 eric6.QScintilla.Shell.Shell.saveHistory?4(clientType)
@@ -8895,14 +9064,18 @@
 eric6.UI.LogView.LogViewerEdit.searchPrev?4(txt, caseSensitive, wholeWord, regexp)
 eric6.UI.LogView.LogViewerEdit.searchStringFound?7
 eric6.UI.LogView.LogViewerEdit?1(parent=None)
+eric6.UI.NotificationWidget.NotificationFrame.NotificationStyleSheetTemplate?7
+eric6.UI.NotificationWidget.NotificationFrame.getIcon?4(kind)
+eric6.UI.NotificationWidget.NotificationFrame.getStyleSheet?4(kind)
+eric6.UI.NotificationWidget.NotificationFrame?1(icon, heading, text, kind=NotificationTypes.Information, parent=None)
+eric6.UI.NotificationWidget.NotificationTypes.Critical?7
+eric6.UI.NotificationWidget.NotificationTypes.Information?7
+eric6.UI.NotificationWidget.NotificationTypes.Other?7
+eric6.UI.NotificationWidget.NotificationTypes.Warning?7
 eric6.UI.NotificationWidget.NotificationWidget.mouseMoveEvent?4(evt)
 eric6.UI.NotificationWidget.NotificationWidget.mousePressEvent?4(evt)
 eric6.UI.NotificationWidget.NotificationWidget.mouseReleaseEvent?4(evt)
-eric6.UI.NotificationWidget.NotificationWidget.setHeading?4(heading)
-eric6.UI.NotificationWidget.NotificationWidget.setPixmap?4(icon)
-eric6.UI.NotificationWidget.NotificationWidget.setText?4(text)
-eric6.UI.NotificationWidget.NotificationWidget.setTimeout?4(timeout)
-eric6.UI.NotificationWidget.NotificationWidget.show?4()
+eric6.UI.NotificationWidget.NotificationWidget.showNotification?4(icon, heading, text, kind=NotificationTypes.Information, timeout=0)
 eric6.UI.NotificationWidget.NotificationWidget?1(parent=None, setPosition=False)
 eric6.UI.NumbersWidget.BinaryModel.columnCount?4(parent)
 eric6.UI.NumbersWidget.BinaryModel.data?4(index, role=Qt.DisplayRole)
@@ -9073,14 +9246,11 @@
 eric6.UI.UserInterface.UserInterface.getToolbarsByCategory?4(category)
 eric6.UI.UserInterface.UserInterface.getViewProfile?4()
 eric6.UI.UserInterface.UserInterface.handleUrl?4(url)
-eric6.UI.UserInterface.UserInterface.isOnline?4()
 eric6.UI.UserInterface.UserInterface.launchHelpViewer?4(home, searchWord=None, useSingle=False)
 eric6.UI.UserInterface.UserInterface.masterPasswordChanged?7
 eric6.UI.UserInterface.UserInterface.maxFilePathLen?7
 eric6.UI.UserInterface.UserInterface.maxMenuFilePathLen?7
 eric6.UI.UserInterface.UserInterface.networkAccessManager?4()
-eric6.UI.UserInterface.UserInterface.notificationsEnabled?4()
-eric6.UI.UserInterface.UserInterface.onlineStateChanged?7
 eric6.UI.UserInterface.UserInterface.performVersionCheck?4(manual=True, alternative=0, showVersions=False)
 eric6.UI.UserInterface.UserInterface.preferencesChanged?7
 eric6.UI.UserInterface.UserInterface.processArgs?4(args)
@@ -9098,7 +9268,7 @@
 eric6.UI.UserInterface.UserInterface.showFindFilesDialog?4(txt="", searchDir="", openFiles=False)
 eric6.UI.UserInterface.UserInterface.showLogViewer?4()
 eric6.UI.UserInterface.UserInterface.showMenu?7
-eric6.UI.UserInterface.UserInterface.showNotification?4(icon, heading, text, timeout=None)
+eric6.UI.UserInterface.UserInterface.showNotification?4(icon, heading, text, kind=NotificationTypes.Information, timeout=None)
 eric6.UI.UserInterface.UserInterface.showPluginsAvailable?4()
 eric6.UI.UserInterface.UserInterface.showPreferences?4(pageName=None)
 eric6.UI.UserInterface.UserInterface.showReplaceFilesDialog?4(txt="", searchDir="", openFiles=False)
@@ -9314,7 +9484,7 @@
 eric6.Utilities._uunescape?8
 eric6.Utilities.absolutePath?4(path, start)
 eric6.Utilities.absoluteUniversalPath?4(path, start)
-eric6.Utilities.checkPyside?4(variant="2")
+eric6.Utilities.checkPyside?4(variant=2)
 eric6.Utilities.codingBytes_regexps?7
 eric6.Utilities.coding_regexps?7
 eric6.Utilities.compactPath?4(path, width, measure=len)
@@ -9372,7 +9542,7 @@
 eric6.Utilities.generateDistroInfo?4(linesep='\n')
 eric6.Utilities.generatePluginsVersionInfo?4(linesep='\n')
 eric6.Utilities.generatePyQtToolPath?4(toolname, alternatives=None)
-eric6.Utilities.generatePySideToolPath?4(toolname, variant="2")
+eric6.Utilities.generatePySideToolPath?4(toolname, variant=2)
 eric6.Utilities.generateQtToolName?4(toolname)
 eric6.Utilities.generateVersionInfo?4(linesep='\n')
 eric6.Utilities.getDirs?4(path, excludeDirs)
@@ -9723,7 +9893,7 @@
 eric6.VirtualEnv.VirtualenvAddEditDialog.VirtualenvAddEditDialog.on_pythonExecPicker_textChanged?4(txt)
 eric6.VirtualEnv.VirtualenvAddEditDialog.VirtualenvAddEditDialog.on_remoteCheckBox_toggled?4(checked)
 eric6.VirtualEnv.VirtualenvAddEditDialog.VirtualenvAddEditDialog.on_targetDirectoryPicker_textChanged?4(txt)
-eric6.VirtualEnv.VirtualenvAddEditDialog.VirtualenvAddEditDialog?1(manager, venvName="", venvDirectory="", venvInterpreter="", isGlobal=False, isConda=False, isRemote=False, execPath="", parent=None)
+eric6.VirtualEnv.VirtualenvAddEditDialog.VirtualenvAddEditDialog?1(manager, venvName="", venvDirectory="", venvInterpreter="", isGlobal=False, isConda=False, isRemote=False, execPath="", baseDir="", parent=None)
 eric6.VirtualEnv.VirtualenvConfigurationDialog.VirtualenvConfigurationDialog.getData?4()
 eric6.VirtualEnv.VirtualenvConfigurationDialog.VirtualenvConfigurationDialog.on_condaButton_toggled?4(checked)
 eric6.VirtualEnv.VirtualenvConfigurationDialog.VirtualenvConfigurationDialog.on_condaCloneButton_clicked?4()
@@ -9739,7 +9909,7 @@
 eric6.VirtualEnv.VirtualenvConfigurationDialog.VirtualenvConfigurationDialog.on_pyvenvButton_toggled?4(checked)
 eric6.VirtualEnv.VirtualenvConfigurationDialog.VirtualenvConfigurationDialog.on_targetDirectoryPicker_textChanged?4(txt)
 eric6.VirtualEnv.VirtualenvConfigurationDialog.VirtualenvConfigurationDialog.on_virtualenvButton_toggled?4(checked)
-eric6.VirtualEnv.VirtualenvConfigurationDialog.VirtualenvConfigurationDialog?1(parent=None)
+eric6.VirtualEnv.VirtualenvConfigurationDialog.VirtualenvConfigurationDialog?1(baseDir="", parent=None)
 eric6.VirtualEnv.VirtualenvExecDialog.VirtualenvExecDialog.on_buttonBox_clicked?4(button)
 eric6.VirtualEnv.VirtualenvExecDialog.VirtualenvExecDialog.start?4(arguments)
 eric6.VirtualEnv.VirtualenvExecDialog.VirtualenvExecDialog?1(configuration, venvManager, parent=None)
@@ -9748,10 +9918,11 @@
 eric6.VirtualEnv.VirtualenvInterpreterSelectionDialog.VirtualenvInterpreterSelectionDialog?1(venvName, venvDirectory, parent=None)
 eric6.VirtualEnv.VirtualenvManager.VirtualenvManager.DefaultKey?7
 eric6.VirtualEnv.VirtualenvManager.VirtualenvManager.addVirtualEnv?4(venvName, venvDirectory, venvInterpreter="", isGlobal=False, isConda=False, isRemote=False, execPath="")
-eric6.VirtualEnv.VirtualenvManager.VirtualenvManager.createVirtualEnv?4()
+eric6.VirtualEnv.VirtualenvManager.VirtualenvManager.createVirtualEnv?4(baseDir="")
 eric6.VirtualEnv.VirtualenvManager.VirtualenvManager.deleteVirtualEnvs?4(venvNames)
 eric6.VirtualEnv.VirtualenvManager.VirtualenvManager.getDefaultEnvironment?4()
 eric6.VirtualEnv.VirtualenvManager.VirtualenvManager.getEnvironmentEntries?4()
+eric6.VirtualEnv.VirtualenvManager.VirtualenvManager.getVirtualEnvironmentsBaseDir?4()
 eric6.VirtualEnv.VirtualenvManager.VirtualenvManager.getVirtualenvDirectory?4(venvName)
 eric6.VirtualEnv.VirtualenvManager.VirtualenvManager.getVirtualenvExecPath?4(venvName)
 eric6.VirtualEnv.VirtualenvManager.VirtualenvManager.getVirtualenvInterpreter?4(venvName)
@@ -9763,6 +9934,7 @@
 eric6.VirtualEnv.VirtualenvManager.VirtualenvManager.removeVirtualEnvs?4(venvNames)
 eric6.VirtualEnv.VirtualenvManager.VirtualenvManager.renameVirtualEnv?4(oldVenvName, venvName, venvDirectory, venvInterpreter, isGlobal, isConda, isRemote, execPath)
 eric6.VirtualEnv.VirtualenvManager.VirtualenvManager.setVirtualEnv?4(venvName, venvDirectory, venvInterpreter, isGlobal, isConda, isRemote, execPath)
+eric6.VirtualEnv.VirtualenvManager.VirtualenvManager.setVirtualEnvironmentsBaseDir?4(baseDir)
 eric6.VirtualEnv.VirtualenvManager.VirtualenvManager.showVirtualenvManagerDialog?4(modal=False)
 eric6.VirtualEnv.VirtualenvManager.VirtualenvManager.shutdown?4()
 eric6.VirtualEnv.VirtualenvManager.VirtualenvManager.virtualEnvironmentAdded?7
@@ -9773,6 +9945,7 @@
 eric6.VirtualEnv.VirtualenvManagerDialog.VirtualenvManagerDialog.IsCondaRole?7
 eric6.VirtualEnv.VirtualenvManagerDialog.VirtualenvManagerDialog.IsGlobalRole?7
 eric6.VirtualEnv.VirtualenvManagerDialog.VirtualenvManagerDialog.IsRemoteRole?7
+eric6.VirtualEnv.VirtualenvManagerDialog.VirtualenvManagerDialog.closeEvent?4(evt)
 eric6.VirtualEnv.VirtualenvManagerDialog.VirtualenvManagerDialog.on_addButton_clicked?4()
 eric6.VirtualEnv.VirtualenvManagerDialog.VirtualenvManagerDialog.on_deleteAllButton_clicked?4()
 eric6.VirtualEnv.VirtualenvManagerDialog.VirtualenvManagerDialog.on_deleteButton_clicked?4()
@@ -10611,7 +10784,6 @@
 eric6.WebBrowser.Navigation.ReloadStopButton.ReloadStopButton.setLoading?4(loading)
 eric6.WebBrowser.Navigation.ReloadStopButton.ReloadStopButton.stopClicked?7
 eric6.WebBrowser.Navigation.ReloadStopButton.ReloadStopButton?1(parent=None)
-eric6.WebBrowser.Network.EricSchemeHandler.EricSchemeHandler.SupportedPages?7
 eric6.WebBrowser.Network.EricSchemeHandler.EricSchemeHandler.requestStarted?4(job)
 eric6.WebBrowser.Network.EricSchemeHandler.EricSchemeHandler?1(parent=None)
 eric6.WebBrowser.Network.EricSchemeHandler.EricSchemeReply._speedDialPage?8
@@ -10620,6 +10792,7 @@
 eric6.WebBrowser.Network.EricSchemeHandler.EricSchemeReply.closed?7
 eric6.WebBrowser.Network.EricSchemeHandler.EricSchemeReply.readData?4(maxlen)
 eric6.WebBrowser.Network.EricSchemeHandler.EricSchemeReply?1(job, parent=None)
+eric6.WebBrowser.Network.EricSchemeHandler._SupportedPages?8
 eric6.WebBrowser.Network.NetworkManager.NetworkManager.authentication?4(url, auth, page=None)
 eric6.WebBrowser.Network.NetworkManager.NetworkManager.certificateError?4(error, view)
 eric6.WebBrowser.Network.NetworkManager.NetworkManager.changed?7
@@ -11611,7 +11784,6 @@
 eric6.WebBrowser.WebBrowserWindow.WebBrowserWindow.newPrivateWindow?4(link=None)
 eric6.WebBrowser.WebBrowserWindow.WebBrowserWindow.newTab?4(link=None, addNextTo=None, background=False)
 eric6.WebBrowser.WebBrowserWindow.WebBrowserWindow.newWindow?4(link=None, restoreSession=False)
-eric6.WebBrowser.WebBrowserWindow.WebBrowserWindow.notificationsEnabled?4()
 eric6.WebBrowser.WebBrowserWindow.WebBrowserWindow.openSearchManager?4()
 eric6.WebBrowser.WebBrowserWindow.WebBrowserWindow.openUrl?4(url, title=None)
 eric6.WebBrowser.WebBrowserWindow.WebBrowserWindow.openUrlNewBackgroundTab?4(url, title=None)
@@ -11635,7 +11807,7 @@
 eric6.WebBrowser.WebBrowserWindow.WebBrowserWindow.setLoadingActions?4(b)
 eric6.WebBrowser.WebBrowserWindow.WebBrowserWindow.setUseQtHelp?4(use)
 eric6.WebBrowser.WebBrowserWindow.WebBrowserWindow.showFullScreenNavigation?4()
-eric6.WebBrowser.WebBrowserWindow.WebBrowserWindow.showNotification?4(icon, heading, text, timeout=None)
+eric6.WebBrowser.WebBrowserWindow.WebBrowserWindow.showNotification?4(icon, heading, text, kind=NotificationTypes.Information, timeout=None)
 eric6.WebBrowser.WebBrowserWindow.WebBrowserWindow.shutdown?4()
 eric6.WebBrowser.WebBrowserWindow.WebBrowserWindow.speedDial?4()
 eric6.WebBrowser.WebBrowserWindow.WebBrowserWindow.syncManager?4()
@@ -11801,6 +11973,7 @@
 install.createGlobalPluginsDir?4()
 install.createInstallConfig?4()
 install.createInstallInfo?4()
+install.createInstallInfoFile?7
 install.createLinuxSpecifics?4()
 install.createMacAppBundle?4(pydir)
 install.createPyWrapper?4(pydir, wfile, saveDir, isGuiScript=True)
--- a/eric6/APIs/Python3/eric6.bas	Sun Jan 17 13:53:08 2021 +0100
+++ b/eric6/APIs/Python3/eric6.bas	Mon Feb 01 10:38:16 2021 +0100
@@ -60,7 +60,7 @@
 BrowserSortFilterProxyModel QSortFilterProxyModel
 BrowserSysPathItem BrowserItem
 BugBearVisitor ast.NodeVisitor
-CallStackViewer QTreeWidget
+CallStackViewer QWidget
 CallTraceViewer QWidget Ui_CallTraceViewer
 ChangeBookmarkCommand QUndoCommand
 Charset str
@@ -147,6 +147,7 @@
 DispositionParm str
 DispositionParmList UniqueNamespace
 DispositionType peg.List
+DocstringMenuForEnterOnly QMenu
 DocumentationViewerWidget QWidget
 DotDesktopListSelectionDialog QDialog Ui_DotDesktopListSelectionDialog
 DotDesktopWizard QObject
@@ -169,6 +170,7 @@
 E5ClickableLed E5Led
 E5ComboBox QComboBox
 E5ComboPathPicker E5PathPickerBase
+E5ComboSelectionDialog QDialog Ui_E5ComboSelectionDialog
 E5DirCompleter QCompleter
 E5DnDTabBar E5WheelTabBar
 E5ErrorMessage QErrorMessage
@@ -197,7 +199,6 @@
 E5ModelToolBar QToolBar
 E5MutexLocker contextlib.AbstractContextManager
 E5NetworkHeaderDetailsDialog QDialog Ui_E5NetworkHeaderDetailsDialog
-E5NetworkIcon QLabel
 E5NetworkProxyFactory QNetworkProxyFactory
 E5OverrideCursor contextlib.AbstractContextManager
 E5OverrideCursorProcess QProcess
@@ -629,7 +630,9 @@
 NewDialogClassDialog QDialog Ui_NewDialogClassDialog
 NewPythonPackageDialog QDialog Ui_NewPythonPackageDialog
 NoExtToken peg.Symbol
-NotificationWidget QWidget Ui_NotificationWidget
+NotificationFrame QFrame Ui_NotificationFrame
+NotificationTypes Enum
+NotificationWidget QWidget
 NotificationsPage ConfigurationPageBase Ui_NotificationsPage
 NsHtmlReader QObject
 NsHtmlWriter QObject
@@ -688,6 +691,7 @@
 PluginUninstallWidget QWidget Ui_PluginUninstallDialog
 PluginUninstallWindow E5MainWindow
 PluginWizardDialog QDialog Ui_PluginWizardDialog
+PopenWrapper module.Popen
 PreferencesLexer QObject
 PreferencesLexerError Exception
 PreferencesLexerLanguageError PreferencesLexerError
@@ -699,6 +703,7 @@
 PrintToPdfDialog QDialog Ui_PrintToPdfDialog
 Printer QsciPrinter
 PrinterPage ConfigurationPageBase Ui_PrinterPage
+ProcessWrapper _originalProcess
 ProfileTreeWidgetItem QTreeWidgetItem
 ProgramsDialog QDialog Ui_ProgramsDialog
 Project QObject
@@ -730,6 +735,8 @@
 PurgeProjectHelper HgExtensionProjectHelper
 PyBoardDevice MicroPythonDevice
 PyCoverageDialog QDialog Ui_PyCoverageDialog
+PyDocstringGenerator BaseDocstringGenerator
+PyFunctionInfo FunctionInfo
 PyProfile profile.Profile
 PyProfileDialog QDialog Ui_PyProfileDialog
 PyRegExpWizard QObject
@@ -743,6 +750,7 @@
 PythonDisViewer QWidget Ui_PythonDisViewer
 PythonDisViewerModes enum.Enum
 PythonPage ConfigurationPageBase Ui_PythonPage
+QProcessWrapper module.QProcess
 QRegularExpressionWizard QObject
 QRegularExpressionWizardCharactersDialog QDialog Ui_QRegularExpressionWizardCharactersDialog
 QRegularExpressionWizardDialog QDialog
--- a/eric6/CodeTemplates/impl_pyqt5.py.tmpl	Sun Jan 17 13:53:08 2021 +0100
+++ b/eric6/CodeTemplates/impl_pyqt5.py.tmpl	Mon Feb 01 10:38:16 2021 +0100
@@ -18,8 +18,8 @@
         """
         Constructor
         
-        @param parent reference to the parent widget
-        @type QWidget
+        @param parent reference to the parent widget (defaults to None)
+        @type QWidget (optional)
         """
         super($CLASSNAME$, self).__init__(parent)
         self.setupUi(self)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric6/CodeTemplates/impl_pyqt6.py.tmpl	Mon Feb 01 10:38:16 2021 +0100
@@ -0,0 +1,25 @@
+# -*- coding: utf-8 -*-
+
+"""
+Module implementing $CLASSNAME$.
+"""
+
+from PyQt6.QtCore import pyqtSlot
+from PyQt6.QtWidgets import $SUPERCLASS$
+
+from .Ui_$FORMFILE$ import Ui_$FORMCLASS$
+
+
+class $CLASSNAME$($SUPERCLASS$, Ui_$FORMCLASS$):
+    """
+    Class documentation goes here.
+    """
+    def __init__(self, parent=None):
+        """
+        Constructor
+        
+        @param parent reference to the parent widget (defaults to None)
+        @type QWidget (optional)
+        """
+        super($CLASSNAME$, self).__init__(parent)
+        self.setupUi(self)
--- a/eric6/CodeTemplates/impl_pyside2.py.tmpl	Sun Jan 17 13:53:08 2021 +0100
+++ b/eric6/CodeTemplates/impl_pyside2.py.tmpl	Mon Feb 01 10:38:16 2021 +0100
@@ -18,8 +18,8 @@
         """
         Constructor
         
-        @param parent reference to the parent widget
-        @type QWidget
+        @param parent reference to the parent widget (defaults to None)
+        @type QWidget (optional)
         """
         super($CLASSNAME$, self).__init__(parent)
         self.setupUi(self)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric6/CodeTemplates/impl_pyside6.py.tmpl	Mon Feb 01 10:38:16 2021 +0100
@@ -0,0 +1,25 @@
+# -*- coding: utf-8 -*-
+
+"""
+Module implementing $CLASSNAME$.
+"""
+
+from PySide6.QtCore import Slot
+from PySide6.QtWidgets import $SUPERCLASS$
+
+from .Ui_$FORMFILE$ import Ui_$FORMCLASS$
+
+
+class $CLASSNAME$($SUPERCLASS$, Ui_$FORMCLASS$):
+    """
+    Class documentation goes here.
+    """
+    def __init__(self, parent=None):
+        """
+        Constructor
+        
+        @param parent reference to the parent widget (defaults to None)
+        @type QWidget (optional)
+        """
+        super($CLASSNAME$, self).__init__(parent)
+        self.setupUi(self)
--- a/eric6/DebugClients/Python/AsyncFile.py	Sun Jan 17 13:53:08 2021 +0100
+++ b/eric6/DebugClients/Python/AsyncFile.py	Mon Feb 01 10:38:16 2021 +0100
@@ -9,6 +9,7 @@
 """
 
 import socket
+import threading
 
 from DebugUtilities import prepareJsonCommand
 
@@ -58,6 +59,7 @@
         self.newlines = None
         self.line_buffering = False
         
+        self.writeLock = threading.RLock()
         self.wpending = []
 
     def __checkMode(self, mode):
@@ -99,6 +101,7 @@
         """
         Public method to write all pending entries.
         """
+        self.writeLock.acquire()
         while self.wpending:
             try:
                 buf = self.wpending.pop(0)
@@ -116,6 +119,7 @@
                 self.nWriteErrors += 1
                 if self.nWriteErrors > self.maxtries:
                     self.wpending = []    # delete all output
+        self.writeLock.release()
 
     def isatty(self):
         """
@@ -191,8 +195,10 @@
         length = int(length)
         data = b''
         while len(data) < length:
-            newData = self.sock.recv(length - len(data))
-            data += newData
+            newByte = self.sock.recv(1)
+            data += newByte
+            if newByte == b'\n':
+                break
         
         # step 2: convert the data
         return data.decode('utf8', 'backslashreplace')
@@ -337,15 +343,18 @@
         """
         self.__checkMode('w')
         
+        self.writeLock.acquire()
         if isinstance(s, (bytes, bytearray)):
             # convert to string to send it
             s = repr(s)
         
         cmd = prepareJsonCommand("ClientOutput", {
             "text": s,
+            "debuggerId": "",
         })
         self.wpending.append(cmd)
         self.flush()
+        self.writeLock.release()
     
     def write_p(self, s):
         """
--- a/eric6/DebugClients/Python/BreakpointWatch.py	Sun Jan 17 13:53:08 2021 +0100
+++ b/eric6/DebugClients/Python/BreakpointWatch.py	Mon Feb 01 10:38:16 2021 +0100
@@ -37,9 +37,9 @@
         @type str
         @param lineno line number of the breakpoint
         @type int
-        @keyparam temporary flag to indicate a temporary breakpoint
+        @param temporary flag to indicate a temporary breakpoint
         @type bool
-        @keyparam cond Python expression which dynamically enables this bp
+        @param cond Python expression which dynamically enables this bp
         @type str
         """
         filename = os.path.abspath(filename)
@@ -109,7 +109,7 @@
         """
         Static method to get the breakpoint of a particular line.
         
-        Because eric6 supports only one breakpoint per line, this
+        Because eric supports only one breakpoint per line, this
         method will return only one breakpoint.
         
         @param filename file name of the bp to retrieve
@@ -198,7 +198,7 @@
         @type code object
         @param flag indicates type of watch (created or changed)
         @type str
-        @keyparam temporary flag for temporary watches
+        @param temporary flag for temporary watches
         @type bool
         """
         # Should not occur
--- a/eric6/DebugClients/Python/DCTestResult.py	Sun Jan 17 13:53:08 2021 +0100
+++ b/eric6/DebugClients/Python/DCTestResult.py	Mon Feb 01 10:38:16 2021 +0100
@@ -4,7 +4,7 @@
 #
 
 """
-Module implementing a TestResult derivative for the eric6 debugger.
+Module implementing a TestResult derivative for the eric debugger.
 """
 
 import select
@@ -13,7 +13,7 @@
 
 class DCTestResult(TestResult):
     """
-    A TestResult derivative to work with eric6's debug client.
+    A TestResult derivative to work with eric's debug client.
     
     For more details see unittest.py of the standard python distribution.
     """
--- a/eric6/DebugClients/Python/DebugBase.py	Sun Jan 17 13:53:08 2021 +0100
+++ b/eric6/DebugClients/Python/DebugBase.py	Mon Feb 01 10:38:16 2021 +0100
@@ -14,7 +14,6 @@
 import inspect
 import ctypes
 import time
-from inspect import CO_GENERATOR
 import dis
 
 from BreakpointWatch import Breakpoint, Watch
@@ -24,6 +23,15 @@
 
 gRecursionLimit = 64
 
+try:
+    GENERATOR_AND_COROUTINE_FLAGS = (
+        inspect.CO_GENERATOR | inspect.CO_COROUTINE |
+        inspect.CO_ASYNC_GENERATOR
+    )
+except AttributeError:
+    # Python < 3.7
+    GENERATOR_AND_COROUTINE_FLAGS = inspect.CO_GENERATOR
+
 
 def printerr(s):
     """
@@ -84,6 +92,7 @@
         self.skipFrames = 0
         
         self.isBroken = False
+        self.isException = False
         self.cFrame = None
         
         # current frame we are at
@@ -105,7 +114,7 @@
         # Use it like this:
         # if hasattr(sys, 'breakpoint): sys.breakpoint()
         sys.breakpoint = self.set_trace
-        if sys.version_info[:2] >= (3, 7):
+        if sys.version_info >= (3, 7):
             sys.breakpointhook = self.set_trace
 
     def __eventPollTimer(self):
@@ -136,7 +145,7 @@
         Public method to return the locals dictionary of the current frame
         or a frame below.
         
-        @keyparam frmnr distance of frame to get locals dictionary of. 0 is
+        @param frmnr distance of frame to get locals dictionary of. 0 is
             the current frame (int)
         @return locals dictionary of the frame
         """
@@ -151,7 +160,7 @@
         Public method to store the locals into the frame, so an access to
         frame.f_locals returns the last data.
         
-        @keyparam frmnr distance of frame to store locals dictionary to. 0 is
+        @param frmnr distance of frame to store locals dictionary to. 0 is
             the current frame (int)
         """
         cf = self.currentFrame
@@ -309,8 +318,11 @@
         
         if event == 'line':
             if self.stop_here(frame) or self.break_here(frame):
-                if (self.stop_everywhere and frame.f_back and
-                        frame.f_back.f_code.co_name == "prepareJsonCommand"):
+                if (
+                    self.stop_everywhere and
+                    frame.f_back and
+                    frame.f_back.f_code.co_name == "prepareJsonCommand"
+                ):
                     # Just stepped into print statement, so skip these frames
                     self._set_stopinfo(None, frame.f_back)
                 else:
@@ -318,19 +330,33 @@
             return self.trace_dispatch
         
         if event == 'call':
-            if (self.stop_here(frame) or
-                    self.__checkBreakInFrame(frame) or
-                    Watch.watches != []):
+            if (
+                self.stop_here(frame) or
+                self.__checkBreakInFrame(frame) or
+                Watch.watches != []
+            ):
+                return self.trace_dispatch
+            elif (
+                self.stopframe and
+                frame.f_code.co_flags & GENERATOR_AND_COROUTINE_FLAGS
+            ):
                 return self.trace_dispatch
             else:
                 # No need to trace this function
                 return None
         
         if event == 'return':
-            if frame == self.returnframe:
-                # Only true if we didn't stopped in this frame, because it's
+            if self.stop_here(frame) or frame == self.returnframe:
+                # Ignore return events in generator except when stepping.
+                if (
+                    self.stopframe and
+                    frame.f_code.co_flags & GENERATOR_AND_COROUTINE_FLAGS
+                ):
+                    return self.trace_dispatch
+                # Only true if we didn't stop in this frame, because it's
                 # belonging to the eric debugger.
-                self._set_stopinfo(None, frame.f_back)
+                if self.stopframe is frame and self.stoplineno != -1:
+                    self._set_stopinfo(None, frame.f_back)
             return None
         
         if event == 'exception':
@@ -339,16 +365,23 @@
                 # skip the internal StopIteration exception (with no traceback)
                 # triggered by a subiterator run with the 'yield from'
                 # statement.
-                if not (frame.f_code.co_flags & CO_GENERATOR and
-                        arg[0] is StopIteration and arg[2] is None):
+                if not (
+                    frame.f_code.co_flags & GENERATOR_AND_COROUTINE_FLAGS and
+                    arg[0] is StopIteration and
+                    arg[2] is None
+                ):
                     self.user_exception(arg)
             # Stop at the StopIteration or GeneratorExit exception when the
             # user has set stopframe in a generator by issuing a return
             # command, or a next/until command at the last statement in the
             # generator before the exception.
-            elif (self.stopframe and frame is not self.stopframe and
-                    self.stopframe.f_code.co_flags & CO_GENERATOR and
-                    arg[0] in (StopIteration, GeneratorExit)):
+            elif (
+                self.stopframe and
+                frame is not self.stopframe and
+                (self.stopframe.f_code.co_flags &
+                 GENERATOR_AND_COROUTINE_FLAGS) and
+                arg[0] in (StopIteration, GeneratorExit)
+            ):
                 self.user_exception(arg)
             return None
 
@@ -362,6 +395,7 @@
         print('DebugBase.trace_dispatch:'       # __IGNORE_WARNING_M801__
               ' unknown debugging event: ',
               repr(event))
+        
         return self.trace_dispatch
 
     def set_trace(self, frame=None):
@@ -372,7 +406,7 @@
         Because of jump optimizations it's not possible to use sys.breakpoint()
         as last instruction in a function or method.
         
-        @keyparam frame frame to start debugging from
+        @param frame frame to start debugging from
         @type frame object
         """
         if frame is None:
@@ -383,7 +417,7 @@
         frame.f_trace = self.trace_dispatch
         while frame.f_back is not None:
             # stop at eric's debugger frame or a threading bootstrap
-            if (frame.f_back.f_code == stopOnHandleCommand):
+            if frame.f_back.f_code == stopOnHandleCommand:
                 frame.f_trace = self.trace_dispatch
                 break
             
@@ -420,17 +454,23 @@
             sys.settrace(None)
             sys.setprofile(None)
     
-    def run(self, cmd, globalsDict=None, localsDict=None, debug=True):
+    def run(self, cmd, globalsDict=None, localsDict=None, debug=True,
+            closeSession=True):
         """
         Public method to start a given command under debugger control.
         
         @param cmd command / code to execute under debugger control
         @type str or CodeType
-        @keyparam globalsDict dictionary of global variables for cmd
+        @param globalsDict dictionary of global variables for cmd
+        @type dict
+        @param localsDict dictionary of local variables for cmd
         @type dict
-        @keyparam localsDict dictionary of local variables for cmd
-        @type dict
-        @keyparam debug flag if command should run under debugger control
+        @param debug flag if command should run under debugger control
+        @type bool
+        @return exit code of the program
+        @rtype int
+        @param closeSession flag indicating to close the debugger session
+            at exit
         @type bool
         """
         if globalsDict is None:
@@ -453,20 +493,24 @@
         try:
             exec(cmd, globalsDict, localsDict)      # secok
             atexit._run_exitfuncs()
-            self._dbgClient.progTerminated(0)
+            self._dbgClient.progTerminated(0, closeSession=closeSession)
+            exitcode = 0
         except SystemExit:
             atexit._run_exitfuncs()
             excinfo = sys.exc_info()
             exitcode, message = self.__extractSystemExitMessage(excinfo)
-            self._dbgClient.progTerminated(exitcode, message)
+            self._dbgClient.progTerminated(exitcode, message=message,
+                                           closeSession=closeSession)
         except Exception:
             excinfo = sys.exc_info()
             self.user_exception(excinfo, True)
+            exitcode = 242
         finally:
             self.quitting = True
             sys.settrace(None)
+        return exitcode
 
-    def _set_stopinfo(self, stopframe, returnframe):
+    def _set_stopinfo(self, stopframe, returnframe, stoplineno=0):
         """
         Protected method to update the frame pointers.
         
@@ -474,9 +518,17 @@
         @type frame object
         @param returnframe the frame object where to stop on a function return
         @type frame object
+        @param stoplineno line number to stop at. If stoplineno is greater than
+            or equal to 0, then stop at line greater than or equal to the
+            stopline. If stoplineno is -1, then don't stop at all.
+        @type int
         """
         self.stopframe = stopframe
         self.returnframe = returnframe
+        # stoplineno >= 0 means: stop at line >= the stoplineno
+        # stoplineno -1 means: don't stop at all
+        self.stoplineno = stoplineno
+        
         if returnframe is not None:
             # Ensure to be able to stop on the return frame
             returnframe.f_trace = self.trace_dispatch
@@ -491,13 +543,30 @@
         """
         # Here we only set a new stop frame if it is a normal continue.
         if not special:
-            self._set_stopinfo(None, None)
+            self._set_stopinfo(None, None, -1)
         
         # Disable tracing if not started in debug mode
         if not self._dbgClient.debugging:
             sys.settrace(None)
             sys.setprofile(None)
 
+    def set_until(self, frame=None, lineno=None):
+        """
+        Public method to stop when the line with the lineno greater than the
+        current one is reached or when returning from current frame.
+        
+        @param frame reference to the frame object
+        @type frame object
+        @param lineno line number to continue to
+        @type int
+        """
+        # the name "until" is borrowed from gdb
+        if frame is None:
+            frame = self.currentFrame
+        if lineno is None:
+            lineno = frame.f_lineno + 1
+        self._set_stopinfo(frame, frame, lineno)
+
     def set_step(self):
         """
         Public method to stop after one line of code.
@@ -534,7 +603,7 @@
         try:
             self.currentFrame.f_lineno = lineno
             stack = self.getStack(self.currentFrame)
-            self._dbgClient.sendResponseLine(stack)
+            self._dbgClient.sendResponseLine(stack, self.name)
         except Exception as e:
             printerr(e)
 
@@ -692,9 +761,9 @@
         """
         Public method to get the stack.
         
-        @keyparam frame frame object to inspect
+        @param frame frame object to inspect
         @type frame object or list
-        @keyparam applyTrace flag to assign trace function to fr.f_trace
+        @param applyTrace flag to assign trace function to fr.f_trace
         @type bool
         @return list of lists with file name (string), line number (integer)
             and function name (string)
@@ -720,8 +789,9 @@
             fname = self._dbgClient.absPath(self.fix_frame_filename(fr))
             # Always show at least one stack frame, even if it's from eric.
             if stack and os.path.basename(fname).startswith(
-                    ("DebugBase.py", "DebugClientBase.py",
-                     "ThreadExtension.py", "threading.py")):
+                ("DebugBase.py", "DebugClientBase.py",
+                 "ThreadExtension.py", "threading.py")
+            ):
                 break
             
             fline = tb_lineno or fr.f_lineno
@@ -773,19 +843,21 @@
         self._dbgClient.currentThread = self
         self._dbgClient.currentThreadExec = self
         
-        self._dbgClient.sendResponseLine(stack)
+        self._dbgClient.sendResponseLine(stack, self.name)
         self._dbgClient.eventLoop()
         
         self.isBroken = False
         self._dbgClient.unlockClient()
         
+        self._dbgClient.dumpThreadList()
+    
     def user_exception(self, excinfo, unhandled=False):
         """
         Public method reimplemented to report an exception to the debug server.
         
         @param excinfo details about the exception
         @type tuple(Exception, excval object, traceback frame object)
-        @keyparam unhandled flag indicating an uncaught exception
+        @param unhandled flag indicating an uncaught exception
         @type bool
         """
         exctype, excval, exctb = excinfo
@@ -825,7 +897,7 @@
             
             if realSyntaxError:
                 self._dbgClient.sendSyntaxError(
-                    message, filename, lineno, charno)
+                    message, filename, lineno, charno, self.name)
                 self._dbgClient.eventLoop()
                 return
         
@@ -865,6 +937,7 @@
             self.stop_everywhere = False
         
         self.isBroken = True
+        self.isException = True
         
         disassembly = None
         stack = []
@@ -879,7 +952,7 @@
         self._dbgClient.lockClient()
         self._dbgClient.currentThread = self
         self._dbgClient.currentThreadExec = self
-        self._dbgClient.sendException(exctypetxt, excvaltxt, stack)
+        self._dbgClient.sendException(exctypetxt, excvaltxt, stack, self.name)
         self._dbgClient.setDisassembly(disassembly)
         self._dbgClient.dumpThreadList()
         
@@ -891,11 +964,14 @@
         self.skipFrames = 0
         
         self.isBroken = False
+        self.isException = False
         stop_everywhere = self.stop_everywhere
         self.stop_everywhere = False
         self.eventPollFlag = False
         self._dbgClient.unlockClient()
         self.stop_everywhere = stop_everywhere
+        
+        self._dbgClient.dumpThreadList()
     
     def __extractExceptionName(self, exctype):
         """
@@ -1009,6 +1085,9 @@
             elif isinstance(code, int):
                 exitcode = code
                 message = ""
+            elif code is None:
+                exitcode = 0
+                message = ""
             else:
                 exitcode = 1
                 message = str(code)
@@ -1017,7 +1096,7 @@
             message = str(excval)
         
         return exitcode, message
-
+    
     def stop_here(self, frame):
         """
         Public method reimplemented to filter out debugger files.
@@ -1033,9 +1112,11 @@
         if self.__skipFrame(frame):
             return False
         
-        return (self.stop_everywhere or
-                frame is self.stopframe or
-                frame is self.returnframe)
+        if frame is self.stopframe:
+            if self.stoplineno == -1:
+                return False
+            return frame.f_lineno >= self.stoplineno
+        return self.stop_everywhere or frame is self.returnframe
 
     def tracePythonLibs(self, enable):
         """
--- a/eric6/DebugClients/Python/DebugClient.py	Sun Jan 17 13:53:08 2021 +0100
+++ b/eric6/DebugClients/Python/DebugClient.py	Mon Feb 01 10:38:16 2021 +0100
@@ -10,14 +10,12 @@
 from DebugBase import DebugBase
 from DebugClientBase import DebugClientBase
 from ThreadExtension import ThreadExtension
+from ModuleLoader import ModuleLoader
 
 
 class DebugClient(DebugClientBase, DebugBase, ThreadExtension):
     """
     Class implementing the client side of the debugger.
-    
-    This variant of the debugger implements the standard debugger client
-    by subclassing all relevant base classes.
     """
     def __init__(self):
         """
@@ -29,7 +27,7 @@
         
         ThreadExtension.__init__(self)
         
-        self.variant = 'Standard'
+        self.__moduleLoader = ModuleLoader(self)
 
 # We are normally called by the debugger to execute directly.
 
--- a/eric6/DebugClients/Python/DebugClientBase.py	Sun Jan 17 13:53:08 2021 +0100
+++ b/eric6/DebugClients/Python/DebugClientBase.py	Mon Feb 01 10:38:16 2021 +0100
@@ -20,17 +20,19 @@
 import signal
 import time
 import types
-import importlib
+import importlib.util
+import fnmatch
 
 
 import DebugClientCapabilities
 import DebugVariables
 from DebugBase import setRecursionLimit, printerr   # __IGNORE_WARNING__
 from AsyncFile import AsyncFile, AsyncPendingWrite
-from DebugConfig import ConfigQtNames, ConfigVarTypeStrings
+from DebugConfig import ConfigQtNames, SpecialAttributes
 from FlexCompleter import Completer
 from DebugUtilities import prepareJsonCommand
 from BreakpointWatch import Breakpoint, Watch
+from MultiProcessDebugExtension import patchNewProcessFunctions
 
 from DebugUtilities import getargvalues, formatargvalues
 
@@ -67,25 +69,6 @@
 ###############################################################################
 
 
-def DebugClientFork():
-    """
-    Replacement for the standard os.fork().
-    
-    @return result of the fork() call
-    """
-    if DebugClientInstance is None:
-        return DebugClientOrigFork()
-    
-    return DebugClientInstance.fork()
-
-# use our own fork().
-if 'fork' in dir(os):
-    DebugClientOrigFork = os.fork
-    os.fork = DebugClientFork
-
-###############################################################################
-
-
 def DebugClientClose(fd):
     """
     Replacement for the standard os.close(fd).
@@ -179,20 +162,17 @@
         self.running = None
         self.test = None
         self.debugging = False
-        
-        self.fork_auto = False
-        self.fork_child = False
+        self.multiprocessSupport = False
+        self.noDebugList = []
 
         self.readstream = None
         self.writestream = None
         self.errorstream = None
         self.pollingDisabled = False
         
-        self.callTraceEnabled = None
+        self.__debuggerId = ""
         
-        self.disassembly = None
-        
-        self.variant = 'You should not see this'
+        self.callTraceEnabled = None
         
         self.compile_command = codeop.CommandCompiler()
         
@@ -200,6 +180,8 @@
         self.defaultCoding = 'utf-8'
         self.__coding = self.defaultCoding
         self.noencoding = False
+        
+        self.startOptions = None
     
     def getCoding(self):
         """
@@ -263,6 +245,8 @@
             pass
 
         self.debugging = False
+        self.multiprocessSupport = False
+        self.noDebugList = []
         
         # make sure we close down our end of the socket
         # might be overkill as normally stdin, stdout and stderr
@@ -279,13 +263,29 @@
         """
         Private method to compile source code read from a file.
         
-        @param filename name of the source file (string)
-        @param mode kind of code to be generated (string, exec or eval)
+        @param filename name of the source file
+        @type str
+        @param mode kind of code to be generated (exec or eval)
+        @type str
         @return compiled code object (None in case of errors)
         """
         with codecs.open(filename, encoding=self.__coding) as fp:
             statement = fp.read()
         
+        return self.__compileCommand(statement, filename=filename, mode=mode)
+    
+    def __compileCommand(self, statement, filename="<string>", mode="exec"):
+        """
+        Private method to compile source code.
+        
+        @param statement source code string to be compiled
+        @type str
+        @param filename name of the source file
+        @type str
+        @param mode kind of code to be generated (exec or eval)
+        @type str
+        @return compiled code object (None in case of errors)
+        """
         try:
             code = compile(statement + '\n', filename, mode)
         except SyntaxError:
@@ -304,7 +304,7 @@
                 lineno = 0
                 charno = 0
             
-            self.sendSyntaxError(message, filename, lineno, charno)
+            self.sendSyntaxError(message, filename, lineno, charno, self.name)
             return None
         
         return code
@@ -316,7 +316,7 @@
         @param jsonStr string containing the command received from the IDE
         @type str
         """
-##        printerr(jsonStr)          ##debug
+##        printerr(jsonStr)          ## debug       # __IGNORE_WARNING_M891__
         
         try:
             commandDict = json.loads(jsonStr.strip())
@@ -337,16 +337,29 @@
                 params["variable"], params["frameNumber"],
                 params["scope"], params["filters"])
         
+        elif method == "RequestStack":
+            stack = self.mainThread.getStack()
+            self.sendResponseLine(stack, self.mainThread.name)
+        
         elif method == "RequestThreadList":
             self.dumpThreadList()
         
         elif method == "RequestThreadSet":
-            if params["threadID"] in self.threads:
-                self.setCurrentThread(params["threadID"])
+            if params["threadID"] == -1:
+                # -1 is indication for the main thread
+                threadId = -1
+                for thread in self.threads.values():
+                    if thread.name == "MainThread":
+                        threadId = thread.id
+            else:
+                threadId = params["threadID"]
+            if threadId in self.threads:
+                self.setCurrentThread(threadId)
                 self.sendJsonCommand("ResponseThreadSet", {})
                 stack = self.currentThread.getStack()
                 self.sendJsonCommand("ResponseStack", {
                     "stack": stack,
+                    "threadName": self.currentThread.name,
                 })
         
         elif method == "RequestDisassembly":
@@ -370,7 +383,6 @@
             self.sendJsonCommand("ResponseBanner", {
                 "version": "Python {0}".format(sys.version),
                 "platform": socket.gethostname(),
-                "dbgclient": self.variant,
             })
         
         elif method == "RequestSetFilter":
@@ -414,9 +426,7 @@
             
             self.running = sys.argv[0]
             self.debugging = True
-            
-            self.fork_auto = params["autofork"]
-            self.fork_child = params["forkChild"]
+            self.multiprocessSupport = params["multiprocess"]
             
             self.threads.clear()
             self.attachThread(mainThread=True)
@@ -439,7 +449,8 @@
             code = self.__compileFileSource(self.running)
             if code:
                 sys.setprofile(self.callTraceEnabled)
-                self.mainThread.run(code, self.debugMod.__dict__, debug=True)
+                self.mainThread.run(code, self.debugMod.__dict__, debug=True,
+                                    closeSession=False)
 
         elif method == "RequestRun":
             self.disassembly = None
@@ -456,9 +467,6 @@
             self.running = sys.argv[0]
             self.botframe = None
             
-            self.fork_auto = params["autofork"]
-            self.fork_child = params["forkChild"]
-            
             self.threads.clear()
             self.attachThread(mainThread=True)
             
@@ -474,7 +482,8 @@
             res = 0
             code = self.__compileFileSource(self.running)
             if code:
-                self.mainThread.run(code, self.debugMod.__dict__, debug=False)
+                self.mainThread.run(code, self.debugMod.__dict__, debug=False,
+                                    closeSession=False)
 
         elif method == "RequestCoverage":
             from coverage import Coverage
@@ -508,7 +517,8 @@
             if code:
                 self.running = sys.argv[0]
                 self.cover.start()
-                self.mainThread.run(code, self.debugMod.__dict__, debug=False)
+                self.mainThread.run(code, self.debugMod.__dict__, debug=False,
+                                    closeSession=False)
                 self.cover.stop()
                 self.cover.save()
         
@@ -558,7 +568,7 @@
                     self.__unhandled_exception(*excinfo)
                 
                 self.prof.save()
-                self.progTerminated(res)
+                self.progTerminated(res, closeSession=False)
         
         elif method == "ExecuteStatement":
             if self.buffer:
@@ -609,8 +619,8 @@
                                     _locals = (
                                         self.currentThread.getFrameLocals(
                                             self.framenr))
-                            ## reset sys.stdout to our redirector
-                            ## (unconditionally)
+                            #- reset sys.stdout to our redirector
+                            #- (unconditionally)
                             if "sys" in _globals:
                                 __stdout = _globals["sys"].stdout
                                 _globals["sys"].stdout = self.writestream
@@ -679,6 +689,11 @@
             self.currentThreadExec.go(params["special"])
             self.eventExit = True
         
+        elif method == "RequestContinueUntil":
+            newLine = params["newLine"]
+            self.currentThreadExec.set_until(lineno=newLine)
+            self.eventExit = True
+        
         elif method == "RawInput":
             # If we are handling raw mode input then break out of the current
             # event loop.
@@ -758,6 +773,9 @@
         elif method == "RequestShutdown":
             self.sessionClose()
         
+        elif method == "RequestSetNoDebugList":
+            self.noDebugList = params["noDebug"][:]
+        
         elif method == "RequestCompletion":
             self.__completionList(params["text"])
         
@@ -809,14 +827,10 @@
         elif method == "RequestUTPrepare":
             if params["syspath"]:
                 sys.path = params["syspath"] + sys.path
-            sys.path.insert(
-                0, os.path.dirname(os.path.abspath(params["filename"])))
             top_level_dir = None
             if params["workdir"]:
                 os.chdir(params["workdir"])
                 top_level_dir = params["workdir"]
-            else:
-                os.chdir(sys.path[0])
             
             # set the system exception handling function to ensure, that
             # we report on all unhandled exceptions
@@ -830,6 +844,8 @@
                     discoveryStart = params["discoverystart"]
                     if not discoveryStart:
                         discoveryStart = params["workdir"]
+                    sys.path.insert(
+                        0, os.path.abspath(discoveryStart))
                     if params["testcases"]:
                         self.test = testLoader.loadTestsFromNames(
                             params["testcases"])
@@ -837,6 +853,10 @@
                         self.test = testLoader.discover(
                             discoveryStart, top_level_dir=top_level_dir)
                 else:
+                    sys.path.insert(
+                        0,
+                        os.path.dirname(os.path.abspath(params["filename"]))
+                    )
                     if params["filename"]:
                         spec = importlib.util.spec_from_file_location(
                             params["testname"], params["filename"])
@@ -897,9 +917,13 @@
                 self.threads.clear()
                 self.attachThread(mainThread=True)
                 sys.setprofile(None)
+                self.running = sys.argv[0]
                 self.mainThread.run(
                     "result = self.test.run(self.testResult)\n",
-                    localsDict=locals_)
+                    self.debugMod.__dict__,
+                    localsDict=locals_,
+                    debug=True,
+                    closeSession=False)
                 result = locals_["result"]
             else:
                 result = self.test.run(self.testResult)
@@ -912,11 +936,6 @@
         
         elif method == "RequestUTStop":
             self.testResult.stop()
-        
-        elif method == "ResponseForkTo":
-            # this results from a separate event loop
-            self.fork_child = (params["target"] == 'child')
-            self.eventExit = True
     
     def __assembleTestCasesList(self, suite, start):
         """
@@ -969,6 +988,10 @@
             response
         @type dict
         """
+        # send debugger ID with all responses
+        if "debuggerId" not in params:
+            params["debuggerId"] = self.__debuggerId
+        
         cmd = prepareJsonCommand(method, params)
         
         self.writestream.write_p(cmd)
@@ -999,15 +1022,18 @@
             "condition": condition,
         })
     
-    def sendResponseLine(self, stack):
+    def sendResponseLine(self, stack, threadName):
         """
         Public method to send the current call stack.
         
         @param stack call stack
         @type list
+        @param threadName name of the thread sending the event
+        @type str
         """
         self.sendJsonCommand("ResponseLine", {
             "stack": stack,
+            "threadName": threadName,
         })
     
     def sendCallTrace(self, event, fromInfo, toInfo):
@@ -1029,7 +1055,8 @@
             "to": toInfo,
         })
     
-    def sendException(self, exceptionType, exceptionMessage, stack):
+    def sendException(self, exceptionType, exceptionMessage, stack,
+                      threadName):
         """
         Public method to send information for an exception.
         
@@ -1039,14 +1066,17 @@
         @type str
         @param stack stack trace information
         @type list
+        @param threadName name of the thread sending the event
+        @type str
         """
         self.sendJsonCommand("ResponseException", {
             "type": exceptionType,
             "message": exceptionMessage,
             "stack": stack,
+            "threadName": threadName,
         })
     
-    def sendSyntaxError(self, message, filename, lineno, charno):
+    def sendSyntaxError(self, message, filename, lineno, charno, threadName):
         """
         Public method to send information for a syntax error.
         
@@ -1058,12 +1088,15 @@
         @type int
         @param charno character number info
         @type int
+        @param threadName name of the thread sending the event
+        @type str
         """
         self.sendJsonCommand("ResponseSyntax", {
             "message": message,
             "filename": filename,
             "linenumber": lineno,
             "characternumber": charno,
+            "threadName": threadName,
         })
     
     def sendPassiveStartup(self, filename, exceptions):
@@ -1080,6 +1113,17 @@
             "exceptions": exceptions,
         })
     
+    def sendDebuggerId(self, debuggerId):
+        """
+        Public method to send the debug client id.
+        
+        @param debuggerId id of this debug client instance (made up of
+            hostname and process ID)
+        @type str
+        """
+        # debugger ID is added automatically by sendJsonCommand
+        self.sendJsonCommand("DebuggerId", {})
+    
     def __clientCapabilities(self):
         """
         Private method to determine the clients capabilities.
@@ -1101,7 +1145,7 @@
         """
         Public method called when there is data ready to be read.
         
-        @param stream file like object that has data to be written
+        @param stream file like object that has data to be read
         @return flag indicating an error condition
         @rtype bool
         """
@@ -1177,6 +1221,9 @@
                 else:
                     # give up for too many errors
                     break
+            except ValueError:
+                # the client socket might already be closed, i.e. its fd is -1
+                break
             
             # reset the select error counter
             selectErrors = 0
@@ -1224,7 +1271,8 @@
         if self.errorstream in wrdy:
             self.writeReady(self.errorstream)
     
-    def connectDebugger(self, port, remoteAddress=None, redirect=True):
+    def connectDebugger(self, port, remoteAddress=None, redirect=True,
+                        name=""):
         """
         Public method to establish a session with the debugger.
         
@@ -1232,19 +1280,28 @@
         stdout and stderr and saves these file objects in case the application
         being debugged redirects them itself.
         
-        @param port the port number to connect to (int)
+        @param port the port number to connect to
+        @type int
         @param remoteAddress the network address of the debug server host
-            (string)
+        @type str
         @param redirect flag indicating redirection of stdin, stdout and
-            stderr (boolean)
+            stderr
+        @type bool
+        @param name name to be attached to the debugger ID
+        @type str
         """
         if remoteAddress is None:
             remoteAddress = "127.0.0.1"
         elif "@@i" in remoteAddress:
             remoteAddress = remoteAddress.split("@@i")[0]
         sock = socket.create_connection((remoteAddress, port))
-
-        self.readstream = AsyncFile(sock, sys.stdin.mode, sys.stdin.name)
+        
+        stdinName = sys.stdin.name
+        # Special case if in a multiprocessing.Process
+        if isinstance(stdinName, int):
+            stdinName = '<stdin>'
+        
+        self.readstream = AsyncFile(sock, sys.stdin.mode, stdinName)
         self.writestream = AsyncFile(sock, sys.stdout.mode, sys.stdout.name)
         self.errorstream = AsyncFile(sock, sys.stderr.mode, sys.stderr.name)
         
@@ -1256,6 +1313,14 @@
         
         # attach to the main thread here
         self.attachThread(mainThread=True)
+        
+        if not name:
+            name = "main"
+        self.__debuggerId = "{0}/{1}/{2}".format(
+            socket.gethostname(), os.getpid(), name
+        )
+        
+        self.sendDebuggerId(self.__debuggerId)
 
     def __unhandled_exception(self, exctype, excval, exctb):
         """
@@ -1375,7 +1440,7 @@
         """
         return self.running
 
-    def progTerminated(self, status, message=""):
+    def progTerminated(self, status, message="", closeSession=True):
         """
         Public method to tell the debugger that the program has terminated.
         
@@ -1383,23 +1448,32 @@
         @type int
         @param message status message
         @type str
+        @param closeSession flag indicating to close the debugger session
+        @type bool
         """
         if status is None:
             status = 0
         elif not isinstance(status, int):
             message = str(status)
             status = 1
-
+        if message is None:
+            message = ""
+        
         if self.running:
             self.set_quit()
+            program = self.running
             self.running = None
             self.sendJsonCommand("ResponseExit", {
                 "status": status,
                 "message": message,
+                "program": program,
             })
         
         # reset coding
         self.__coding = self.defaultCoding
+        
+        if closeSession:
+            self.sessionClose(False)
 
     def __dumpVariables(self, frmnr, scope, filterList):
         """
@@ -1409,8 +1483,8 @@
         @type int
         @param scope 1 to report global variables, 0 for local variables
         @type int
-        @param filterList the indices of variable types to be filtered
-        @type list of int
+        @param filterList list of variable types to be filtered
+        @type list of str
         """
         if self.currentThread is None:
             return
@@ -1458,7 +1532,7 @@
         @type int
         @param scope 1 to report global variables, 0 for local variables
         @type int
-        @param filterList the indices of variable types to be filtered
+        @param filterList list of variable types to be filtered
         @type list of int
         """
         if self.currentThread is None:
@@ -1714,10 +1788,10 @@
             Variables are only added to the list, if their name do not match
             any of the filter expressions.
         @type int
-        @param filterList the indices of variable types to be filtered.
+        @param filterList list of variable types to be filtered.
             Variables are only added to the list, if their type is not
             contained in the filter list.
-        @type list of int
+        @type list of str
         @return A tuple consisting of a list of formatted variables. Each
             variable entry is a tuple of three elements, the variable name,
             its type and value.
@@ -1748,15 +1822,25 @@
                 continue
             
             # filter hidden attributes (filter #0)
-            if 0 in filterList and str(key)[:2] == '__':
+            if '__' in filterList and str(key)[:2] == '__':
                 continue
             
             # special handling for '__builtins__' (it's way too big)
             if key == '__builtins__':
                 rvalue = '<module builtins (built-in)>'
                 valtype = 'module'
-                if ConfigVarTypeStrings.index(valtype) in filterList:
+                if valtype in filterList:
                     continue
+            elif (
+                key in SpecialAttributes and
+                "special_attributes" in filterList
+            ):
+                continue
+            elif (
+                key == "__hash__" and
+                "builtin_function_or_method" in filterList
+            ):
+                continue
             else:
                 isQt = False
                 # valtypestr, e.g. class 'PyQt5.QtCore.QPoint'
@@ -1767,37 +1851,37 @@
                 # Strip 'instance' to be equal with Python 3
                 if valtype == "instancemethod":
                     valtype = "method"
-                elif valtype == "type" or valtype == "classobj":
+                elif valtype in ("type", "classobj"):
                     valtype = "class"
+                elif valtype == "method-wrapper":
+                    valtype = "builtin_function_or_method"
                 
                 # valtypename, e.g. QPoint
                 valtypename = type(value).__name__
-                try:
-                    if ConfigVarTypeStrings.index(valtype) in filterList:
-                        continue
-                except ValueError:
-                    if valtype in ("sip.enumtype", "sip.wrappertype"):
-                        if ConfigVarTypeStrings.index('class') in filterList:
-                            continue
-                    elif (valtype == "sip.methoddescriptor" or
-                            valtype == "method_descriptor"):
-                        if ConfigVarTypeStrings.index('method') in filterList:
-                            continue
-                    elif valtype in ("numpy.ndarray", "array.array"):
-                        if ConfigVarTypeStrings.index('list') in filterList:
-                            continue
-                    elif valtypename == "MultiValueDict":
-                        if ConfigVarTypeStrings.index('dict') in filterList:
-                            continue
-                    elif ConfigVarTypeStrings.index('instance') in filterList:
-                        continue
-                    
-                    isQt = valtype.startswith(ConfigQtNames)
-                    if (not valtypestr.startswith('type ') and
-                        valtypename not in ("ndarray", "MultiValueDict",
-                                            "array", "defaultdict") and
-                            not isQt):
-                        valtype = valtypestr
+                if valtype in filterList:
+                    continue
+                elif (
+                    valtype in ("sip.enumtype", "sip.wrappertype") and
+                    'class' in filterList
+                ):
+                    continue
+                elif (
+                    valtype in (
+                        "sip.methoddescriptor", "method_descriptor") and
+                    'method' in filterList
+                ):
+                    continue
+                elif (
+                    valtype in ("numpy.ndarray", "array.array") and
+                    'list' in filterList
+                ):
+                    continue
+                elif valtypename == "MultiValueDict" and 'dict' in filterList:
+                    continue
+                elif 'instance' in filterList:
+                    continue
+                
+                isQt = valtype.startswith(ConfigQtNames)
                 
                 try:
                     if valtype in self.arrayTypes:
@@ -1909,32 +1993,45 @@
                 comp = completer(text, state)
             except Exception:
                 comp = None
-
+    
     def startDebugger(self, filename=None, host=None, port=None,
                       enableTrace=True, exceptions=True, tracePython=False,
-                      redirect=True):
+                      redirect=True, passive=True, multiprocessSupport=False):
         """
         Public method used to start the remote debugger.
         
-        @param filename the program to be debugged (string)
-        @param host hostname of the debug server (string)
-        @param port portnumber of the debug server (int)
-        @param enableTrace flag to enable the tracing function (boolean)
+        @param filename the program to be debugged
+        @type str
+        @param host hostname of the debug server
+        @type str
+        @param port portnumber of the debug server
+        @type int
+        @param enableTrace flag to enable the tracing function
+        @type bool
         @param exceptions flag to enable exception reporting of the IDE
-            (boolean)
+        @type bool
         @param tracePython flag to enable tracing into the Python library
-            (boolean)
+        @type bool
         @param redirect flag indicating redirection of stdin, stdout and
-            stderr (boolean)
+            stderr
+        @type bool
+        @param passive flag indicating a passive debugging session
+        @type bool
+        @param multiprocessSupport flag indicating to enable multiprocess
+            debugging support
+        @type bool
         """
-        global debugClient
         if host is None:
             host = os.getenv('ERICHOST', 'localhost')
         if port is None:
             port = os.getenv('ERICPORT', 42424)
         
         remoteAddress = self.__resolveHost(host)
-        self.connectDebugger(port, remoteAddress, redirect)
+        if filename is not None:
+            name = os.path.basename(filename)
+        else:
+            name = ""
+        self.connectDebugger(port, remoteAddress, redirect, name=name)
         if filename is not None:
             self.running = os.path.abspath(filename)
         else:
@@ -1944,8 +2041,7 @@
                 self.running = None
         if self.running:
             self.__setCoding(self.running)
-        self.passive = True
-        self.sendPassiveStartup(self.running, exceptions)
+        self.passive = passive
         self.__interact()
         
         # setup the debugger variables
@@ -1967,7 +2063,9 @@
     
     def startProgInDebugger(self, progargs, wd='', host=None,
                             port=None, exceptions=True, tracePython=False,
-                            redirect=True):
+                            redirect=True, passive=True,
+                            multiprocessSupport=False, codeStr="",
+                            scriptModule=""):
         """
         Public method used to start the remote debugger.
         
@@ -1982,6 +2080,17 @@
             (boolean)
         @param redirect flag indicating redirection of stdin, stdout and
             stderr (boolean)
+        @param passive flag indicating a passive debugging session
+        @type bool
+        @param multiprocessSupport flag indicating to enable multiprocess
+            debugging support
+        @type bool
+        @param codeStr string containing Python code to execute
+        @type str
+        @param scriptModule name of a module to be executed as a script
+        @type str
+        @return exit code of the debugged program
+        @rtype int
         """
         if host is None:
             host = os.getenv('ERICHOST', 'localhost')
@@ -1989,24 +2098,36 @@
             port = os.getenv('ERICPORT', 42424)
         
         remoteAddress = self.__resolveHost(host)
-        self.connectDebugger(port, remoteAddress, redirect)
+        if progargs:
+            if not progargs[0].startswith("-"):
+                name = os.path.basename(progargs[0])
+            else:
+                name = "debug_client_code"
+        else:
+            name = "debug_client_code"
+        self.connectDebugger(port, remoteAddress, redirect, name=name)
         
         self._fncache = {}
         self.dircache = []
-        sys.argv = progargs[:]
-        sys.argv[0] = os.path.abspath(sys.argv[0])
-        sys.path = self.__getSysPath(os.path.dirname(sys.argv[0]))
-        if wd == '':
-            os.chdir(sys.path[1])
+        if codeStr:
+            self.running = "<string>"
+            sys.argv = ["<string>"] + progargs[:]
         else:
-            os.chdir(wd)
-        self.running = sys.argv[0]
-        self.__setCoding(self.running)
+            sys.argv = progargs[:]
+            sys.argv[0] = os.path.abspath(sys.argv[0])
+            sys.path = self.__getSysPath(os.path.dirname(sys.argv[0]))
+            if wd == '':
+                os.chdir(sys.path[1])
+            else:
+                os.chdir(wd)
+            self.running = sys.argv[0]
+            self.__setCoding(self.running)
         self.debugging = True
+        self.multiprocessSupport = multiprocessSupport
         
-        self.passive = True
-        self.sendPassiveStartup(self.running, exceptions)
-        self.__interact()
+        self.passive = passive
+        if passive:
+            self.sendPassiveStartup(self.running, exceptions)
         
         self.attachThread(mainThread=True)
         self.mainThread.tracePythonLibs(tracePython)
@@ -2019,12 +2140,28 @@
         # This will eventually enter a local event loop.
         self.debugMod.__dict__['__file__'] = self.running
         sys.modules['__main__'] = self.debugMod
-        code = self.__compileFileSource(self.running)
+        if codeStr:
+            code = self.__compileCommand(codeStr)
+        elif scriptModule:
+            import runpy
+            modName, modSpec, code = runpy._get_module_details(scriptModule)
+            self.running = code.co_filename
+            self.debugMod.__dict__.clear()
+            self.debugMod.__dict__.update({
+                "__name__": "__main__",
+                "__file__": self.running,
+                "__package__": modSpec.parent,
+                "__loader__": modSpec.loader,
+                "__spec__": modSpec,
+                "__builtins__": __builtins__,
+            })
+        else:
+            code = self.__compileFileSource(self.running)
         if code:
             res = self.mainThread.run(code, self.debugMod.__dict__, debug=True)
-            self.progTerminated(res)
         else:
-            self.progTerminated(42)     # should not happen
+            res = 42        # should not happen
+        return res
 
     def run_call(self, scriptname, func, *args):
         """
@@ -2037,7 +2174,7 @@
         """
         self.startDebugger(scriptname, enableTrace=False)
         res = self.mainThread.runcall(func, *args)
-        self.progTerminated(res)
+        self.progTerminated(res, closeSession=False)
         return res
     
     def __resolveHost(self, host):
@@ -2079,6 +2216,10 @@
             tracePython = False
             exceptions = True
             redirect = True
+            passive = True
+            multiprocess = False
+            codeStr = ""
+            scriptModule = ""
             while args[0]:
                 if args[0] == '-h':
                     host = args[1]
@@ -2104,13 +2245,19 @@
                 elif args[0] == '--no-encoding':
                     self.noencoding = True
                     del args[0]
-                elif args[0] == '--fork-child':
-                    self.fork_auto = True
-                    self.fork_child = True
+                elif args[0] == '--no-passive':
+                    passive = False
+                    del args[0]
+                elif args[0] == '--multiprocess':
+                    multiprocess = True
                     del args[0]
-                elif args[0] == '--fork-parent':
-                    self.fork_auto = True
-                    self.fork_child = False
+                elif args[0] in ('-c', '--code'):
+                    codeStr = args[1]
+                    del args[0]
+                    del args[0]
+                elif args[0] in ('-m', '--module'):
+                    scriptModule = args[1]
+                    del args[0]
                     del args[0]
                 elif args[0] == '--':
                     del args[0]
@@ -2120,18 +2267,34 @@
             if not args:
                 print("No program given. Aborting!")
                 # __IGNORE_WARNING_M801__
+            elif "-m" in args:
+                print("Running module as a script is not supported. Aborting!")
+                # __IGNORE_WARNING_M801__
             else:
+                # Store options in case a new Python process is created
+                self.startOptions = (
+                    wd, host, port, exceptions, tracePython, redirect,
+                    self.noencoding,
+                )
                 if not self.noencoding:
                     self.__coding = self.defaultCoding
-                self.startProgInDebugger(args, wd, host, port,
-                                         exceptions=exceptions,
-                                         tracePython=tracePython,
-                                         redirect=redirect)
+                patchNewProcessFunctions(multiprocess, self)
+                res = self.startProgInDebugger(
+                    args, wd, host, port, exceptions=exceptions,
+                    tracePython=tracePython, redirect=redirect,
+                    passive=passive, multiprocessSupport=multiprocess,
+                    codeStr=codeStr, scriptModule=scriptModule,
+                )
+                sys.exit(res)
         else:
             if sys.argv[1] == '--no-encoding':
                 self.noencoding = True
                 del sys.argv[1]
             
+            if sys.argv[1] == '--multiprocess':
+                self.multiprocessSupport = True
+                del sys.argv[1]
+            
             if sys.argv[1] == '':
                 del sys.argv[1]
             
@@ -2165,39 +2328,20 @@
                 sys.path.insert(0, '')
             
             if port >= 0:
+                # Store options in case a new Python process is created
+                self.startOptions = (
+                    '', remoteAddress, port, True, False, redirect,
+                    self.noencoding,
+                )
                 if not self.noencoding:
                     self.__coding = self.defaultCoding
+                patchNewProcessFunctions(self.multiprocessSupport, self)
                 self.connectDebugger(port, remoteAddress, redirect)
                 self.__interact()
             else:
                 print("No network port given. Aborting...")
                 # __IGNORE_WARNING_M801__
-        
-    def fork(self):
-        """
-        Public method implementing a fork routine deciding which branch
-        to follow.
-        
-        @return process ID (integer)
-        """
-        if not self.fork_auto:
-            self.sendJsonCommand("RequestForkTo", {})
-            self.eventLoop(True)
-        pid = DebugClientOrigFork()
-        if pid == 0:
-            # child
-            if not self.fork_child:
-                sys.settrace(None)
-                sys.setprofile(None)
-                self.sessionClose(False)
-        else:
-            # parent
-            if self.fork_child:
-                sys.settrace(None)
-                sys.setprofile(None)
-                self.sessionClose(False)
-        return pid
-        
+    
     def close(self, fd):
         """
         Public method implementing a close method as a replacement for
@@ -2212,7 +2356,7 @@
             return
         
         DebugClientOrigClose(fd)
-        
+    
     def __getSysPath(self, firstEntry):
         """
         Private slot to calculate a path list including the PYTHONPATH
@@ -2229,3 +2373,18 @@
         sysPath.insert(0, firstEntry)
         sysPath.insert(0, '')
         return sysPath
+    
+    def skipMultiProcessDebugging(self, scriptName):
+        """
+        Public method to check, if the given script is eligible for debugging.
+        
+        @param scriptName name of the script to check
+        @type str
+        @return flag indicating eligibility
+        @rtype bool
+        """
+        for pattern in self.noDebugList:
+            if fnmatch.fnmatch(scriptName, pattern):
+                return True
+        
+        return False
--- a/eric6/DebugClients/Python/DebugConfig.py	Sun Jan 17 13:53:08 2021 +0100
+++ b/eric6/DebugClients/Python/DebugConfig.py	Mon Feb 01 10:38:16 2021 +0100
@@ -7,23 +7,14 @@
 Module defining type strings for the different Python types.
 """
 
-#
-# Keep this list in sync with Debugger.Config.ConfigVarTypeFilters
-#
-ConfigVarTypeStrings = [
-    '__', 'NoneType', 'type',
-    'bool', 'int', 'long', 'float', 'complex',
-    'str', 'unicode', 'tuple', 'list',
-    'dict', 'dict-proxy', 'set', 'file', 'xrange',
-    'slice', 'buffer', 'class', 'instance',
-    'method', 'property', 'generator',
-    'function', 'builtin_function_or_method', 'code', 'module',
-    'ellipsis', 'traceback', 'frame', 'other', 'frozenset', 'bytes',
-]
 
+SpecialAttributes = (
+    "__bases__", "__class__", "__dict__", "__doc__", "__mro__", "__name__",
+    "__qualname__",
+)
 BatchSize = 200
 ConfigQtNames = (
-    'PyQt5.', 'PySide2.', 'Shiboken.EnumType'
+    'PyQt5.', 'PyQt6.', 'PySide2.', 'PySide6.', 'Shiboken.EnumType'
 )
 ConfigKnownQtTypes = (
     '.QChar', '.QByteArray', '.QString', '.QStringList', '.QPoint', '.QPointF',
--- a/eric6/DebugClients/Python/DebugUtilities.py	Sun Jan 17 13:53:08 2021 +0100
+++ b/eric6/DebugClients/Python/DebugUtilities.py	Mon Feb 01 10:38:16 2021 +0100
@@ -8,6 +8,9 @@
 """
 
 import json
+import os
+import traceback
+import sys
 
 #
 # Taken from inspect.py of Python 3.4
@@ -101,13 +104,13 @@
     @type str
     @param localsDict reference to the local variables dictionary
     @type dict
-    @keyparam formatarg argument formatting function
+    @param formatarg argument formatting function
     @type func
-    @keyparam formatvarargs variable arguments formatting function
+    @param formatvarargs variable arguments formatting function
     @type func
-    @keyparam formatvarkw keyword arguments formatting function
+    @param formatvarkw keyword arguments formatting function
     @type func
-    @keyparam formatvalue value formating functtion
+    @param formatvalue value formating functtion
     @type func
     @return formatted call signature
     @rtype str
@@ -144,3 +147,349 @@
         "params": params,
     }
     return json.dumps(commandDict) + '\n'
+
+###########################################################################
+## Things related to monkey patching below
+###########################################################################
+
+
+PYTHON_NAMES = ["python", "pypy"]
+
+
+def isWindowsPlatform():
+    """
+    Function to check, if this is a Windows platform.
+    
+    @return flag indicating Windows platform
+    @rtype bool
+    """
+    return sys.platform.startswith(("win", "cygwin"))
+
+
+def isExecutable(program):
+    """
+    Function to check, if the given program is executable.
+    
+    @param program program path to be checked
+    @type str
+    @return flag indicating an executable program
+    @rtype bool
+    """
+    return os.access(os.path.abspath(program), os.X_OK)
+
+
+def startsWithShebang(program):
+    """
+    Function to check, if the given program start with a Shebang line.
+    
+    @param program program path to be checked
+    @type str
+    @return flag indicating an existing and valid shebang line
+    @rtype bool
+    """
+    try:
+        if os.path.exists(program):
+            with open(program) as f:
+                for line in f:
+                    line = line.strip()
+                    if line:
+                        for name in PYTHON_NAMES:
+                            if line.startswith(
+                                '#!/usr/bin/env {0}'.format(name)
+                            ):
+                                return True
+                            elif line.startswith('#!') and name in line:
+                                return True
+                        return False
+        else:
+            return False
+    except UnicodeDecodeError:
+        return False
+    except Exception:
+        traceback.print_exc()
+        return False
+
+
+def isPythonProgram(program):
+    """
+    Function to check, if the given program is a Python interpreter or
+    program.
+    
+    @param program program to be checked
+    @type str
+    @return flag indicating a Python interpreter or program
+    @rtype bool
+    """
+    if not program:
+        return False
+    
+    prog = os.path.basename(program).lower()
+    for pyname in PYTHON_NAMES:
+        if pyname in prog:
+            return True
+    
+    return (
+        not isWindowsPlatform() and
+        isExecutable(program) and
+        startsWithShebang(program)
+    )
+
+
+def removeQuotesFromArgs(args):
+    """
+    Function to remove quotes from the arguments list.
+    
+    @param args list of arguments
+    @type list of str
+    @return list of unquoted strings
+    @rtype list of str
+    """
+    if isWindowsPlatform():
+        newArgs = []
+        for x in args:
+            if len(x) > 1 and x.startswith('"') and x.endswith('"'):
+                x = x[1:-1]
+            newArgs.append(x)
+        return newArgs
+    else:
+        return args
+
+
+def quoteArgs(args):
+    """
+    Function to quote the given list of arguments.
+    
+    @param args list of arguments to be quoted
+    @type list of str
+    @return list of quoted arguments
+    @rtype list of str
+    """
+    if isWindowsPlatform():
+        quotedArgs = []
+        for x in args:
+            if x.startswith('"') and x.endswith('"'):
+                quotedArgs.append(x)
+            else:
+                if ' ' in x:
+                    x = x.replace('"', '\\"')
+                    quotedArgs.append('"{0}"'.format(x))
+                else:
+                    quotedArgs.append(x)
+        return quotedArgs
+    else:
+        return args
+
+
+def patchArguments(debugClient, arguments, noRedirect=False):
+    """
+    Function to patch the arguments given to start a program in order to
+    execute it in our debugger.
+    
+    @param debugClient reference to the debug client object
+    @type DebugClient
+    @param arguments list of program arguments
+    @type list of str
+    @param noRedirect flag indicating to not redirect stdin and stdout
+    @type bool
+    @return modified argument list
+    @rtype list of str
+    """
+    debugClientScript = os.path.join(
+        os.path.dirname(__file__), "DebugClient.py")
+    if debugClientScript in arguments:
+        # it is already patched
+        return arguments
+    
+    args = list(arguments[:])    # create a copy of the arguments list
+    args = removeQuotesFromArgs(args)
+    
+    # support for shebang line
+    program = os.path.basename(args[0]).lower()
+    for pyname in PYTHON_NAMES:
+        if pyname in program:
+            break
+    else:
+        if not isWindowsPlatform() and startsWithShebang(args[0]):
+            # insert our interpreter as first argument
+            args.insert(0, sys.executable)
+        elif isWindowsPlatform() and args[0].lower().endswith(".py"):
+            # it is a Python script; insert our interpreter as first argument
+            args.insert(0, sys.executable)
+    
+    # extract list of interpreter arguments, i.e. all arguments before the
+    # first one not starting with '-'.
+    interpreter = args.pop(0)
+    interpreterArgs = []
+    hasCode = False
+    hasScriptModule = False
+    while args:
+        if args[0].startswith("-"):
+            if args[0] in ("-W", "-X"):
+                # take two elements off the list
+                interpreterArgs.append(args.pop(0))
+                interpreterArgs.append(args.pop(0))
+            elif args[0] == "-c":
+                # -c indicates code to be executed and ends the
+                # arguments list
+                args.pop(0)
+                hasCode = True
+                break
+            elif args[0] == "-m":
+                # -m indicates a module to be executed as a script
+                # and ends the arguments list
+                args.pop(0)
+                hasScriptModule = True
+                break
+            else:
+                interpreterArgs.append(args.pop(0))
+        else:
+            break
+    
+    (wd, host, port, exceptions, tracePython, redirect, noencoding
+     ) = debugClient.startOptions[:7]
+    
+    modifiedArguments = [interpreter]
+    modifiedArguments.extend(interpreterArgs)
+    modifiedArguments.extend([
+        debugClientScript,
+        "-h", host,
+        "-p", str(port),
+        "--no-passive",
+    ])
+    
+    if wd:
+        modifiedArguments.extend(["-w", wd])
+    if not exceptions:
+        modifiedArguments.append("-e")
+    if tracePython:
+        modifiedArguments.append("-t")
+    if noRedirect or not redirect:
+        modifiedArguments.append("-n")
+    if noencoding:
+        modifiedArguments.append("--no-encoding")
+    if debugClient.multiprocessSupport:
+        modifiedArguments.append("--multiprocess")
+    if hasCode:
+        modifiedArguments.append("--code")
+        modifiedArguments.append(args.pop(0))
+    if hasScriptModule:
+        modifiedArguments.append("--module")
+        modifiedArguments.append(args.pop(0))
+    modifiedArguments.append("--")
+    # end the arguments for DebugClient
+    
+    # append the arguments for the program to be debugged
+    modifiedArguments.extend(args)
+    modifiedArguments = quoteArgs(modifiedArguments)
+    
+    return modifiedArguments
+
+
+def stringToArgumentsWindows(args):
+    """
+    Function to prepare a string of arguments for Windows platform.
+    
+    @param args list of command arguments
+    @type str
+    @return list of command arguments
+    @rtype list of str
+    @exception RuntimeError raised to indicate an illegal arguments parsing
+        condition
+    """
+    # see http:#msdn.microsoft.com/en-us/library/a1y7w461.aspx
+    result = []
+    
+    DEFAULT = 0
+    ARG = 1
+    IN_DOUBLE_QUOTE = 2
+    
+    state = DEFAULT
+    backslashes = 0
+    buf = ''
+    
+    argsLen = len(args)
+    for i in range(argsLen):
+        ch = args[i]
+        if ch == '\\':
+            backslashes += 1
+            continue
+        elif backslashes != 0:
+            if ch == '"':
+                while backslashes >= 2:
+                    backslashes -= 2
+                    buf += '\\'
+                if backslashes == 1:
+                    if state == DEFAULT:
+                        state = ARG
+                    
+                    buf += '"'
+                    backslashes = 0
+                    continue
+            else:
+                # false alarm, treat passed backslashes literally...
+                if state == DEFAULT:
+                    state = ARG
+                
+                while backslashes > 0:
+                    backslashes -= 1
+                    buf += '\\'
+        
+        if ch in (' ', '\t'):
+            if state == DEFAULT:
+                # skip
+                continue
+            elif state == ARG:
+                state = DEFAULT
+                result.append(buf)
+                buf = ''
+                continue
+        
+        if state in (DEFAULT, ARG):
+            if ch == '"':
+                state = IN_DOUBLE_QUOTE
+            else:
+                state = ARG
+                buf += ch
+        
+        elif state == IN_DOUBLE_QUOTE:
+            if ch == '"':
+                if i + 1 < argsLen and args[i + 1] == '"':
+                    # Undocumented feature in Windows:
+                    # Two consecutive double quotes inside a double-quoted
+                    # argument are interpreted as a single double quote.
+                    buf += '"'
+                    i += 1
+                elif len(buf) == 0:
+                    result.append("\"\"")
+                    state = DEFAULT
+                else:
+                    state = ARG
+            else:
+                buf += ch
+        
+        else:
+            raise RuntimeError('Illegal condition')
+    
+    if len(buf) > 0 or state != DEFAULT:
+        result.append(buf)
+    
+    return result
+
+
+def patchArgumentStringWindows(debugClient, argStr):
+    """
+    Function to patch an argument string for Windows.
+    
+    @param debugClient reference to the debug client object
+    @type DebugClient
+    @param argStr argument string
+    @type str
+    @return patched argument string
+    @rtype str
+    """
+    args = stringToArgumentsWindows(argStr)
+    if not args or not isPythonProgram(args[0]):
+        return argStr
+    
+    argStr = ' '.join(patchArguments(debugClient, args))
+    return argStr
--- a/eric6/DebugClients/Python/DebugVariables.py	Sun Jan 17 13:53:08 2021 +0100
+++ b/eric6/DebugClients/Python/DebugVariables.py	Mon Feb 01 10:38:16 2021 +0100
@@ -74,8 +74,9 @@
         
         @param var variable to be converted
         @type any
-        @return dictionary containing the variable attributes
-        @rtype dict
+        @yield tuple containing the batch start index and a dictionary
+            containing the variable attributes
+        @ytype tuple of (int, dict)
         """
         names = dir(var)
         if not names and hasattr(var, "__members__"):
@@ -138,9 +139,9 @@
         """
         if isinstance(key, str):
             key = repr(key)
-            # Special handling for Python2 unicode strings and bytes object
-            # Raw and f-Strings are always converted to (unicode) str
-            if key[0] in 'ub':
+            # Special handling for bytes object
+            # Raw and f-Strings are always converted to str
+            if key[0] == 'b':
                 key = key[1:]
 
         return key  # __IGNORE_WARNING_M834__
@@ -151,8 +152,9 @@
         
         @param var variable to be converted
         @type any
-        @return dictionary containing the variable attributes
-        @rtype dict
+        @yield tuple containing the batch start index and a dictionary
+            containing the variable attributes
+        @ytype tuple of (int, dict)
         """
         d = {}
         start = count = 0
@@ -216,13 +218,14 @@
         
         @param var variable to be converted
         @type any
-        @return dictionary containing the variable attributes
-        @rtype dict
+        @yield tuple containing the batch start index and a dictionary
+            containing the variable attributes
+        @ytype tuple of (int, dict)
         """
         d = {}
         start = count = 0
         for idx, value in enumerate(var):
-            d[str(idx)] = value
+            d[idx] = value
             count += 1
             if count >= BatchSize:
                 yield start, d
@@ -314,8 +317,9 @@
         
         @param var variable to be converted
         @type any
-        @return dictionary containing the variable attributes
-        @rtype dict
+        @yield tuple containing the batch start index and a dictionary
+            containing the variable attributes
+        @ytype tuple of (int, dict)
         """
         d = {}
         start = count = 0
@@ -404,8 +408,9 @@
         
         @param var variable to be converted
         @type any
-        @return dictionary containing the variable attributes
-        @rtype dict
+        @yield tuple containing the batch start index and a dictionary
+            containing the variable attributes
+        @ytype tuple of (int, dict)
         """
         d = {}
         start = count = 0
@@ -496,8 +501,9 @@
         
         @param var variable to be converted
         @type any
-        @return dictionary containing the variable attributes
-        @rtype dict
+        @yield tuple containing the batch start index and a dictionary
+            containing the variable attributes
+        @ytype tuple of (int, dict)
         """
         d = {}
         start = count = 0
@@ -579,8 +585,9 @@
         
         @param var variable to be converted
         @type any
-        @return dictionary containing the variable attributes
-        @rtype dict
+        @yield tuple containing the batch start index and a dictionary
+            containing the variable attributes
+        @ytype tuple of (int, dict)
         """
         d = {}
         start = count = 0
@@ -652,11 +659,6 @@
         pass    # not available on all Python versions
 
     try:
-        _TypeMap.append((unicode, None))        # __IGNORE_WARNING__
-    except Exception:       # secok
-        pass    # not available on all Python versions
-
-    try:
         import array
         _TypeMap.append((array.array, arrayResolver))
     except ImportError:
--- a/eric6/DebugClients/Python/FlexCompleter.py	Sun Jan 17 13:53:08 2021 +0100
+++ b/eric6/DebugClients/Python/FlexCompleter.py	Mon Feb 01 10:38:16 2021 +0100
@@ -1,12 +1,12 @@
 # -*- coding: utf-8 -*-
 
 """
-Word completion for the eric6 shell.
+Word completion for the eric shell.
 
-<h4>NOTE for eric6 variant</h4>
+<h4>NOTE for eric variant</h4>
 
     This version is a re-implementation of rlcompleter
-    as found in the Python3 library. It is modified to work with the eric6
+    as found in the Python3 library. It is modified to work with the eric
     debug clients.
 
 <h4>Original rlcompleter documentation</h4>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric6/DebugClients/Python/ModuleLoader.py	Mon Feb 01 10:38:16 2021 +0100
@@ -0,0 +1,161 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2020 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing an import hook patching modules to support debugging.
+"""
+
+import sys
+import importlib
+
+from QProcessExtension import patchQProcess
+from SubprocessExtension import patchSubprocess
+from MultiprocessingExtension import patchMultiprocessing
+
+
+class ModuleLoader(object):
+    """
+    Class implementing an import hook patching modules to support debugging.
+    """
+    def __init__(self, debugClient):
+        """
+        Constructor
+        
+        @param debugClient reference to the debug client object
+        @type DebugClient
+        """
+        self.__dbgClient = debugClient
+        
+        self.__enableImportHooks = True
+        
+        # reset already imported thread module to apply hooks at next import
+        for moduleName in ("thread", "_thread", "threading"):
+            if moduleName in sys.modules:
+                del sys.modules[moduleName]
+        
+        self.__modulesToPatch = (
+            'thread', '_thread', 'threading',
+            'greenlet',
+            'subprocess',
+            'multiprocessing',
+            'PyQt5.QtCore',
+            'PyQt6.QtCore',
+            'PySide2.QtCore',
+            'PySide6.QtCore',
+        )
+        
+        sys.meta_path.insert(0, self)
+    
+    def __loadModule(self, fullname):
+        """
+        Private method to load a module.
+        
+        @param fullname name of the module to be loaded
+        @type str
+        @return reference to the loaded module
+        @rtype module
+        """
+        module = importlib.import_module(fullname)
+        sys.modules[fullname] = module
+        
+        ## Add hook for _thread.start_new_thread
+        if (
+            fullname in ('thread', '_thread') and
+            not hasattr(module, 'eric6_patched')
+        ):
+            module.eric6_patched = True
+            self.__dbgClient.patchPyThread(module)
+        
+        ## Add hook for threading.run()
+        elif (
+            fullname == "threading" and
+            not hasattr(module, 'eric6_patched')
+        ):
+            module.eric6_patched = True
+            self.__dbgClient.patchPyThreading(module)
+        
+        ## greenlet support
+        elif (
+            fullname == 'greenlet' and
+            not hasattr(module, 'eric6_patched')
+        ):
+            if self.__dbgClient.patchGreenlet(module):
+                module.eric6_patched = True
+        
+        ## Add hook for subprocess.Popen()
+        elif (
+            fullname == 'subprocess' and
+            not hasattr(module, 'eric6_patched')
+        ):
+            module.eric6_patched = True
+            patchSubprocess(module, self.__dbgClient)
+        
+        ## Add hook for multiprocessing.Process
+        elif (
+            fullname == 'multiprocessing' and
+            not hasattr(module, 'eric6_patched')
+        ):
+            module.eric6_patched = True
+            patchMultiprocessing(module, self.__dbgClient)
+        
+        ## Add hook for *.QThread and *.QProcess
+        elif (
+            fullname in ('PyQt5.QtCore', 'PyQt6.QtCore',
+                         'PySide2.QtCore', 'PySide6.QtCore') and
+            not hasattr(module, 'eric6_patched')
+        ):
+            module.eric6_patched = True
+            self.__dbgClient.patchQThread(module)
+            patchQProcess(module, self.__dbgClient)
+        
+        self.__enableImportHooks = True
+        return module
+    
+    def find_spec(self, fullname, path, target=None):
+        """
+        Public method returning the module spec.
+        
+        @param fullname name of the module to be loaded
+        @type str
+        @param path path to resolve the module name
+        @type str
+        @param target module object to use for a more educated guess
+            about what spec to return
+        @type module
+        @return module spec object pointing to the module loader
+        @rtype ModuleSpec
+        """
+        if fullname in sys.modules or not self.__dbgClient.debugging:
+            return None
+        
+        if (
+            fullname in self.__modulesToPatch and
+            self.__enableImportHooks
+        ):
+            # Disable hook to be able to import original module
+            self.__enableImportHooks = False
+            return importlib.machinery.ModuleSpec(fullname, self)
+        
+        return None
+    
+    def create_module(self, spec):
+        """
+        Public method to create a module based on the passed in spec.
+        
+        @param spec module spec object for loading the module
+        @type ModuleSpec
+        @return created and patched module
+        @rtype module
+        """
+        return self.__loadModule(spec.name)
+    
+    def exec_module(self, module):
+        """
+        Public method to execute the created module.
+        
+        @param module module to be executed
+        @type module
+        """
+        pass
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric6/DebugClients/Python/MultiProcessDebugExtension.py	Mon Feb 01 10:38:16 2021 +0100
@@ -0,0 +1,410 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2002 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing a function to patch the process creation functions to
+support multiprocess debugging.
+"""
+
+
+from DebugUtilities import (
+    patchArguments, patchArgumentStringWindows, isPythonProgram,
+    isWindowsPlatform
+)
+
+_debugClient = None
+
+
+def _shallPatch():
+    """
+    Function to determine, if the multiprocessing patches should be done.
+    
+    @return flag indicating patching should be performed
+    @rtype bool
+    """
+    return _debugClient.debugging and _debugClient.multiprocessSupport
+
+
+def patchModule(module, functionName, createFunction):
+    """
+    Function to replace a function of a module with a modified one.
+    
+    @param module reference to the module
+    @type types.ModuleType
+    @param functionName name of the function to be replaced
+    @type str
+    @param createFunction function creating the replacement
+    @type types.FunctionType
+    """
+    if hasattr(module, functionName):
+        originalName = 'original_' + functionName
+        if not hasattr(module, originalName):
+            setattr(module, originalName, getattr(module, functionName))
+            setattr(module, functionName, createFunction(originalName))
+
+
+def createExecl(originalName):
+    """
+    Function to patch the 'execl' process creation functions.
+    
+    <ul>
+        <li>os.execl(path, arg0, arg1, ...)</li>
+        <li>os.execle(path, arg0, arg1, ..., env)</li>
+        <li>os.execlp(file, arg0, arg1, ...)</li>
+        <li>os.execlpe(file, arg0, arg1, ..., env)</li>
+    </ul>
+    
+    @param originalName original name of the function to be patched
+    @type str
+    @return function replacing the original one
+    @rtype function
+    """
+    def newExecl(path, *args):
+        """
+        Function replacing the 'execl' functions of the os module.
+        """
+        import os
+        if _shallPatch():
+            args = patchArguments(_debugClient, args)
+            if isPythonProgram(args[0]):
+                path = args[0]
+        return getattr(os, originalName)(path, *args)
+    return newExecl
+
+
+def createExecv(originalName):
+    """
+    Function to patch the 'execv' process creation functions.
+    
+    <ul>
+        <li>os.execv(path, args)</li>
+        <li>os.execvp(file, args)</li>
+    </ul>
+    
+    @param originalName original name of the function to be patched
+    @type str
+    @return function replacing the original one
+    @rtype function
+    """
+    def newExecv(path, args):
+        """
+        Function replacing the 'execv' functions of the os module.
+        """
+        import os
+        if _shallPatch():
+            args = patchArguments(_debugClient, args)
+            if isPythonProgram(args[0]):
+                path = args[0]
+        return getattr(os, originalName)(path, args)
+    return newExecv
+
+
+def createExecve(originalName):
+    """
+    Function to patch the 'execve' process creation functions.
+    
+    <ul>
+        <li>os.execve(path, args, env)</li>
+        <li>os.execvpe(file, args, env)</li>
+    </ul>
+    
+    @param originalName original name of the function to be patched
+    @type str
+    @return function replacing the original one
+    @rtype function
+    """
+    def newExecve(path, args, env):
+        """
+        Function replacing the 'execve' functions of the os module.
+        """
+        import os
+        if _shallPatch():
+            args = patchArguments(_debugClient, args)
+            if isPythonProgram(args[0]):
+                path = args[0]
+        return getattr(os, originalName)(path, args, env)
+    return newExecve
+
+
+def createSpawnl(originalName):
+    """
+    Function to patch the 'spawnl' process creation functions.
+    
+    <ul>
+        <li>os.spawnl(mode, path, arg0, arg1, ...)</li>
+        <li>os.spawnlp(mode, file, arg0, arg1, ...)</li>
+    </ul>
+    
+    @param originalName original name of the function to be patched
+    @type str
+    @return function replacing the original one
+    @rtype function
+    """
+    def newSpawnl(mode, path, *args):
+        """
+        Function replacing the 'spawnl' functions of the os module.
+        """
+        import os
+        args = patchArguments(_debugClient, args)
+        return getattr(os, originalName)(mode, path, *args)
+    return newSpawnl
+
+
+def createSpawnv(originalName):
+    """
+    Function to patch the 'spawnv' process creation functions.
+    
+    <ul>
+        <li>os.spawnv(mode, path, args)</li>
+        <li>os.spawnvp(mode, file, args)</li>
+    </ul>
+    
+    @param originalName original name of the function to be patched
+    @type str
+    @return function replacing the original one
+    @rtype function
+    """
+    def newSpawnv(mode, path, args):
+        """
+        Function replacing the 'spawnv' functions of the os module.
+        """
+        import os
+        args = patchArguments(_debugClient, args)
+        return getattr(os, originalName)(mode, path, args)
+    return newSpawnv
+
+
+def createSpawnve(originalName):
+    """
+    Function to patch the 'spawnve' process creation functions.
+    
+    <ul>
+        <li>os.spawnve(mode, path, args, env)</li>
+        <li>os.spawnvpe(mode, file, args, env)</li>
+    </ul>
+    
+    @param originalName original name of the function to be patched
+    @type str
+    @return function replacing the original one
+    @rtype function
+    """
+    def newSpawnve(mode, path, args, env):
+        """
+        Function replacing the 'spawnve' functions of the os module.
+        """
+        import os
+        args = patchArguments(_debugClient, args)
+        return getattr(os, originalName)(mode, path, args, env)
+    return newSpawnve
+
+
+def createPosixSpawn(originalName):
+    """
+    Function to patch the 'posix_spawn' process creation functions.
+    
+    <ul>
+        <li>os.posix_spawn(path, argv, env, *, file_actions=None, ...
+            (6 more))</li>
+        <li>os.posix_spawnp(path, argv, env, *, file_actions=None, ...
+            (6 more))</li>
+    </ul>
+    
+    @param originalName original name of the function to be patched
+    @type str
+    @return function replacing the original one
+    @rtype function
+    """
+    def newPosixSpawn(path, argv, env, **kwargs):
+        """
+        Function replacing the 'posix_spawn' functions of the os module.
+        """
+        import os
+        argv = patchArguments(_debugClient, argv)
+        return getattr(os, originalName)(path, argv, env, **kwargs)
+    return newPosixSpawn
+
+
+def createForkExec(originalName):
+    """
+    Function to patch the 'fork_exec' process creation functions.
+    
+    <ul>
+        <li>_posixsubprocess.fork_exec(args, executable_list, close_fds,
+            ... (13 more))</li>
+    </ul>
+    
+    @param originalName original name of the function to be patched
+    @type str
+    @return function replacing the original one
+    @rtype function
+    """
+    def newForkExec(args, *other_args):
+        """
+        Function replacing the 'fork_exec' functions of the _posixsubprocess
+        module.
+        """
+        import _posixsubprocess
+        if _shallPatch():
+            args = patchArguments(_debugClient, args)
+        return getattr(_posixsubprocess, originalName)(args, *other_args)
+    return newForkExec
+
+
+def createFork(originalName):
+    """
+    Function to patch the 'fork' process creation functions.
+    
+    <ul>
+        <li>os.fork()</li>
+    </ul>
+    
+    @param originalName original name of the function to be patched
+    @type str
+    @return function replacing the original one
+    @rtype function
+    """
+    def newFork():
+        """
+        Function replacing the 'fork' function of the os module.
+        """
+        import os
+        import sys
+        
+        # A simple fork will result in a new python process
+        isNewPythonProcess = True
+        frame = sys._getframe()
+        
+        multiprocess = _shallPatch()
+        
+        isSubprocessFork = False
+        isMultiprocessingPopen = False
+        while frame is not None:
+            if frame.f_code.co_name == "_Popen":
+                # fork() was called from multiprocessing; ignore this here
+                # because it is handled in 'MultiprocessingExtension.py'.
+                isMultiprocessingPopen = True
+                break
+            
+            elif (
+                frame.f_code.co_name == '_execute_child' and
+                'subprocess' in frame.f_code.co_filename
+            ):
+                isSubprocessFork = True
+                # If we're actually in subprocess.Popen creating a child, it
+                # may result in something which is not a Python process, (so,
+                # we don't want to connect with it in the forked version).
+                executable = frame.f_locals.get('executable')
+                if executable is not None:
+                    isNewPythonProcess = False
+                    if isPythonProgram(executable):
+                        isNewPythonProcess = True
+                break
+            
+            frame = frame.f_back
+        frame = None    # Just make sure we don't hold on to it.
+        
+        childProcess = getattr(os, originalName)()     # fork
+        if not childProcess and not isMultiprocessingPopen:
+            if isNewPythonProcess:
+                (wd, host, port, exceptions, tracePython, redirect,
+                 noencoding) = _debugClient.startOptions
+                _debugClient.startDebugger(
+                    filename=sys.argv[0],
+                    host=host,
+                    port=port,
+                    enableTrace=multiprocess and not isSubprocessFork,
+                    exceptions=exceptions,
+                    tracePython=tracePython,
+                    redirect=redirect,
+                    passive=False,
+                    multiprocessSupport=multiprocess)
+        return childProcess
+    
+    return newFork
+
+
+def createCreateProcess(originalName):
+    """
+    Function to patch the 'CreateProcess' process creation function of
+    Windows.
+    
+    @param originalName original name of the function to be patched
+    @type str
+    @return function replacing the original one
+    @rtype function
+    """
+    def newCreateProcess(appName, cmdline, *args):
+        """
+        Function replacing the 'CreateProcess' function of the _subprocess
+        or _winapi module.
+        """
+        try:
+            import _subprocess
+        except ImportError:
+            import _winapi as _subprocess
+        return getattr(_subprocess, originalName)(
+            appName, patchArgumentStringWindows(_debugClient, cmdline), *args)
+    return newCreateProcess
+
+
+def patchNewProcessFunctions(multiprocessEnabled, debugClient):
+    """
+    Function to patch the process creation functions to support multiprocess
+    debugging.
+    
+    @param multiprocessEnabled flag indicating multiprocess support
+    @type bool
+    @param debugClient reference to the debug client object
+    @type DebugClient
+    """
+    global _debugClient
+    
+    if not multiprocessEnabled:
+        # return without patching
+        return
+    
+    import os
+    import sys
+    
+    # patch 'os.exec...()' functions
+#-    patchModule(os, "execl", createExecl)
+#-    patchModule(os, "execle", createExecl)
+#-    patchModule(os, "execlp", createExecl)
+#-    patchModule(os, "execlpe", createExecl)
+#-    patchModule(os, "execv", createExecv)
+#-    patchModule(os, "execve", createExecve)
+#-    patchModule(os, "execvp", createExecv)
+#-    patchModule(os, "execvpe", createExecve)
+    
+    # patch 'os.spawn...()' functions
+    patchModule(os, "spawnl", createSpawnl)
+    patchModule(os, "spawnle", createSpawnl)
+    patchModule(os, "spawnlp", createSpawnl)
+    patchModule(os, "spawnlpe", createSpawnl)
+    patchModule(os, "spawnv", createSpawnv)
+    patchModule(os, "spawnve", createSpawnve)
+    patchModule(os, "spawnvp", createSpawnv)
+    patchModule(os, "spawnvpe", createSpawnve)
+    
+    # patch 'os.posix_spawn...()' functions
+    if sys.version_info >= (3, 8) and not isWindowsPlatform():
+        patchModule(os, "posix_spawn", createPosixSpawn)
+        patchModule(os, "posix_spawnp", createPosixSpawn)
+    
+    if isWindowsPlatform():
+        try:
+            import _subprocess
+        except ImportError:
+            import _winapi as _subprocess
+        patchModule(_subprocess, 'CreateProcess', createCreateProcess)
+    else:
+        patchModule(os, "fork", createFork)
+        try:
+            import _posixsubprocess
+            patchModule(_posixsubprocess, "fork_exec", createForkExec)
+        except ImportError:
+            pass
+    
+    _debugClient = debugClient
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric6/DebugClients/Python/MultiprocessingExtension.py	Mon Feb 01 10:38:16 2021 +0100
@@ -0,0 +1,83 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2020 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing a function to patch multiprocessing.Process to support
+debugging of the process.
+"""
+
+import sys
+import traceback
+
+_debugClient = None
+_originalProcess = None
+_originalBootstrap = None
+
+
+def patchMultiprocessing(module, debugClient):
+    """
+    Function to patch the multiprocessing module.
+    
+    @param module reference to the imported module to be patched
+    @type module
+    @param debugClient reference to the debug client object
+    @type DebugClient
+    """     # __IGNORE_WARNING_D234__
+    global _debugClient, _originalProcess, _originalBootstrap
+    
+    _debugClient = debugClient
+    
+    _originalProcess = module.process.BaseProcess
+    _originalBootstrap = _originalProcess._bootstrap
+    
+    class ProcessWrapper(_originalProcess):
+        """
+        Wrapper class for multiprocessing.Process.
+        """
+        def _bootstrap(self, *args, **kwargs):
+            """
+            Wrapper around _bootstrap to start debugger.
+            
+            @param args function arguments
+            @type list
+            @param kwargs keyword only arguments
+            @type dict
+            @return exit code of the process
+            @rtype int
+            """
+            _debugging = False
+            if (
+                _debugClient.debugging and
+                _debugClient.multiprocessSupport
+            ):
+                scriptName = sys.argv[0]
+                if not _debugClient.skipMultiProcessDebugging(scriptName):
+                    _debugging = True
+                    try:
+                        (wd, host, port, exceptions, tracePython, redirect,
+                         noencoding) = _debugClient.startOptions[:7]
+                        _debugClient.startDebugger(
+                            sys.argv[0], host=host, port=port,
+                            exceptions=exceptions, tracePython=tracePython,
+                            redirect=redirect, passive=False,
+                            multiprocessSupport=True
+                        )
+                    except Exception:
+                        print(
+                            # __IGNORE_WARNING_M801__
+                            "Exception during multiprocessing bootstrap init:"
+                        )
+                        traceback.print_exc(file=sys.stdout)
+                        sys.stdout.flush()
+                        raise
+            
+            exitcode = _originalBootstrap(self, *args, **kwargs)
+            
+            if _debugging:
+                _debugClient.progTerminated(exitcode, "process finished")
+            
+            return exitcode
+    
+    _originalProcess._bootstrap = ProcessWrapper._bootstrap
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric6/DebugClients/Python/QProcessExtension.py	Mon Feb 01 10:38:16 2021 +0100
@@ -0,0 +1,197 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2020 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing a function to patch QProcess to support debugging of the
+process.
+"""
+
+import os
+
+from DebugUtilities import isPythonProgram, startsWithShebang, patchArguments
+
+_debugClient = None
+
+
+def patchQProcess(module, debugClient):
+    """
+    Function to patch the QtCore module's QProcess.
+    
+    @param module reference to the imported module to be patched
+    @type module
+    @param debugClient reference to the debug client object
+    @type DebugClient
+    """     # __IGNORE_WARNING_D234__
+    global _debugClient
+    
+    class QProcessWrapper(module.QProcess):
+        """
+        Wrapper class for *.QProcess.
+        """
+        _origQProcessStartDetached = module.QProcess.startDetached
+        
+        def __init__(self, parent=None):
+            """
+            Constructor
+            """
+            super(QProcessWrapper, self).__init__(parent)
+        
+        ###################################################################
+        ## Handling of 'start(...)' below
+        ###################################################################
+        
+        def start(self, *args, **kwargs):
+            """
+            Public method to start the process.
+            
+            This method patches the arguments such, that a debug client is
+            started for the Python script. A Python script is assumed, if the
+            program to be started contains the string 'python'.
+            
+            @param args arguments of the start call
+            @type list
+            @param kwargs keyword arguments of the start call
+            @type dict
+            """
+            if (
+                _debugClient.debugging and
+                _debugClient.multiprocessSupport and
+                ((len(args) >= 2 and isinstance(args[1], list)) or
+                 (len(args) == 1 and not isinstance(args[0], str)) or
+                 len(args) == 0)
+            ):
+                if len(args) >= 2:
+                    program = args[0]
+                    arguments = args[1]
+                    if len(args) > 2:
+                        mode = args[2]
+                    else:
+                        mode = module.QIODevice.ReadWrite
+                else:
+                    program = self.program()
+                    arguments = self.arguments()
+                    if len(args) == 1:
+                        mode = args[0]
+                    else:
+                        mode = module.QIODevice.ReadWrite
+                ok = isPythonProgram(program)
+                if ok:
+                    if startsWithShebang(program):
+                        scriptName = os.path.basename(program)
+                    else:
+                        scriptName = os.path.basename(arguments[0])
+                    if not _debugClient.skipMultiProcessDebugging(scriptName):
+                        newArgs = patchArguments(
+                            _debugClient,
+                            [program] + arguments,
+                        )
+                        super(QProcessWrapper, self).start(
+                            newArgs[0], newArgs[1:], mode)
+                        return
+            
+            super(QProcessWrapper, self).start(*args, **kwargs)
+        
+        ###################################################################
+        ## Handling of 'startDetached(...)' below
+        ###################################################################
+        
+        def startDetached(self, *args, **kwargs):
+            """
+            Public method to start the detached process.
+            
+            This method patches the arguments such, that a debug client is
+            started for the Python script. A Python script is assumed, if the
+            program to be started contains the string 'python'.
+            
+            @param args arguments of the start call
+            @type list
+            @param kwargs keyword arguments of the start call
+            @type dict
+            @return flag indicating a successful start
+            @rtype bool
+            """
+            if isinstance(self, str):
+                return QProcessWrapper.startDetachedStatic(
+                    self, *args)
+            else:
+                return self.__startDetached(*args, **kwargs)
+        
+        def __startDetached(self, *args, **kwargs):
+            """
+            Private method to start the detached process.
+            
+            This method patches the arguments such, that a debug client is
+            started for the Python script. A Python script is assumed, if the
+            program to be started contains the string 'python'.
+            
+            @param args arguments of the start call
+            @type list
+            @param kwargs keyword arguments of the start call
+            @type dict
+            @return flag indicating a successful start
+            @rtype bool
+            """
+            if (
+                _debugClient.debugging and
+                _debugClient.multiprocessSupport and
+                len(args) == 0
+            ):
+                program = self.program()
+                arguments = self.arguments()
+                wd = self.workingDirectory()
+                
+                ok = isPythonProgram(program)
+                if ok:
+                    return QProcessWrapper.startDetachedStatic(
+                        program, arguments, wd)
+            
+            return super(QProcessWrapper, self).startDetached(*args, **kwargs)
+        
+        @staticmethod
+        def startDetachedStatic(*args, **kwargs):
+            """
+            Static method to start the detached process.
+            
+            This method patches the arguments such, that a debug client is
+            started for the Python script. A Python script is assumed, if the
+            program to be started contains the string 'python'.
+            
+            @param args arguments of the start call
+            @type list
+            @param kwargs keyword arguments of the start call
+            @type dict
+            @return flag indicating a successful start
+            @rtype bool
+            """
+            if (
+                _debugClient.debugging and
+                _debugClient.multiprocessSupport and
+                (len(args) >= 2 and isinstance(args[1], list))
+            ):
+                program = args[0]
+                arguments = args[1]
+                if len(args) >= 3:
+                    wd = args[2]
+                else:
+                    wd = ""
+                ok = isPythonProgram(program)
+                if ok:
+                    if startsWithShebang(program):
+                        scriptName = os.path.basename(program)
+                    else:
+                        scriptName = os.path.basename(arguments[0])
+                    if not _debugClient.skipMultiProcessDebugging(scriptName):
+                        newArgs = patchArguments(
+                            _debugClient,
+                            [program] + arguments,
+                        )
+                        return QProcessWrapper._origQProcessStartDetached(
+                            newArgs[0], newArgs[1:], wd)
+            
+            return QProcessWrapper._origQProcessStartDetached(
+                *args, **kwargs)
+    
+    _debugClient = debugClient
+    module.QProcess = QProcessWrapper
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric6/DebugClients/Python/SubprocessExtension.py	Mon Feb 01 10:38:16 2021 +0100
@@ -0,0 +1,67 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2020 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing a function to patch subprocess.Popen to support debugging
+of the process.
+"""
+
+import os
+import shlex
+
+from DebugUtilities import isPythonProgram, patchArguments
+
+_debugClient = None
+
+
+def patchSubprocess(module, debugClient):
+    """
+    Function to patch the subprocess module.
+    
+    @param module reference to the imported module to be patched
+    @type module
+    @param debugClient reference to the debug client object
+    @type DebugClient
+    """     # __IGNORE_WARNING_D234__
+    global _debugClient
+    
+    class PopenWrapper(module.Popen):
+        """
+        Wrapper class for subprocess.Popen.
+        """
+        def __init__(self, arguments, *args, **kwargs):
+            """
+            Constructor
+            
+            @param arguments command line arguments for the new process
+            @type list of str or str
+            @param args constructor arguments of Popen
+            @type list
+            @param kwargs constructor keyword only arguments of Popen
+            @type dict
+            """
+            if (
+                _debugClient.debugging and
+                _debugClient.multiprocessSupport and
+                isinstance(arguments, (str, list))
+            ):
+                if isinstance(arguments, str):
+                    # convert to arguments list
+                    arguments = shlex.split(arguments)
+                else:
+                    # create a copy of the arguments
+                    arguments = arguments[:]
+                ok = isPythonProgram(arguments[0])
+                if ok:
+                    scriptName = os.path.basename(arguments[0])
+                    if not _debugClient.skipMultiProcessDebugging(scriptName):
+                        arguments = patchArguments(
+                            _debugClient, arguments, noRedirect=True
+                        )
+            
+            super(PopenWrapper, self).__init__(arguments, *args, **kwargs)
+    
+    _debugClient = debugClient
+    module.Popen = PopenWrapper
--- a/eric6/DebugClients/Python/ThreadExtension.py	Sun Jan 17 13:53:08 2021 +0100
+++ b/eric6/DebugClients/Python/ThreadExtension.py	Mon Feb 01 10:38:16 2021 +0100
@@ -7,9 +7,8 @@
 Module implementing an import hook patching thread modules to get debugged too.
 """
 
-import os.path
+import os
 import sys
-import importlib
 
 import _thread
 import threading
@@ -23,7 +22,7 @@
     """
     Class implementing the thread support for the debugger.
     
-    Provides methods for intercepting thread creation, retriving the running
+    Provides methods for intercepting thread creation, retrieving the running
     threads and their name and state.
     """
     def __init__(self):
@@ -31,11 +30,7 @@
         Constructor
         """
         self.threadNumber = 1
-        self.enableImportHooks = True
         self._original_start_new_thread = None
-        self.threadingAttached = False
-        self.qtThreadAttached = False
-        self.greenlet = False
         
         self.clientLock = threading.RLock()
         
@@ -49,12 +44,6 @@
         
         # special objects representing the main scripts thread and frame
         self.mainThread = self
-        
-        # reset already imported thread module to apply hooks at next import
-        del sys.modules['_thread']
-        del sys.modules['threading']
-        
-        sys.meta_path.insert(0, self)
 
     def attachThread(self, target=None, args=None, kwargs=None,
                      mainThread=False):
@@ -121,10 +110,7 @@
         @return flag indicating successful locking
         @rtype bool
         """
-        if blocking:
-            return self.clientLock.acquire()
-        else:
-            return self.clientLock.acquire(blocking)
+        return self.clientLock.acquire(blocking)
     
     def unlockClient(self):
         """
@@ -132,7 +118,7 @@
         """
         try:
             self.clientLock.release()
-        except AssertionError:
+        except RuntimeError:
             pass
     
     def setCurrentThread(self, threadId):
@@ -156,27 +142,23 @@
         Public method to send the list of threads.
         """
         self.updateThreadList()
+        
         threadList = []
-        if len(self.threads) > 1:
-            currentId = _thread.get_ident()
-            # update thread names set by user (threading.setName)
-            threadNames = {t.ident: t.getName() for t in threading.enumerate()}
+        currentId = _thread.get_ident()
+        # update thread names set by user (threading.setName)
+        threadNames = {t.ident: t.getName() for t in threading.enumerate()}
+        
+        for threadId, thd in self.threads.items():
+            d = {"id": threadId}
+            try:
+                d["name"] = threadNames.get(threadId, thd.name)
+                d["broken"] = thd.isBroken
+                d["except"] = thd.isException
+            except Exception:
+                d["name"] = 'UnknownThread'
+                d["broken"] = False
+                d["except"] = False
             
-            for threadId, thd in self.threads.items():
-                d = {"id": threadId}
-                try:
-                    d["name"] = threadNames.get(threadId, thd.name)
-                    d["broken"] = thd.isBroken
-                except Exception:
-                    d["name"] = 'UnknownThread'
-                    d["broken"] = False
-                
-                threadList.append(d)
-        else:
-            currentId = -1
-            d = {"id": -1}
-            d["name"] = "MainThread"
-            d["broken"] = self.isBroken
             threadList.append(d)
         
         self.sendJsonCommand("ResponseThreadList", {
@@ -237,198 +219,193 @@
         self.threads = {id_: thrd for id_, thrd in self.threads.items()
                         if id_ in frames}
     
-    def find_module(self, fullname, path=None):
-        """
-        Public method returning the module loader.
-        
-        @param fullname name of the module to be loaded
-        @type str
-        @param path path to resolve the module name
-        @type str
-        @return module loader object
-        @rtype object
+    #######################################################################
+    ## Methods below deal with patching various modules to support
+    ## debugging of threads.
+    #######################################################################
+    
+    def patchPyThread(self, module):
         """
-        if fullname in sys.modules or not self.debugging:
-            return None
+        Public method to patch Python _thread (Python3) and thread (Python2)
+        modules.
         
-        if fullname in ['_thread', 'PyQt5.QtCore', 'PySide2.QtCore',
-                        'greenlet', 'threading'
-                        ] and self.enableImportHooks:
-            # Disable hook to be able to import original module
-            self.enableImportHooks = False
-            return self
-        
-        return None
+        @param module reference to the imported module to be patched
+        @type module
+        """
+        # make thread hooks available to system
+        self._original_start_new_thread = module.start_new_thread
+        module.start_new_thread = self.attachThread
     
-    def load_module(self, fullname):
+    def patchGreenlet(self, module):
         """
-        Public method to load a module.
+        Public method to patch the 'greenlet' module.
         
-        @param fullname name of the module to be loaded
-        @type str
-        @return reference to the loaded module
-        @rtype module
+        @param module reference to the imported module to be patched
+        @type module
+        @return flag indicating that the module was processed
+        @rtype bool
         """
-        module = importlib.import_module(fullname)
-        sys.modules[fullname] = module
-        if (fullname == '_thread' and
-                self._original_start_new_thread is None):
-            # make thread hooks available to system
-            self._original_start_new_thread = module.start_new_thread
-            module.start_new_thread = self.attachThread
-
-        elif (fullname == 'greenlet' and self.greenlet is False):
-            # Check for greenlet.settrace
-            if hasattr(module, 'settrace'):
-                self.greenlet = True
-                DebugBase.pollTimerEnabled = False
+        # Check for greenlet.settrace
+        if hasattr(module, 'settrace'):
+            DebugBase.pollTimerEnabled = False
+            return True
+        return False
+    
+    def patchPyThreading(self, module):
+        """
+        Public method to patch the Python threading module.
+        
+        @param module reference to the imported module to be patched
+        @type module
+        """
+        # _debugClient as a class attribute can't be accessed in following
+        # class. Therefore we need a global variable.
+        _debugClient = self
         
-        # Add hook for threading.run()
-        elif (fullname == "threading" and self.threadingAttached is False):
-            self.threadingAttached = True
+        def _bootstrap(self, run):
+            """
+            Bootstrap for threading, which reports exceptions correctly.
+            
+            @param run the run method of threading.Thread
+            @type method pointer
+            """
+            newThread = DebugBase(_debugClient)
+            newThread.name = self.name
+            
+            _debugClient.threads[self.ident] = newThread
+            _debugClient.dumpThreadList()
             
-            # _debugClient as a class attribute can't be accessed in following
-            # class. Therefore we need a global variable.
-            _debugClient = self
-            
-            def _bootstrap(self, run):
-                """
-                Bootstrap for threading, which reports exceptions correctly.
-                
-                @param run the run method of threading.Thread
-                @type method pointer
+            # see DebugBase.bootstrap
+            sys.settrace(newThread.trace_dispatch)
+            try:
+                run()
+            except Exception:
+                excinfo = sys.exc_info()
+                newThread.user_exception(excinfo, True)
+            finally:
+                sys.settrace(None)
+                _debugClient.dumpThreadList()
+        
+        class ThreadWrapper(module.Thread):
+            """
+            Wrapper class for threading.Thread.
+            """
+            def __init__(self, *args, **kwargs):
                 """
-                newThread = DebugBase(_debugClient)
-                _debugClient.threads[self.ident] = newThread
-                newThread.name = self.name
-                # see DebugBase.bootstrap
-                sys.settrace(newThread.trace_dispatch)
-                try:
-                    run()
-                except Exception:
-                    excinfo = sys.exc_info()
-                    newThread.user_exception(excinfo, True)
-                finally:
-                    sys.settrace(None)
-            
-            class ThreadWrapper(module.Thread):
-                """
-                Wrapper class for threading.Thread.
+                Constructor
                 """
-                def __init__(self, *args, **kwargs):
-                    """
-                    Constructor
-                    """
-                    # Overwrite the provided run method with our own, to
-                    # intercept the thread creation by threading.Thread
-                    self.run = lambda s=self, run=self.run: _bootstrap(s, run)
-                    
-                    super(ThreadWrapper, self).__init__(*args, **kwargs)
+                # Overwrite the provided run method with our own, to
+                # intercept the thread creation by threading.Thread
+                self.run = lambda s=self, run=self.run: _bootstrap(s, run)
+                
+                super(ThreadWrapper, self).__init__(*args, **kwargs)
+        
+        module.Thread = ThreadWrapper
+        
+        # Special handling of threading.(_)Timer
+        timer = module.Timer
             
-            module.Thread = ThreadWrapper
-            
-            # Special handling of threading.(_)Timer
-            timer = module.Timer
-                
-            class TimerWrapper(timer, ThreadWrapper):
+        class TimerWrapper(timer, ThreadWrapper):
+            """
+            Wrapper class for threading.(_)Timer.
+            """
+            def __init__(self, interval, function, *args, **kwargs):
                 """
-                Wrapper class for threading.(_)Timer.
+                Constructor
                 """
-                def __init__(self, interval, function, *args, **kwargs):
-                    """
-                    Constructor
-                    """
-                    super(TimerWrapper, self).__init__(
-                        interval, function, *args, **kwargs)
-            
-            module.Timer = TimerWrapper
+                super(TimerWrapper, self).__init__(
+                    interval, function, *args, **kwargs)
         
-            # Special handling of threading._DummyThread
-            class DummyThreadWrapper(module._DummyThread, ThreadWrapper):
-                """
-                Wrapper class for threading._DummyThread.
+        module.Timer = TimerWrapper
+    
+        # Special handling of threading._DummyThread
+        class DummyThreadWrapper(module._DummyThread, ThreadWrapper):
+            """
+            Wrapper class for threading._DummyThread.
+            """
+            def __init__(self, *args, **kwargs):
                 """
-                def __init__(self, *args, **kwargs):
-                    """
-                    Constructor
-                    """
-                    super(DummyThreadWrapper, self).__init__(*args, **kwargs)
-            
-            module._DummyThread = DummyThreadWrapper
+                Constructor
+                """
+                super(DummyThreadWrapper, self).__init__(*args, **kwargs)
+        
+        module._DummyThread = DummyThreadWrapper
+    
+    def patchQThread(self, module):
+        """
+        Public method to patch the QtCore module's QThread.
         
-        # Add hook for *.QThread
-        elif (fullname in ['PyQt5.QtCore', 'PySide2.QtCore'] and
-              self.qtThreadAttached is False):
-            self.qtThreadAttached = True
-            # _debugClient as a class attribute can't be accessed in following
-            # class. Therefore we need a global variable.
-            _debugClient = self
+        @param module reference to the imported module to be patched
+        @type module
+        """
+        # _debugClient as a class attribute can't be accessed in following
+        # class. Therefore we need a global variable.
+        _debugClient = self
 
-            def _bootstrapQThread(self, run):
+        def _bootstrapQThread(self, run):
+            """
+            Bootstrap for QThread, which reports exceptions correctly.
+            
+            @param run the run method of *.QThread
+            @type method pointer
+            """
+            global _qtThreadNumber
+            
+            newThread = DebugBase(_debugClient)
+            ident = _thread.get_ident()
+            name = 'QtThread-{0}'.format(_qtThreadNumber)
+            
+            _qtThreadNumber += 1
+            
+            newThread.id = ident
+            newThread.name = name
+            
+            _debugClient.threads[ident] = newThread
+            _debugClient.dumpThreadList()
+            
+            # see DebugBase.bootstrap
+            sys.settrace(newThread.trace_dispatch)
+            try:
+                run()
+            except SystemExit:
+                # *.QThreads doesn't like SystemExit
+                pass
+            except Exception:
+                excinfo = sys.exc_info()
+                newThread.user_exception(excinfo, True)
+            finally:
+                sys.settrace(None)
+                _debugClient.dumpThreadList()
+    
+        class QThreadWrapper(module.QThread):
+            """
+            Wrapper class for *.QThread.
+            """
+            def __init__(self, *args, **kwargs):
                 """
-                Bootstrap for QThread, which reports exceptions correctly.
-                
-                @param run the run method of *.QThread
-                @type method pointer
+                Constructor
                 """
-                global _qtThreadNumber
-                
-                newThread = DebugBase(_debugClient)
-                ident = _thread.get_ident()
-                name = 'QtThread-{0}'.format(_qtThreadNumber)
-                
-                _qtThreadNumber += 1
-            
-                newThread.id = ident
-                newThread.name = name
+                # Overwrite the provided run method with our own, to
+                # intercept the thread creation by Qt
+                self.run = lambda s=self, run=self.run: (
+                    _bootstrapQThread(s, run))
                 
-                _debugClient.threads[ident] = newThread
-                
-                # see DebugBase.bootstrap
-                sys.settrace(newThread.trace_dispatch)
-                try:
-                    run()
-                except SystemExit:
-                    # *.QThreads doesn't like SystemExit
-                    pass
-                except Exception:
-                    excinfo = sys.exc_info()
-                    newThread.user_exception(excinfo, True)
-                finally:
-                    sys.settrace(None)
+                super(QThreadWrapper, self).__init__(*args, **kwargs)
         
-            class QThreadWrapper(module.QThread):
+        class QRunnableWrapper(module.QRunnable):
+            """
+            Wrapper class for *.QRunnable.
+            """
+            def __init__(self, *args, **kwargs):
                 """
-                Wrapper class for *.QThread.
+                Constructor
                 """
-                def __init__(self, *args, **kwargs):
-                    """
-                    Constructor
-                    """
-                    # Overwrite the provided run method with our own, to
-                    # intercept the thread creation by Qt
-                    self.run = lambda s=self, run=self.run: (
-                        _bootstrapQThread(s, run))
-                    
-                    super(QThreadWrapper, self).__init__(*args, **kwargs)
-            
-            class QRunnableWrapper(module.QRunnable):
-                """
-                Wrapper class for *.QRunnable.
-                """
-                def __init__(self, *args, **kwargs):
-                    """
-                    Constructor
-                    """
-                    # Overwrite the provided run method with our own, to
-                    # intercept the thread creation by Qt
-                    self.run = lambda s=self, run=self.run: (
-                        _bootstrapQThread(s, run))
-                    
-                    super(QRunnableWrapper, self).__init__(*args, **kwargs)
-            
-            module.QThread = QThreadWrapper
-            module.QRunnable = QRunnableWrapper
+                # Overwrite the provided run method with our own, to
+                # intercept the thread creation by Qt
+                self.run = lambda s=self, run=self.run: (
+                    _bootstrapQThread(s, run))
+                
+                super(QRunnableWrapper, self).__init__(*args, **kwargs)
         
-        self.enableImportHooks = True
-        return module
+        module.QThread = QThreadWrapper
+        module.QRunnable = QRunnableWrapper
--- a/eric6/DebugClients/Python/coverage/control.py	Sun Jan 17 13:53:08 2021 +0100
+++ b/eric6/DebugClients/Python/coverage/control.py	Mon Feb 01 10:38:16 2021 +0100
@@ -4,6 +4,7 @@
 """Core control stuff for coverage.py."""
 
 import atexit
+import collections
 import contextlib
 import os
 import os.path
@@ -737,9 +738,12 @@
         # Touch all the files that could have executed, so that we can
         # mark completely unexecuted files as 0% covered.
         if self._data is not None:
+            file_paths = collections.defaultdict(list)
             for file_path, plugin_name in self._inorout.find_possibly_unexecuted_files():
                 file_path = self._file_mapper(file_path)
-                self._data.touch_file(file_path, plugin_name)
+                file_paths[plugin_name].append(file_path)
+            for plugin_name, paths in file_paths.items():
+                self._data.touch_files(paths, plugin_name)
 
         if self.config.note:
             self._warn("The '[run] note' setting is no longer supported.")
--- a/eric6/DebugClients/Python/coverage/doc/CHANGES.rst	Sun Jan 17 13:53:08 2021 +0100
+++ b/eric6/DebugClients/Python/coverage/doc/CHANGES.rst	Mon Feb 01 10:38:16 2021 +0100
@@ -21,6 +21,159 @@
     ..  Version 9.8.1 --- 2027-07-27
     ..  ----------------------------
 
+.. _changes_531:
+
+Version 5.3.1 --- 2020-12-19
+----------------------------
+
+- When using ``--source`` on a large source tree, v5.x was slower than previous
+  versions.  This performance regression is now fixed, closing `issue 1037`_.
+
+- Mysterious SQLite errors can happen on PyPy, as reported in `issue 1010`_. An
+  immediate retry seems to fix the problem, although it is an unsatisfying
+  solution.
+
+- The HTML report now saves the sort order in a more widely supported way,
+  fixing `issue 986`_.  Thanks, Sebastián Ramírez (`pull request 1066`_).
+
+- The HTML report pages now have a :ref:`Sleepy Snake <sleepy>` favicon.
+
+- Wheels are now provided for manylinux2010, and for PyPy3 (pp36 and pp37).
+
+- Continuous integration has moved from Travis and AppVeyor to GitHub Actions.
+
+.. _issue 986: https://github.com/nedbat/coveragepy/issues/986
+.. _issue 1037: https://github.com/nedbat/coveragepy/issues/1037
+.. _issue 1010: https://github.com/nedbat/coveragepy/issues/1010
+.. _pull request 1066: https://github.com/nedbat/coveragepy/pull/1066
+
+.. _changes_53:
+
+Version 5.3 --- 2020-09-13
+--------------------------
+
+- The ``source`` setting has always been interpreted as either a file path or a
+  module, depending on which existed.  If both interpretations were valid, it
+  was assumed to be a file path.  The new ``source_pkgs`` setting can be used
+  to name a package to disambiguate this case.  Thanks, Thomas Grainger. Fixes
+  `issue 268`_.
+
+- If a plugin was disabled due to an exception, we used to still try to record
+  its information, causing an exception, as reported in `issue 1011`_.  This is
+  now fixed.
+
+.. _issue 268: https://github.com/nedbat/coveragepy/issues/268
+.. _issue 1011: https://github.com/nedbat/coveragepy/issues/1011
+
+
+.. _changes_521:
+
+Version 5.2.1 --- 2020-07-23
+----------------------------
+
+- The dark mode HTML report still used light colors for the context listing,
+  making them unreadable (`issue 1009`_).  This is now fixed.
+
+- The time stamp on the HTML report now includes the time zone. Thanks, Xie
+  Yanbo (`pull request 960`_).
+
+.. _pull request 960: https://github.com/nedbat/coveragepy/pull/960
+.. _issue 1009: https://github.com/nedbat/coveragepy/issues/1009
+
+
+.. _changes_52:
+
+Version 5.2 --- 2020-07-05
+--------------------------
+
+- The HTML report has been redesigned by Vince Salvino.  There is now a dark
+  mode, the code text is larger, and system sans serif fonts are used, in
+  addition to other small changes (`issue 858`_ and `pull request 931`_).
+
+- The ``coverage report`` and ``coverage html`` commands now accept a
+  ``--precision`` option to control the number of decimal points displayed.
+  Thanks, Teake Nutma (`pull request 982`_).
+
+- The ``coverage report`` and ``coverage html`` commands now accept a
+  ``--no-skip-covered`` option to negate ``--skip-covered``.  Thanks, Anthony
+  Sottile (`issue 779`_ and `pull request 932`_).
+
+- The ``--skip-empty`` option is now available for the XML report, closing
+  `issue 976`_.
+
+- The ``coverage report`` command now accepts a ``--sort`` option to specify
+  how to sort the results.  Thanks, Jerin Peter George (`pull request 1005`_).
+
+- If coverage fails due to the coverage total not reaching the ``--fail-under``
+  value, it will now print a message making the condition clear.  Thanks,
+  Naveen Yadav (`pull request 977`_).
+
+- TOML configuration files with non-ASCII characters would cause errors on
+  Windows (`issue 990`_).  This is now fixed.
+
+- The output of ``--debug=trace`` now includes information about how the
+  ``--source`` option is being interpreted, and the module names being
+  considered.
+
+.. _pull request 931: https://github.com/nedbat/coveragepy/pull/931
+.. _pull request 932: https://github.com/nedbat/coveragepy/pull/932
+.. _pull request 977: https://github.com/nedbat/coveragepy/pull/977
+.. _pull request 982: https://github.com/nedbat/coveragepy/pull/982
+.. _pull request 1005: https://github.com/nedbat/coveragepy/pull/1005
+.. _issue 779: https://github.com/nedbat/coveragepy/issues/779
+.. _issue 858: https://github.com/nedbat/coveragepy/issues/858
+.. _issue 976: https://github.com/nedbat/coveragepy/issues/976
+.. _issue 990: https://github.com/nedbat/coveragepy/issues/990
+
+
+.. _changes_51:
+
+Version 5.1 --- 2020-04-12
+--------------------------
+
+- The JSON report now includes counts of covered and missing branches. Thanks,
+  Salvatore Zagaria.
+
+- On Python 3.8, try-finally-return reported wrong branch coverage with
+  decorated async functions (`issue 964`_).  This is now fixed. Thanks, Kjell
+  Braden.
+
+- The :meth:`~coverage.Coverage.get_option` and
+  :meth:`~coverage.Coverage.set_option` methods can now manipulate the
+  ``[paths]`` configuration setting.  Thanks to Bernát Gábor for the fix for
+  `issue 967`_.
+
+.. _issue 964: https://github.com/nedbat/coveragepy/issues/964
+.. _issue 967: https://github.com/nedbat/coveragepy/issues/967
+
+
+.. _changes_504:
+
+Version 5.0.4 --- 2020-03-16
+----------------------------
+
+- If using the ``[run] relative_files`` setting, the XML report will use
+  relative files in the ``<source>`` elements indicating the location of source
+  code.  Closes `issue 948`_.
+
+- The textual summary report could report missing lines with negative line
+  numbers on PyPy3 7.1 (`issue 943`_).  This is now fixed.
+
+- Windows wheels for Python 3.8 were incorrectly built, but are now fixed.
+  (`issue 949`_)
+
+- Updated Python 3.9 support to 3.9a4.
+
+- HTML reports couldn't be sorted if localStorage wasn't available. This is now
+  fixed: sorting works even though the sorting setting isn't retained. (`issue
+  944`_ and `pull request 945`_). Thanks, Abdeali Kothari.
+
+.. _issue 943: https://github.com/nedbat/coveragepy/issues/943
+.. _issue 944: https://github.com/nedbat/coveragepy/issues/944
+.. _pull request 945: https://github.com/nedbat/coveragepy/pull/945
+.. _issue 948: https://github.com/nedbat/coveragepy/issues/948
+.. _issue 949: https://github.com/nedbat/coveragepy/issues/949
+
 
 .. _changes_503:
 
@@ -463,7 +616,7 @@
 
 - pickle2json, for converting v3 data files to v4 data files, has been removed.
 
-.. _Bitbucket: https://bitbucket.org/ned/coveragepy
+.. _Bitbucket: https://bitbucket.org
 .. _GitHub: https://github.com/nedbat/coveragepy
 
 .. _issue 611: https://github.com/nedbat/coveragepy/issues/611
@@ -491,8 +644,8 @@
 
 - Large HTML report pages load faster.  Thanks, Pankaj Pandey.
 
-.. _issue 625: https://bitbucket.org/ned/coveragepy/issues/625/lstat-dominates-in-the-case-of-small
-.. _issue 650: https://bitbucket.org/ned/coveragepy/issues/650/allow-setting-configuration-file-location
+.. _issue 625: https://github.com/nedbat/coveragepy/issues/625
+.. _issue 650: https://github.com/nedbat/coveragepy/issues/650
 .. _issue 700: https://github.com/nedbat/coveragepy/issues/700
 
 
@@ -532,7 +685,7 @@
 .. _issue 707: https://github.com/nedbat/coveragepy/issues/707
 .. _issue 714: https://github.com/nedbat/coveragepy/issues/714
 
-.. _Bitbucket: https://bitbucket.org/ned/coveragepy
+.. _Bitbucket: https://bitbucket.org
 .. _GitHub: https://github.com/nedbat/coveragepy
 
 
@@ -552,8 +705,8 @@
 
 - Configurer plugins are now reported in the output of ``--debug=sys``.
 
-.. _issue 638: https://bitbucket.org/ned/coveragepy/issues/638/run-omit-is-ignored-since-45
-.. _issue 640: https://bitbucket.org/ned/coveragepy/issues/640/indexerror-reporting-on-an-empty-decorated
+.. _issue 638: https://github.com/nedbat/coveragepy/issues/638
+.. _issue 640: https://github.com/nedbat/coveragepy/issues/640
 
 
 .. _changes_45:
@@ -592,13 +745,13 @@
   maximum.  Now filenames will never get much larger than 200 characters,
   fixing `issue 627`_.  Thanks to Alex Sandro for helping with the fix.
 
-.. _issue 563: https://bitbucket.org/ned/coveragepy/issues/563/platform-specific-configuration
-.. _issue 618: https://bitbucket.org/ned/coveragepy/issues/618/problem-when-combining-windows-generated
-.. _issue 621: https://bitbucket.org/ned/coveragepy/issues/621/include-ignored-warning-when-using
-.. _issue 622: https://bitbucket.org/ned/coveragepy/issues/622/report-omit-overwrites-run-omit
-.. _issue 627: https://bitbucket.org/ned/coveragepy/issues/627/failure-generating-html-reports-when-the
-.. _issue 629: https://bitbucket.org/ned/coveragepy/issues/629/multiple-use-of-combine-leads-to-empty
-.. _issue 631: https://bitbucket.org/ned/coveragepy/issues/631/precise-coverage-percentage-value
+.. _issue 563: https://github.com/nedbat/coveragepy/issues/563
+.. _issue 618: https://github.com/nedbat/coveragepy/issues/618
+.. _issue 621: https://github.com/nedbat/coveragepy/issues/621
+.. _issue 622: https://github.com/nedbat/coveragepy/issues/622
+.. _issue 627: https://github.com/nedbat/coveragepy/issues/627
+.. _issue 629: https://github.com/nedbat/coveragepy/issues/629
+.. _issue 631: https://github.com/nedbat/coveragepy/issues/631
 
 
 .. _changes_442:
@@ -630,11 +783,11 @@
 - Be more flexible about the command name displayed by help, fixing
   `issue 600`_. Thanks, Ben Finney.
 
-.. _issue 101: https://bitbucket.org/ned/coveragepy/issues/101/settings-under-report-affect-running
-.. _issue 581: https://bitbucket.org/ned/coveragepy/issues/581/race-condition-when-saving-data-under
-.. _issue 588: https://bitbucket.org/ned/coveragepy/issues/588/using-rcfile-path-to-toxini-uses-run
-.. _issue 589: https://bitbucket.org/ned/coveragepy/issues/589/allow-expansion-in-coveragerc
-.. _issue 600: https://bitbucket.org/ned/coveragepy/issues/600/get-program-name-from-command-line-when
+.. _issue 101: https://github.com/nedbat/coveragepy/issues/101
+.. _issue 581: https://github.com/nedbat/coveragepy/issues/581
+.. _issue 588: https://github.com/nedbat/coveragepy/issues/588
+.. _issue 589: https://github.com/nedbat/coveragepy/issues/589
+.. _issue 600: https://github.com/nedbat/coveragepy/issues/600
 
 
 .. _changes_441:
@@ -670,10 +823,10 @@
 - Running ``coverage xml`` in a directory named with non-ASCII characters would
   fail under Python 2. This is now fixed. (`issue 573`_)
 
-.. _issue 526: https://bitbucket.org/ned/coveragepy/issues/526/generated-xml-invalid-paths-for-cobertura
-.. _issue 572: https://bitbucket.org/ned/coveragepy/issues/572/no-python-source-warning-for-namespace
-.. _issue 573: https://bitbucket.org/ned/coveragepy/issues/573/cant-generate-xml-report-if-some-source
-.. _issue 575: https://bitbucket.org/ned/coveragepy/issues/575/running-doctest-prevents-complete-coverage
+.. _issue 526: https://github.com/nedbat/coveragepy/issues/526
+.. _issue 572: https://github.com/nedbat/coveragepy/issues/572
+.. _issue 573: https://github.com/nedbat/coveragepy/issues/573
+.. _issue 575: https://github.com/nedbat/coveragepy/issues/575
 
 
 Version 4.4b1 --- 2017-04-04
@@ -705,11 +858,11 @@
   the coverage of the standard library tests. This code was not installed by
   kitted versions of coverage.py.  Now it is.
 
-.. _issue 79: https://bitbucket.org/ned/coveragepy/issues/79/save-prevents-harvesting-on-stop
-.. _issue 96: https://bitbucket.org/ned/coveragepy/issues/96/unhelpful-warnings-produced-when-using
-.. _issue 355: https://bitbucket.org/ned/coveragepy/issues/355/warnings-should-be-suppressable
-.. _issue 448: https://bitbucket.org/ned/coveragepy/issues/448/save-and-html_report-prevent-further
-.. _issue 570: https://bitbucket.org/ned/coveragepy/issues/570/cobertura-coverage-04dtd-support
+.. _issue 79: https://github.com/nedbat/coveragepy/issues/79
+.. _issue 96: https://github.com/nedbat/coveragepy/issues/96
+.. _issue 355: https://github.com/nedbat/coveragepy/issues/355
+.. _issue 448: https://github.com/nedbat/coveragepy/issues/448
+.. _issue 570: https://github.com/nedbat/coveragepy/issues/570
 
 
 .. _changes_434:
@@ -721,7 +874,7 @@
   exception wasn't properly derived from Exception, described in `issue 556`_.
   A newb mistake; it hasn't been a good few days.
 
-.. _issue 556: https://bitbucket.org/ned/coveragepy/issues/556/43-fails-if-there-are-html-files-in-the
+.. _issue 556: https://github.com/nedbat/coveragepy/issues/556
 
 
 .. _changes_433:
@@ -733,7 +886,7 @@
   benefit of the coverage.py test suite.  Properly conditionalizing it fixed
   `issue 554`_ so that Python 2.6 works again.
 
-.. _issue 554: https://bitbucket.org/ned/coveragepy/issues/554/traceback-on-python-26-starting-with-432
+.. _issue 554: https://github.com/nedbat/coveragepy/issues/554
 
 
 .. _changes_432:
@@ -776,11 +929,11 @@
   coverage.py 4.3, the old HTML file with the less-than-100% coverage would be
   left behind.  This file is now properly deleted.
 
-.. _issue 322: https://bitbucket.org/ned/coveragepy/issues/322/cannot-use-coverage-with-jython
-.. _issue 426: https://bitbucket.org/ned/coveragepy/issues/426/difference-between-coverage-results-with
-.. _issue 522: https://bitbucket.org/ned/coveragepy/issues/522/incorrect-branch-reporting
-.. _issue 549: https://bitbucket.org/ned/coveragepy/issues/549/skip-covered-with-100-coverage-throws-a-no
-.. _issue 551: https://bitbucket.org/ned/coveragepy/issues/551/coveragepy-cannot-be-imported-in-jython27
+.. _issue 322: https://github.com/nedbat/coveragepy/issues/322
+.. _issue 426: https://github.com/nedbat/coveragepy/issues/426
+.. _issue 522: https://github.com/nedbat/coveragepy/issues/522
+.. _issue 549: https://github.com/nedbat/coveragepy/issues/549
+.. _issue 551: https://github.com/nedbat/coveragepy/issues/551
 
 
 .. _changes_431:
@@ -796,8 +949,8 @@
   in `issue 541`_.  The check has been reverted while we re-think the fix for
   `issue 265`_.
 
-.. _issue 540: https://bitbucket.org/ned/coveragepy/issues/540/cant-install-coverage-v43-into-under
-.. _issue 541: https://bitbucket.org/ned/coveragepy/issues/541/coverage-43-breaks-nosetest-with-coverage
+.. _issue 540: https://github.com/nedbat/coveragepy/issues/540
+.. _issue 541: https://github.com/nedbat/coveragepy/issues/541
 
 
 .. _changes_43:
@@ -909,24 +1062,24 @@
   author string in setup.py, though this might be too cute.
 
 .. _sys.excepthook: https://docs.python.org/3/library/sys.html#sys.excepthook
-.. _issue 265: https://bitbucket.org/ned/coveragepy/issues/265/when-using-source-include-is-silently
-.. _issue 412: https://bitbucket.org/ned/coveragepy/issues/412/coverage-combine-should-error-if-no
-.. _issue 433: https://bitbucket.org/ned/coveragepy/issues/433/coverage-html-does-not-suport-skip-covered
-.. _issue 493: https://bitbucket.org/ned/coveragepy/issues/493/confusing-branching-failure
-.. _issue 496: https://bitbucket.org/ned/coveragepy/issues/496/incorrect-coverage-with-branching-and
-.. _issue 502: https://bitbucket.org/ned/coveragepy/issues/502/incorrect-coverage-report-with-cover
-.. _issue 505: https://bitbucket.org/ned/coveragepy/issues/505/use-canonical-filename-for-debounce
-.. _issue 514: https://bitbucket.org/ned/coveragepy/issues/514/path-to-problem-file-not-reported-when
-.. _issue 510: https://bitbucket.org/ned/coveragepy/issues/510/erase-still-needed-in-42
-.. _issue 511: https://bitbucket.org/ned/coveragepy/issues/511/version-42-coverage-combine-empties
-.. _issue 516: https://bitbucket.org/ned/coveragepy/issues/516/running-coverage-combine-twice-deletes-all
-.. _issue 519: https://bitbucket.org/ned/coveragepy/issues/519/coverage-run-sections-in-toxini-or-as
-.. _issue 524: https://bitbucket.org/ned/coveragepy/issues/524/coverage-report-with-skip-covered-column
-.. _issue 525: https://bitbucket.org/ned/coveragepy/issues/525/coverage-combine-when-not-in-parallel-mode
-.. _issue 529: https://bitbucket.org/ned/coveragepy/issues/529/encoding-marker-may-only-appear-on-the
-.. _issue 530: https://bitbucket.org/ned/coveragepy/issues/530/deprecationwarning-you-passed-a-bytestring
-.. _issue 533: https://bitbucket.org/ned/coveragepy/issues/533/exception-on-unencodable-file-name
-.. _issue 535: https://bitbucket.org/ned/coveragepy/issues/535/sysexcepthook-is-not-called
+.. _issue 265: https://github.com/nedbat/coveragepy/issues/265
+.. _issue 412: https://github.com/nedbat/coveragepy/issues/412
+.. _issue 433: https://github.com/nedbat/coveragepy/issues/433
+.. _issue 493: https://github.com/nedbat/coveragepy/issues/493
+.. _issue 496: https://github.com/nedbat/coveragepy/issues/496
+.. _issue 502: https://github.com/nedbat/coveragepy/issues/502
+.. _issue 505: https://github.com/nedbat/coveragepy/issues/505
+.. _issue 514: https://github.com/nedbat/coveragepy/issues/514
+.. _issue 510: https://github.com/nedbat/coveragepy/issues/510
+.. _issue 511: https://github.com/nedbat/coveragepy/issues/511
+.. _issue 516: https://github.com/nedbat/coveragepy/issues/516
+.. _issue 519: https://github.com/nedbat/coveragepy/issues/519
+.. _issue 524: https://github.com/nedbat/coveragepy/issues/524
+.. _issue 525: https://github.com/nedbat/coveragepy/issues/525
+.. _issue 529: https://github.com/nedbat/coveragepy/issues/529
+.. _issue 530: https://github.com/nedbat/coveragepy/issues/530
+.. _issue 533: https://github.com/nedbat/coveragepy/issues/533
+.. _issue 535: https://github.com/nedbat/coveragepy/issues/535
 
 
 .. _changes_42:
@@ -944,7 +1097,7 @@
 
 - Filtering the HTML report is now faster, thanks to Ville Skyttä.
 
-.. _issue 495: https://bitbucket.org/ned/coveragepy/issues/495/branch-and-concurrency-are-conflicting
+.. _issue 495: https://github.com/nedbat/coveragepy/issues/495
 
 
 Version 4.2b1 --- 2016-07-04
@@ -997,14 +1150,14 @@
   package: `unittest-mixins`_.
 
 .. _automatic subprocess measurement: https://coverage.readthedocs.io/en/latest/subprocess.html
-.. _issue 199: https://bitbucket.org/ned/coveragepy/issues/199/add-a-way-to-sort-the-text-report
-.. _issue 231: https://bitbucket.org/ned/coveragepy/issues/231/various-default-behavior-in-report-phase
-.. _issue 298: https://bitbucket.org/ned/coveragepy/issues/298/show-in-html-report-that-the-columns-are
-.. _issue 396: https://bitbucket.org/ned/coveragepy/issues/396/coverage-xml-shouldnt-bail-out-on-parse
-.. _issue 454: https://bitbucket.org/ned/coveragepy/issues/454/coverage-debug-config-should-be
-.. _issue 478: https://bitbucket.org/ned/coveragepy/issues/478/help-shows-silly-program-name-when-running
-.. _issue 484: https://bitbucket.org/ned/coveragepy/issues/484/multiprocessing-greenlet-concurrency
-.. _issue 492: https://bitbucket.org/ned/coveragepy/issues/492/subprocess-coverage-strange-detection-of
+.. _issue 199: https://github.com/nedbat/coveragepy/issues/199
+.. _issue 231: https://github.com/nedbat/coveragepy/issues/231
+.. _issue 298: https://github.com/nedbat/coveragepy/issues/298
+.. _issue 396: https://github.com/nedbat/coveragepy/issues/396
+.. _issue 454: https://github.com/nedbat/coveragepy/issues/454
+.. _issue 478: https://github.com/nedbat/coveragepy/issues/478
+.. _issue 484: https://github.com/nedbat/coveragepy/issues/484
+.. _issue 492: https://github.com/nedbat/coveragepy/issues/492
 .. _unittest-mixins: https://pypi.org/project/unittest-mixins/
 
 
@@ -1071,17 +1224,17 @@
 - Make a small tweak to how we compare threads, to avoid buggy custom
   comparison code in thread classes. (`issue 245`_)
 
-.. _issue 90: https://bitbucket.org/ned/coveragepy/issues/90/lambda-expression-confuses-branch
-.. _issue 245: https://bitbucket.org/ned/coveragepy/issues/245/change-solution-for-issue-164
-.. _issue 440: https://bitbucket.org/ned/coveragepy/issues/440/yielded-twisted-failure-marked-as-missed
-.. _issue 456: https://bitbucket.org/ned/coveragepy/issues/456/coverage-breaks-with-implicit-namespaces
-.. _issue 460: https://bitbucket.org/ned/coveragepy/issues/460/confusing-html-report-for-certain-partial
-.. _issue 469: https://bitbucket.org/ned/coveragepy/issues/469/strange-1-line-number-in-branch-coverage
-.. _issue 472: https://bitbucket.org/ned/coveragepy/issues/472/html-report-indents-incorrectly-for-one
-.. _issue 475: https://bitbucket.org/ned/coveragepy/issues/475/generator-expression-is-marked-as-not
-.. _issue 479: https://bitbucket.org/ned/coveragepy/issues/479/clarify-the-need-for-the-c-extension
-.. _issue 481: https://bitbucket.org/ned/coveragepy/issues/481/asyncioprocesspoolexecutor-tracing-not
-.. _issue 485: https://bitbucket.org/ned/coveragepy/issues/485/coveragereport-ignores-show_missing-and
+.. _issue 90: https://github.com/nedbat/coveragepy/issues/90
+.. _issue 245: https://github.com/nedbat/coveragepy/issues/245
+.. _issue 440: https://github.com/nedbat/coveragepy/issues/440
+.. _issue 456: https://github.com/nedbat/coveragepy/issues/456
+.. _issue 460: https://github.com/nedbat/coveragepy/issues/460
+.. _issue 469: https://github.com/nedbat/coveragepy/issues/469
+.. _issue 472: https://github.com/nedbat/coveragepy/issues/472
+.. _issue 475: https://github.com/nedbat/coveragepy/issues/475
+.. _issue 479: https://github.com/nedbat/coveragepy/issues/479
+.. _issue 481: https://github.com/nedbat/coveragepy/issues/481
+.. _issue 485: https://github.com/nedbat/coveragepy/issues/485
 
 
 Version 4.1b2 --- 2016-01-23
@@ -1104,8 +1257,8 @@
 
 - ``coverage report`` won't produce trailing whitespace.
 
-.. _issue 465: https://bitbucket.org/ned/coveragepy/issues/465/coveragexml-produces-package-names-with-an
-.. _issue 466: https://bitbucket.org/ned/coveragepy/issues/466/impossible-missed-branch-to-a-negative
+.. _issue 465: https://github.com/nedbat/coveragepy/issues/465
+.. _issue 466: https://github.com/nedbat/coveragepy/issues/466
 
 
 Version 4.1b1 --- 2016-01-10
@@ -1153,15 +1306,15 @@
 - Form-feed characters would prevent accurate determination of the beginning of
   statements in the rest of the file.  This is now fixed, closing `issue 461`_.
 
-.. _issue 129: https://bitbucket.org/ned/coveragepy/issues/129/misleading-branch-coverage-of-empty
-.. _issue 131: https://bitbucket.org/ned/coveragepy/issues/131/pragma-on-a-decorator-line-should-affect
-.. _issue 146: https://bitbucket.org/ned/coveragepy/issues/146/context-managers-confuse-branch-coverage
-.. _issue 212: https://bitbucket.org/ned/coveragepy/issues/212/coverage-erroneously-reports-partial
-.. _issue 422: https://bitbucket.org/ned/coveragepy/issues/422/python35-partial-branch-marked-as-fully
-.. _issue 434: https://bitbucket.org/ned/coveragepy/issues/434/indexerror-in-python-35
-.. _issue 453: https://bitbucket.org/ned/coveragepy/issues/453/source-code-encoding-can-only-be-specified
-.. _issue 455: https://bitbucket.org/ned/coveragepy/issues/455/unusual-exclusions-stopped-working-in
-.. _issue 461: https://bitbucket.org/ned/coveragepy/issues/461/multiline-asserts-need-too-many-pragma
+.. _issue 129: https://github.com/nedbat/coveragepy/issues/129
+.. _issue 131: https://github.com/nedbat/coveragepy/issues/131
+.. _issue 146: https://github.com/nedbat/coveragepy/issues/146
+.. _issue 212: https://github.com/nedbat/coveragepy/issues/212
+.. _issue 422: https://github.com/nedbat/coveragepy/issues/422
+.. _issue 434: https://github.com/nedbat/coveragepy/issues/434
+.. _issue 453: https://github.com/nedbat/coveragepy/issues/453
+.. _issue 455: https://github.com/nedbat/coveragepy/issues/455
+.. _issue 461: https://github.com/nedbat/coveragepy/issues/461
 
 
 .. _changes_403:
@@ -1184,11 +1337,11 @@
   command name, which might be different than "coverage".  Thanks to Ben
   Finney, this closes `issue 438`_.
 
-.. _issue 420: https://bitbucket.org/ned/coveragepy/issues/420/coverage-40-hangs-indefinitely-on-python27
-.. _issue 438: https://bitbucket.org/ned/coveragepy/issues/438/parameterise-coverage-command-name
-.. _issue 439: https://bitbucket.org/ned/coveragepy/issues/439/incorrect-cobertura-file-sources-generated
-.. _issue 443: https://bitbucket.org/ned/coveragepy/issues/443/coverage-gets-confused-when-encoding
-.. _issue 445: https://bitbucket.org/ned/coveragepy/issues/445/django-app-cannot-connect-to-cassandra
+.. _issue 420: https://github.com/nedbat/coveragepy/issues/420
+.. _issue 438: https://github.com/nedbat/coveragepy/issues/438
+.. _issue 439: https://github.com/nedbat/coveragepy/issues/439
+.. _issue 443: https://github.com/nedbat/coveragepy/issues/443
+.. _issue 445: https://github.com/nedbat/coveragepy/issues/445
 
 
 .. _changes_402:
@@ -1207,9 +1360,9 @@
 - Officially support PyPy 4.0, which required no changes, just updates to the
   docs.
 
-.. _issue 431: https://bitbucket.org/ned/coveragepy/issues/431/couldnt-parse-python-file-with-cp1252
-.. _issue 432: https://bitbucket.org/ned/coveragepy/issues/432/path-with-unicode-characters-various
-.. _issue 436: https://bitbucket.org/ned/coveragepy/issues/436/disabled-coverage-ctracer-may-rise-from
+.. _issue 431: https://github.com/nedbat/coveragepy/issues/431
+.. _issue 432: https://github.com/nedbat/coveragepy/issues/432
+.. _issue 436: https://github.com/nedbat/coveragepy/issues/436
 
 
 .. _changes_401:
@@ -1250,14 +1403,14 @@
 - The source kit now contains all of the files needed to have a complete source
   tree, re-fixing `issue 137`_ and closing `issue 281`_.
 
-.. _issue 281: https://bitbucket.org/ned/coveragepy/issues/281/supply-scripts-for-testing-in-the
-.. _issue 397: https://bitbucket.org/ned/coveragepy/issues/397/stopping-and-resuming-coverage-with
-.. _issue 410: https://bitbucket.org/ned/coveragepy/issues/410/attributeerror-module-object-has-no
-.. _issue 415: https://bitbucket.org/ned/coveragepy/issues/415/repeated-coveragedataupdates-cause
-.. _issue 416: https://bitbucket.org/ned/coveragepy/issues/416/mocking-ospathexists-causes-failures
-.. _issue 418: https://bitbucket.org/ned/coveragepy/issues/418/json-parse-error
-.. _issue 419: https://bitbucket.org/ned/coveragepy/issues/419/nosource-no-source-for-code-path-to-c
-.. _issue 423: https://bitbucket.org/ned/coveragepy/issues/423/skip_covered-changes-reported-total
+.. _issue 281: https://github.com/nedbat/coveragepy/issues/281
+.. _issue 397: https://github.com/nedbat/coveragepy/issues/397
+.. _issue 410: https://github.com/nedbat/coveragepy/issues/410
+.. _issue 415: https://github.com/nedbat/coveragepy/issues/415
+.. _issue 416: https://github.com/nedbat/coveragepy/issues/416
+.. _issue 418: https://github.com/nedbat/coveragepy/issues/418
+.. _issue 419: https://github.com/nedbat/coveragepy/issues/419
+.. _issue 423: https://github.com/nedbat/coveragepy/issues/423
 
 
 .. _changes_40:
@@ -1284,8 +1437,8 @@
   include tests and docs.  If you were using them from the older packages, get
   in touch and help me understand how.
 
-.. _issue 403: https://bitbucket.org/ned/coveragepy/issues/403/hasherupdate-fails-with-typeerror-nonetype
-.. _issue 404: https://bitbucket.org/ned/coveragepy/issues/404/shiningpanda-jenkins-plugin-cant-find-html
+.. _issue 403: https://github.com/nedbat/coveragepy/issues/403
+.. _issue 404: https://github.com/nedbat/coveragepy/issues/404
 
 
 Version 4.0b2 --- 2015-08-22
@@ -1315,9 +1468,9 @@
 - A new version identifier is available, `coverage.version_info`, a plain tuple
   of values similar to `sys.version_info`_.
 
-.. _issue 392: https://bitbucket.org/ned/coveragepy/issues/392/run-append-doesnt-create-coverage-file
-.. _issue 395: https://bitbucket.org/ned/coveragepy/issues/395/rfe-read-pickled-files-as-well-for
-.. _issue 399: https://bitbucket.org/ned/coveragepy/issues/399/coverageexception-cant-combine-line-data
+.. _issue 392: https://github.com/nedbat/coveragepy/issues/392
+.. _issue 395: https://github.com/nedbat/coveragepy/issues/395
+.. _issue 399: https://github.com/nedbat/coveragepy/issues/399
 .. _sys.version_info: https://docs.python.org/3/library/sys.html#sys.version_info
 
 
@@ -1387,15 +1540,15 @@
 - The speed is back to 3.7.1 levels, after having slowed down due to plugin
   support, finishing up `issue 387`_.
 
-.. _issue 236: https://bitbucket.org/ned/coveragepy/issues/236/pickles-are-bad-and-you-should-feel-bad
-.. _issue 252: https://bitbucket.org/ned/coveragepy/issues/252/coverage-wont-run-a-program-with
-.. _issue 262: https://bitbucket.org/ned/coveragepy/issues/262/when-parallel-true-erase-should-erase-all
-.. _issue 275: https://bitbucket.org/ned/coveragepy/issues/275/refer-consistently-to-project-as-coverage
-.. _issue 313: https://bitbucket.org/ned/coveragepy/issues/313/add-license-file-containing-2-3-or-4
-.. _issue 380: https://bitbucket.org/ned/coveragepy/issues/380/code-executed-by-exec-excluded-from
-.. _issue 385: https://bitbucket.org/ned/coveragepy/issues/385/coverage-combine-doesnt-work-with-rcfile
-.. _issue 386: https://bitbucket.org/ned/coveragepy/issues/386/error-on-unrecognised-configuration
-.. _issue 387: https://bitbucket.org/ned/coveragepy/issues/387/performance-degradation-from-371-to-40
+.. _issue 236: https://github.com/nedbat/coveragepy/issues/236
+.. _issue 252: https://github.com/nedbat/coveragepy/issues/252
+.. _issue 262: https://github.com/nedbat/coveragepy/issues/262
+.. _issue 275: https://github.com/nedbat/coveragepy/issues/275
+.. _issue 313: https://github.com/nedbat/coveragepy/issues/313
+.. _issue 380: https://github.com/nedbat/coveragepy/issues/380
+.. _issue 385: https://github.com/nedbat/coveragepy/issues/385
+.. _issue 386: https://github.com/nedbat/coveragepy/issues/386
+.. _issue 387: https://github.com/nedbat/coveragepy/issues/387
 
 .. 40 issues closed in 4.0 below here
 
@@ -1449,17 +1602,17 @@
 - Plugin support had some bugs fixed, closing `issue 374`_ and `issue 375`_.
   Thanks, Stefan Behnel.
 
-.. _issue 299: https://bitbucket.org/ned/coveragepy/issues/299/inserted-created-on-yyyy-mm-dd-hh-mm-in
-.. _issue 308: https://bitbucket.org/ned/coveragepy/issues/308/yield-lambda-branch-coverage
-.. _issue 324: https://bitbucket.org/ned/coveragepy/issues/324/yield-in-loop-confuses-branch-coverage
-.. _issue 351: https://bitbucket.org/ned/coveragepy/issues/351/files-with-incorrect-encoding-are-ignored
-.. _issue 354: https://bitbucket.org/ned/coveragepy/issues/354/coverage-combine-should-take-a-list-of
-.. _issue 359: https://bitbucket.org/ned/coveragepy/issues/359/xml-report-chunk-error
-.. _issue 360: https://bitbucket.org/ned/coveragepy/issues/360/html-reports-get-confused-by-l-in-the-code
-.. _issue 361: https://bitbucket.org/ned/coveragepy/issues/361/use-double-quotes-in-html-output-to
-.. _issue 363: https://bitbucket.org/ned/coveragepy/issues/363/annotate-command-hits-unicode-happy-fun
-.. _issue 374: https://bitbucket.org/ned/coveragepy/issues/374/c-tracer-lookups-fail-in
-.. _issue 375: https://bitbucket.org/ned/coveragepy/issues/375/ctracer_handle_return-reads-byte-code
+.. _issue 299: https://github.com/nedbat/coveragepy/issues/299
+.. _issue 308: https://github.com/nedbat/coveragepy/issues/308
+.. _issue 324: https://github.com/nedbat/coveragepy/issues/324
+.. _issue 351: https://github.com/nedbat/coveragepy/issues/351
+.. _issue 354: https://github.com/nedbat/coveragepy/issues/354
+.. _issue 359: https://github.com/nedbat/coveragepy/issues/359
+.. _issue 360: https://github.com/nedbat/coveragepy/issues/360
+.. _issue 361: https://github.com/nedbat/coveragepy/issues/361
+.. _issue 363: https://github.com/nedbat/coveragepy/issues/363
+.. _issue 374: https://github.com/nedbat/coveragepy/issues/374
+.. _issue 375: https://github.com/nedbat/coveragepy/issues/375
 
 
 Version 4.0a5 --- 2015-02-16
@@ -1489,11 +1642,11 @@
 
 - Added 3.5.0a1 to the list of supported CPython versions.
 
-.. _issue 117: https://bitbucket.org/ned/coveragepy/issues/117/enable-coverage-measurement-of-code-run-by
-.. _issue 340: https://bitbucket.org/ned/coveragepy/issues/340/keyerror-subpy
-.. _issue 353: https://bitbucket.org/ned/coveragepy/issues/353/40a3-introduces-an-unexpected-third-case
-.. _issue 357: https://bitbucket.org/ned/coveragepy/issues/357/behavior-changed-when-coveragerc-is
-.. _issue 358: https://bitbucket.org/ned/coveragepy/issues/358/all-coverage-commands-should-adjust
+.. _issue 117: https://github.com/nedbat/coveragepy/issues/117
+.. _issue 340: https://github.com/nedbat/coveragepy/issues/340
+.. _issue 353: https://github.com/nedbat/coveragepy/issues/353
+.. _issue 357: https://github.com/nedbat/coveragepy/issues/357
+.. _issue 358: https://github.com/nedbat/coveragepy/issues/358
 
 
 Version 4.0a4 --- 2015-01-25
@@ -1533,11 +1686,11 @@
 - Regexes in the configuration file are now compiled as soon as they are read,
   to provide error messages earlier (`issue 349`_).
 
-.. _issue 69: https://bitbucket.org/ned/coveragepy/issues/69/coverage-html-overwrite-files-that-doesnt
-.. _issue 235: https://bitbucket.org/ned/coveragepy/issues/235/package-name-is-missing-in-xml-report
-.. _issue 290: https://bitbucket.org/ned/coveragepy/issues/290/running-programmatically-with-pyw-files
-.. _issue 345: https://bitbucket.org/ned/coveragepy/issues/345/xml-reports-line-rate-0-for-empty-files
-.. _issue 349: https://bitbucket.org/ned/coveragepy/issues/349/bad-regex-in-config-should-get-an-earlier
+.. _issue 69: https://github.com/nedbat/coveragepy/issues/69
+.. _issue 235: https://github.com/nedbat/coveragepy/issues/235
+.. _issue 290: https://github.com/nedbat/coveragepy/issues/290
+.. _issue 345: https://github.com/nedbat/coveragepy/issues/345
+.. _issue 349: https://github.com/nedbat/coveragepy/issues/349
 
 
 Version 4.0a2 --- 2015-01-14
@@ -1597,15 +1750,15 @@
   haven't changed is now a JSON file instead of a pickle file.  This obviates
   `issue 287`_ and `issue 237`_.
 
-.. _issue 237: https://bitbucket.org/ned/coveragepy/issues/237/htmlcov-with-corrupt-statusdat
-.. _issue 287: https://bitbucket.org/ned/coveragepy/issues/287/htmlpy-doesnt-specify-pickle-protocol
-.. _issue 293: https://bitbucket.org/ned/coveragepy/issues/293/number-of-statement-detection-wrong-if-no
-.. _issue 314: https://bitbucket.org/ned/coveragepy/issues/314/fail_under-param-not-working-in-coveragerc
-.. _issue 315: https://bitbucket.org/ned/coveragepy/issues/315/option-to-omit-empty-files-eg-__init__py
-.. _issue 328: https://bitbucket.org/ned/coveragepy/issues/328/misbehavior-in-run-source
-.. _issue 334: https://bitbucket.org/ned/coveragepy/issues/334/pragma-not-recognized-if-tab-character
-.. _issue 342: https://bitbucket.org/ned/coveragepy/issues/342/console-and-html-coverage-reports-differ
-.. _issue 343: https://bitbucket.org/ned/coveragepy/issues/343/an-explicitly-named-non-existent-config
+.. _issue 237: https://github.com/nedbat/coveragepy/issues/237
+.. _issue 287: https://github.com/nedbat/coveragepy/issues/287
+.. _issue 293: https://github.com/nedbat/coveragepy/issues/293
+.. _issue 314: https://github.com/nedbat/coveragepy/issues/314
+.. _issue 315: https://github.com/nedbat/coveragepy/issues/315
+.. _issue 328: https://github.com/nedbat/coveragepy/issues/328
+.. _issue 334: https://github.com/nedbat/coveragepy/issues/334
+.. _issue 342: https://github.com/nedbat/coveragepy/issues/342
+.. _issue 343: https://github.com/nedbat/coveragepy/issues/343
 
 
 Version 4.0a1 --- 2014-09-27
@@ -1650,16 +1803,16 @@
 - Encoding declarations in source files are only considered if they are truly
   comments.  Thanks, Anthony Sottile.
 
-.. _issue 57: https://bitbucket.org/ned/coveragepy/issues/57/annotate-command-fails-to-annotate-many
-.. _issue 94: https://bitbucket.org/ned/coveragepy/issues/94/coverage-xml-doesnt-produce-sources
-.. _issue 149: https://bitbucket.org/ned/coveragepy/issues/149/coverage-gevent-looks-broken
-.. _issue 230: https://bitbucket.org/ned/coveragepy/issues/230/show-line-no-for-missing-branches-in
-.. _issue 284: https://bitbucket.org/ned/coveragepy/issues/284/fail-under-should-show-more-precision
-.. _issue 285: https://bitbucket.org/ned/coveragepy/issues/285/xml-report-fails-if-output-file-directory
-.. _issue 303: https://bitbucket.org/ned/coveragepy/issues/303/unicodedecodeerror
-.. _issue 304: https://bitbucket.org/ned/coveragepy/issues/304/attempt-to-get-configuration-from-setupcfg
-.. _issue 305: https://bitbucket.org/ned/coveragepy/issues/305/pendingdeprecationwarning-the-imp-module
-.. _issue 331: https://bitbucket.org/ned/coveragepy/issues/331/failure-of-encoding-detection-on-python2
+.. _issue 57: https://github.com/nedbat/coveragepy/issues/57
+.. _issue 94: https://github.com/nedbat/coveragepy/issues/94
+.. _issue 149: https://github.com/nedbat/coveragepy/issues/149
+.. _issue 230: https://github.com/nedbat/coveragepy/issues/230
+.. _issue 284: https://github.com/nedbat/coveragepy/issues/284
+.. _issue 285: https://github.com/nedbat/coveragepy/issues/285
+.. _issue 303: https://github.com/nedbat/coveragepy/issues/303
+.. _issue 304: https://github.com/nedbat/coveragepy/issues/304
+.. _issue 305: https://github.com/nedbat/coveragepy/issues/305
+.. _issue 331: https://github.com/nedbat/coveragepy/issues/331
 
 
 .. _changes_371:
@@ -1718,18 +1871,18 @@
 - The source kit now includes the ``__main__.py`` file in the root coverage
   directory, fixing `issue 255`_.
 
-.. _issue 92: https://bitbucket.org/ned/coveragepy/issues/92/finally-clauses-arent-treated-properly-in
-.. _issue 164: https://bitbucket.org/ned/coveragepy/issues/164/trace-function-changed-warning-when-using
-.. _issue 175: https://bitbucket.org/ned/coveragepy/issues/175/branch-coverage-gets-confused-in-certain
-.. _issue 207: https://bitbucket.org/ned/coveragepy/issues/207/run-m-cannot-find-module-or-package-in
-.. _issue 242: https://bitbucket.org/ned/coveragepy/issues/242/running-a-two-level-package-doesnt-work
-.. _issue 218: https://bitbucket.org/ned/coveragepy/issues/218/run-command-does-not-respect-the-omit-flag
-.. _issue 250: https://bitbucket.org/ned/coveragepy/issues/250/uncaught-zerodivisionerror-when-generating
-.. _issue 255: https://bitbucket.org/ned/coveragepy/issues/255/directory-level-__main__py-not-included-in
-.. _issue 259: https://bitbucket.org/ned/coveragepy/issues/259/allow-use-of-system-installed-third-party
-.. _issue 261: https://bitbucket.org/ned/coveragepy/issues/261/pyw-files-arent-reported-properly
-.. _issue 264: https://bitbucket.org/ned/coveragepy/issues/264/coverage-wont-run-pyc-files
-.. _issue 267: https://bitbucket.org/ned/coveragepy/issues/267/relative-path-aliases-dont-work
+.. _issue 92: https://github.com/nedbat/coveragepy/issues/92
+.. _issue 164: https://github.com/nedbat/coveragepy/issues/164
+.. _issue 175: https://github.com/nedbat/coveragepy/issues/175
+.. _issue 207: https://github.com/nedbat/coveragepy/issues/207
+.. _issue 242: https://github.com/nedbat/coveragepy/issues/242
+.. _issue 218: https://github.com/nedbat/coveragepy/issues/218
+.. _issue 250: https://github.com/nedbat/coveragepy/issues/250
+.. _issue 255: https://github.com/nedbat/coveragepy/issues/255
+.. _issue 259: https://github.com/nedbat/coveragepy/issues/259
+.. _issue 261: https://github.com/nedbat/coveragepy/issues/261
+.. _issue 264: https://github.com/nedbat/coveragepy/issues/264
+.. _issue 267: https://github.com/nedbat/coveragepy/issues/267
 
 
 .. _changes_36:
@@ -1740,8 +1893,8 @@
 - Added a page to the docs about troublesome situations, closing `issue 226`_,
   and added some info to the TODO file, closing `issue 227`_.
 
-.. _issue 226: https://bitbucket.org/ned/coveragepy/issues/226/make-readme-section-to-describe-when
-.. _issue 227: https://bitbucket.org/ned/coveragepy/issues/227/update-todo
+.. _issue 226: https://github.com/nedbat/coveragepy/issues/226
+.. _issue 227: https://github.com/nedbat/coveragepy/issues/227
 
 
 Version 3.6b3 --- 2012-12-29
@@ -1749,7 +1902,7 @@
 
 - Beta 2 broke the nose plugin. It's fixed again, closing `issue 224`_.
 
-.. _issue 224: https://bitbucket.org/ned/coveragepy/issues/224/36b2-breaks-nosexcover
+.. _issue 224: https://github.com/nedbat/coveragepy/issues/224
 
 
 Version 3.6b2 --- 2012-12-23
@@ -1769,7 +1922,7 @@
   file name, coverage.py no longer associates it with the directory name,
   fixing `issue 221`_.
 
-.. _issue 221: https://bitbucket.org/ned/coveragepy/issues/221/coveragepy-incompatible-with-pyratemp
+.. _issue 221: https://github.com/nedbat/coveragepy/issues/221
 
 
 Version 3.6b1 --- 2012-11-28
@@ -1863,27 +2016,27 @@
   ``'NoneType' object has no attribute 'isabs'``.  It no longer does,
   so kiss `issue 153`_ goodbye.
 
-.. _issue 60: https://bitbucket.org/ned/coveragepy/issues/60/incorrect-path-to-orphaned-pyc-files
-.. _issue 67: https://bitbucket.org/ned/coveragepy/issues/67/xml-report-filenames-may-be-generated
-.. _issue 89: https://bitbucket.org/ned/coveragepy/issues/89/on-windows-all-packages-are-reported-in
-.. _issue 97: https://bitbucket.org/ned/coveragepy/issues/97/allow-environment-variables-to-be
-.. _issue 100: https://bitbucket.org/ned/coveragepy/issues/100/source-directive-doesnt-work-for-packages
-.. _issue 111: https://bitbucket.org/ned/coveragepy/issues/111/when-installing-coverage-with-pip-not
-.. _issue 137: https://bitbucket.org/ned/coveragepy/issues/137/provide-docs-with-source-distribution
-.. _issue 139: https://bitbucket.org/ned/coveragepy/issues/139/easy-check-for-a-certain-coverage-in-tests
-.. _issue 143: https://bitbucket.org/ned/coveragepy/issues/143/omit-doesnt-seem-to-work-in-coverage
-.. _issue 153: https://bitbucket.org/ned/coveragepy/issues/153/non-existent-filename-triggers
-.. _issue 156: https://bitbucket.org/ned/coveragepy/issues/156/a-completely-unexecuted-file-shows-14
-.. _issue 163: https://bitbucket.org/ned/coveragepy/issues/163/problem-with-include-and-omit-filename
-.. _issue 171: https://bitbucket.org/ned/coveragepy/issues/171/how-to-contribute-and-run-tests
-.. _issue 193: https://bitbucket.org/ned/coveragepy/issues/193/unicodedecodeerror-on-htmlpy
-.. _issue 201: https://bitbucket.org/ned/coveragepy/issues/201/coverage-using-django-14-with-pydb-on
-.. _issue 202: https://bitbucket.org/ned/coveragepy/issues/202/get-rid-of-ez_setuppy-and
-.. _issue 203: https://bitbucket.org/ned/coveragepy/issues/203/duplicate-filenames-reported-when-filename
-.. _issue 205: https://bitbucket.org/ned/coveragepy/issues/205/make-pydoc-coverage-more-friendly
-.. _issue 206: https://bitbucket.org/ned/coveragepy/issues/206/pydoc-coveragecoverage-fails-with-an-error
-.. _issue 210: https://bitbucket.org/ned/coveragepy/issues/210/if-theres-no-coverage-data-coverage-xml
-.. _issue 214: https://bitbucket.org/ned/coveragepy/issues/214/coveragepy-measures-itself-on-precise
+.. _issue 60: https://github.com/nedbat/coveragepy/issues/60
+.. _issue 67: https://github.com/nedbat/coveragepy/issues/67
+.. _issue 89: https://github.com/nedbat/coveragepy/issues/89
+.. _issue 97: https://github.com/nedbat/coveragepy/issues/97
+.. _issue 100: https://github.com/nedbat/coveragepy/issues/100
+.. _issue 111: https://github.com/nedbat/coveragepy/issues/111
+.. _issue 137: https://github.com/nedbat/coveragepy/issues/137
+.. _issue 139: https://github.com/nedbat/coveragepy/issues/139
+.. _issue 143: https://github.com/nedbat/coveragepy/issues/143
+.. _issue 153: https://github.com/nedbat/coveragepy/issues/153
+.. _issue 156: https://github.com/nedbat/coveragepy/issues/156
+.. _issue 163: https://github.com/nedbat/coveragepy/issues/163
+.. _issue 171: https://github.com/nedbat/coveragepy/issues/171
+.. _issue 193: https://github.com/nedbat/coveragepy/issues/193
+.. _issue 201: https://github.com/nedbat/coveragepy/issues/201
+.. _issue 202: https://github.com/nedbat/coveragepy/issues/202
+.. _issue 203: https://github.com/nedbat/coveragepy/issues/203
+.. _issue 205: https://github.com/nedbat/coveragepy/issues/205
+.. _issue 206: https://github.com/nedbat/coveragepy/issues/206
+.. _issue 210: https://github.com/nedbat/coveragepy/issues/210
+.. _issue 214: https://github.com/nedbat/coveragepy/issues/214
 
 
 .. _changes_353:
@@ -1918,12 +2071,12 @@
 
 - Testing is now done with `tox`_, thanks, Marc Abramowitz.
 
-.. _issue 147: https://bitbucket.org/ned/coveragepy/issues/147/massive-memory-usage-by-ctracer
-.. _issue 179: https://bitbucket.org/ned/coveragepy/issues/179/htmlreporter-fails-when-source-file-is
-.. _issue 183: https://bitbucket.org/ned/coveragepy/issues/183/install-fails-for-python-23
-.. _issue 194: https://bitbucket.org/ned/coveragepy/issues/194/filelocatorrelative_filename-could-mangle
-.. _issue 195: https://bitbucket.org/ned/coveragepy/issues/195/pyo-file-handling-in-codeunit
-.. _issue 197: https://bitbucket.org/ned/coveragepy/issues/197/line-numbers-in-html-report-do-not-align
+.. _issue 147: https://github.com/nedbat/coveragepy/issues/147
+.. _issue 179: https://github.com/nedbat/coveragepy/issues/179
+.. _issue 183: https://github.com/nedbat/coveragepy/issues/183
+.. _issue 194: https://github.com/nedbat/coveragepy/issues/194
+.. _issue 195: https://github.com/nedbat/coveragepy/issues/195
+.. _issue 197: https://github.com/nedbat/coveragepy/issues/197
 .. _tox: https://tox.readthedocs.io/
 
 
@@ -1971,12 +2124,12 @@
 - When installing into pypy, we no longer attempt (and fail) to compile
   the C tracer function, closing `issue 166`_.
 
-.. _issue 142: https://bitbucket.org/ned/coveragepy/issues/142/executing-python-file-syspath-is-replaced
-.. _issue 155: https://bitbucket.org/ned/coveragepy/issues/155/cant-use-coverage-run-m-unittest-discover
-.. _issue 157: https://bitbucket.org/ned/coveragepy/issues/157/chokes-on-source-files-with-non-utf-8
-.. _issue 166: https://bitbucket.org/ned/coveragepy/issues/166/dont-try-to-compile-c-extension-on-pypy
-.. _issue 168: https://bitbucket.org/ned/coveragepy/issues/168/dont-be-alarmed-by-emacs-droppings
-.. _issue 173: https://bitbucket.org/ned/coveragepy/issues/173/theres-no-way-to-specify-show-missing-in
+.. _issue 142: https://github.com/nedbat/coveragepy/issues/142
+.. _issue 155: https://github.com/nedbat/coveragepy/issues/155
+.. _issue 157: https://github.com/nedbat/coveragepy/issues/157
+.. _issue 166: https://github.com/nedbat/coveragepy/issues/166
+.. _issue 168: https://github.com/nedbat/coveragepy/issues/168
+.. _issue 173: https://github.com/nedbat/coveragepy/issues/173
 
 
 .. _changes_351:
@@ -2020,12 +2173,12 @@
   into running some coverage.py code before anything else in the process.
   See the coverage/fullcoverage directory if you are interested.
 
-.. _issue 17: https://bitbucket.org/ned/coveragepy/issues/17/support-combining-coverage-data-from
-.. _issue 122: https://bitbucket.org/ned/coveragepy/issues/122/for-else-always-reports-missing-branch
-.. _issue 124: https://bitbucket.org/ned/coveragepy/issues/124/no-arbitrary-unicode-in-html-reports-in
-.. _issue 128: https://bitbucket.org/ned/coveragepy/issues/128/branch-coverage-of-with-statement-in-27
-.. _issue 138: https://bitbucket.org/ned/coveragepy/issues/138/include-should-take-precedence-over-is
-.. _issue 144: https://bitbucket.org/ned/coveragepy/issues/144/failure-generating-html-output-for
+.. _issue 17: https://github.com/nedbat/coveragepy/issues/17
+.. _issue 122: https://github.com/nedbat/coveragepy/issues/122
+.. _issue 124: https://github.com/nedbat/coveragepy/issues/124
+.. _issue 128: https://github.com/nedbat/coveragepy/issues/128
+.. _issue 138: https://github.com/nedbat/coveragepy/issues/138
+.. _issue 144: https://github.com/nedbat/coveragepy/issues/144
 
 
 .. _changes_35:
@@ -2107,15 +2260,15 @@
 - Internally, files are now closed explicitly, fixing `issue 104`_.  Thanks,
   Brett Cannon.
 
-.. _issue 80: https://bitbucket.org/ned/coveragepy/issues/80/is-there-a-duck-typing-way-to-know-we-cant
-.. _issue 93: https://bitbucket.org/ned/coveragepy/issues/93/copying-a-mock-object-breaks-coverage
-.. _issue 95: https://bitbucket.org/ned/coveragepy/issues/95/run-subcommand-should-take-a-module-name
-.. _issue 104: https://bitbucket.org/ned/coveragepy/issues/104/explicitly-close-files
-.. _issue 107: https://bitbucket.org/ned/coveragepy/issues/107/codeparser-not-opening-source-files-with
-.. _issue 115: https://bitbucket.org/ned/coveragepy/issues/115/fail-gracefully-when-reporting-on-file
-.. _issue 121: https://bitbucket.org/ned/coveragepy/issues/121/filename-patterns-are-applied-stupidly
-.. _issue 123: https://bitbucket.org/ned/coveragepy/issues/123/pyeval_settrace-used-in-way-that-breaks
-.. _issue 125: https://bitbucket.org/ned/coveragepy/issues/125/coverage-removes-decoratortoolss-tracing
+.. _issue 80: https://github.com/nedbat/coveragepy/issues/80
+.. _issue 93: https://github.com/nedbat/coveragepy/issues/93
+.. _issue 95: https://github.com/nedbat/coveragepy/issues/95
+.. _issue 104: https://github.com/nedbat/coveragepy/issues/104
+.. _issue 107: https://github.com/nedbat/coveragepy/issues/107
+.. _issue 115: https://github.com/nedbat/coveragepy/issues/115
+.. _issue 121: https://github.com/nedbat/coveragepy/issues/121
+.. _issue 123: https://github.com/nedbat/coveragepy/issues/123
+.. _issue 125: https://github.com/nedbat/coveragepy/issues/125
 
 
 .. _changes_34:
@@ -2128,7 +2281,7 @@
 - Programs that exited with ``sys.exit()`` with no argument weren't handled
   properly, producing a coverage.py stack trace.  That is now fixed.
 
-.. _issue 88: https://bitbucket.org/ned/coveragepy/issues/88/xml-report-lists-packages-in-random-order
+.. _issue 88: https://github.com/nedbat/coveragepy/issues/88
 
 
 Version 3.4b2 --- 2010-09-06
@@ -2153,12 +2306,12 @@
   would report no coverage for the `run` method.  This is now fixed, closing
   `issue 85`_.
 
-.. _issue 16: https://bitbucket.org/ned/coveragepy/issues/16/allow-configuration-of-accuracy-of-percentage-totals
-.. _issue 41: https://bitbucket.org/ned/coveragepy/issues/41/report-says-100-when-it-isnt-quite-there
-.. _issue 65: https://bitbucket.org/ned/coveragepy/issues/65/branch-option-not-reported-in-cobertura
-.. _issue 70: https://bitbucket.org/ned/coveragepy/issues/70/text-report-and-html-report-disagree-on-coverage
-.. _issue 81: https://bitbucket.org/ned/coveragepy/issues/81/xml-report-does-not-have-condition-coverage-attribute-for-lines-with-a
-.. _issue 85: https://bitbucket.org/ned/coveragepy/issues/85/threadrun-isnt-measured
+.. _issue 16: https://github.com/nedbat/coveragepy/issues/16
+.. _issue 41: https://github.com/nedbat/coveragepy/issues/41
+.. _issue 65: https://github.com/nedbat/coveragepy/issues/65
+.. _issue 70: https://github.com/nedbat/coveragepy/issues/70
+.. _issue 81: https://github.com/nedbat/coveragepy/issues/81
+.. _issue 85: https://github.com/nedbat/coveragepy/issues/85
 
 
 Version 3.4b1 --- 2010-08-21
@@ -2234,17 +2387,17 @@
 - Asking for an HTML report with no files now shows a nice error message rather
   than a cryptic failure ('int' object is unsubscriptable). Fixes `issue 59`_.
 
-.. _issue 1:  https://bitbucket.org/ned/coveragepy/issues/1/empty-__init__py-files-are-reported-as-1-executable
-.. _issue 34: https://bitbucket.org/ned/coveragepy/issues/34/enhanced-omit-globbing-handling
-.. _issue 36: https://bitbucket.org/ned/coveragepy/issues/36/provide-regex-style-omit
-.. _issue 46: https://bitbucket.org/ned/coveragepy/issues/46
-.. _issue 53: https://bitbucket.org/ned/coveragepy/issues/53
-.. _issue 52: https://bitbucket.org/ned/coveragepy/issues/52/doctesttestfile-confuses-source-detection
-.. _issue 56: https://bitbucket.org/ned/coveragepy/issues/56
-.. _issue 61: https://bitbucket.org/ned/coveragepy/issues/61/annotate-i-doesnt-work
-.. _issue 62: https://bitbucket.org/ned/coveragepy/issues/62
-.. _issue 59: https://bitbucket.org/ned/coveragepy/issues/59/html-report-fails-with-int-object-is
-.. _issue 82: https://bitbucket.org/ned/coveragepy/issues/82/tokenerror-when-generating-html-report
+.. _issue 1:  https://github.com/nedbat/coveragepy/issues/1
+.. _issue 34: https://github.com/nedbat/coveragepy/issues/34
+.. _issue 36: https://github.com/nedbat/coveragepy/issues/36
+.. _issue 46: https://github.com/nedbat/coveragepy/issues/46
+.. _issue 53: https://github.com/nedbat/coveragepy/issues/53
+.. _issue 52: https://github.com/nedbat/coveragepy/issues/52
+.. _issue 56: https://github.com/nedbat/coveragepy/issues/56
+.. _issue 61: https://github.com/nedbat/coveragepy/issues/61
+.. _issue 62: https://github.com/nedbat/coveragepy/issues/62
+.. _issue 59: https://github.com/nedbat/coveragepy/issues/59
+.. _issue 82: https://github.com/nedbat/coveragepy/issues/82
 
 
 .. _changes_331:
@@ -2258,8 +2411,8 @@
 - When running your code with "coverage run", if you call `sys.exit()`,
   coverage.py will exit with that status code, fixing `issue 50`_.
 
-.. _issue 49: https://bitbucket.org/ned/coveragepy/issues/49
-.. _issue 50: https://bitbucket.org/ned/coveragepy/issues/50
+.. _issue 49: https://github.com/nedbat/coveragepy/issues/49
+.. _issue 50: https://github.com/nedbat/coveragepy/issues/50
 
 
 .. _changes_33:
@@ -2298,9 +2451,9 @@
 
 - Added an AUTHORS.txt file.
 
-.. _issue 39: https://bitbucket.org/ned/coveragepy/issues/39
-.. _issue 40: https://bitbucket.org/ned/coveragepy/issues/40
-.. _issue 47: https://bitbucket.org/ned/coveragepy/issues/47
+.. _issue 39: https://github.com/nedbat/coveragepy/issues/39
+.. _issue 40: https://github.com/nedbat/coveragepy/issues/40
+.. _issue 47: https://github.com/nedbat/coveragepy/issues/47
 
 
 .. _changes_32:
@@ -2358,12 +2511,12 @@
 - The --omit option now works much better than before, fixing `issue 14`_ and
   `issue 33`_.  Thanks, Danek Duvall.
 
-.. _issue 14: https://bitbucket.org/ned/coveragepy/issues/14
-.. _issue 30: https://bitbucket.org/ned/coveragepy/issues/30
-.. _issue 31: https://bitbucket.org/ned/coveragepy/issues/31
-.. _issue 32: https://bitbucket.org/ned/coveragepy/issues/32
-.. _issue 33: https://bitbucket.org/ned/coveragepy/issues/33
-.. _issue 35: https://bitbucket.org/ned/coveragepy/issues/35
+.. _issue 14: https://github.com/nedbat/coveragepy/issues/14
+.. _issue 30: https://github.com/nedbat/coveragepy/issues/30
+.. _issue 31: https://github.com/nedbat/coveragepy/issues/31
+.. _issue 32: https://github.com/nedbat/coveragepy/issues/32
+.. _issue 33: https://github.com/nedbat/coveragepy/issues/33
+.. _issue 35: https://github.com/nedbat/coveragepy/issues/35
 
 
 Version 3.2b1 --- 2009-11-10
@@ -2378,7 +2531,7 @@
 - Some exceptions reported by the command line interface have been cleaned up
   so that tracebacks inside coverage.py aren't shown.  Fixes `issue 23`_.
 
-.. _issue 23: https://bitbucket.org/ned/coveragepy/issues/23
+.. _issue 23: https://github.com/nedbat/coveragepy/issues/23
 
 
 .. _changes_31:
@@ -2389,7 +2542,7 @@
 - Source code can now be read from eggs.  Thanks, Ross Lawley.  Fixes
   `issue 25`_.
 
-.. _issue 25: https://bitbucket.org/ned/coveragepy/issues/25
+.. _issue 25: https://github.com/nedbat/coveragepy/issues/25
 
 
 Version 3.1b1 --- 2009-09-27
@@ -2419,10 +2572,10 @@
 - Added a "coverage debug" command for getting diagnostic information about the
   coverage.py installation.
 
-.. _issue 11: https://bitbucket.org/ned/coveragepy/issues/11
-.. _issue 12: https://bitbucket.org/ned/coveragepy/issues/12
-.. _issue 13: https://bitbucket.org/ned/coveragepy/issues/13
-.. _issue 24: https://bitbucket.org/ned/coveragepy/issues/24
+.. _issue 11: https://github.com/nedbat/coveragepy/issues/11
+.. _issue 12: https://github.com/nedbat/coveragepy/issues/12
+.. _issue 13: https://github.com/nedbat/coveragepy/issues/13
+.. _issue 24: https://github.com/nedbat/coveragepy/issues/24
 
 
 .. _changes_301:
@@ -2447,9 +2600,9 @@
   mode just like Python does.  This lets it run Windows files on Mac, for
   example.
 
-.. _issue 9: https://bitbucket.org/ned/coveragepy/issues/9
-.. _issue 10: https://bitbucket.org/ned/coveragepy/issues/10
-.. _issue 8: https://bitbucket.org/ned/coveragepy/issues/8
+.. _issue 9: https://github.com/nedbat/coveragepy/issues/9
+.. _issue 10: https://github.com/nedbat/coveragepy/issues/10
+.. _issue 8: https://github.com/nedbat/coveragepy/issues/8
 
 
 .. _changes_30:
@@ -2465,7 +2618,7 @@
 
 - Nested modules now get a proper flat_rootname.  Thanks, Christian Heimes.
 
-.. _issue 6: https://bitbucket.org/ned/coveragepy/issues/6
+.. _issue 6: https://github.com/nedbat/coveragepy/issues/6
 
 
 Version 3.0b3 --- 2009-05-16
--- a/eric6/DebugClients/Python/coverage/doc/CONTRIBUTORS.txt	Sun Jan 17 13:53:08 2021 +0100
+++ b/eric6/DebugClients/Python/coverage/doc/CONTRIBUTORS.txt	Mon Feb 01 10:38:16 2021 +0100
@@ -4,6 +4,7 @@
 Other contributions, including writing code, updating docs, and submitting
 useful bug reports, have been made by:
 
+Abdeali Kothari
 Adi Roiban
 Agbonze O. Jeremiah
 Albertas Agejevas
@@ -19,9 +20,11 @@
 Aron Griffis
 Artem Dayneko
 Ben Finney
+Bernát Gábor
 Bill Hart
 Brandon Rhodes
 Brett Cannon
+Bruno P. Kinoshita
 Buck Evan
 Calen Pennington
 Carl Gieringer
@@ -68,6 +71,7 @@
 Imri Goldberg
 Ionel Cristian Mărieș
 JT Olds
+Jerin Peter George
 Jessamyn Smith
 Joe Doherty
 Joe Jevnik
@@ -78,6 +82,7 @@
 Julian Berman
 Julien Voisin
 Justas Sadzevičius
+Kjell Braden
 Krystian Kichewko
 Kyle Altendorf
 Lars Hupfeldt Nielsen
@@ -96,6 +101,7 @@
 Michał Bultrowicz
 Mickie Betz
 Mike Fiedler
+Naveen Yadav
 Nathan Land
 Noel O'Boyle
 Olivier Grisel
@@ -111,8 +117,10 @@
 Roger Hu
 Ross Lawley
 Roy Williams
+Salvatore Zagaria
 Sandra Martocchia
 Scott Belden
+Sebastián Ramírez
 Sigve Tjora
 Simon Willison
 Stan Hu
@@ -122,10 +130,14 @@
 Steve Leonard
 Steve Peak
 S. Y. Lee
+Teake Nutma
 Ted Wexler
 Thijs Triemstra
+Thomas Grainger
 Titus Brown
+Vince Salvino
 Ville Skyttä
+Xie Yanbo
 Yury Selivanov
 Zac Hatfield-Dodds
 Zooko Wilcox-O'Hearn
--- a/eric6/DebugClients/Python/coverage/doc/README.rst	Sun Jan 17 13:53:08 2021 +0100
+++ b/eric6/DebugClients/Python/coverage/doc/README.rst	Mon Feb 01 10:38:16 2021 +0100
@@ -8,8 +8,8 @@
 Code coverage testing for Python.
 
 |  |license| |versions| |status|
-|  |ci-status| |win-ci-status| |docs| |codecov|
-|  |kit| |format| |repos|
+|  |ci-status| |docs| |codecov|
+|  |kit| |format| |repos| |downloads|
 |  |stars| |forks| |contributors|
 |  |tidelift| |twitter-coveragepy| |twitter-nedbat|
 
@@ -20,8 +20,8 @@
 Coverage.py runs on many versions of Python:
 
 * CPython 2.7.
-* CPython 3.5 through 3.9 alpha 2.
-* PyPy2 7.0 and PyPy3 7.0.
+* CPython 3.5 through 3.10 alpha.
+* PyPy2 7.3.1 and PyPy3 7.3.1.
 
 Documentation is on `Read the Docs`_.  Code repository and issue tracker are on
 `GitHub`_.
@@ -30,7 +30,7 @@
 .. _GitHub: https://github.com/nedbat/coveragepy
 
 
-**New in 5.0:** SQLite data storage, JSON report, contexts, relative filenames,
+**New in 5.x:** SQLite data storage, JSON report, contexts, relative filenames,
 dropped support for Python 2.6, 3.3 and 3.4.
 
 
@@ -38,7 +38,6 @@
 --------------
 
 .. |tideliftlogo| image:: https://nedbatchelder.com/pix/Tidelift_Logo_small.png
-   :width: 75
    :alt: Tidelift
    :target: https://tidelift.com/subscription/pkg/pypi-coverage?utm_source=pypi-coverage&utm_medium=referral&utm_campaign=readme
 
@@ -96,12 +95,9 @@
 .. _NOTICE.txt: https://github.com/nedbat/coveragepy/blob/master/NOTICE.txt
 
 
-.. |ci-status| image:: https://travis-ci.com/nedbat/coveragepy.svg?branch=master
-    :target: https://travis-ci.com/nedbat/coveragepy
+.. |ci-status| image:: https://github.com/nedbat/coveragepy/workflows/Test%20Suite/badge.svg
+    :target: https://github.com/nedbat/coveragepy/actions?query=workflow%3A%22Test+Suite%22
     :alt: Build status
-.. |win-ci-status| image:: https://ci.appveyor.com/api/projects/status/kmeqpdje7h9r6vsf/branch/master?svg=true
-    :target: https://ci.appveyor.com/project/nedbat/coveragepy
-    :alt: Windows build status
 .. |docs| image:: https://readthedocs.org/projects/coverage/badge/?version=latest&style=flat
     :target: https://coverage.readthedocs.io/
     :alt: Documentation
--- a/eric6/DebugClients/Python/coverage/env.py	Sun Jan 17 13:53:08 2021 +0100
+++ b/eric6/DebugClients/Python/coverage/env.py	Mon Feb 01 10:38:16 2021 +0100
@@ -66,7 +66,7 @@
     # used to be an empty string (meaning the current directory). It changed
     # to be the actual path to the current directory, so that os.chdir wouldn't
     # affect the outcome.
-    actual_syspath0_dash_m = (PYVERSION >= (3, 7, 0, 'beta', 3))
+    actual_syspath0_dash_m = (not PYPY) and (PYVERSION >= (3, 7, 0, 'beta', 3))
 
     # When a break/continue/return statement in a try block jumps to a finally
     # block, does the finally block do the break/continue/return (pre-3.8), or
--- a/eric6/DebugClients/Python/coverage/html.py	Sun Jan 17 13:53:08 2021 +0100
+++ b/eric6/DebugClients/Python/coverage/html.py	Mon Feb 01 10:38:16 2021 +0100
@@ -166,6 +166,7 @@
         ("coverage_html.js", ""),
         ("keybd_closed.png", ""),
         ("keybd_open.png", ""),
+        ("favicon_32.png", ""),
     ]
 
     def __init__(self, cov):
--- a/eric6/DebugClients/Python/coverage/optional.py	Sun Jan 17 13:53:08 2021 +0100
+++ b/eric6/DebugClients/Python/coverage/optional.py	Mon Feb 01 10:38:16 2021 +0100
@@ -15,6 +15,14 @@
 Bad::
 
     # MyModule.py
+    import unsure
+
+    def use_unsure():
+        unsure.something()
+
+Also bad::
+
+    # MyModule.py
     from coverage.optional import unsure
 
     def use_unsure():
--- a/eric6/DebugClients/Python/coverage/pytracer.py	Sun Jan 17 13:53:08 2021 +0100
+++ b/eric6/DebugClients/Python/coverage/pytracer.py	Mon Feb 01 10:38:16 2021 +0100
@@ -107,7 +107,7 @@
         if event == 'call':
             # Should we start a new context?
             if self.should_start_context and self.context is None:
-                context_maybe = self.should_start_context(frame)
+                context_maybe = self.should_start_context(frame)    # pylint: disable=not-callable
                 if context_maybe is not None:
                     self.context = context_maybe
                     self.started_context = True
@@ -132,15 +132,15 @@
             self.cur_file_name = filename
             disp = self.should_trace_cache.get(filename)
             if disp is None:
-                disp = self.should_trace(filename, frame)
-                self.should_trace_cache[filename] = disp
+                disp = self.should_trace(filename, frame)   # pylint: disable=not-callable
+                self.should_trace_cache[filename] = disp    # pylint: disable=unsupported-assignment-operation
 
             self.cur_file_dict = None
             if disp.trace:
                 tracename = disp.source_filename
-                if tracename not in self.data:
-                    self.data[tracename] = {}
-                self.cur_file_dict = self.data[tracename]
+                if tracename not in self.data:              # pylint: disable=unsupported-membership-test
+                    self.data[tracename] = {}               # pylint: disable=unsupported-assignment-operation
+                self.cur_file_dict = self.data[tracename]   # pylint: disable=unsubscriptable-object
             # The call event is really a "start frame" event, and happens for
             # function calls and re-entering generators.  The f_lasti field is
             # -1 for calls, and a real offset for generators.  Use <0 as the
@@ -227,7 +227,7 @@
             # has changed to None.
             dont_warn = (env.PYPY and env.PYPYVERSION >= (5, 4) and self.in_atexit and tf is None)
             if (not dont_warn) and tf != self._trace:   # pylint: disable=comparison-with-callable
-                self.warn(
+                self.warn(                              # pylint: disable=not-callable
                     "Trace function changed, measurement is likely wrong: %r" % (tf,),
                     slug="trace-changed",
                 )
--- a/eric6/DebugClients/Python/coverage/sqldata.py	Sun Jan 17 13:53:08 2021 +0100
+++ b/eric6/DebugClients/Python/coverage/sqldata.py	Mon Feb 01 10:38:16 2021 +0100
@@ -167,7 +167,8 @@
     To record data for contexts, use :meth:`set_context` to set a context to
     be used for subsequent :meth:`add_lines` and :meth:`add_arcs` calls.
 
-    To add a source file without any measured data, use :meth:`touch_file`.
+    To add a source file without any measured data, use :meth:`touch_file`,
+    or :meth:`touch_files` for a list of such files.
 
     Write the data to its file with :meth:`write`.
 
@@ -536,16 +537,26 @@
         `plugin_name` is the name of the plugin responsible for this file. It is used
         to associate the right filereporter, etc.
         """
+        self.touch_files([filename], plugin_name)
+
+    def touch_files(self, filenames, plugin_name=""):
+        """Ensure that `filenames` appear in the data, empty if needed.
+
+        `plugin_name` is the name of the plugin responsible for these files. It is used
+        to associate the right filereporter, etc.
+        """
         if self._debug.should('dataop'):
-            self._debug.write("Touching %r" % (filename,))
+            self._debug.write("Touching %r" % (filenames,))
         self._start_using()
-        if not self._has_arcs and not self._has_lines:
-            raise CoverageException("Can't touch files in an empty CoverageData")
+        with self._connect(): # Use this to get one transaction.
+            if not self._has_arcs and not self._has_lines:
+                raise CoverageException("Can't touch files in an empty CoverageData")
 
-        self._file_id(filename, add=True)
-        if plugin_name:
-            # Set the tracer for this file
-            self.add_file_tracers({filename: plugin_name})
+            for filename in filenames:
+                self._file_id(filename, add=True)
+                if plugin_name:
+                    # Set the tracer for this file
+                    self.add_file_tracers({filename: plugin_name})
 
     def update(self, other_data, aliases=None):
         """Update this data with data from several other :class:`CoverageData` instances.
@@ -1045,7 +1056,13 @@
             tail = " with {!r}".format(parameters) if parameters else ""
             self.debug.write("Executing {!r}{}".format(sql, tail))
         try:
-            return self.con.execute(sql, parameters)
+            try:
+                return self.con.execute(sql, parameters)
+            except Exception:
+                # In some cases, an error might happen that isn't really an
+                # error.  Try again immediately.
+                # https://github.com/nedbat/coveragepy/issues/1010
+                return self.con.execute(sql, parameters)
         except sqlite3.Error as exc:
             msg = str(exc)
             try:
--- a/eric6/DebugClients/Python/coverage/version.py	Sun Jan 17 13:53:08 2021 +0100
+++ b/eric6/DebugClients/Python/coverage/version.py	Mon Feb 01 10:38:16 2021 +0100
@@ -5,7 +5,7 @@
 # This file is exec'ed in setup.py, don't import anything!
 
 # Same semantics as sys.version_info.
-version_info = (5, 3, 0, "final", 0)
+version_info = (5, 3, 1, "final", 0)
 
 
 def _make_version(major, minor, micro, releaselevel, serial):
--- a/eric6/DebugClients/Python/eric6dbgstub.py	Sun Jan 17 13:53:08 2021 +0100
+++ b/eric6/DebugClients/Python/eric6dbgstub.py	Mon Feb 01 10:38:16 2021 +0100
@@ -73,12 +73,12 @@
     """
     Module function used to start the remote debugger.
     
-    @keyparam enableTrace flag to enable the tracing function (boolean)
-    @keyparam exceptions flag to enable exception reporting of the IDE
+    @param enableTrace flag to enable the tracing function (boolean)
+    @param exceptions flag to enable exception reporting of the IDE
         (boolean)
-    @keyparam tracePython flag to enable tracing into the Python library
+    @param tracePython flag to enable tracing into the Python library
         (boolean)
-    @keyparam redirect flag indicating redirection of stdin, stdout and
+    @param redirect flag indicating redirection of stdin, stdout and
         stderr (boolean)
     """
     global debugger
--- a/eric6/Debugger/BreakPointModel.py	Sun Jan 17 13:53:08 2021 +0100
+++ b/eric6/Debugger/BreakPointModel.py	Mon Feb 01 10:38:16 2021 +0100
@@ -23,7 +23,8 @@
         """
         Constructor
         
-        @param parent reference to the parent widget (QObject)
+        @param parent reference to the parent widget
+        @type QObject
         """
         super(BreakPointModel, self).__init__(parent)
         
@@ -49,8 +50,10 @@
         """
         Public method to get the current column count.
         
-        @param parent reference to parent index (QModelIndex) (Unused)
-        @return column count (integer)
+        @param parent reference to parent index (Unused)
+        @type QModelIndex
+        @return column count
+        @rtype int
         """
         return len(self.header)
     
@@ -58,8 +61,10 @@
         """
         Public method to get the current row count.
         
-        @param parent reference to parent index (QModelIndex)
-        @return row count (integer)
+        @param parent reference to parent index
+        @type QModelIndex
+        @return row count
+        @rtype int
         """
         # we do not have a tree, parent should always be invalid
         if parent is None or not parent.isValid():
@@ -71,9 +76,12 @@
         """
         Public method to get the requested data.
         
-        @param index index of the requested data (QModelIndex)
-        @param role role of the requested data (Qt.ItemDataRole)
+        @param index index of the requested data
+        @type QModelIndex
+        @param role role of the requested data
+        @type Qt.ItemDataRole
         @return the requested data
+        @rtype any
         """
         if not index.isValid():
             return None
@@ -100,10 +108,14 @@
         """
         Public method to change data in the model.
         
-        @param index index of the changed data (QModelIndex)
+        @param index index of the changed data
+        @type QModelIndex
         @param value value of the changed data
-        @param role role of the changed data (Qt.ItemDataRole)
-        @return flag indicating success (boolean)
+        @type  any
+        @param role role of the changed data
+        @type Qt.ItemDataRole
+        @return flag indicating success
+        @rtype bool
         """
         if (not index.isValid() or
             index.column() >= len(self.header) or
@@ -119,8 +131,10 @@
         """
         Public method to get item flags.
         
-        @param index index of the requested flags (QModelIndex)
-        @return item flags for the given index (Qt.ItemFlags)
+        @param index index of the requested flags
+        @type QModelIndex
+        @return item flags for the given index
+        @rtype Qt.ItemFlags
         """
         if not index.isValid():
             return Qt.ItemIsEnabled
@@ -131,10 +145,14 @@
         """
         Public method to get header data.
         
-        @param section section number of the requested header data (integer)
-        @param orientation orientation of the header (Qt.Orientation)
-        @param role role of the requested data (Qt.ItemDataRole)
+        @param section section number of the requested header data
+        @type int
+        @param orientation orientation of the header
+        @type Qt.Orientation
+        @param role role of the requested data
+        @type Qt.ItemDataRole
         @return header data
+        @rtype str
         """
         if orientation == Qt.Horizontal and role == Qt.DisplayRole:
             if section >= len(self.header):
@@ -148,10 +166,14 @@
         """
         Public method to create an index.
         
-        @param row row number for the index (integer)
-        @param column column number for the index (integer)
-        @param parent index of the parent item (QModelIndex)
-        @return requested index (QModelIndex)
+        @param row row number for the index
+        @type int
+        @param column column number for the index
+        @type int
+        @param parent index of the parent item
+        @type QModelIndex
+        @return requested index
+        @rtype QModelIndex
         """
         if ((parent and parent.isValid()) or
             row < 0 or row >= len(self.breakpoints) or
@@ -164,8 +186,10 @@
         """
         Public method to get the parent index.
         
-        @param index index of item to get parent (QModelIndex)
-        @return index of parent (QModelIndex)
+        @param index index of item to get parent
+        @type QModelIndex
+        @return index of parent
+        @rtype QModelIndex
         """
         return QModelIndex()
     
@@ -173,8 +197,10 @@
         """
         Public method to check for the presence of child items.
         
-        @param parent index of parent item (QModelIndex)
-        @return flag indicating the presence of child items (boolean)
+        @param parent index of parent item
+        @type QModelIndex
+        @return flag indicating the presence of child items
+        @rtype bool
         """
         if parent is None or not parent.isValid():
             return len(self.breakpoints) > 0
@@ -187,11 +213,13 @@
         """
         Public method to add a new breakpoint to the list.
         
-        @param fn filename of the breakpoint (string)
-        @param line line number of the breakpoint (integer)
+        @param fn filename of the breakpoint
+        @type str
+        @param line line number of the breakpoint
+        @type int
         @param properties properties of the breakpoint
-            (tuple of condition (string), temporary flag (bool),
-             enabled flag (bool), ignore count (integer))
+            (tuple of condition, temporary flag, enabled flag, ignore count)
+        @type tuple of (str, bool, bool, int)
         """
         bp = [fn, line] + list(properties)
         cnt = len(self.breakpoints)
@@ -203,12 +231,15 @@
         """
         Public method to set the values of a breakpoint given by index.
         
-        @param index index of the breakpoint (QModelIndex)
-        @param fn filename of the breakpoint (string)
-        @param line line number of the breakpoint (integer)
+        @param index index of the breakpoint
+        @type QModelIndex
+        @param fn filename of the breakpoint
+        @type str
+        @param line line number of the breakpoint
+        @type int
         @param properties properties of the breakpoint
-            (tuple of condition (string), temporary flag (bool),
-             enabled flag (bool), ignore count (integer))
+            (tuple of condition, temporary flag, enabled flag, ignore count)
+        @type tuple of (str, bool, bool, int)
         """
         if index.isValid():
             row = index.row()
@@ -223,8 +254,10 @@
         """
         Public method to set the enabled state of a breakpoint given by index.
         
-        @param index index of the breakpoint (QModelIndex)
-        @param enabled flag giving the enabled state (boolean)
+        @param index index of the breakpoint
+        @type QModelIndex
+        @param enabled flag giving the enabled state
+        @type bool
         """
         if index.isValid():
             row = index.row()
@@ -238,7 +271,8 @@
         """
         Public method to set the values of a breakpoint given by index.
         
-        @param index index of the breakpoint (QModelIndex)
+        @param index index of the breakpoint
+        @type QModelIndex
         """
         if index.isValid():
             row = index.row()
@@ -250,7 +284,8 @@
         """
         Public method to delete a list of breakpoints given by their indexes.
         
-        @param idxList list of breakpoint indexes (list of QModelIndex)
+        @param idxList list of breakpoint indexes
+        @type list of QModelIndex
         """
         rows = []
         for index in idxList:
@@ -276,9 +311,11 @@
         """
         Public method to get the values of a breakpoint given by index.
         
-        @param index index of the breakpoint (QModelIndex)
-        @return breakpoint (list of seven values (filename, line number,
+        @param index index of the breakpoint
+        @type QModelIndex
+        @return breakpoint (list of six values (filename, line number,
             condition, temporary flag, enabled flag, ignore count))
+        @rtype list of (str, int, str, bool, bool, int)
         """
         if index.isValid():
             return self.breakpoints[index.row()][:]  # return a copy
@@ -290,9 +327,12 @@
         Public method to get the index of a breakpoint given by filename and
         line number.
         
-        @param fn filename of the breakpoint (string)
-        @param lineno line number of the breakpoint (integer)
-        @return index (QModelIndex)
+        @param fn filename of the breakpoint
+        @type str
+        @param lineno line number of the breakpoint
+        @type int
+        @return index
+        @rtype QModelIndex
         """
         for row in range(len(self.breakpoints)):
             bp = self.breakpoints[row]
@@ -305,8 +345,10 @@
         """
         Public method to test, if a breakpoint given by its index is temporary.
         
-        @param index index of the breakpoint to test (QModelIndex)
-        @return flag indicating a temporary breakpoint (boolean)
+        @param index index of the breakpoint to test
+        @type QModelIndex
+        @return flag indicating a temporary breakpoint
+        @rtype bool
         """
         if index.isValid():
             return self.breakpoints[index.row()][3]
--- a/eric6/Debugger/BreakPointViewer.py	Sun Jan 17 13:53:08 2021 +0100
+++ b/eric6/Debugger/BreakPointViewer.py	Mon Feb 01 10:38:16 2021 +0100
@@ -67,7 +67,8 @@
         """
         Public slot to set the breakpoint model.
         
-        @param model reference to the breakpoint model (BreakPointModel)
+        @param model reference to the breakpoint model
+        @type BreakPointModel
         """
         self.__model = model
         
@@ -111,8 +112,10 @@
         """
         Private slot to convert an index to a source index.
         
-        @param index index to be converted (QModelIndex)
-        @return mapped index (QModelIndex)
+        @param index index to be converted
+        @type QModelIndex
+        @return mapped index
+        @rtype QModelIndex
         """
         return self.sortingModel.mapToSource(index)
         
@@ -120,8 +123,10 @@
         """
         Private slot to convert a source index to an index.
         
-        @param sindex source index to be converted (QModelIndex)
-        @return mapped index (QModelIndex)
+        @param sindex source index to be converted
+        @type QModelIndex
+        @return mapped index
+        @rtype QModelIndex
         """
         return self.sortingModel.mapFromSource(sindex)
         
@@ -129,8 +134,10 @@
         """
         Private slot to select a complete row.
         
-        @param index index determining the row to be selected (QModelIndex)
-        @param selected flag indicating the action (bool)
+        @param index index determining the row to be selected
+        @type QModelIndex
+        @param selected flag indicating the action
+        @type bool
         """
         if not index.isValid():
             return
@@ -205,7 +212,8 @@
         """
         Private slot to show the context menu.
         
-        @param coord the position of the mouse pointer (QPoint)
+        @param coord the position of the mouse pointer
+        @type QPoint
         """
         cnt = self.__getSelectedItemsCount()
         if cnt <= 1:
@@ -259,7 +267,8 @@
         """
         Private slot to handle the double clicked signal.
         
-        @param index index of the entry that was double clicked (QModelIndex)
+        @param index index of the entry that was double clicked
+        @type QModelIndex
         """
         if index.isValid():
             self.__editBreakpoint(index)
@@ -276,7 +285,8 @@
         """
         Private slot to edit a breakpoint.
         
-        @param index index of breakpoint to be edited (QModelIndex)
+        @param index index of breakpoint to be edited
+        @type QModelIndex
         """
         sindex = self.__toSourceIndex(index)
         if sindex.isValid():
@@ -308,8 +318,10 @@
         """
         Private method to set the enabled status of a breakpoint.
         
-        @param index index of breakpoint to be enabled/disabled (QModelIndex)
-        @param enabled flag indicating the enabled status to be set (boolean)
+        @param index index of breakpoint to be enabled/disabled
+        @type QModelIndex
+        @param enabled flag indicating the enabled status to be set
+        @type bool
         """
         sindex = self.__toSourceIndex(index)
         if sindex.isValid():
@@ -421,8 +433,10 @@
         """
         Public slot to handle the clientLine signal.
         
-        @param fn filename of the breakpoint (string)
-        @param lineno line number of the breakpoint (integer)
+        @param fn filename of the breakpoint
+        @type str
+        @param lineno line number of the breakpoint
+        @type int
         """
         sindex = self.__model.getBreakPointIndex(fn, lineno)
         if sindex.isValid():
@@ -456,7 +470,8 @@
         """
         Private method to get the count of items selected.
         
-        @return count of items selected (integer)
+        @return count of items selected
+        @rtype int
         """
         count = len(self.selectedIndexes()) // (self.__model.columnCount() - 1)
         # column count is 1 greater than selectable
--- a/eric6/Debugger/CallStackViewer.py	Sun Jan 17 13:53:08 2021 +0100
+++ b/eric6/Debugger/CallStackViewer.py	Mon Feb 01 10:38:16 2021 +0100
@@ -8,7 +8,9 @@
 """
 
 from PyQt5.QtCore import pyqtSignal, Qt, QFileInfo
-from PyQt5.QtWidgets import QTreeWidget, QTreeWidgetItem, QMenu
+from PyQt5.QtWidgets import (
+    QTreeWidget, QTreeWidgetItem, QMenu, QWidget, QVBoxLayout, QLabel
+)
 
 from E5Gui.E5Application import e5App
 from E5Gui import E5FileDialog, E5MessageBox
@@ -16,7 +18,7 @@
 import Utilities
 
 
-class CallStackViewer(QTreeWidget):
+class CallStackViewer(QWidget):
     """
     Class implementing the Call Stack viewer widget.
     
@@ -33,25 +35,35 @@
         """
         Constructor
         
-        @param debugServer reference to the debug server object (DebugServer)
-        @param parent reference to the parent widget (QWidget)
+        @param debugServer reference to the debug server object
+        @type DebugServer
+        @param parent reference to the parent widget
+        @type QWidget
         """
         super(CallStackViewer, self).__init__(parent)
         
-        self.setHeaderHidden(True)
-        self.setAlternatingRowColors(True)
-        self.setItemsExpandable(False)
-        self.setRootIsDecorated(False)
+        self.__layout = QVBoxLayout(self)
+        self.setLayout(self.__layout)
+        self.__debuggerLabel = QLabel(self)
+        self.__layout.addWidget(self.__debuggerLabel)
+        self.__callStackList = QTreeWidget(self)
+        self.__layout.addWidget(self.__callStackList)
+        
+        self.__callStackList.setHeaderHidden(True)
+        self.__callStackList.setAlternatingRowColors(True)
+        self.__callStackList.setItemsExpandable(False)
+        self.__callStackList.setRootIsDecorated(False)
         self.setWindowTitle(self.tr("Call Stack"))
         
-        self.__menu = QMenu(self)
+        self.__menu = QMenu(self.__callStackList)
         self.__sourceAct = self.__menu.addAction(
             self.tr("Show source"), self.__openSource)
-        self.__menu.addAction(self.tr("Clear"), self.clear)
+        self.__menu.addAction(self.tr("Clear"), self.__callStackList.clear)
         self.__menu.addSeparator()
         self.__menu.addAction(self.tr("Save"), self.__saveStackTrace)
-        self.setContextMenuPolicy(Qt.CustomContextMenu)
-        self.customContextMenuRequested.connect(self.__showContextMenu)
+        self.__callStackList.setContextMenuPolicy(Qt.CustomContextMenu)
+        self.__callStackList.customContextMenuRequested.connect(
+            self.__showContextMenu)
         
         self.__dbs = debugServer
         
@@ -64,13 +76,15 @@
         self.__project = None
         
         self.__dbs.clientStack.connect(self.__showCallStack)
-        self.itemDoubleClicked.connect(self.__itemDoubleClicked)
+        self.__callStackList.itemDoubleClicked.connect(
+            self.__itemDoubleClicked)
     
     def setDebugger(self, debugUI):
         """
         Public method to set a reference to the Debug UI.
         
-        @param debugUI reference to the DebugUI object (DebugUI)
+        @param debugUI reference to the DebugUI object
+        @type DebugUI
         """
         debugUI.clientStack.connect(self.__showCallStack)
     
@@ -81,7 +95,8 @@
         In project mode the call trace info is shown with project relative
         path names.
         
-        @param enabled flag indicating to enable the project mode (boolean)
+        @param enabled flag indicating to enable the project mode
+        @type bool
         """
         self.__projectMode = enabled
         if enabled and self.__project is None:
@@ -91,21 +106,34 @@
         """
         Private slot to show the context menu.
         
-        @param coord the position of the mouse pointer (QPoint)
+        @param coord the position of the mouse pointer
+        @type QPoint
         """
-        if self.topLevelItemCount() > 0:
-            itm = self.currentItem()
+        if self.__callStackList.topLevelItemCount() > 0:
+            itm = self.__callStackList.currentItem()
             self.__sourceAct.setEnabled(itm is not None)
-            self.__menu.popup(self.mapToGlobal(coord))
+            self.__menu.popup(self.__callStackList.mapToGlobal(coord))
     
-    def __showCallStack(self, stack):
+    def clear(self):
+        """
+        Public method to clear the stack viewer data.
+        """
+        self.__debuggerLabel.clear()
+        self.__callStackList.clear()
+    
+    def __showCallStack(self, stack, debuggerId):
         """
         Private slot to show the call stack of the program being debugged.
         
         @param stack list of tuples with call stack data (file name,
             line number, function name, formatted argument/values list)
+        @type list of tuples of (str, str, str, str)
+        @param debuggerId ID of the debugger backend
+        @type str
         """
-        self.clear()
+        self.__debuggerLabel.setText(debuggerId)
+        
+        self.__callStackList.clear()
         for fname, fline, ffunc, fargs in stack:
             if self.__projectMode:
                 dfname = self.__project.getRelativePath(fname)
@@ -114,22 +142,26 @@
             if ffunc and not ffunc.startswith("<"):
                 # use normal format
                 itm = QTreeWidgetItem(
-                    self,
-                    [self.__entryFormat.format(dfname, fline, ffunc, fargs)])
+                    self.__callStackList,
+                    [self.__entryFormat.format(dfname, fline, ffunc, fargs)]
+                )
             else:
                 # use short format
                 itm = QTreeWidgetItem(
-                    self, [self.__entryFormatShort.format(dfname, fline)])
+                    self.__callStackList,
+                    [self.__entryFormatShort.format(dfname, fline)]
+                )
             itm.setData(0, self.FilenameRole, fname)
             itm.setData(0, self.LinenoRole, fline)
         
-        self.resizeColumnToContents(0)
+        self.__callStackList.resizeColumnToContents(0)
     
     def __itemDoubleClicked(self, itm):
         """
         Private slot to handle a double click of a stack entry.
         
-        @param itm reference to the double clicked item (QTreeWidgetItem)
+        @param itm reference to the double clicked item
+        @type QTreeWidgetItem
         """
         fname = itm.data(0, self.FilenameRole)
         fline = itm.data(0, self.LinenoRole)
@@ -137,14 +169,14 @@
             fname = self.__project.getAbsolutePath(fname)
         self.sourceFile.emit(fname, fline)
         
-        index = self.indexOfTopLevelItem(itm)
+        index = self.__callStackList.indexOfTopLevelItem(itm)
         self.frameSelected.emit(index)
     
     def __openSource(self):
         """
         Private slot to show the source for the selected stack entry.
         """
-        itm = self.currentItem()
+        itm = self.__callStackList.currentItem()
         if itm:
             self.__itemDoubleClicked(itm)
     
@@ -152,7 +184,7 @@
         """
         Private slot to save the stack trace info to a file.
         """
-        if self.topLevelItemCount() > 0:
+        if self.__callStackList.topLevelItemCount() > 0:
             fname, selectedFilter = E5FileDialog.getSaveFileNameAndFilter(
                 self,
                 self.tr("Save Call Stack Info"),
@@ -178,12 +210,16 @@
                     fname = Utilities.toNativeSeparators(fname)
                 
                 try:
+                    title = self.tr("Call Stack of '{0}'").format(
+                        self.__debuggerLabel.text())
                     with open(fname, "w", encoding="utf-8") as f:
-                        itm = self.topLevelItem(0)
+                        f.write("{0}\n".format(title))
+                        f.write("{0}\n\n".format(len(title) * "="))
+                        itm = self.__callStackList.topLevelItem(0)
                         while itm is not None:
                             f.write("{0}\n".format(itm.text(0)))
-                            f.write(78 * "=" + "\n")
-                            itm = self.itemBelow(itm)
+                            f.write("{0}\n".format(78 * "="))
+                            itm = self.__callStackList.itemBelow(itm)
                 except OSError as err:
                     E5MessageBox.critical(
                         self,
--- a/eric6/Debugger/CallTraceViewer.py	Sun Jan 17 13:53:08 2021 +0100
+++ b/eric6/Debugger/CallTraceViewer.py	Mon Feb 01 10:38:16 2021 +0100
@@ -31,17 +31,22 @@
     """
     sourceFile = pyqtSignal(str, int)
     
-    def __init__(self, debugServer, parent=None):
+    def __init__(self, debugServer, debugViewer, parent=None):
         """
         Constructor
         
-        @param debugServer reference to the debug server object (DebugServer)
-        @param parent reference to the parent widget (QWidget)
+        @param debugServer reference to the debug server object
+        @type DebugServer
+        @param debugViewer reference to the debug viewer object
+        @type DebugViewer
+        @param parent reference to the parent widget
+        @type QWidget
         """
         super(CallTraceViewer, self).__init__(parent)
         self.setupUi(self)
         
         self.__dbs = debugServer
+        self.__debugViewer = debugViewer
         
         self.startTraceButton.setIcon(
             UI.PixmapCache.getIcon("callTraceStart"))
@@ -63,6 +68,7 @@
         
         self.__projectMode = False
         self.__project = None
+        self.__tracedDebuggerId = ""
         
         stopOnExit = Preferences.toBool(
             Preferences.Prefs.settings.value("CallTrace/StopOnExit", True))
@@ -84,9 +90,14 @@
         """
         Private slot to set the call trace enabled status.
         
-        @param enabled flag indicating the new state (boolean)
+        @param enabled flag indicating the new state
+        @type bool
         """
-        self.__dbs.setCallTraceEnabled(enabled)
+        if enabled:
+            self.__tracedDebuggerId = (
+                self.__debugViewer.getSelectedDebuggerId()
+            )
+        self.__dbs.setCallTraceEnabled(self.__tracedDebuggerId, enabled)
         self.stopTraceButton.setEnabled(enabled)
         self.startTraceButton.setEnabled(not enabled)
         self.__callTraceEnabled = enabled
@@ -166,7 +177,11 @@
                     fname = Utilities.toNativeSeparators(fname)
                 
                 try:
+                    title = self.tr("Call Trace Info of '{0}'").format(
+                        self.__tracedDebuggerId)
                     with open(fname, "w", encoding="utf-8") as f:
+                        f.write("{0}\n".format(title))
+                        f.write("{0}\n\n".format(len(title) * "="))
                         itm = self.callTrace.topLevelItem(0)
                         while itm is not None:
                             isCall = itm.data(0, Qt.UserRole)
@@ -192,8 +207,10 @@
         """
         Private slot to open the double clicked file in an editor.
         
-        @param item reference to the double clicked item (QTreeWidgetItem)
-        @param column column that was double clicked (integer)
+        @param item reference to the double clicked item
+        @type QTreeWidgetItem
+        @param column column that was double clicked
+        @type int
         """
         if item is not None and column > 0:
             columnStr = item.text(column)
@@ -223,63 +240,88 @@
         In project mode the call trace info is shown with project relative
         path names.
         
-        @param enabled flag indicating to enable the project mode (boolean)
+        @param enabled flag indicating to enable the project mode
+        @type bool
         """
         self.__projectMode = enabled
         if enabled and self.__project is None:
             self.__project = e5App().getObject("Project")
     
     def __addCallTraceInfo(self, isCall, fromFile, fromLine, fromFunction,
-                           toFile, toLine, toFunction):
+                           toFile, toLine, toFunction, debuggerId):
         """
         Private method to add an entry to the call trace viewer.
         
-        @param isCall flag indicating a 'call' (boolean)
-        @param fromFile name of the originating file (string)
-        @param fromLine line number in the originating file (string)
-        @param fromFunction name of the originating function (string)
-        @param toFile name of the target file (string)
-        @param toLine line number in the target file (string)
-        @param toFunction name of the target function (string)
+        @param isCall flag indicating a 'call'
+        @type bool
+        @param fromFile name of the originating file
+        @type str
+        @param fromLine line number in the originating file
+        @type str
+        @param fromFunction name of the originating function
+        @type str
+        @param toFile name of the target file
+        @type str
+        @param toLine line number in the target file
+        @type str
+        @param toFunction name of the target function
+        @type str
+        @param debuggerId ID of the debugger backend
+        @type str
         """
-        if isCall:
-            icon = UI.PixmapCache.getIcon("forward")
-        else:
-            icon = UI.PixmapCache.getIcon("back")
-        parentItem = (
-            self.__callStack[-1] if self.__callStack else self.callTrace)
-        
-        if self.__projectMode:
-            fromFile = self.__project.getRelativePath(fromFile)
-            toFile = self.__project.getRelativePath(toFile)
-        
-        itm = QTreeWidgetItem(
-            parentItem,
-            ["",
-             self.__entryFormat.format(fromFile, fromLine, fromFunction),
-             self.__entryFormat.format(toFile, toLine, toFunction)])
-        itm.setIcon(0, icon)
-        itm.setData(0, Qt.UserRole, isCall)
-        itm.setExpanded(True)
-        
-        if isCall:
-            self.__callStack.append(itm)
-        else:
-            if self.__callStack:
-                self.__callStack.pop(-1)
+        if debuggerId == self.__tracedDebuggerId:
+            if isCall:
+                icon = UI.PixmapCache.getIcon("forward")
+            else:
+                icon = UI.PixmapCache.getIcon("back")
+            parentItem = (
+                self.__callStack[-1] if self.__callStack else self.callTrace)
+            
+            if self.__projectMode:
+                fromFile = self.__project.getRelativePath(fromFile)
+                toFile = self.__project.getRelativePath(toFile)
+            
+            itm = QTreeWidgetItem(
+                parentItem,
+                ["",
+                 self.__entryFormat.format(fromFile, fromLine, fromFunction),
+                 self.__entryFormat.format(toFile, toLine, toFunction)])
+            itm.setIcon(0, icon)
+            itm.setData(0, Qt.UserRole, isCall)
+            itm.setExpanded(True)
+            
+            if isCall:
+                self.__callStack.append(itm)
+            else:
+                if self.__callStack:
+                    self.__callStack.pop(-1)
     
     def isCallTraceEnabled(self):
         """
         Public method to get the state of the call trace function.
         
-        @return flag indicating the state of the call trace function (boolean)
+        @return flag indicating the state of the call trace function
+        @rtype bool
         """
         return self.__callTraceEnabled
     
-    @pyqtSlot()
-    def __clientExit(self):
+    @pyqtSlot(str, int, str, bool, str)
+    def __clientExit(self, program, status, message, quiet, debuggerId):
         """
-        Private slot handling a client exiting.
+        Private slot to handle a debug client terminating.
+        
+        @param program name of the exited program
+        @type str
+        @param status exit code of the debugged program
+        @type int
+        @param message exit message of the debugged program
+        @type str
+        @param quiet flag indicating to suppress exit info display
+        @type bool
+        @param debuggerId ID of the debugger backend
+        @type str
         """
-        if self.stopCheckBox.isChecked():
-            self.__setCallTraceEnabled(False)
+        if debuggerId == self.__tracedDebuggerId:
+            if self.stopCheckBox.isChecked():
+                self.__setCallTraceEnabled(False)
+            self.__tracedDebuggerId = ""
--- a/eric6/Debugger/Config.py	Sun Jan 17 13:53:08 2021 +0100
+++ b/eric6/Debugger/Config.py	Mon Feb 01 10:38:16 2021 +0100
@@ -9,7 +9,7 @@
 
 from PyQt5.QtCore import QT_TRANSLATE_NOOP
 
-# Variables type definition
+# Variable type definitions
 ConfigVarTypeDispStrings = {
     '__': QT_TRANSLATE_NOOP('Variable Types', 'Hidden Attributes'),
     'NoneType': QT_TRANSLATE_NOOP('Variable Types', 'None'),
@@ -20,7 +20,6 @@
     'float': QT_TRANSLATE_NOOP('Variable Types', 'Float'),
     'complex': QT_TRANSLATE_NOOP('Variable Types', 'Complex'),
     'str': QT_TRANSLATE_NOOP('Variable Types', 'String'),
-    'unicode': QT_TRANSLATE_NOOP('Variable Types', 'Unicode String'),
     'tuple': QT_TRANSLATE_NOOP('Variable Types', 'Tuple'),
     'list': QT_TRANSLATE_NOOP('Variable Types', 'List/Array'),
     'dict': QT_TRANSLATE_NOOP('Variable Types', 'Dictionary/Hash/Map'),
@@ -45,42 +44,6 @@
     'traceback': QT_TRANSLATE_NOOP('Variable Types', 'Traceback'),
     'frame': QT_TRANSLATE_NOOP('Variable Types', 'Frame'),
     'bytes': QT_TRANSLATE_NOOP('Variable Types', 'Bytes'),
+    "special_attributes": QT_TRANSLATE_NOOP(
+        'Variable Types', "Special Attributes"),
 }
-
-
-ConfigVarTypeFilters = {
-    '__': 0,
-    'NoneType': 1,
-    'type': 2,
-    'bool': 3,
-    'int': 4,
-    'long': 5,
-    'float': 6,
-    'complex': 7,
-    'str': 8,
-    'unicode': 9,  # Not used anymore but keep to avoid reassignment
-    'tuple': 10,
-    'list': 11,
-    'dict': 12,
-    'dict-proxy': 13,
-    'set': 14,
-    'file': 15,
-    'xrange': 16,
-    'slice': 17,
-    'buffer': 18,
-    'class': 19,
-    'instance': 20,
-    'method': 21,
-    'property': 22,
-    'generator': 23,
-    'function': 24,
-    'builtin_function_or_method': 25,
-    'code': 26,
-    'module': 27,
-    'ellipsis': 28,
-    'traceback': 29,
-    'frame': 30,
-    'other': 31,  # Not used anymore but keep to avoid reassignment
-    'frozenset': 32,
-    'bytes': 33,
-}
--- a/eric6/Debugger/DebugServer.py	Sun Jan 17 13:53:08 2021 +0100
+++ b/eric6/Debugger/DebugServer.py	Mon Feb 01 10:38:16 2021 +0100
@@ -9,7 +9,7 @@
 
 import os
 
-from PyQt5.QtCore import pyqtSignal, QModelIndex
+from PyQt5.QtCore import pyqtSignal, pyqtSlot, QModelIndex
 from PyQt5.QtNetwork import (
     QTcpServer, QHostAddress, QHostInfo, QNetworkInterface
 )
@@ -40,49 +40,57 @@
     @signal clientProcessStderr(str) emitted after the client has sent some
         output via stderr
     @signal clientOutput(str) emitted after the client has sent some output
-    @signal clientRawInputSent() emitted after the data was sent to the
-        debug client
-    @signal clientLine(filename, lineno, forStack) emitted after the
+    @signal clientRawInputSent(debuggerId) emitted after the data was sent
+        to the indicated debug client
+    @signal clientLine(filename, lineno, debuggerId, threadName, forStack)
+        emitted after the debug client has executed a line of code
+    @signal clientStack(stack, debuggerId, threadName) emitted after the
         debug client has executed a line of code
-    @signal clientStack(stack) emitted after the debug client has executed a
-        line of code
-    @signal clientThreadList(currentId, threadList) emitted after a thread list
-        has been received
-    @signal clientThreadSet() emitted after the client has acknowledged the
-        change of the current thread
-    @signal clientVariables(scope, variables) emitted after a variables dump
-        has been received
-    @signal clientVariable(scope, variables) emitted after a dump for one class
-        variable has been received
-    @signal clientStatement(bool) emitted after an interactive command has
-        been executed. The parameter is 0 to indicate that the command is
-        complete and 1 if it needs more input.
-    @signal clientDisassembly(disassembly) emitted after the client has sent
-        a disassembly of the code raising an exception
-    @signal clientException(exception) emitted after an exception occured on
-        the client side
-    @signal clientSyntaxError(exception) emitted after a syntax error has been
-        detected on the client side
-    @signal clientSignal(signal) emitted after a signal has been generated on
-        the client side
-    @signal clientExit(int, str, bool) emitted after the client has exited
-        giving the exit status, an exit message and an indication to be quiet
-    @signal clientClearBreak(filename, lineno) emitted after the debug client
-        has decided to clear a temporary breakpoint
-    @signal clientBreakConditionError(fn, lineno) emitted after the client has
-        signaled a syntax error in a breakpoint condition
-    @signal clientClearWatch(condition) emitted after the debug client
-            has decided to clear a temporary watch expression
-    @signal clientWatchConditionError(condition) emitted after the client has
-        signaled a syntax error in a watch expression
-    @signal clientRawInput(prompt, echo) emitted after a raw input request was
-        received
-    @signal clientBanner(version, platform, dbgclient, venvname) emitted after
+    @signal clientThreadList(currentId, threadList, debuggerId) emitted after
+        a thread list has been received
+    @signal clientThreadSet(debuggerId) emitted after the client has
+        acknowledged the change of the current thread
+    @signal clientVariables(scope, variables, debuggerId) emitted after a
+        variables dump has been received
+    @signal clientVariable(scope, variables, debuggerId) emitted after a dump
+        for one class variable has been received
+    @signal clientStatement(continue, debuggerId) emitted after an interactive
+        command has been executed. The parameter is False to indicate that the
+        command is complete and True if it needs more input.
+    @signal clientDisassembly(disassembly, debuggerId) emitted after the client
+        has sent a disassembly of the code raising an exception
+    @signal clientException(exceptionType, exceptionMessage, stackTrace,
+        debuggerId, threadName) emitted after an exception occured on the
+        client side
+    @signal clientSyntaxError(message, filename, linenumber, characternumber,
+        debuggerId, threadName) emitted after a syntax error has been detected
+        on the client side
+    @signal clientSignal(message, filename, linenumber, function name,
+        function arguments, debuggerId) emitted after a signal has been
+        generated on the client side
+    @signal clientDisconnected(str) emitted after a debug client has
+        disconnected (i.e. closed the network socket)
+    @signal clientExit(str, int, str, bool, str) emitted after the client has
+        exited giving the program name, the exit status, an exit message, an
+        indication to be quiet and the ID of the exited client
+    @signal lastClientExited() emitted to indicate that the last connected
+        debug client has terminated
+    @signal clientClearBreak(filename, lineno, debuggerId) emitted after the
+        debug client has decided to clear a temporary breakpoint
+    @signal clientBreakConditionError(fn, lineno, debuggerId) emitted after the
+        client has signaled a syntax error in a breakpoint condition
+    @signal clientClearWatch(condition, debuggerId) emitted after the debug
+        client has decided to clear a temporary watch expression
+    @signal clientWatchConditionError(condition, debuggerId) emitted after the
+        client has signaled a syntax error in a watch expression
+    @signal clientRawInput(prompt, echo, debuggerId) emitted after a raw input
+        request was received
+    @signal clientBanner(version, platform, venvname) emitted after
         the client banner data was received
     @signal clientCapabilities(capabilities, cltype, venvname) emitted after
         the clients capabilities were received
-    @signal clientCompletionList(completionList, text) emitted after the client
-        the commandline completion list and the reworked searchstring was
+    @signal clientCompletionList(completionList, text) emitted after the
+        commandline completion list and the reworked search string was
         received from the client
     @signal passiveDebugStarted(str, bool) emitted after the debug client has
         connected in passive debug mode
@@ -111,36 +119,41 @@
         reported an unexpected test success
     @signal callTraceInfo emitted after the client reported the call trace
         data (isCall, fromFile, fromLine, fromFunction, toFile, toLine,
-        toFunction)
+        toFunction, debuggerId)
     @signal appendStdout(msg) emitted when a passive debug connection is
         established or lost
+    @signal clientDebuggerId(debuggerId) emitted to indicate a newly connected
+        debugger backend
     """
-    clientClearBreak = pyqtSignal(str, int)
-    clientClearWatch = pyqtSignal(str)
+    clientClearBreak = pyqtSignal(str, int, str)
+    clientClearWatch = pyqtSignal(str, str)
     clientGone = pyqtSignal(bool)
     clientProcessStdout = pyqtSignal(str)
     clientProcessStderr = pyqtSignal(str)
-    clientRawInputSent = pyqtSignal()
+    clientRawInputSent = pyqtSignal(str)
     clientOutput = pyqtSignal(str)
-    clientLine = pyqtSignal(str, int, bool)
-    clientStack = pyqtSignal(list)
-    clientThreadList = pyqtSignal('PyQt_PyObject', list)
-    clientThreadSet = pyqtSignal()
-    clientVariables = pyqtSignal(int, list)
-    clientVariable = pyqtSignal(int, list)
-    clientStatement = pyqtSignal(bool)
-    clientDisassembly = pyqtSignal(dict)
-    clientException = pyqtSignal(str, str, list)
-    clientSyntaxError = pyqtSignal(str, str, int, int)
-    clientSignal = pyqtSignal(str, str, int, str, str)
-    clientExit = pyqtSignal(int, str, bool)
-    clientBreakConditionError = pyqtSignal(str, int)
-    clientWatchConditionError = pyqtSignal(str)
-    clientRawInput = pyqtSignal(str, bool)
-    clientBanner = pyqtSignal(str, str, str, str)
+    clientLine = pyqtSignal(str, int, str, str, bool)
+    clientStack = pyqtSignal(list, str, str)
+    clientThreadList = pyqtSignal('PyQt_PyObject', list, str)
+    clientThreadSet = pyqtSignal(str)
+    clientVariables = pyqtSignal(int, list, str)
+    clientVariable = pyqtSignal(int, list, str)
+    clientStatement = pyqtSignal(bool, str)
+    clientDisassembly = pyqtSignal(dict, str)
+    clientException = pyqtSignal(str, str, list, str, str)
+    clientSyntaxError = pyqtSignal(str, str, int, int, str, str)
+    clientSignal = pyqtSignal(str, str, int, str, str, str)
+    clientDisconnected = pyqtSignal(str)
+    clientExit = pyqtSignal(str, int, str, bool, str)
+    lastClientExited = pyqtSignal()
+    clientBreakConditionError = pyqtSignal(str, int, str)
+    clientWatchConditionError = pyqtSignal(str, str)
+    clientRawInput = pyqtSignal(str, bool, str)
+    clientBanner = pyqtSignal(str, str, str)
     clientCapabilities = pyqtSignal(int, str, str)
     clientCompletionList = pyqtSignal(list, str)
     clientInterpreterChanged = pyqtSignal(str)
+    clientDebuggerId = pyqtSignal(str)
     utDiscovered = pyqtSignal(list, str, str)
     utPrepared = pyqtSignal(int, str, str)
     utStartTest = pyqtSignal(str, str)
@@ -152,7 +165,7 @@
     utTestSucceededUnexpected = pyqtSignal(str, str)
     utFinished = pyqtSignal()
     passiveDebugStarted = pyqtSignal(str, bool)
-    callTraceInfo = pyqtSignal(bool, str, str, str, str, str, str)
+    callTraceInfo = pyqtSignal(bool, str, str, str, str, str, str, str)
     appendStdout = pyqtSignal(str)
     
     def __init__(self, originalPathString, preventPassiveDebugging=False):
@@ -187,6 +200,10 @@
         self.watchSpecialChanged = self.tr(
             "changed", "must be same as in EditWatchpointDialog")
         
+        # arrays to track already reported issues
+        self.__reportedBreakpointIssues = []
+        self.__reportedWatchpointIssues = []
+        
         self.networkInterface = Preferences.getDebugger("NetworkInterface")
         if self.networkInterface == "all":
             hostAddress = QHostAddress("0.0.0.0")  # QHostAddress.Any)  # secok
@@ -242,16 +259,19 @@
         
         self.__maxVariableSize = Preferences.getDebugger("MaxVariableSize")
         
+        self.__multiprocessNoDebugList = []
+        
         self.__registerDebuggerInterfaces()
-        
+    
     def getHostAddress(self, localhost):
         """
         Public method to get the IP address or hostname the debug server is
         listening.
         
         @param localhost flag indicating to return the address for localhost
-            (boolean)
-        @return IP address or hostname (string)
+        @type bool
+        @return IP address or hostname
+        @rtype str
         """
         if self.networkInterface == "all":
             if localhost:
@@ -266,14 +286,16 @@
         else:
             return "{0}@@i{1}".format(self.networkInterface,
                                       self.networkInterfaceIndex)
-        
+    
     def __getNetworkInterfaceAndIndex(self, address):
         """
         Private method to determine the network interface and the interface
         index.
         
-        @param address address to determine the info for (string)
-        @return tuple of network interface name (string) and index (integer)
+        @param address address to determine the info for
+        @type str
+        @return tuple of network interface name and index
+        @rtype tuple of (str, int)
         """
         if address not in ["all", "allv6"]:
             for networkInterface in QNetworkInterface.allInterfaces():
@@ -286,7 +308,7 @@
                                     networkInterface.index())
         
         return "", 0
-        
+    
     def preferencesChanged(self):
         """
         Public slot to handle the preferencesChanged signal.
@@ -302,7 +324,7 @@
                                            reregister=True)
         
         self.__maxVariableSize = Preferences.getDebugger("MaxVariableSize")
-        
+    
     def registerDebuggerInterface(self, interfaceName, getRegistryData,
                                   reregister=False):
         """
@@ -336,7 +358,7 @@
                 self.__debuggerInterfaceRegistry[clientLanguage] = [
                     clientCapabilities, clientExtensions, interfaceCreator,
                     interfaceName]
-        
+    
     def unregisterDebuggerInterface(self, interfaceName):
         """
         Public method to unregister a debugger interface.
@@ -353,7 +375,7 @@
             for clientLanguage in clientLanguages:
                 del self.__debuggerInterfaceRegistry[clientLanguage]
             del self.__debuggerInterfaces[interfaceName]
-        
+    
     def __findLanguageForExtension(self, ext):
         """
         Private method to get the language associated with a file extension.
@@ -368,7 +390,7 @@
                 return language
         
         return ""
-        
+    
     def __registerDebuggerInterfaces(self):
         """
         Private method to register the available internal debugger interfaces.
@@ -381,14 +403,16 @@
                 mod = getattr(mod, comp)
             
             self.registerDebuggerInterface(name, mod.getRegistryData)
-        
+    
     def getSupportedLanguages(self, shellOnly=False):
         """
         Public slot to return the supported programming languages.
         
         @param shellOnly flag indicating only languages supporting an
             interactive shell should be returned
-        @return list of supported languages (list of strings)
+        @type bool
+        @return list of supported languages
+        @rtype list of str
         """
         languages = list(self.__debuggerInterfaceRegistry.keys())
         try:
@@ -402,25 +426,27 @@
                          DebugClientCapabilities.HasShell]
         
         return languages[:]
-        
+    
     def getExtensions(self, language):
         """
         Public slot to get the extensions associated with the given language.
         
-        @param language language to get extensions for (string)
+        @param language language to get extensions for
+        @type str
         @return tuple of extensions associated with the language
-            (tuple of strings)
+        @rtype tuple of str
         """
         if language in self.__debuggerInterfaceRegistry:
             return tuple(self.__debuggerInterfaceRegistry[language][1])
         else:
             return ()
-        
+    
     def __createDebuggerInterface(self, clientType=None):
         """
         Private slot to create the debugger interface object.
         
-        @param clientType type of the client interface to be created (string)
+        @param clientType type of the client interface to be created
+        @type str
         """
         if self.lastClientType != self.clientType or clientType is not None:
             if clientType is None:
@@ -434,35 +460,36 @@
                     self.__debuggerInterfaceRegistry["None"][2](
                         self, self.passive))
                 self.clientType = "None"
-        
+    
     def __setClientType(self, clType):
         """
         Private method to set the client type.
         
-        @param clType type of client to be started (string)
+        @param clType type of client to be started
+        @type str
         """
         if clType is not None and clType in self.getSupportedLanguages():
             self.clientType = clType
             Preferences.Prefs.settings.setValue(
                 'DebugClient/Type', self.clientType)
-        
+    
     def startClient(self, unplanned=True, clType=None, forProject=False,
                     runInConsole=False, venvName="", workingDir=None):
         """
         Public method to start a debug client.
         
-        @keyparam unplanned flag indicating that the client has died
+        @param unplanned flag indicating that the client has died
         @type bool
-        @keyparam clType type of client to be started
+        @param clType type of client to be started
         @type str
-        @keyparam forProject flag indicating a project related action
+        @param forProject flag indicating a project related action
         @type bool
-        @keyparam runInConsole flag indicating to start the debugger in a
+        @param runInConsole flag indicating to start the debugger in a
             console window
         @type bool
-        @keyparam venvName name of the virtual environment to be used
+        @param venvName name of the virtual environment to be used
         @type str
-        @keyparam workingDir directory to start the debugger client in
+        @param workingDir directory to start the debugger client in
         @type str
         """
         self.running = False
@@ -521,8 +548,6 @@
                 elif self.__autoClearShell:
                     self.__autoClearShell = False
                     self.remoteBanner()
-##                self.remoteClientVariables(0, [], 0)
-##                self.remoteClientVariables(1, [], 0)
             else:
                 if clType and self.lastClientType:
                     self.__setClientType(self.lastClientType)
@@ -533,7 +558,7 @@
         if clientInterpreter != self.clientInterpreter:
             self.clientInterpreter = clientInterpreter
             self.clientInterpreterChanged.emit(clientInterpreter)
-
+    
     def __clientProcessOutput(self):
         """
         Private slot to process client output received via stdout.
@@ -542,7 +567,7 @@
                      Preferences.getSystem("IOEncoding"),
                      'replace')
         self.clientProcessStdout.emit(output)
-        
+    
     def __clientProcessError(self):
         """
         Private slot to process client output received via stderr.
@@ -551,82 +576,112 @@
                     Preferences.getSystem("IOEncoding"),
                     'replace')
         self.clientProcessStderr.emit(error)
-        
+    
+    @pyqtSlot(str, int)
     def __clientClearBreakPoint(self, fn, lineno):
         """
         Private slot to handle the clientClearBreak signal.
         
-        @param fn filename of breakpoint to clear (string)
-        @param lineno line number of breakpoint to clear (integer)
+        @param fn filename of breakpoint to clear
+        @type str
+        @param lineno line number of breakpoint to clear
+        @type int
         """
         if self.debugging:
             index = self.breakpointModel.getBreakPointIndex(fn, lineno)
             self.breakpointModel.deleteBreakPointByIndex(index)
-
+            if (fn, lineno) in self.__reportedBreakpointIssues:
+                self.__reportedBreakpointIssues.remove((fn, lineno))
+    
     def __deleteBreakPoints(self, parentIndex, start, end):
         """
         Private slot to delete breakpoints.
         
-        @param parentIndex index of parent item (QModelIndex)
-        @param start start row (integer)
-        @param end end row (integer)
+        @param parentIndex index of parent item
+        @type QModelIndex
+        @param start start row
+        @type int
+        @param end end row
+        @type int
         """
         if self.debugging:
             for row in range(start, end + 1):
                 index = self.breakpointModel.index(row, 0, parentIndex)
                 fn, lineno = (
                     self.breakpointModel.getBreakPointByIndex(index)[0:2])
-                self.remoteBreakpoint(fn, lineno, False)
-
+                # delete the breakpoints of all connected backends
+                self.remoteBreakpoint("", fn, lineno, False)
+                if (fn, lineno) in self.__reportedBreakpointIssues:
+                    self.__reportedBreakpointIssues.remove((fn, lineno))
+    
     def __changeBreakPoints(self, startIndex, endIndex):
         """
         Private slot to set changed breakpoints.
         
-        @param startIndex starting index of the change breakpoins (QModelIndex)
-        @param endIndex ending index of the change breakpoins (QModelIndex)
+        @param startIndex starting index of the change breakpoins
+        @type QModelIndex
+        @param endIndex ending index of the change breakpoins
+        @type QModelIndex
         """
         if self.debugging:
             self.__addBreakPoints(
                 QModelIndex(), startIndex.row(), endIndex.row())
-
+    
     def __breakPointDataAboutToBeChanged(self, startIndex, endIndex):
         """
         Private slot to handle the dataAboutToBeChanged signal of the
         breakpoint model.
         
-        @param startIndex start index of the rows to be changed (QModelIndex)
-        @param endIndex end index of the rows to be changed (QModelIndex)
+        @param startIndex start index of the rows to be changed
+        @type QModelIndex
+        @param endIndex end index of the rows to be changed
+        @type QModelIndex
         """
         if self.debugging:
             self.__deleteBreakPoints(
                 QModelIndex(), startIndex.row(), endIndex.row())
-        
-    def __addBreakPoints(self, parentIndex, start, end):
+    
+    def __addBreakPoints(self, parentIndex, start, end, debuggerId=""):
         """
         Private slot to add breakpoints.
         
-        @param parentIndex index of parent item (QModelIndex)
-        @param start start row (inte