Merged with default branch to prepare the 20.9 release. maintenance

Wed, 02 Sep 2020 18:06:20 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Wed, 02 Sep 2020 18:06:20 +0200
branch
maintenance
changeset 7684
11e18bf34097
parent 7656
27cfb65c7324 (current diff)
parent 7683
2fca14bea889 (diff)
child 7688
b0e7a833303b

Merged with default branch to prepare the 20.9 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/Documentation/Help/source.qch file | annotate | diff | comparison | revisions
eric6/Documentation/Help/source.qhp file | annotate | diff | comparison | revisions
eric6/Preferences/__init__.py file | annotate | diff | comparison | revisions
eric6/QScintilla/Editor.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/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
--- a/docs/changelog	Sat Aug 01 10:39:12 2020 +0200
+++ b/docs/changelog	Wed Sep 02 18:06:20 2020 +0200
@@ -1,5 +1,16 @@
 Change Log
 ----------
+Version 20.9:
+- bug fixes
+- File Browser
+  -- changed it to react upon changed files if their contents is shown
+- Tasks
+  -- added separate task categories for 'Test' and 'Documentation' tasks
+- Mercurial Interface
+  -- removed the interface for the deprecated 'fetch' extension
+- VCS Interfaces
+  -- added a configuration option to disable the VCS toolbars
+  
 Version 20.8:
 - bug fixes
 
--- a/eric6.e4p	Sat Aug 01 10:39:12 2020 +0200
+++ b/eric6.e4p	Wed Sep 02 18:06:20 2020 +0200
@@ -368,9 +368,6 @@
     <Source>eric6/Plugins/CheckerPlugins/SyntaxChecker/pyflakes/messages.py</Source>
     <Source>eric6/Plugins/CheckerPlugins/SyntaxChecker/pyflakes/translations.py</Source>
     <Source>eric6/Plugins/CheckerPlugins/SyntaxChecker/yamlCheckSyntax.py</Source>
-    <Source>eric6/Plugins/CheckerPlugins/Tabnanny/Tabnanny.py</Source>
-    <Source>eric6/Plugins/CheckerPlugins/Tabnanny/TabnannyDialog.py</Source>
-    <Source>eric6/Plugins/CheckerPlugins/Tabnanny/__init__.py</Source>
     <Source>eric6/Plugins/CheckerPlugins/__init__.py</Source>
     <Source>eric6/Plugins/DocumentationPlugins/Ericapi/EricapiConfigDialog.py</Source>
     <Source>eric6/Plugins/DocumentationPlugins/Ericapi/EricapiExecDialog.py</Source>
@@ -384,7 +381,6 @@
     <Source>eric6/Plugins/PluginEricapi.py</Source>
     <Source>eric6/Plugins/PluginEricdoc.py</Source>
     <Source>eric6/Plugins/PluginSyntaxChecker.py</Source>
-    <Source>eric6/Plugins/PluginTabnanny.py</Source>
     <Source>eric6/Plugins/PluginTranslator.py</Source>
     <Source>eric6/Plugins/PluginVcsGit.py</Source>
     <Source>eric6/Plugins/PluginVcsMercurial.py</Source>
@@ -488,10 +484,6 @@
     <Source>eric6/Plugins/VcsPlugins/vcsMercurial/Config.py</Source>
     <Source>eric6/Plugins/VcsPlugins/vcsMercurial/ConfigurationPage/MercurialPage.py</Source>
     <Source>eric6/Plugins/VcsPlugins/vcsMercurial/ConfigurationPage/__init__.py</Source>
-    <Source>eric6/Plugins/VcsPlugins/vcsMercurial/FetchExtension/HgFetchDialog.py</Source>
-    <Source>eric6/Plugins/VcsPlugins/vcsMercurial/FetchExtension/ProjectHelper.py</Source>
-    <Source>eric6/Plugins/VcsPlugins/vcsMercurial/FetchExtension/__init__.py</Source>
-    <Source>eric6/Plugins/VcsPlugins/vcsMercurial/FetchExtension/fetch.py</Source>
     <Source>eric6/Plugins/VcsPlugins/vcsMercurial/GpgExtension/HgGpgSignDialog.py</Source>
     <Source>eric6/Plugins/VcsPlugins/vcsMercurial/GpgExtension/HgGpgSignaturesDialog.py</Source>
     <Source>eric6/Plugins/VcsPlugins/vcsMercurial/GpgExtension/ProjectHelper.py</Source>
@@ -1299,7 +1291,6 @@
     <Source>eric6/Utilities/PasswordChecker.py</Source>
     <Source>eric6/Utilities/PySideImporter.py</Source>
     <Source>eric6/Utilities/__init__.py</Source>
-    <Source>eric6/Utilities/binplistlib.py</Source>
     <Source>eric6/Utilities/crypto/__init__.py</Source>
     <Source>eric6/Utilities/crypto/py3AES.py</Source>
     <Source>eric6/Utilities/crypto/py3PBKDF2.py</Source>
@@ -1685,7 +1676,6 @@
     <Form>eric6/Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCodeSelectionDialog.ui</Form>
     <Form>eric6/Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleStatisticsDialog.ui</Form>
     <Form>eric6/Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.ui</Form>
-    <Form>eric6/Plugins/CheckerPlugins/Tabnanny/TabnannyDialog.ui</Form>
     <Form>eric6/Plugins/DocumentationPlugins/Ericapi/EricapiConfigDialog.ui</Form>
     <Form>eric6/Plugins/DocumentationPlugins/Ericapi/EricapiExecDialog.ui</Form>
     <Form>eric6/Plugins/DocumentationPlugins/Ericdoc/EricdocConfigDialog.ui</Form>
@@ -1740,7 +1730,6 @@
     <Form>eric6/Plugins/VcsPlugins/vcsGit/GitUserConfigDataDialog.ui</Form>
     <Form>eric6/Plugins/VcsPlugins/vcsMercurial/CloseheadExtension/HgCloseHeadSelectionDialog.ui</Form>
     <Form>eric6/Plugins/VcsPlugins/vcsMercurial/ConfigurationPage/MercurialPage.ui</Form>
-    <Form>eric6/Plugins/VcsPlugins/vcsMercurial/FetchExtension/HgFetchDialog.ui</Form>
     <Form>eric6/Plugins/VcsPlugins/vcsMercurial/GpgExtension/HgGpgSignDialog.ui</Form>
     <Form>eric6/Plugins/VcsPlugins/vcsMercurial/GpgExtension/HgGpgSignaturesDialog.ui</Form>
     <Form>eric6/Plugins/VcsPlugins/vcsMercurial/HgAddSubrepositoryDialog.ui</Form>
--- a/eric6/APIs/Python3/eric6.api	Sat Aug 01 10:39:12 2020 +0200
+++ b/eric6/APIs/Python3/eric6.api	Wed Sep 02 18:06:20 2020 +0200
@@ -3468,33 +3468,6 @@
 eric6.Plugins.CheckerPlugins.SyntaxChecker.yamlCheckSyntax.worker?4(inputQueue, outputQueue)
 eric6.Plugins.CheckerPlugins.SyntaxChecker.yamlCheckSyntax.yamlSyntaxBatchCheck?4(argumentsList, send, fx, cancelled, maxProcesses=0)
 eric6.Plugins.CheckerPlugins.SyntaxChecker.yamlCheckSyntax.yamlSyntaxCheck?4(file, codestring)
-eric6.Plugins.CheckerPlugins.Tabnanny.Tabnanny.NannyNag.get_line?4()
-eric6.Plugins.CheckerPlugins.Tabnanny.Tabnanny.NannyNag.get_lineno?4()
-eric6.Plugins.CheckerPlugins.Tabnanny.Tabnanny.NannyNag.get_msg?4()
-eric6.Plugins.CheckerPlugins.Tabnanny.Tabnanny.NannyNag?1(lineno, msg, line)
-eric6.Plugins.CheckerPlugins.Tabnanny.Tabnanny.Whitespace.equal?4(other)
-eric6.Plugins.CheckerPlugins.Tabnanny.Tabnanny.Whitespace.indent_level?4(tabsize)
-eric6.Plugins.CheckerPlugins.Tabnanny.Tabnanny.Whitespace.less?4(other)
-eric6.Plugins.CheckerPlugins.Tabnanny.Tabnanny.Whitespace.longest_run_of_spaces?4()
-eric6.Plugins.CheckerPlugins.Tabnanny.Tabnanny.Whitespace.not_equal_witness?4(other)
-eric6.Plugins.CheckerPlugins.Tabnanny.Tabnanny.Whitespace.not_less_witness?4(other)
-eric6.Plugins.CheckerPlugins.Tabnanny.Tabnanny.Whitespace?1(ws)
-eric6.Plugins.CheckerPlugins.Tabnanny.Tabnanny.batchCheck?4(argumentsList, send, fx, cancelled, maxProcesses=0)
-eric6.Plugins.CheckerPlugins.Tabnanny.Tabnanny.check?4(file, text="")
-eric6.Plugins.CheckerPlugins.Tabnanny.Tabnanny.format_witnesses?4(w)
-eric6.Plugins.CheckerPlugins.Tabnanny.Tabnanny.initBatchService?4()
-eric6.Plugins.CheckerPlugins.Tabnanny.Tabnanny.initService?4()
-eric6.Plugins.CheckerPlugins.Tabnanny.Tabnanny.process_tokens?4(tokens)
-eric6.Plugins.CheckerPlugins.Tabnanny.Tabnanny.worker?4(inputQueue, outputQueue)
-eric6.Plugins.CheckerPlugins.Tabnanny.TabnannyDialog.TabnannyDialog.check?4(codestring='')
-eric6.Plugins.CheckerPlugins.Tabnanny.TabnannyDialog.TabnannyDialog.checkBatch?4()
-eric6.Plugins.CheckerPlugins.Tabnanny.TabnannyDialog.TabnannyDialog.filenameRole?7
-eric6.Plugins.CheckerPlugins.Tabnanny.TabnannyDialog.TabnannyDialog.on_buttonBox_clicked?4(button)
-eric6.Plugins.CheckerPlugins.Tabnanny.TabnannyDialog.TabnannyDialog.on_resultList_itemActivated?4(itm, col)
-eric6.Plugins.CheckerPlugins.Tabnanny.TabnannyDialog.TabnannyDialog.on_startButton_clicked?4()
-eric6.Plugins.CheckerPlugins.Tabnanny.TabnannyDialog.TabnannyDialog.prepare?4(fileList, project)
-eric6.Plugins.CheckerPlugins.Tabnanny.TabnannyDialog.TabnannyDialog.start?4(fn)
-eric6.Plugins.CheckerPlugins.Tabnanny.TabnannyDialog.TabnannyDialog?1(indentCheckService, parent=None)
 eric6.Plugins.DocumentationPlugins.Ericapi.EricapiConfigDialog.EricapiConfigDialog.accept?4()
 eric6.Plugins.DocumentationPlugins.Ericapi.EricapiConfigDialog.EricapiConfigDialog.generateParameters?4()
 eric6.Plugins.DocumentationPlugins.Ericapi.EricapiConfigDialog.EricapiConfigDialog.on_addButton_clicked?4()
@@ -3612,28 +3585,6 @@
 eric6.Plugins.PluginSyntaxChecker.pyqtApi?7
 eric6.Plugins.PluginSyntaxChecker.shortDescription?7
 eric6.Plugins.PluginSyntaxChecker.version?7
-eric6.Plugins.PluginTabnanny.TabnannyPlugin.activate?4()
-eric6.Plugins.PluginTabnanny.TabnannyPlugin.batchFinished?7
-eric6.Plugins.PluginTabnanny.TabnannyPlugin.batchJobDone?4(fx, lang)
-eric6.Plugins.PluginTabnanny.TabnannyPlugin.cancelIndentBatchCheck?4()
-eric6.Plugins.PluginTabnanny.TabnannyPlugin.deactivate?4()
-eric6.Plugins.PluginTabnanny.TabnannyPlugin.error?7
-eric6.Plugins.PluginTabnanny.TabnannyPlugin.indentBatchCheck?4(argumentsList)
-eric6.Plugins.PluginTabnanny.TabnannyPlugin.indentCheck?4(lang, filename, source)
-eric6.Plugins.PluginTabnanny.TabnannyPlugin.indentChecked?7
-eric6.Plugins.PluginTabnanny.TabnannyPlugin.serviceErrorPy3?4(fx, lang, fn, msg)
-eric6.Plugins.PluginTabnanny.TabnannyPlugin?1(ui)
-eric6.Plugins.PluginTabnanny.author?7
-eric6.Plugins.PluginTabnanny.autoactivate?7
-eric6.Plugins.PluginTabnanny.className?7
-eric6.Plugins.PluginTabnanny.deactivateable?7
-eric6.Plugins.PluginTabnanny.error?7
-eric6.Plugins.PluginTabnanny.longDescription?7
-eric6.Plugins.PluginTabnanny.name?7
-eric6.Plugins.PluginTabnanny.packageName?7
-eric6.Plugins.PluginTabnanny.pyqtApi?7
-eric6.Plugins.PluginTabnanny.shortDescription?7
-eric6.Plugins.PluginTabnanny.version?7
 eric6.Plugins.PluginTranslator.TranslatorPlugin.PreferencesKey?7
 eric6.Plugins.PluginTranslator.TranslatorPlugin.activate?4()
 eric6.Plugins.PluginTranslator.TranslatorPlugin.deactivate?4()
@@ -4614,15 +4565,6 @@
 eric6.Plugins.VcsPlugins.vcsMercurial.ConfigurationPage.MercurialPage.MercurialPage.on_configButton_clicked?4()
 eric6.Plugins.VcsPlugins.vcsMercurial.ConfigurationPage.MercurialPage.MercurialPage.save?4()
 eric6.Plugins.VcsPlugins.vcsMercurial.ConfigurationPage.MercurialPage.MercurialPage?1(plugin)
-eric6.Plugins.VcsPlugins.vcsMercurial.FetchExtension.HgFetchDialog.HgFetchDialog.getData?4()
-eric6.Plugins.VcsPlugins.vcsMercurial.FetchExtension.HgFetchDialog.HgFetchDialog.on_recentComboBox_activated?4(txt)
-eric6.Plugins.VcsPlugins.vcsMercurial.FetchExtension.HgFetchDialog.HgFetchDialog?1(vcs, parent=None)
-eric6.Plugins.VcsPlugins.vcsMercurial.FetchExtension.ProjectHelper.FetchProjectHelper.initActions?4()
-eric6.Plugins.VcsPlugins.vcsMercurial.FetchExtension.ProjectHelper.FetchProjectHelper.initMenu?4(mainMenu)
-eric6.Plugins.VcsPlugins.vcsMercurial.FetchExtension.ProjectHelper.FetchProjectHelper.menuTitle?4()
-eric6.Plugins.VcsPlugins.vcsMercurial.FetchExtension.ProjectHelper.FetchProjectHelper?1()
-eric6.Plugins.VcsPlugins.vcsMercurial.FetchExtension.fetch.Fetch.hgFetch?4(name, revisions=None)
-eric6.Plugins.VcsPlugins.vcsMercurial.FetchExtension.fetch.Fetch?1(vcs)
 eric6.Plugins.VcsPlugins.vcsMercurial.GpgExtension.HgGpgSignDialog.HgGpgSignDialog.getData?4()
 eric6.Plugins.VcsPlugins.vcsMercurial.GpgExtension.HgGpgSignDialog.HgGpgSignDialog.on_bookmarkButton_toggled?4(checked)
 eric6.Plugins.VcsPlugins.vcsMercurial.GpgExtension.HgGpgSignDialog.HgGpgSignDialog.on_bookmarkCombo_editTextChanged?4(txt)
@@ -8492,9 +8434,14 @@
 eric6.SqlBrowser.SqlConnectionWidget.SqlConnectionWidget.showSchema?4()
 eric6.SqlBrowser.SqlConnectionWidget.SqlConnectionWidget.tableActivated?7
 eric6.SqlBrowser.SqlConnectionWidget.SqlConnectionWidget?1(parent=None)
+eric6.Tasks.Task.Task.TaskType2ColorName?7
+eric6.Tasks.Task.Task.TaskType2IconName?7
+eric6.Tasks.Task.Task.TaskType2MarkersName?7
+eric6.Tasks.Task.Task.TypeDocu?7
 eric6.Tasks.Task.Task.TypeFixme?7
 eric6.Tasks.Task.Task.TypeNone?7
 eric6.Tasks.Task.Task.TypeNote?7
+eric6.Tasks.Task.Task.TypeTest?7
 eric6.Tasks.Task.Task.TypeTodo?7
 eric6.Tasks.Task.Task.TypeWarning?7
 eric6.Tasks.Task.Task.colorizeTask?4()
@@ -8800,6 +8747,7 @@
 eric6.UI.BrowserModel.BrowserModel.columnCount?4(parent=None)
 eric6.UI.BrowserModel.BrowserModel.data?4(index, role)
 eric6.UI.BrowserModel.BrowserModel.directoryChanged?4(path)
+eric6.UI.BrowserModel.BrowserModel.fileChanged?4(fileName)
 eric6.UI.BrowserModel.BrowserModel.flags?4(index)
 eric6.UI.BrowserModel.BrowserModel.hasChildren?4(parent=None)
 eric6.UI.BrowserModel.BrowserModel.headerData?4(section, orientation, role=Qt.DisplayRole)
@@ -8816,6 +8764,7 @@
 eric6.UI.BrowserModel.BrowserModel.populateSysPathItem?4(parentItem, repopulate=False)
 eric6.UI.BrowserModel.BrowserModel.programChange?4(dirname)
 eric6.UI.BrowserModel.BrowserModel.removeToplevelDir?4(index)
+eric6.UI.BrowserModel.BrowserModel.repopulateFileItem?4(itm)
 eric6.UI.BrowserModel.BrowserModel.rowCount?4(parent=None)
 eric6.UI.BrowserModel.BrowserModel.saveToplevelDirs?4()
 eric6.UI.BrowserModel.BrowserModel?1(parent=None, nopopulate=False)
@@ -9111,6 +9060,7 @@
 eric6.UI.UserInterface.UserInterface.getOriginalPathString?4()
 eric6.UI.UserInterface.UserInterface.getToolBarIconSize?4()
 eric6.UI.UserInterface.UserInterface.getToolbar?4(name)
+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()
@@ -9124,11 +9074,11 @@
 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)
-eric6.UI.UserInterface.UserInterface.registerToolbar?4(name, text, toolbar)
+eric6.UI.UserInterface.UserInterface.registerToolbar?4(name, text, toolbar, category="")
 eric6.UI.UserInterface.UserInterface.reloadAPIs?7
 eric6.UI.UserInterface.UserInterface.removeE5Actions?4(actions, actionType='ui')
 eric6.UI.UserInterface.UserInterface.removeSideWidget?4(widget)
-eric6.UI.UserInterface.UserInterface.reregisterToolbar?4(name, text)
+eric6.UI.UserInterface.UserInterface.reregisterToolbar?4(name, text, category="")
 eric6.UI.UserInterface.UserInterface.setDebugProfile?4(save=True)
 eric6.UI.UserInterface.UserInterface.showAvailableVersionsInfo?4()
 eric6.UI.UserInterface.UserInterface.showEmailDialog?4(mode, attachFile=None, deleteAttachFile=False)
@@ -9343,63 +9293,6 @@
 eric6.Utilities._uunescape?8
 eric6.Utilities.absolutePath?4(path, start)
 eric6.Utilities.absoluteUniversalPath?4(path, start)
-eric6.Utilities.binplistlib.BoolWrapper?1(value)
-eric6.Utilities.binplistlib.HashableWrapper?1(value)
-eric6.Utilities.binplistlib.PlistByteCounts?7
-eric6.Utilities.binplistlib.PlistReader.contents?7
-eric6.Utilities.binplistlib.PlistReader.currentOffset?7
-eric6.Utilities.binplistlib.PlistReader.file?7
-eric6.Utilities.binplistlib.PlistReader.getSizedInteger?4(data, length)
-eric6.Utilities.binplistlib.PlistReader.offsets?7
-eric6.Utilities.binplistlib.PlistReader.parse?4()
-eric6.Utilities.binplistlib.PlistReader.proc_extra?4()
-eric6.Utilities.binplistlib.PlistReader.readArray?4(count)
-eric6.Utilities.binplistlib.PlistReader.readAsciiString?4(length)
-eric6.Utilities.binplistlib.PlistReader.readData?4(length)
-eric6.Utilities.binplistlib.PlistReader.readDate?4()
-eric6.Utilities.binplistlib.PlistReader.readDict?4(count)
-eric6.Utilities.binplistlib.PlistReader.readInteger?4(length)
-eric6.Utilities.binplistlib.PlistReader.readObject?4()
-eric6.Utilities.binplistlib.PlistReader.readReal?4(length)
-eric6.Utilities.binplistlib.PlistReader.readRefs?4(count)
-eric6.Utilities.binplistlib.PlistReader.readRoot?4()
-eric6.Utilities.binplistlib.PlistReader.readUid?4(length)
-eric6.Utilities.binplistlib.PlistReader.readUnicode?4(length)
-eric6.Utilities.binplistlib.PlistReader.reset?4()
-eric6.Utilities.binplistlib.PlistReader.setCurrentOffsetToObjectNumber?4(objectNumber)
-eric6.Utilities.binplistlib.PlistReader.trailer?7
-eric6.Utilities.binplistlib.PlistReader?1(fileOrStream)
-eric6.Utilities.binplistlib.PlistTrailer?7
-eric6.Utilities.binplistlib.PlistWriter.binaryInt?4(obj, length=None)
-eric6.Utilities.binplistlib.PlistWriter.binaryReal?4(obj)
-eric6.Utilities.binplistlib.PlistWriter.byteCounts?7
-eric6.Utilities.binplistlib.PlistWriter.computeOffsets?4(obj, asReference=False, isRoot=False)
-eric6.Utilities.binplistlib.PlistWriter.computedUniques?7
-eric6.Utilities.binplistlib.PlistWriter.file?7
-eric6.Utilities.binplistlib.PlistWriter.header?7
-eric6.Utilities.binplistlib.PlistWriter.incrementByteCount?4(field, incr=1)
-eric6.Utilities.binplistlib.PlistWriter.intSize?4(obj)
-eric6.Utilities.binplistlib.PlistWriter.positionOfObjectReference?4(obj)
-eric6.Utilities.binplistlib.PlistWriter.proc_variable_length?4(length)
-eric6.Utilities.binplistlib.PlistWriter.realSize?4(obj)
-eric6.Utilities.binplistlib.PlistWriter.referencePositions?7
-eric6.Utilities.binplistlib.PlistWriter.reset?4()
-eric6.Utilities.binplistlib.PlistWriter.trailer?7
-eric6.Utilities.binplistlib.PlistWriter.wrapRoot?4(root)
-eric6.Utilities.binplistlib.PlistWriter.wrappedFalse?7
-eric6.Utilities.binplistlib.PlistWriter.wrappedTrue?7
-eric6.Utilities.binplistlib.PlistWriter.writeObject?4(obj, output, setReferencePosition=False)
-eric6.Utilities.binplistlib.PlistWriter.writeObjectReference?4(obj, output)
-eric6.Utilities.binplistlib.PlistWriter.writeOffsetTable?4(output)
-eric6.Utilities.binplistlib.PlistWriter.writeRoot?4(root)
-eric6.Utilities.binplistlib.PlistWriter.writtenReferences?7
-eric6.Utilities.binplistlib.PlistWriter?1(file)
-eric6.Utilities.binplistlib.apple_reference_date_offset?7
-eric6.Utilities.binplistlib.is_stream_binary_plist?4(stream)
-eric6.Utilities.binplistlib.readPlist?4(pathOrFile)
-eric6.Utilities.binplistlib.readPlistFromBytes?4(data)
-eric6.Utilities.binplistlib.writePlist?4(rootObject, pathOrFile, binary=True)
-eric6.Utilities.binplistlib.writePlistToBytes?4(rootObject, binary=True)
 eric6.Utilities.checkPyside?4(variant="2")
 eric6.Utilities.codingBytes_regexps?7
 eric6.Utilities.coding_regexps?7
@@ -9858,7 +9751,6 @@
 eric6.VirtualEnv.VirtualenvManagerDialog.VirtualenvManagerDialog.IsCondaRole?7
 eric6.VirtualEnv.VirtualenvManagerDialog.VirtualenvManagerDialog.IsGlobalRole?7
 eric6.VirtualEnv.VirtualenvManagerDialog.VirtualenvManagerDialog.IsRemoteRole?7
-eric6.VirtualEnv.VirtualenvManagerDialog.VirtualenvManagerDialog.PythonVariantRole?7
 eric6.VirtualEnv.VirtualenvManagerDialog.VirtualenvManagerDialog.on_addButton_clicked?4()
 eric6.VirtualEnv.VirtualenvManagerDialog.VirtualenvManagerDialog.on_deleteAllButton_clicked?4()
 eric6.VirtualEnv.VirtualenvManagerDialog.VirtualenvManagerDialog.on_deleteButton_clicked?4()
--- a/eric6/APIs/Python3/eric6.bas	Sat Aug 01 10:39:12 2020 +0200
+++ b/eric6/APIs/Python3/eric6.bas	Wed Sep 02 18:06:20 2020 +0200
@@ -120,7 +120,6 @@
 CorbaPage ConfigurationPageBase Ui_CorbaPage
 CreateDialogCodeDialog QDialog Ui_CreateDialogCodeDialog
 DCTestResult TestResult
-Data bytes
 DateTimeVisitor ast.NodeVisitor
 DebugClient DebugBase DebugClientBase ThreadExtension
 DebugServer QTcpServer
@@ -296,8 +295,6 @@
 FeedEditDialog QDialog Ui_FeedEditDialog
 FeedsDialog QDialog Ui_FeedsDialog
 FeedsManager QDialog Ui_FeedsManager
-Fetch HgExtension
-FetchProjectHelper HgExtensionProjectHelper
 FileDialogWizard QObject
 FileDialogWizardDialog QDialog Ui_FileDialogWizardDialog
 FileReport BaseReport
@@ -426,7 +423,6 @@
 HgExtension QObject
 HgExtensionProjectBrowserHelper QObject
 HgExtensionProjectHelper QObject
-HgFetchDialog QDialog Ui_HgFetchDialog
 HgGpgSignDialog QDialog Ui_HgGpgSignDialog
 HgGpgSignaturesDialog QDialog Ui_HgGpgSignaturesDialog
 HgGraftDialog QDialog Ui_HgGraftDialog
@@ -514,7 +510,6 @@
 InterfacePage ConfigurationPageBase Ui_InterfacePage
 InvalidISO8859Error Exception
 InvalidModulePath Exception
-InvalidPlistException Exception
 IrcChannelEditDialog QDialog Ui_IrcChannelEditDialog
 IrcChannelWidget QWidget Ui_IrcChannelWidget
 IrcIdentitiesEditDialog QDialog Ui_IrcIdentitiesEditDialog
@@ -617,7 +612,6 @@
 MultiValueDictResolver DictResolver
 MyMemoryEngine TranslationEngine
 NameFinder ast.NodeVisitor
-NannyNag Exception
 NavigationBar QWidget
 NavigationContainer QWidget
 NdArrayResolver BaseResolver
@@ -627,7 +621,6 @@
 NewDialogClassDialog QDialog Ui_NewDialogClassDialog
 NewPythonPackageDialog QDialog Ui_NewPythonPackageDialog
 NoExtToken peg.Symbol
-NotBinaryPlistException Exception
 NotificationWidget QWidget Ui_NotificationWidget
 NotificationsPage ConfigurationPageBase Ui_NotificationsPage
 NsHtmlReader QObject
@@ -902,8 +895,6 @@
 TabBar E5WheelTabBar
 TabManagerWidget QWidget
 TabWidget E5TabWidget
-TabnannyDialog QDialog Ui_TabnannyDialog
-TabnannyPlugin QObject
 Tabview ViewManager
 TagError Exception
 Task QTreeWidgetItem
@@ -947,7 +938,6 @@
 UMLItem QGraphicsRectItem
 UMLSceneSizeDialog QDialog Ui_UMLSceneSizeDialog
 UicCompilerOptionsDialog QDialog Ui_UicCompilerOptionsDialog
-Uid int
 UniqueNamespace peg.Namespace
 UnittestDialog QWidget Ui_UnittestDialog
 UnittestWindow E5MainWindow
Binary file eric6/Documentation/Help/source.qch has changed
--- a/eric6/Documentation/Help/source.qhp	Sat Aug 01 10:39:12 2020 +0200
+++ b/eric6/Documentation/Help/source.qhp	Wed Sep 02 18:06:20 2020 +0200
@@ -351,10 +351,6 @@
                 <section title="eric6.Plugins.CheckerPlugins.SyntaxChecker.jsonCheckSyntax" ref="eric6.Plugins.CheckerPlugins.SyntaxChecker.jsonCheckSyntax.html" />
                 <section title="eric6.Plugins.CheckerPlugins.SyntaxChecker.yamlCheckSyntax" ref="eric6.Plugins.CheckerPlugins.SyntaxChecker.yamlCheckSyntax.html" />
               </section>
-              <section title="eric6.Plugins.CheckerPlugins.Tabnanny" ref="index-eric6.Plugins.CheckerPlugins.Tabnanny.html">
-                <section title="eric6.Plugins.CheckerPlugins.Tabnanny.Tabnanny" ref="eric6.Plugins.CheckerPlugins.Tabnanny.Tabnanny.html" />
-                <section title="eric6.Plugins.CheckerPlugins.Tabnanny.TabnannyDialog" ref="eric6.Plugins.CheckerPlugins.Tabnanny.TabnannyDialog.html" />
-              </section>
             </section>
             <section title="eric6.Plugins.DocumentationPlugins" ref="index-eric6.Plugins.DocumentationPlugins.html">
               <section title="eric6.Plugins.DocumentationPlugins.Ericapi" ref="index-eric6.Plugins.DocumentationPlugins.Ericapi.html">
@@ -459,11 +455,6 @@
                 <section title="eric6.Plugins.VcsPlugins.vcsMercurial.ConfigurationPage" ref="index-eric6.Plugins.VcsPlugins.vcsMercurial.ConfigurationPage.html">
                   <section title="eric6.Plugins.VcsPlugins.vcsMercurial.ConfigurationPage.MercurialPage" ref="eric6.Plugins.VcsPlugins.vcsMercurial.ConfigurationPage.MercurialPage.html" />
                 </section>
-                <section title="eric6.Plugins.VcsPlugins.vcsMercurial.FetchExtension" ref="index-eric6.Plugins.VcsPlugins.vcsMercurial.FetchExtension.html">
-                  <section title="eric6.Plugins.VcsPlugins.vcsMercurial.FetchExtension.HgFetchDialog" ref="eric6.Plugins.VcsPlugins.vcsMercurial.FetchExtension.HgFetchDialog.html" />
-                  <section title="eric6.Plugins.VcsPlugins.vcsMercurial.FetchExtension.ProjectHelper" ref="eric6.Plugins.VcsPlugins.vcsMercurial.FetchExtension.ProjectHelper.html" />
-                  <section title="eric6.Plugins.VcsPlugins.vcsMercurial.FetchExtension.fetch" ref="eric6.Plugins.VcsPlugins.vcsMercurial.FetchExtension.fetch.html" />
-                </section>
                 <section title="eric6.Plugins.VcsPlugins.vcsMercurial.GpgExtension" ref="index-eric6.Plugins.VcsPlugins.vcsMercurial.GpgExtension.html">
                   <section title="eric6.Plugins.VcsPlugins.vcsMercurial.GpgExtension.HgGpgSignDialog" ref="eric6.Plugins.VcsPlugins.vcsMercurial.GpgExtension.HgGpgSignDialog.html" />
                   <section title="eric6.Plugins.VcsPlugins.vcsMercurial.GpgExtension.HgGpgSignaturesDialog" ref="eric6.Plugins.VcsPlugins.vcsMercurial.GpgExtension.HgGpgSignaturesDialog.html" />
@@ -706,7 +697,6 @@
             <section title="eric6.Plugins.PluginEricapi" ref="eric6.Plugins.PluginEricapi.html" />
             <section title="eric6.Plugins.PluginEricdoc" ref="eric6.Plugins.PluginEricdoc.html" />
             <section title="eric6.Plugins.PluginSyntaxChecker" ref="eric6.Plugins.PluginSyntaxChecker.html" />
-            <section title="eric6.Plugins.PluginTabnanny" ref="eric6.Plugins.PluginTabnanny.html" />
             <section title="eric6.Plugins.PluginTranslator" ref="eric6.Plugins.PluginTranslator.html" />
             <section title="eric6.Plugins.PluginVcsGit" ref="eric6.Plugins.PluginVcsGit.html" />
             <section title="eric6.Plugins.PluginVcsMercurial" ref="eric6.Plugins.PluginVcsMercurial.html" />
@@ -1039,7 +1029,6 @@
             <section title="eric6.Utilities.PasswordChecker" ref="eric6.Utilities.PasswordChecker.html" />
             <section title="eric6.Utilities.PySideImporter" ref="eric6.Utilities.PySideImporter.html" />
             <section title="eric6.Utilities.__init__" ref="eric6.Utilities.__init__.html" />
-            <section title="eric6.Utilities.binplistlib" ref="eric6.Utilities.binplistlib.html" />
             <section title="eric6.Utilities.uic" ref="eric6.Utilities.uic.html" />
           </section>
           <section title="eric6.VCS" ref="index-eric6.VCS.html">
@@ -2033,9 +2022,6 @@
       <keyword name="BookmarksToolBar.__removeBookmark" id="BookmarksToolBar.__removeBookmark" ref="eric6.WebBrowser.Bookmarks.BookmarksToolBar.html#BookmarksToolBar.__removeBookmark" />
       <keyword name="BookmarksToolBar.__updateVisitCount" id="BookmarksToolBar.__updateVisitCount" ref="eric6.WebBrowser.Bookmarks.BookmarksToolBar.html#BookmarksToolBar.__updateVisitCount" />
       <keyword name="BookmarksToolBar._createMenu" id="BookmarksToolBar._createMenu" ref="eric6.WebBrowser.Bookmarks.BookmarksToolBar.html#BookmarksToolBar._createMenu" />
-      <keyword name="BoolWrapper" id="BoolWrapper" ref="eric6.Utilities.binplistlib.html#BoolWrapper" />
-      <keyword name="BoolWrapper (Constructor)" id="BoolWrapper (Constructor)" ref="eric6.Utilities.binplistlib.html#BoolWrapper.__init__" />
-      <keyword name="BoolWrapper.__repr__" id="BoolWrapper.__repr__" ref="eric6.Utilities.binplistlib.html#BoolWrapper.__repr__" />
       <keyword name="BreakPointModel" id="BreakPointModel" ref="eric6.Debugger.BreakPointModel.html#BreakPointModel" />
       <keyword name="BreakPointModel (Constructor)" id="BreakPointModel (Constructor)" ref="eric6.Debugger.BreakPointModel.html#BreakPointModel.__init__" />
       <keyword name="BreakPointModel (Module)" id="BreakPointModel (Module)" ref="eric6.Debugger.BreakPointModel.html" />
@@ -2110,6 +2096,7 @@
       <keyword name="Browser.__findInDirectory" id="Browser.__findInDirectory" ref="eric6.UI.Browser.html#Browser.__findInDirectory" />
       <keyword name="Browser.__newToplevelDir" id="Browser.__newToplevelDir" ref="eric6.UI.Browser.html#Browser.__newToplevelDir" />
       <keyword name="Browser.__refreshDirectory" id="Browser.__refreshDirectory" ref="eric6.UI.Browser.html#Browser.__refreshDirectory" />
+      <keyword name="Browser.__refreshSource" id="Browser.__refreshSource" ref="eric6.UI.Browser.html#Browser.__refreshSource" />
       <keyword name="Browser.__removeToplevel" id="Browser.__removeToplevel" ref="eric6.UI.Browser.html#Browser.__removeToplevel" />
       <keyword name="Browser.__replaceInDirectory" id="Browser.__replaceInDirectory" ref="eric6.UI.Browser.html#Browser.__replaceInDirectory" />
       <keyword name="Browser.__showMimeType" id="Browser.__showMimeType" ref="eric6.UI.Browser.html#Browser.__showMimeType" />
@@ -2242,6 +2229,7 @@
       <keyword name="BrowserModel.columnCount" id="BrowserModel.columnCount" ref="eric6.UI.BrowserModel.html#BrowserModel.columnCount" />
       <keyword name="BrowserModel.data" id="BrowserModel.data" ref="eric6.UI.BrowserModel.html#BrowserModel.data" />
       <keyword name="BrowserModel.directoryChanged" id="BrowserModel.directoryChanged" ref="eric6.UI.BrowserModel.html#BrowserModel.directoryChanged" />
+      <keyword name="BrowserModel.fileChanged" id="BrowserModel.fileChanged" ref="eric6.UI.BrowserModel.html#BrowserModel.fileChanged" />
       <keyword name="BrowserModel.flags" id="BrowserModel.flags" ref="eric6.UI.BrowserModel.html#BrowserModel.flags" />
       <keyword name="BrowserModel.hasChildren" id="BrowserModel.hasChildren" ref="eric6.UI.BrowserModel.html#BrowserModel.hasChildren" />
       <keyword name="BrowserModel.headerData" id="BrowserModel.headerData" ref="eric6.UI.BrowserModel.html#BrowserModel.headerData" />
@@ -2258,6 +2246,7 @@
       <keyword name="BrowserModel.populateSysPathItem" id="BrowserModel.populateSysPathItem" ref="eric6.UI.BrowserModel.html#BrowserModel.populateSysPathItem" />
       <keyword name="BrowserModel.programChange" id="BrowserModel.programChange" ref="eric6.UI.BrowserModel.html#BrowserModel.programChange" />
       <keyword name="BrowserModel.removeToplevelDir" id="BrowserModel.removeToplevelDir" ref="eric6.UI.BrowserModel.html#BrowserModel.removeToplevelDir" />
+      <keyword name="BrowserModel.repopulateFileItem" id="BrowserModel.repopulateFileItem" ref="eric6.UI.BrowserModel.html#BrowserModel.repopulateFileItem" />
       <keyword name="BrowserModel.rowCount" id="BrowserModel.rowCount" ref="eric6.UI.BrowserModel.html#BrowserModel.rowCount" />
       <keyword name="BrowserModel.saveToplevelDirs" id="BrowserModel.saveToplevelDirs" ref="eric6.UI.BrowserModel.html#BrowserModel.saveToplevelDirs" />
       <keyword name="BrowserSortFilterProxyModel" id="BrowserSortFilterProxyModel" ref="eric6.UI.BrowserSortFilterProxyModel.html#BrowserSortFilterProxyModel" />
@@ -3104,7 +3093,6 @@
       <keyword name="DCTestResult.addUnexpectedSuccess" id="DCTestResult.addUnexpectedSuccess" ref="eric6.DebugClients.Python.DCTestResult.html#DCTestResult.addUnexpectedSuccess" />
       <keyword name="DCTestResult.startTest" id="DCTestResult.startTest" ref="eric6.DebugClients.Python.DCTestResult.html#DCTestResult.startTest" />
       <keyword name="DCTestResult.stopTest" id="DCTestResult.stopTest" ref="eric6.DebugClients.Python.DCTestResult.html#DCTestResult.stopTest" />
-      <keyword name="Data" id="Data" ref="eric6.Utilities.binplistlib.html#Data" />
       <keyword name="DataViews (Package)" id="DataViews (Package)" ref="index-eric6.DataViews.html" />
       <keyword name="DateTimeVisitor" id="DateTimeVisitor" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html#DateTimeVisitor" />
       <keyword name="DateTimeVisitor (Constructor)" id="DateTimeVisitor (Constructor)" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html#DateTimeVisitor.__init__" />
@@ -5588,17 +5576,6 @@
       <keyword name="FeedsManager.on_reloadAllButton_clicked" id="FeedsManager.on_reloadAllButton_clicked" ref="eric6.WebBrowser.Feeds.FeedsManager.html#FeedsManager.on_reloadAllButton_clicked" />
       <keyword name="FeedsManager.on_reloadButton_clicked" id="FeedsManager.on_reloadButton_clicked" ref="eric6.WebBrowser.Feeds.FeedsManager.html#FeedsManager.on_reloadButton_clicked" />
       <keyword name="FeedsManager.show" id="FeedsManager.show" ref="eric6.WebBrowser.Feeds.FeedsManager.html#FeedsManager.show" />
-      <keyword name="Fetch" id="Fetch" ref="eric6.Plugins.VcsPlugins.vcsMercurial.FetchExtension.fetch.html#Fetch" />
-      <keyword name="Fetch (Constructor)" id="Fetch (Constructor)" ref="eric6.Plugins.VcsPlugins.vcsMercurial.FetchExtension.fetch.html#Fetch.__init__" />
-      <keyword name="Fetch.hgFetch" id="Fetch.hgFetch" ref="eric6.Plugins.VcsPlugins.vcsMercurial.FetchExtension.fetch.html#Fetch.hgFetch" />
-      <keyword name="FetchExtension (Package)" id="FetchExtension (Package)" ref="index-eric6.Plugins.VcsPlugins.vcsMercurial.FetchExtension.html" />
-      <keyword name="FetchProjectHelper" id="FetchProjectHelper" ref="eric6.Plugins.VcsPlugins.vcsMercurial.FetchExtension.ProjectHelper.html#FetchProjectHelper" />
-      <keyword name="FetchProjectHelper (Constructor)" id="FetchProjectHelper (Constructor)" ref="eric6.Plugins.VcsPlugins.vcsMercurial.FetchExtension.ProjectHelper.html#FetchProjectHelper.__init__" />
-      <keyword name="FetchProjectHelper.__aboutToShowMenu" id="FetchProjectHelper.__aboutToShowMenu" ref="eric6.Plugins.VcsPlugins.vcsMercurial.FetchExtension.ProjectHelper.html#FetchProjectHelper.__aboutToShowMenu" />
-      <keyword name="FetchProjectHelper.__hgFetch" id="FetchProjectHelper.__hgFetch" ref="eric6.Plugins.VcsPlugins.vcsMercurial.FetchExtension.ProjectHelper.html#FetchProjectHelper.__hgFetch" />
-      <keyword name="FetchProjectHelper.initActions" id="FetchProjectHelper.initActions" ref="eric6.Plugins.VcsPlugins.vcsMercurial.FetchExtension.ProjectHelper.html#FetchProjectHelper.initActions" />
-      <keyword name="FetchProjectHelper.initMenu" id="FetchProjectHelper.initMenu" ref="eric6.Plugins.VcsPlugins.vcsMercurial.FetchExtension.ProjectHelper.html#FetchProjectHelper.initMenu" />
-      <keyword name="FetchProjectHelper.menuTitle" id="FetchProjectHelper.menuTitle" ref="eric6.Plugins.VcsPlugins.vcsMercurial.FetchExtension.ProjectHelper.html#FetchProjectHelper.menuTitle" />
       <keyword name="FileDialogWizard" id="FileDialogWizard" ref="eric6.Plugins.PluginWizardQFileDialog.html#FileDialogWizard" />
       <keyword name="FileDialogWizard (Constructor)" id="FileDialogWizard (Constructor)" ref="eric6.Plugins.PluginWizardQFileDialog.html#FileDialogWizard.__init__" />
       <keyword name="FileDialogWizard (Package)" id="FileDialogWizard (Package)" ref="index-eric6.Plugins.WizardPlugins.FileDialogWizard.html" />
@@ -6851,9 +6828,6 @@
       <keyword name="HashPrefixList (Constructor)" id="HashPrefixList (Constructor)" ref="eric6.WebBrowser.SafeBrowsing.SafeBrowsingThreatList.html#HashPrefixList.__init__" />
       <keyword name="HashPrefixList.__iter__" id="HashPrefixList.__iter__" ref="eric6.WebBrowser.SafeBrowsing.SafeBrowsingThreatList.html#HashPrefixList.__iter__" />
       <keyword name="HashPrefixList.__len__" id="HashPrefixList.__len__" ref="eric6.WebBrowser.SafeBrowsing.SafeBrowsingThreatList.html#HashPrefixList.__len__" />
-      <keyword name="HashableWrapper" id="HashableWrapper" ref="eric6.Utilities.binplistlib.html#HashableWrapper" />
-      <keyword name="HashableWrapper (Constructor)" id="HashableWrapper (Constructor)" ref="eric6.Utilities.binplistlib.html#HashableWrapper.__init__" />
-      <keyword name="HashableWrapper.__repr__" id="HashableWrapper.__repr__" ref="eric6.Utilities.binplistlib.html#HashableWrapper.__repr__" />
       <keyword name="HelpDocsInstaller" id="HelpDocsInstaller" ref="eric6.WebBrowser.QtHelp.HelpDocsInstaller.html#HelpDocsInstaller" />
       <keyword name="HelpDocsInstaller (Constructor)" id="HelpDocsInstaller (Constructor)" ref="eric6.WebBrowser.QtHelp.HelpDocsInstaller.html#HelpDocsInstaller.__init__" />
       <keyword name="HelpDocsInstaller (Module)" id="HelpDocsInstaller (Module)" ref="eric6.WebBrowser.QtHelp.HelpDocsInstaller.html" />
@@ -7505,11 +7479,6 @@
       <keyword name="HgExtensionProjectHelper.menuTitle" id="HgExtensionProjectHelper.menuTitle" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgExtensionProjectHelper.html#HgExtensionProjectHelper.menuTitle" />
       <keyword name="HgExtensionProjectHelper.setObjects" id="HgExtensionProjectHelper.setObjects" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgExtensionProjectHelper.html#HgExtensionProjectHelper.setObjects" />
       <keyword name="HgExtensionProjectHelper.shutdown" id="HgExtensionProjectHelper.shutdown" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgExtensionProjectHelper.html#HgExtensionProjectHelper.shutdown" />
-      <keyword name="HgFetchDialog" id="HgFetchDialog" ref="eric6.Plugins.VcsPlugins.vcsMercurial.FetchExtension.HgFetchDialog.html#HgFetchDialog" />
-      <keyword name="HgFetchDialog (Constructor)" id="HgFetchDialog (Constructor)" ref="eric6.Plugins.VcsPlugins.vcsMercurial.FetchExtension.HgFetchDialog.html#HgFetchDialog.__init__" />
-      <keyword name="HgFetchDialog (Module)" id="HgFetchDialog (Module)" ref="eric6.Plugins.VcsPlugins.vcsMercurial.FetchExtension.HgFetchDialog.html" />
-      <keyword name="HgFetchDialog.getData" id="HgFetchDialog.getData" ref="eric6.Plugins.VcsPlugins.vcsMercurial.FetchExtension.HgFetchDialog.html#HgFetchDialog.getData" />
-      <keyword name="HgFetchDialog.on_recentComboBox_activated" id="HgFetchDialog.on_recentComboBox_activated" ref="eric6.Plugins.VcsPlugins.vcsMercurial.FetchExtension.HgFetchDialog.html#HgFetchDialog.on_recentComboBox_activated" />
       <keyword name="HgGpgSignDialog" id="HgGpgSignDialog" ref="eric6.Plugins.VcsPlugins.vcsMercurial.GpgExtension.HgGpgSignDialog.html#HgGpgSignDialog" />
       <keyword name="HgGpgSignDialog (Constructor)" id="HgGpgSignDialog (Constructor)" ref="eric6.Plugins.VcsPlugins.vcsMercurial.GpgExtension.HgGpgSignDialog.html#HgGpgSignDialog.__init__" />
       <keyword name="HgGpgSignDialog (Module)" id="HgGpgSignDialog (Module)" ref="eric6.Plugins.VcsPlugins.vcsMercurial.GpgExtension.HgGpgSignDialog.html" />
@@ -7609,7 +7578,6 @@
       <keyword name="HgLogBrowserDialog.__branchColor" id="HgLogBrowserDialog.__branchColor" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.__branchColor" />
       <keyword name="HgLogBrowserDialog.__bundleActTriggered" id="HgLogBrowserDialog.__bundleActTriggered" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.__bundleActTriggered" />
       <keyword name="HgLogBrowserDialog.__closeHeadsActTriggered" id="HgLogBrowserDialog.__closeHeadsActTriggered" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.__closeHeadsActTriggered" />
-      <keyword name="HgLogBrowserDialog.__fetchActTriggered" id="HgLogBrowserDialog.__fetchActTriggered" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.__fetchActTriggered" />
       <keyword name="HgLogBrowserDialog.__filterLogs" id="HgLogBrowserDialog.__filterLogs" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.__filterLogs" />
       <keyword name="HgLogBrowserDialog.__findItem" id="HgLogBrowserDialog.__findItem" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.__findItem" />
       <keyword name="HgLogBrowserDialog.__finish" id="HgLogBrowserDialog.__finish" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html#HgLogBrowserDialog.__finish" />
@@ -8667,7 +8635,6 @@
       <keyword name="InterfacePage.save" id="InterfacePage.save" ref="eric6.Preferences.ConfigurationPages.InterfacePage.html#InterfacePage.save" />
       <keyword name="InvalidISO8859Error" id="InvalidISO8859Error" ref="eric6.E5Network.E5RFC6266.html#InvalidISO8859Error" />
       <keyword name="InvalidModulePath" id="InvalidModulePath" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.Security.SecurityUtils.html#InvalidModulePath" />
-      <keyword name="InvalidPlistException" id="InvalidPlistException" ref="eric6.Utilities.binplistlib.html#InvalidPlistException" />
       <keyword name="IrcChannel" id="IrcChannel" ref="eric6.Network.IRC.IrcNetworkManager.html#IrcChannel" />
       <keyword name="IrcChannel (Constructor)" id="IrcChannel (Constructor)" ref="eric6.Network.IRC.IrcNetworkManager.html#IrcChannel.__init__" />
       <keyword name="IrcChannel.autoJoin" id="IrcChannel.autoJoin" ref="eric6.Network.IRC.IrcNetworkManager.html#IrcChannel.autoJoin" />
@@ -10155,11 +10122,6 @@
       <keyword name="NamingStyleChecker.__visitNode" id="NamingStyleChecker.__visitNode" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.NamingStyleChecker.html#NamingStyleChecker.__visitNode" />
       <keyword name="NamingStyleChecker.__visitTree" id="NamingStyleChecker.__visitTree" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.NamingStyleChecker.html#NamingStyleChecker.__visitTree" />
       <keyword name="NamingStyleChecker.run" id="NamingStyleChecker.run" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.NamingStyleChecker.html#NamingStyleChecker.run" />
-      <keyword name="NannyNag" id="NannyNag" ref="eric6.Plugins.CheckerPlugins.Tabnanny.Tabnanny.html#NannyNag" />
-      <keyword name="NannyNag (Constructor)" id="NannyNag (Constructor)" ref="eric6.Plugins.CheckerPlugins.Tabnanny.Tabnanny.html#NannyNag.__init__" />
-      <keyword name="NannyNag.get_line" id="NannyNag.get_line" ref="eric6.Plugins.CheckerPlugins.Tabnanny.Tabnanny.html#NannyNag.get_line" />
-      <keyword name="NannyNag.get_lineno" id="NannyNag.get_lineno" ref="eric6.Plugins.CheckerPlugins.Tabnanny.Tabnanny.html#NannyNag.get_lineno" />
-      <keyword name="NannyNag.get_msg" id="NannyNag.get_msg" ref="eric6.Plugins.CheckerPlugins.Tabnanny.Tabnanny.html#NannyNag.get_msg" />
       <keyword name="Navigation (Package)" id="Navigation (Package)" ref="index-eric6.WebBrowser.Navigation.html" />
       <keyword name="NavigationBar" id="NavigationBar" ref="eric6.WebBrowser.Navigation.NavigationBar.html#NavigationBar" />
       <keyword name="NavigationBar (Constructor)" id="NavigationBar (Constructor)" ref="eric6.WebBrowser.Navigation.NavigationBar.html#NavigationBar.__init__" />
@@ -10252,7 +10214,6 @@
       <keyword name="NoneSplashScreen.clearMessage" id="NoneSplashScreen.clearMessage" ref="eric6.UI.SplashScreen.html#NoneSplashScreen.clearMessage" />
       <keyword name="NoneSplashScreen.finish" id="NoneSplashScreen.finish" ref="eric6.UI.SplashScreen.html#NoneSplashScreen.finish" />
       <keyword name="NoneSplashScreen.showMessage" id="NoneSplashScreen.showMessage" ref="eric6.UI.SplashScreen.html#NoneSplashScreen.showMessage" />
-      <keyword name="NotBinaryPlistException" id="NotBinaryPlistException" ref="eric6.Utilities.binplistlib.html#NotBinaryPlistException" />
       <keyword name="NotificationWidget" id="NotificationWidget" ref="eric6.UI.NotificationWidget.html#NotificationWidget" />
       <keyword name="NotificationWidget (Constructor)" id="NotificationWidget (Constructor)" ref="eric6.UI.NotificationWidget.html#NotificationWidget.__init__" />
       <keyword name="NotificationWidget (Module)" id="NotificationWidget (Module)" ref="eric6.UI.NotificationWidget.html" />
@@ -10765,43 +10726,6 @@
       <keyword name="PixmapDiagram.getDiagramName" id="PixmapDiagram.getDiagramName" ref="eric6.Graphics.PixmapDiagram.html#PixmapDiagram.getDiagramName" />
       <keyword name="PixmapDiagram.getStatus" id="PixmapDiagram.getStatus" ref="eric6.Graphics.PixmapDiagram.html#PixmapDiagram.getStatus" />
       <keyword name="PixmapDiagram.wheelEvent" id="PixmapDiagram.wheelEvent" ref="eric6.Graphics.PixmapDiagram.html#PixmapDiagram.wheelEvent" />
-      <keyword name="PlistReader" id="PlistReader" ref="eric6.Utilities.binplistlib.html#PlistReader" />
-      <keyword name="PlistReader (Constructor)" id="PlistReader (Constructor)" ref="eric6.Utilities.binplistlib.html#PlistReader.__init__" />
-      <keyword name="PlistReader.getSizedInteger" id="PlistReader.getSizedInteger" ref="eric6.Utilities.binplistlib.html#PlistReader.getSizedInteger" />
-      <keyword name="PlistReader.parse" id="PlistReader.parse" ref="eric6.Utilities.binplistlib.html#PlistReader.parse" />
-      <keyword name="PlistReader.proc_extra" id="PlistReader.proc_extra" ref="eric6.Utilities.binplistlib.html#PlistReader.proc_extra" />
-      <keyword name="PlistReader.readArray" id="PlistReader.readArray" ref="eric6.Utilities.binplistlib.html#PlistReader.readArray" />
-      <keyword name="PlistReader.readAsciiString" id="PlistReader.readAsciiString" ref="eric6.Utilities.binplistlib.html#PlistReader.readAsciiString" />
-      <keyword name="PlistReader.readData" id="PlistReader.readData" ref="eric6.Utilities.binplistlib.html#PlistReader.readData" />
-      <keyword name="PlistReader.readDate" id="PlistReader.readDate" ref="eric6.Utilities.binplistlib.html#PlistReader.readDate" />
-      <keyword name="PlistReader.readDict" id="PlistReader.readDict" ref="eric6.Utilities.binplistlib.html#PlistReader.readDict" />
-      <keyword name="PlistReader.readInteger" id="PlistReader.readInteger" ref="eric6.Utilities.binplistlib.html#PlistReader.readInteger" />
-      <keyword name="PlistReader.readObject" id="PlistReader.readObject" ref="eric6.Utilities.binplistlib.html#PlistReader.readObject" />
-      <keyword name="PlistReader.readReal" id="PlistReader.readReal" ref="eric6.Utilities.binplistlib.html#PlistReader.readReal" />
-      <keyword name="PlistReader.readRefs" id="PlistReader.readRefs" ref="eric6.Utilities.binplistlib.html#PlistReader.readRefs" />
-      <keyword name="PlistReader.readRoot" id="PlistReader.readRoot" ref="eric6.Utilities.binplistlib.html#PlistReader.readRoot" />
-      <keyword name="PlistReader.readUid" id="PlistReader.readUid" ref="eric6.Utilities.binplistlib.html#PlistReader.readUid" />
-      <keyword name="PlistReader.readUnicode" id="PlistReader.readUnicode" ref="eric6.Utilities.binplistlib.html#PlistReader.readUnicode" />
-      <keyword name="PlistReader.reset" id="PlistReader.reset" ref="eric6.Utilities.binplistlib.html#PlistReader.reset" />
-      <keyword name="PlistReader.setCurrentOffsetToObjectNumber" id="PlistReader.setCurrentOffsetToObjectNumber" ref="eric6.Utilities.binplistlib.html#PlistReader.setCurrentOffsetToObjectNumber" />
-      <keyword name="PlistWriter" id="PlistWriter" ref="eric6.Utilities.binplistlib.html#PlistWriter" />
-      <keyword name="PlistWriter (Constructor)" id="PlistWriter (Constructor)" ref="eric6.Utilities.binplistlib.html#PlistWriter.__init__" />
-      <keyword name="PlistWriter.__checkKey" id="PlistWriter.__checkKey" ref="eric6.Utilities.binplistlib.html#PlistWriter.__checkKey" />
-      <keyword name="PlistWriter.__processSize" id="PlistWriter.__processSize" ref="eric6.Utilities.binplistlib.html#PlistWriter.__processSize" />
-      <keyword name="PlistWriter.binaryInt" id="PlistWriter.binaryInt" ref="eric6.Utilities.binplistlib.html#PlistWriter.binaryInt" />
-      <keyword name="PlistWriter.binaryReal" id="PlistWriter.binaryReal" ref="eric6.Utilities.binplistlib.html#PlistWriter.binaryReal" />
-      <keyword name="PlistWriter.computeOffsets" id="PlistWriter.computeOffsets" ref="eric6.Utilities.binplistlib.html#PlistWriter.computeOffsets" />
-      <keyword name="PlistWriter.incrementByteCount" id="PlistWriter.incrementByteCount" ref="eric6.Utilities.binplistlib.html#PlistWriter.incrementByteCount" />
-      <keyword name="PlistWriter.intSize" id="PlistWriter.intSize" ref="eric6.Utilities.binplistlib.html#PlistWriter.intSize" />
-      <keyword name="PlistWriter.positionOfObjectReference" id="PlistWriter.positionOfObjectReference" ref="eric6.Utilities.binplistlib.html#PlistWriter.positionOfObjectReference" />
-      <keyword name="PlistWriter.proc_variable_length" id="PlistWriter.proc_variable_length" ref="eric6.Utilities.binplistlib.html#PlistWriter.proc_variable_length" />
-      <keyword name="PlistWriter.realSize" id="PlistWriter.realSize" ref="eric6.Utilities.binplistlib.html#PlistWriter.realSize" />
-      <keyword name="PlistWriter.reset" id="PlistWriter.reset" ref="eric6.Utilities.binplistlib.html#PlistWriter.reset" />
-      <keyword name="PlistWriter.wrapRoot" id="PlistWriter.wrapRoot" ref="eric6.Utilities.binplistlib.html#PlistWriter.wrapRoot" />
-      <keyword name="PlistWriter.writeObject" id="PlistWriter.writeObject" ref="eric6.Utilities.binplistlib.html#PlistWriter.writeObject" />
-      <keyword name="PlistWriter.writeObjectReference" id="PlistWriter.writeObjectReference" ref="eric6.Utilities.binplistlib.html#PlistWriter.writeObjectReference" />
-      <keyword name="PlistWriter.writeOffsetTable" id="PlistWriter.writeOffsetTable" ref="eric6.Utilities.binplistlib.html#PlistWriter.writeOffsetTable" />
-      <keyword name="PlistWriter.writeRoot" id="PlistWriter.writeRoot" ref="eric6.Utilities.binplistlib.html#PlistWriter.writeRoot" />
       <keyword name="PluginAbout (Module)" id="PluginAbout (Module)" ref="eric6.Plugins.PluginAbout.html" />
       <keyword name="PluginActivationError" id="PluginActivationError" ref="eric6.PluginManager.PluginExceptions.html#PluginActivationError" />
       <keyword name="PluginActivationError (Constructor)" id="PluginActivationError (Constructor)" ref="eric6.PluginManager.PluginExceptions.html#PluginActivationError.__init__" />
@@ -10960,7 +10884,6 @@
       <keyword name="PluginRepositoryWindow (Constructor)" id="PluginRepositoryWindow (Constructor)" ref="eric6.PluginManager.PluginRepositoryDialog.html#PluginRepositoryWindow.__init__" />
       <keyword name="PluginRepositoryWindow.__startPluginInstall" id="PluginRepositoryWindow.__startPluginInstall" ref="eric6.PluginManager.PluginRepositoryDialog.html#PluginRepositoryWindow.__startPluginInstall" />
       <keyword name="PluginSyntaxChecker (Module)" id="PluginSyntaxChecker (Module)" ref="eric6.Plugins.PluginSyntaxChecker.html" />
-      <keyword name="PluginTabnanny (Module)" id="PluginTabnanny (Module)" ref="eric6.Plugins.PluginTabnanny.html" />
       <keyword name="PluginTranslator (Module)" id="PluginTranslator (Module)" ref="eric6.Plugins.PluginTranslator.html" />
       <keyword name="PluginUninstallDialog" id="PluginUninstallDialog" ref="eric6.PluginManager.PluginUninstallDialog.html#PluginUninstallDialog" />
       <keyword name="PluginUninstallDialog (Constructor)" id="PluginUninstallDialog (Constructor)" ref="eric6.PluginManager.PluginUninstallDialog.html#PluginUninstallDialog.__init__" />
@@ -11492,7 +11415,6 @@
       <keyword name="ProjectFormsBrowser.handlePreferencesChanged" id="ProjectFormsBrowser.handlePreferencesChanged" ref="eric6.Project.ProjectFormsBrowser.html#ProjectFormsBrowser.handlePreferencesChanged" />
       <keyword name="ProjectHelper (Module)" id="ProjectHelper (Module)" ref="eric6.Plugins.VcsPlugins.vcsGit.ProjectHelper.html" />
       <keyword name="ProjectHelper (Module)" id="ProjectHelper (Module)" ref="eric6.Plugins.VcsPlugins.vcsMercurial.CloseheadExtension.ProjectHelper.html" />
-      <keyword name="ProjectHelper (Module)" id="ProjectHelper (Module)" ref="eric6.Plugins.VcsPlugins.vcsMercurial.FetchExtension.ProjectHelper.html" />
       <keyword name="ProjectHelper (Module)" id="ProjectHelper (Module)" ref="eric6.Plugins.VcsPlugins.vcsMercurial.GpgExtension.ProjectHelper.html" />
       <keyword name="ProjectHelper (Module)" id="ProjectHelper (Module)" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HisteditExtension.ProjectHelper.html" />
       <keyword name="ProjectHelper (Module)" id="ProjectHelper (Module)" ref="eric6.Plugins.VcsPlugins.vcsMercurial.LargefilesExtension.ProjectHelper.html" />
@@ -14589,44 +14511,6 @@
       <keyword name="TabWidget.removeWidget" id="TabWidget.removeWidget" ref="eric6.Plugins.ViewManagerPlugins.Tabview.Tabview.html#TabWidget.removeWidget" />
       <keyword name="TabWidget.setCurrentWidget" id="TabWidget.setCurrentWidget" ref="eric6.Plugins.ViewManagerPlugins.Tabview.Tabview.html#TabWidget.setCurrentWidget" />
       <keyword name="TabWidget.showIndicator" id="TabWidget.showIndicator" ref="eric6.Plugins.ViewManagerPlugins.Tabview.Tabview.html#TabWidget.showIndicator" />
-      <keyword name="Tabnanny (Module)" id="Tabnanny (Module)" ref="eric6.Plugins.CheckerPlugins.Tabnanny.Tabnanny.html" />
-      <keyword name="Tabnanny (Package)" id="Tabnanny (Package)" ref="index-eric6.Plugins.CheckerPlugins.Tabnanny.html" />
-      <keyword name="TabnannyDialog" id="TabnannyDialog" ref="eric6.Plugins.CheckerPlugins.Tabnanny.TabnannyDialog.html#TabnannyDialog" />
-      <keyword name="TabnannyDialog (Constructor)" id="TabnannyDialog (Constructor)" ref="eric6.Plugins.CheckerPlugins.Tabnanny.TabnannyDialog.html#TabnannyDialog.__init__" />
-      <keyword name="TabnannyDialog (Module)" id="TabnannyDialog (Module)" ref="eric6.Plugins.CheckerPlugins.Tabnanny.TabnannyDialog.html" />
-      <keyword name="TabnannyDialog.__batchFinished" id="TabnannyDialog.__batchFinished" ref="eric6.Plugins.CheckerPlugins.Tabnanny.TabnannyDialog.html#TabnannyDialog.__batchFinished" />
-      <keyword name="TabnannyDialog.__createErrorItem" id="TabnannyDialog.__createErrorItem" ref="eric6.Plugins.CheckerPlugins.Tabnanny.TabnannyDialog.html#TabnannyDialog.__createErrorItem" />
-      <keyword name="TabnannyDialog.__createResultItem" id="TabnannyDialog.__createResultItem" ref="eric6.Plugins.CheckerPlugins.Tabnanny.TabnannyDialog.html#TabnannyDialog.__createResultItem" />
-      <keyword name="TabnannyDialog.__finish" id="TabnannyDialog.__finish" ref="eric6.Plugins.CheckerPlugins.Tabnanny.TabnannyDialog.html#TabnannyDialog.__finish" />
-      <keyword name="TabnannyDialog.__processError" id="TabnannyDialog.__processError" ref="eric6.Plugins.CheckerPlugins.Tabnanny.TabnannyDialog.html#TabnannyDialog.__processError" />
-      <keyword name="TabnannyDialog.__processResult" id="TabnannyDialog.__processResult" ref="eric6.Plugins.CheckerPlugins.Tabnanny.TabnannyDialog.html#TabnannyDialog.__processResult" />
-      <keyword name="TabnannyDialog.__resort" id="TabnannyDialog.__resort" ref="eric6.Plugins.CheckerPlugins.Tabnanny.TabnannyDialog.html#TabnannyDialog.__resort" />
-      <keyword name="TabnannyDialog.check" id="TabnannyDialog.check" ref="eric6.Plugins.CheckerPlugins.Tabnanny.TabnannyDialog.html#TabnannyDialog.check" />
-      <keyword name="TabnannyDialog.checkBatch" id="TabnannyDialog.checkBatch" ref="eric6.Plugins.CheckerPlugins.Tabnanny.TabnannyDialog.html#TabnannyDialog.checkBatch" />
-      <keyword name="TabnannyDialog.on_buttonBox_clicked" id="TabnannyDialog.on_buttonBox_clicked" ref="eric6.Plugins.CheckerPlugins.Tabnanny.TabnannyDialog.html#TabnannyDialog.on_buttonBox_clicked" />
-      <keyword name="TabnannyDialog.on_resultList_itemActivated" id="TabnannyDialog.on_resultList_itemActivated" ref="eric6.Plugins.CheckerPlugins.Tabnanny.TabnannyDialog.html#TabnannyDialog.on_resultList_itemActivated" />
-      <keyword name="TabnannyDialog.on_startButton_clicked" id="TabnannyDialog.on_startButton_clicked" ref="eric6.Plugins.CheckerPlugins.Tabnanny.TabnannyDialog.html#TabnannyDialog.on_startButton_clicked" />
-      <keyword name="TabnannyDialog.prepare" id="TabnannyDialog.prepare" ref="eric6.Plugins.CheckerPlugins.Tabnanny.TabnannyDialog.html#TabnannyDialog.prepare" />
-      <keyword name="TabnannyDialog.start" id="TabnannyDialog.start" ref="eric6.Plugins.CheckerPlugins.Tabnanny.TabnannyDialog.html#TabnannyDialog.start" />
-      <keyword name="TabnannyPlugin" id="TabnannyPlugin" ref="eric6.Plugins.PluginTabnanny.html#TabnannyPlugin" />
-      <keyword name="TabnannyPlugin (Constructor)" id="TabnannyPlugin (Constructor)" ref="eric6.Plugins.PluginTabnanny.html#TabnannyPlugin.__init__" />
-      <keyword name="TabnannyPlugin.__editorClosed" id="TabnannyPlugin.__editorClosed" ref="eric6.Plugins.PluginTabnanny.html#TabnannyPlugin.__editorClosed" />
-      <keyword name="TabnannyPlugin.__editorOpened" id="TabnannyPlugin.__editorOpened" ref="eric6.Plugins.PluginTabnanny.html#TabnannyPlugin.__editorOpened" />
-      <keyword name="TabnannyPlugin.__editorShowMenu" id="TabnannyPlugin.__editorShowMenu" ref="eric6.Plugins.PluginTabnanny.html#TabnannyPlugin.__editorShowMenu" />
-      <keyword name="TabnannyPlugin.__editorTabnanny" id="TabnannyPlugin.__editorTabnanny" ref="eric6.Plugins.PluginTabnanny.html#TabnannyPlugin.__editorTabnanny" />
-      <keyword name="TabnannyPlugin.__initialize" id="TabnannyPlugin.__initialize" ref="eric6.Plugins.PluginTabnanny.html#TabnannyPlugin.__initialize" />
-      <keyword name="TabnannyPlugin.__projectBrowserShowMenu" id="TabnannyPlugin.__projectBrowserShowMenu" ref="eric6.Plugins.PluginTabnanny.html#TabnannyPlugin.__projectBrowserShowMenu" />
-      <keyword name="TabnannyPlugin.__projectBrowserTabnanny" id="TabnannyPlugin.__projectBrowserTabnanny" ref="eric6.Plugins.PluginTabnanny.html#TabnannyPlugin.__projectBrowserTabnanny" />
-      <keyword name="TabnannyPlugin.__projectShowMenu" id="TabnannyPlugin.__projectShowMenu" ref="eric6.Plugins.PluginTabnanny.html#TabnannyPlugin.__projectShowMenu" />
-      <keyword name="TabnannyPlugin.__projectTabnanny" id="TabnannyPlugin.__projectTabnanny" ref="eric6.Plugins.PluginTabnanny.html#TabnannyPlugin.__projectTabnanny" />
-      <keyword name="TabnannyPlugin.__serviceError" id="TabnannyPlugin.__serviceError" ref="eric6.Plugins.PluginTabnanny.html#TabnannyPlugin.__serviceError" />
-      <keyword name="TabnannyPlugin.activate" id="TabnannyPlugin.activate" ref="eric6.Plugins.PluginTabnanny.html#TabnannyPlugin.activate" />
-      <keyword name="TabnannyPlugin.batchJobDone" id="TabnannyPlugin.batchJobDone" ref="eric6.Plugins.PluginTabnanny.html#TabnannyPlugin.batchJobDone" />
-      <keyword name="TabnannyPlugin.cancelIndentBatchCheck" id="TabnannyPlugin.cancelIndentBatchCheck" ref="eric6.Plugins.PluginTabnanny.html#TabnannyPlugin.cancelIndentBatchCheck" />
-      <keyword name="TabnannyPlugin.deactivate" id="TabnannyPlugin.deactivate" ref="eric6.Plugins.PluginTabnanny.html#TabnannyPlugin.deactivate" />
-      <keyword name="TabnannyPlugin.indentBatchCheck" id="TabnannyPlugin.indentBatchCheck" ref="eric6.Plugins.PluginTabnanny.html#TabnannyPlugin.indentBatchCheck" />
-      <keyword name="TabnannyPlugin.indentCheck" id="TabnannyPlugin.indentCheck" ref="eric6.Plugins.PluginTabnanny.html#TabnannyPlugin.indentCheck" />
-      <keyword name="TabnannyPlugin.serviceErrorPy3" id="TabnannyPlugin.serviceErrorPy3" ref="eric6.Plugins.PluginTabnanny.html#TabnannyPlugin.serviceErrorPy3" />
       <keyword name="Tabview" id="Tabview" ref="eric6.Plugins.ViewManagerPlugins.Tabview.Tabview.html#Tabview" />
       <keyword name="Tabview (Constructor)" id="Tabview (Constructor)" ref="eric6.Plugins.ViewManagerPlugins.Tabview.Tabview.html#Tabview.__init__" />
       <keyword name="Tabview (Module)" id="Tabview (Module)" ref="eric6.Plugins.ViewManagerPlugins.Tabview.Tabview.html" />
@@ -15186,8 +15070,6 @@
       <keyword name="UicCompilerOptionsDialog (Module)" id="UicCompilerOptionsDialog (Module)" ref="eric6.Project.UicCompilerOptionsDialog.html" />
       <keyword name="UicCompilerOptionsDialog.getData" id="UicCompilerOptionsDialog.getData" ref="eric6.Project.UicCompilerOptionsDialog.html#UicCompilerOptionsDialog.getData" />
       <keyword name="UicLoadUi (Module)" id="UicLoadUi (Module)" ref="eric6.Project.UicLoadUi.html" />
-      <keyword name="Uid" id="Uid" ref="eric6.Utilities.binplistlib.html#Uid" />
-      <keyword name="Uid.__repr__" id="Uid.__repr__" ref="eric6.Utilities.binplistlib.html#Uid.__repr__" />
       <keyword name="UniqueNamespace" id="UniqueNamespace" ref="eric6.E5Network.E5RFC6266.html#UniqueNamespace" />
       <keyword name="UniqueNamespace.__setitem__" id="UniqueNamespace.__setitem__" ref="eric6.E5Network.E5RFC6266.html#UniqueNamespace.__setitem__" />
       <keyword name="UnittestDialog" id="UnittestDialog" ref="eric6.PyUnit.UnittestDialog.html#UnittestDialog" />
@@ -15501,6 +15383,7 @@
       <keyword name="UserInterface.getOriginalPathString" id="UserInterface.getOriginalPathString" ref="eric6.UI.UserInterface.html#UserInterface.getOriginalPathString" />
       <keyword name="UserInterface.getToolBarIconSize" id="UserInterface.getToolBarIconSize" ref="eric6.UI.UserInterface.html#UserInterface.getToolBarIconSize" />
       <keyword name="UserInterface.getToolbar" id="UserInterface.getToolbar" ref="eric6.UI.UserInterface.html#UserInterface.getToolbar" />
+      <keyword name="UserInterface.getToolbarsByCategory" id="UserInterface.getToolbarsByCategory" ref="eric6.UI.UserInterface.html#UserInterface.getToolbarsByCategory" />
       <keyword name="UserInterface.getViewProfile" id="UserInterface.getViewProfile" ref="eric6.UI.UserInterface.html#UserInterface.getViewProfile" />
       <keyword name="UserInterface.handleUrl" id="UserInterface.handleUrl" ref="eric6.UI.UserInterface.html#UserInterface.handleUrl" />
       <keyword name="UserInterface.isOnline" id="UserInterface.isOnline" ref="eric6.UI.UserInterface.html#UserInterface.isOnline" />
@@ -16861,14 +16744,6 @@
       <keyword name="WebInspector.inspectElement" id="WebInspector.inspectElement" ref="eric6.WebBrowser.WebInspector.html#WebInspector.inspectElement" />
       <keyword name="WebInspector.isEnabled" id="WebInspector.isEnabled" ref="eric6.WebBrowser.WebInspector.html#WebInspector.isEnabled" />
       <keyword name="WebInspector.setView" id="WebInspector.setView" ref="eric6.WebBrowser.WebInspector.html#WebInspector.setView" />
-      <keyword name="Whitespace" id="Whitespace" ref="eric6.Plugins.CheckerPlugins.Tabnanny.Tabnanny.html#Whitespace" />
-      <keyword name="Whitespace (Constructor)" id="Whitespace (Constructor)" ref="eric6.Plugins.CheckerPlugins.Tabnanny.Tabnanny.html#Whitespace.__init__" />
-      <keyword name="Whitespace.equal" id="Whitespace.equal" ref="eric6.Plugins.CheckerPlugins.Tabnanny.Tabnanny.html#Whitespace.equal" />
-      <keyword name="Whitespace.indent_level" id="Whitespace.indent_level" ref="eric6.Plugins.CheckerPlugins.Tabnanny.Tabnanny.html#Whitespace.indent_level" />
-      <keyword name="Whitespace.less" id="Whitespace.less" ref="eric6.Plugins.CheckerPlugins.Tabnanny.Tabnanny.html#Whitespace.less" />
-      <keyword name="Whitespace.longest_run_of_spaces" id="Whitespace.longest_run_of_spaces" ref="eric6.Plugins.CheckerPlugins.Tabnanny.Tabnanny.html#Whitespace.longest_run_of_spaces" />
-      <keyword name="Whitespace.not_equal_witness" id="Whitespace.not_equal_witness" ref="eric6.Plugins.CheckerPlugins.Tabnanny.Tabnanny.html#Whitespace.not_equal_witness" />
-      <keyword name="Whitespace.not_less_witness" id="Whitespace.not_less_witness" ref="eric6.Plugins.CheckerPlugins.Tabnanny.Tabnanny.html#Whitespace.not_less_witness" />
       <keyword name="WidgetArea" id="WidgetArea" ref="eric6.Tools.TRPreviewer.html#WidgetArea" />
       <keyword name="WidgetArea (Constructor)" id="WidgetArea (Constructor)" ref="eric6.Tools.TRPreviewer.html#WidgetArea.__init__" />
       <keyword name="WidgetArea.__findWidget" id="WidgetArea.__findWidget" ref="eric6.Tools.TRPreviewer.html#WidgetArea.__findWidget" />
@@ -17000,7 +16875,6 @@
       <keyword name="_ClbrBase" id="_ClbrBase" ref="eric6.Utilities.ClassBrowsers.ClbrBaseClasses.html#_ClbrBase" />
       <keyword name="_ClbrBase (Constructor)" id="_ClbrBase (Constructor)" ref="eric6.Utilities.ClassBrowsers.ClbrBaseClasses.html#_ClbrBase.__init__" />
       <keyword name="_ClbrBase.setEndLine" id="_ClbrBase.setEndLine" ref="eric6.Utilities.ClassBrowsers.ClbrBaseClasses.html#_ClbrBase.setEndLine" />
-      <keyword name="__check" id="__check" ref="eric6.Plugins.CheckerPlugins.Tabnanny.Tabnanny.html#__check" />
       <keyword name="__checkCodeStyle" id="__checkCodeStyle" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleChecker.html#__checkCodeStyle" />
       <keyword name="__checkSyntax" id="__checkSyntax" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleChecker.html#__checkSyntax" />
       <keyword name="__getMasterPassword" id="__getMasterPassword" ref="eric6.Utilities.crypto.__init__.html#__getMasterPassword" />
@@ -17056,8 +16930,6 @@
       <keyword name="assert (Module)" id="assert (Module)" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.assert.html" />
       <keyword name="awsHardcodedPassword (Module)" id="awsHardcodedPassword (Module)" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.awsHardcodedPassword.html" />
       <keyword name="bare_except" id="bare_except" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#bare_except" />
-      <keyword name="batchCheck" id="batchCheck" ref="eric6.Plugins.CheckerPlugins.Tabnanny.Tabnanny.html#batchCheck" />
-      <keyword name="binplistlib (Module)" id="binplistlib (Module)" ref="eric6.Utilities.binplistlib.html" />
       <keyword name="blackListCalls (Module)" id="blackListCalls (Module)" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.blackListCalls.html" />
       <keyword name="blackListImports (Module)" id="blackListImports (Module)" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.blackListImports.html" />
       <keyword name="blank_lines" id="blank_lines" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#blank_lines" />
@@ -17065,7 +16937,6 @@
       <keyword name="break_before_binary_operator" id="break_before_binary_operator" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#break_before_binary_operator" />
       <keyword name="certificateValidation (Module)" id="certificateValidation (Module)" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.certificateValidation.html" />
       <keyword name="changeRememberedMaster" id="changeRememberedMaster" ref="eric6.Utilities.crypto.__init__.html#changeRememberedMaster" />
-      <keyword name="check" id="check" ref="eric6.Plugins.CheckerPlugins.Tabnanny.Tabnanny.html#check" />
       <keyword name="checkAssertUsed" id="checkAssertUsed" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.assert.html#checkAssertUsed" />
       <keyword name="checkBindAllInterfaces" id="checkBindAllInterfaces" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.generalBindAllInterfaces.html#checkBindAllInterfaces" />
       <keyword name="checkBlacklist" id="checkBlacklist" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.blackListCalls.html#checkBlacklist" />
@@ -17347,7 +17218,6 @@
       <keyword name="extraneous_whitespace" id="extraneous_whitespace" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#extraneous_whitespace" />
       <keyword name="factory" id="factory" ref="eric6.VCS.__init__.html#factory" />
       <keyword name="factory" id="factory" ref="eric6.ViewManager.__init__.html#factory" />
-      <keyword name="fetch (Module)" id="fetch (Module)" ref="eric6.Plugins.VcsPlugins.vcsMercurial.FetchExtension.fetch.html" />
       <keyword name="filename_match" id="filename_match" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#filename_match" />
       <keyword name="filterAnsiSequences" id="filterAnsiSequences" ref="eric6.Utilities.__init__.html#filterAnsiSequences" />
       <keyword name="filterCharsFromFilename" id="filterCharsFromFilename" ref="eric6.WebBrowser.Tools.WebBrowserTools.html#filterCharsFromFilename" />
@@ -17360,7 +17230,6 @@
       <keyword name="flashDataPathForOS" id="flashDataPathForOS" ref="eric6.WebBrowser.FlashCookieManager.FlashCookieUtilities.html#flashDataPathForOS" />
       <keyword name="flaskDebug (Module)" id="flaskDebug (Module)" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.flaskDebug.html" />
       <keyword name="formatTime" id="formatTime" ref="eric6.Plugins.VcsPlugins.vcsPySvn.SvnUtilities.html#formatTime" />
-      <keyword name="format_witnesses" id="format_witnesses" ref="eric6.Plugins.CheckerPlugins.Tabnanny.Tabnanny.html#format_witnesses" />
       <keyword name="formatargvalues" id="formatargvalues" ref="eric6.DebugClients.Python.DebugUtilities.html#formatargvalues" />
       <keyword name="fromNativeSeparators" id="fromNativeSeparators" ref="eric6.Utilities.__init__.html#fromNativeSeparators" />
       <keyword name="fstat" id="fstat" ref="eric6.MicroPython.MicroPythonFileSystemUtilities.html#fstat" />
@@ -17598,7 +17467,6 @@
       <keyword name="initBatchService" id="initBatchService" ref="eric6.Plugins.CheckerPlugins.SyntaxChecker.jsCheckSyntax.html#initBatchService" />
       <keyword name="initBatchService" id="initBatchService" ref="eric6.Plugins.CheckerPlugins.SyntaxChecker.jsonCheckSyntax.html#initBatchService" />
       <keyword name="initBatchService" id="initBatchService" ref="eric6.Plugins.CheckerPlugins.SyntaxChecker.yamlCheckSyntax.html#initBatchService" />
-      <keyword name="initBatchService" id="initBatchService" ref="eric6.Plugins.CheckerPlugins.Tabnanny.Tabnanny.html#initBatchService" />
       <keyword name="initDebugger" id="initDebugger" ref="eric6.DebugClients.Python.eric6dbgstub.html#initDebugger" />
       <keyword name="initGlobals" id="initGlobals" ref="install-debugclients.html#initGlobals" />
       <keyword name="initGlobals" id="initGlobals" ref="install.html#initGlobals" />
@@ -17613,7 +17481,6 @@
       <keyword name="initService" id="initService" ref="eric6.Plugins.CheckerPlugins.SyntaxChecker.jsCheckSyntax.html#initService" />
       <keyword name="initService" id="initService" ref="eric6.Plugins.CheckerPlugins.SyntaxChecker.jsonCheckSyntax.html#initService" />
       <keyword name="initService" id="initService" ref="eric6.Plugins.CheckerPlugins.SyntaxChecker.yamlCheckSyntax.html#initService" />
-      <keyword name="initService" id="initService" ref="eric6.Plugins.CheckerPlugins.Tabnanny.Tabnanny.html#initService" />
       <keyword name="initializeResourceSearchPath" id="initializeResourceSearchPath" ref="eric6.Toolbox.Startup.html#initializeResourceSearchPath" />
       <keyword name="injectionParamiko (Module)" id="injectionParamiko (Module)" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.injectionParamiko.html" />
       <keyword name="injectionShell (Module)" id="injectionShell (Module)" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.injectionShell.html" />
@@ -17660,7 +17527,6 @@
       <keyword name="isVisible" id="isVisible" ref="eric6.MicroPython.MicroPythonFileSystemUtilities.html#isVisible" />
       <keyword name="isWaylandSession" id="isWaylandSession" ref="eric6.Globals.__init__.html#isWaylandSession" />
       <keyword name="isWindowsPlatform" id="isWindowsPlatform" ref="eric6.Globals.__init__.html#isWindowsPlatform" />
-      <keyword name="is_stream_binary_plist" id="is_stream_binary_plist" ref="eric6.Utilities.binplistlib.html#is_stream_binary_plist" />
       <keyword name="is_string_literal" id="is_string_literal" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#is_string_literal" />
       <keyword name="isinpath" id="isinpath" ref="eric6.Utilities.__init__.html#isinpath" />
       <keyword name="jinja2Templates (Module)" id="jinja2Templates (Module)" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.jinja2Templates.html" />
@@ -17781,7 +17647,6 @@
       <keyword name="previewPix" id="previewPix" ref="eric6.Plugins.PluginVmTabview.html#previewPix" />
       <keyword name="printerr" id="printerr" ref="eric6.DebugClients.Python.DebugBase.html#printerr" />
       <keyword name="process_options" id="process_options" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#process_options" />
-      <keyword name="process_tokens" id="process_tokens" ref="eric6.Plugins.CheckerPlugins.Tabnanny.Tabnanny.html#process_tokens" />
       <keyword name="protoclbr (Module)" id="protoclbr (Module)" ref="eric6.Utilities.ClassBrowsers.protoclbr.html" />
       <keyword name="proxyAuthenticationRequired" id="proxyAuthenticationRequired" ref="eric6.E5Network.E5NetworkProxyFactory.html#proxyAuthenticationRequired" />
       <keyword name="purge (Module)" id="purge (Module)" ref="eric6.Plugins.VcsPlugins.vcsMercurial.PurgeExtension.purge.html" />
@@ -17814,8 +17679,6 @@
       <keyword name="readEncodedFileWithEncoding" id="readEncodedFileWithEncoding" ref="eric6.Utilities.__init__.html#readEncodedFileWithEncoding" />
       <keyword name="readEncodedFileWithHash" id="readEncodedFileWithHash" ref="eric6.Utilities.__init__.html#readEncodedFileWithHash" />
       <keyword name="readModule" id="readModule" ref="eric6.Utilities.ModuleParser.html#readModule" />
-      <keyword name="readPlist" id="readPlist" ref="eric6.Utilities.binplistlib.html#readPlist" />
-      <keyword name="readPlistFromBytes" id="readPlistFromBytes" ref="eric6.Utilities.binplistlib.html#readPlistFromBytes" />
       <keyword name="readShortcuts" id="readShortcuts" ref="eric6.Preferences.Shortcuts.html#readShortcuts" />
       <keyword name="readStringFromStream" id="readStringFromStream" ref="eric6.Utilities.__init__.html#readStringFromStream" />
       <keyword name="readToolGroups" id="readToolGroups" ref="eric6.Preferences.__init__.html#readToolGroups" />
@@ -18029,12 +17892,9 @@
       <keyword name="worker" id="worker" ref="eric6.Plugins.CheckerPlugins.SyntaxChecker.jsCheckSyntax.html#worker" />
       <keyword name="worker" id="worker" ref="eric6.Plugins.CheckerPlugins.SyntaxChecker.jsonCheckSyntax.html#worker" />
       <keyword name="worker" id="worker" ref="eric6.Plugins.CheckerPlugins.SyntaxChecker.yamlCheckSyntax.html#worker" />
-      <keyword name="worker" id="worker" ref="eric6.Plugins.CheckerPlugins.Tabnanny.Tabnanny.html#worker" />
       <keyword name="wrapperNames" id="wrapperNames" ref="install.html#wrapperNames" />
       <keyword name="wrapperNames" id="wrapperNames" ref="uninstall.html#wrapperNames" />
       <keyword name="writeEncodedFile" id="writeEncodedFile" ref="eric6.Utilities.__init__.html#writeEncodedFile" />
-      <keyword name="writePlist" id="writePlist" ref="eric6.Utilities.binplistlib.html#writePlist" />
-      <keyword name="writePlistToBytes" id="writePlistToBytes" ref="eric6.Utilities.binplistlib.html#writePlistToBytes" />
       <keyword name="yamlCheckSyntax (Module)" id="yamlCheckSyntax (Module)" ref="eric6.Plugins.CheckerPlugins.SyntaxChecker.yamlCheckSyntax.html" />
       <keyword name="yamlLoad (Module)" id="yamlLoad (Module)" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.yamlLoad.html" />
       <keyword name="yamlSyntaxBatchCheck" id="yamlSyntaxBatchCheck" ref="eric6.Plugins.CheckerPlugins.SyntaxChecker.yamlCheckSyntax.html#yamlSyntaxBatchCheck" />
@@ -18324,8 +18184,6 @@
       <file>eric6.Plugins.CheckerPlugins.SyntaxChecker.jsCheckSyntax.html</file>
       <file>eric6.Plugins.CheckerPlugins.SyntaxChecker.jsonCheckSyntax.html</file>
       <file>eric6.Plugins.CheckerPlugins.SyntaxChecker.yamlCheckSyntax.html</file>
-      <file>eric6.Plugins.CheckerPlugins.Tabnanny.Tabnanny.html</file>
-      <file>eric6.Plugins.CheckerPlugins.Tabnanny.TabnannyDialog.html</file>
       <file>eric6.Plugins.DocumentationPlugins.Ericapi.EricapiConfigDialog.html</file>
       <file>eric6.Plugins.DocumentationPlugins.Ericapi.EricapiExecDialog.html</file>
       <file>eric6.Plugins.DocumentationPlugins.Ericdoc.EricdocConfigDialog.html</file>
@@ -18335,7 +18193,6 @@
       <file>eric6.Plugins.PluginEricapi.html</file>
       <file>eric6.Plugins.PluginEricdoc.html</file>
       <file>eric6.Plugins.PluginSyntaxChecker.html</file>
-      <file>eric6.Plugins.PluginTabnanny.html</file>
       <file>eric6.Plugins.PluginTranslator.html</file>
       <file>eric6.Plugins.PluginVcsGit.html</file>
       <file>eric6.Plugins.PluginVcsMercurial.html</file>
@@ -18431,9 +18288,6 @@
       <file>eric6.Plugins.VcsPlugins.vcsMercurial.CloseheadExtension.closehead.html</file>
       <file>eric6.Plugins.VcsPlugins.vcsMercurial.Config.html</file>
       <file>eric6.Plugins.VcsPlugins.vcsMercurial.ConfigurationPage.MercurialPage.html</file>
-      <file>eric6.Plugins.VcsPlugins.vcsMercurial.FetchExtension.HgFetchDialog.html</file>
-      <file>eric6.Plugins.VcsPlugins.vcsMercurial.FetchExtension.ProjectHelper.html</file>
-      <file>eric6.Plugins.VcsPlugins.vcsMercurial.FetchExtension.fetch.html</file>
       <file>eric6.Plugins.VcsPlugins.vcsMercurial.GpgExtension.HgGpgSignDialog.html</file>
       <file>eric6.Plugins.VcsPlugins.vcsMercurial.GpgExtension.HgGpgSignaturesDialog.html</file>
       <file>eric6.Plugins.VcsPlugins.vcsMercurial.GpgExtension.ProjectHelper.html</file>
@@ -18880,7 +18734,6 @@
       <file>eric6.Utilities.PasswordChecker.html</file>
       <file>eric6.Utilities.PySideImporter.html</file>
       <file>eric6.Utilities.__init__.html</file>
-      <file>eric6.Utilities.binplistlib.html</file>
       <file>eric6.Utilities.crypto.__init__.html</file>
       <file>eric6.Utilities.crypto.py3AES.html</file>
       <file>eric6.Utilities.crypto.py3PBKDF2.html</file>
@@ -19162,7 +19015,6 @@
       <file>index-eric6.Plugins.VcsPlugins.vcsGit.html</file>
       <file>index-eric6.Plugins.VcsPlugins.vcsMercurial.CloseheadExtension.html</file>
       <file>index-eric6.Plugins.VcsPlugins.vcsMercurial.ConfigurationPage.html</file>
-      <file>index-eric6.Plugins.VcsPlugins.vcsMercurial.FetchExtension.html</file>
       <file>index-eric6.Plugins.VcsPlugins.vcsMercurial.GpgExtension.html</file>
       <file>index-eric6.Plugins.VcsPlugins.vcsMercurial.HisteditExtension.html</file>
       <file>index-eric6.Plugins.VcsPlugins.vcsMercurial.LargefilesExtension.html</file>
--- a/eric6/Documentation/Source/eric6.Plugins.CheckerPlugins.Tabnanny.Tabnanny.html	Sat Aug 01 10:39:12 2020 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,616 +0,0 @@
-<!DOCTYPE html>
-<html><head>
-<title>eric6.Plugins.CheckerPlugins.Tabnanny.Tabnanny</title>
-<meta charset="UTF-8">
-<style>
-body {
-    background: #EDECE6;
-    margin: 0em 1em 10em 1em;
-    color: black;
-}
-
-h1 { color: white; background: #85774A; }
-h2 { color: white; background: #85774A; }
-h3 { color: white; background: #9D936E; }
-h4 { color: white; background: #9D936E; }
-    
-a { color: #BA6D36; }
-
-</style>
-</head>
-<body>
-<a NAME="top" ID="top"></a>
-<h1>eric6.Plugins.CheckerPlugins.Tabnanny.Tabnanny</h1>
-
-<p>
-The Tab Nanny despises ambiguous indentation.  She knows no mercy.
-</p>
-<p>
-tabnanny -- Detection of ambiguous indentation
-</p>
-<p>
-For the time being this module is intended to be called as a script.
-However it is possible to import it into an IDE and use the function
-check() described below.
-</p>
-<p>
-Warning: The API provided by this module is likely to change in future
-releases; such changes may not be backward compatible.
-</p>
-<p>
-This is a modified version to make the original tabnanny better suitable
-for being called from within the eric6 IDE.
-</p>
-<dl>
-
-<dt>Raises <b>ValueError</b>:</dt>
-<dd>
-The tokenize module is too old.
-</dd>
-</dl>
-<h3>Global Attributes</h3>
-
-<table>
-<tr><td>__all__</td></tr><tr><td>__version__</td></tr>
-</table>
-<h3>Classes</h3>
-
-<table>
-
-<tr>
-<td><a href="#NannyNag">NannyNag</a></td>
-<td>Class implementing an exception for indentation issues.</td>
-</tr>
-<tr>
-<td><a href="#Whitespace">Whitespace</a></td>
-<td>Class implementing the whitespace checker.</td>
-</tr>
-</table>
-<h3>Functions</h3>
-
-<table>
-
-<tr>
-<td><a href="#__check">__check</a></td>
-<td>Private function to check one Python source file for whitespace related problems.</td>
-</tr>
-<tr>
-<td><a href="#batchCheck">batchCheck</a></td>
-<td>Module function to check a batch of files for whitespace related problems.</td>
-</tr>
-<tr>
-<td><a href="#check">check</a></td>
-<td>Private function to check one Python source file for whitespace related problems.</td>
-</tr>
-<tr>
-<td><a href="#format_witnesses">format_witnesses</a></td>
-<td>Function to format the witnesses as a readable string.</td>
-</tr>
-<tr>
-<td><a href="#initBatchService">initBatchService</a></td>
-<td>Initialize the batch service and return the entry point.</td>
-</tr>
-<tr>
-<td><a href="#initService">initService</a></td>
-<td>Initialize the service and return the entry point.</td>
-</tr>
-<tr>
-<td><a href="#process_tokens">process_tokens</a></td>
-<td>Function processing all tokens generated by a tokenizer run.</td>
-</tr>
-<tr>
-<td><a href="#worker">worker</a></td>
-<td>Module function acting as the parallel worker for the style check.</td>
-</tr>
-</table>
-<hr />
-<hr />
-<a NAME="NannyNag" ID="NannyNag"></a>
-<h2>NannyNag</h2>
-
-<p>
-    Class implementing an exception for indentation issues.
-</p>
-<p>
-    Raised by tokeneater() if detecting an ambiguous indent.
-    Captured and handled in check().
-</p>
-<h3>Derived from</h3>
-Exception
-<h3>Class Attributes</h3>
-
-<table>
-<tr><td>None</td></tr>
-</table>
-<h3>Class Methods</h3>
-
-<table>
-<tr><td>None</td></tr>
-</table>
-<h3>Methods</h3>
-
-<table>
-
-<tr>
-<td><a href="#NannyNag.__init__">NannyNag</a></td>
-<td>Constructor</td>
-</tr>
-<tr>
-<td><a href="#NannyNag.get_line">get_line</a></td>
-<td>Public method to retrieve the offending line.</td>
-</tr>
-<tr>
-<td><a href="#NannyNag.get_lineno">get_lineno</a></td>
-<td>Public method to retrieve the line number.</td>
-</tr>
-<tr>
-<td><a href="#NannyNag.get_msg">get_msg</a></td>
-<td>Public method to retrieve the message.</td>
-</tr>
-</table>
-<h3>Static Methods</h3>
-
-<table>
-<tr><td>None</td></tr>
-</table>
-
-<a NAME="NannyNag.__init__" ID="NannyNag.__init__"></a>
-<h4>NannyNag (Constructor)</h4>
-<b>NannyNag</b>(<i>lineno, msg, line</i>)
-
-<p>
-        Constructor
-</p>
-<dl>
-
-<dt><i>lineno</i></dt>
-<dd>
-Line number of the ambiguous indent.
-</dd>
-<dt><i>msg</i></dt>
-<dd>
-Descriptive message assigned to this problem.
-</dd>
-<dt><i>line</i></dt>
-<dd>
-The offending source line.
-</dd>
-</dl>
-<a NAME="NannyNag.get_line" ID="NannyNag.get_line"></a>
-<h4>NannyNag.get_line</h4>
-<b>get_line</b>(<i></i>)
-
-<p>
-        Public method to retrieve the offending line.
-</p>
-<dl>
-<dt>Returns:</dt>
-<dd>
-The line of code (string)
-</dd>
-</dl>
-<a NAME="NannyNag.get_lineno" ID="NannyNag.get_lineno"></a>
-<h4>NannyNag.get_lineno</h4>
-<b>get_lineno</b>(<i></i>)
-
-<p>
-        Public method to retrieve the line number.
-</p>
-<dl>
-<dt>Returns:</dt>
-<dd>
-The line number (integer)
-</dd>
-</dl>
-<a NAME="NannyNag.get_msg" ID="NannyNag.get_msg"></a>
-<h4>NannyNag.get_msg</h4>
-<b>get_msg</b>(<i></i>)
-
-<p>
-        Public method to retrieve the message.
-</p>
-<dl>
-<dt>Returns:</dt>
-<dd>
-The error message (string)
-</dd>
-</dl>
-<div align="right"><a href="#top">Up</a></div>
-<hr />
-<hr />
-<a NAME="Whitespace" ID="Whitespace"></a>
-<h2>Whitespace</h2>
-
-<p>
-    Class implementing the whitespace checker.
-</p>
-<h3>Derived from</h3>
-object
-<h3>Class Attributes</h3>
-
-<table>
-<tr><td>None</td></tr>
-</table>
-<h3>Class Methods</h3>
-
-<table>
-<tr><td>None</td></tr>
-</table>
-<h3>Methods</h3>
-
-<table>
-
-<tr>
-<td><a href="#Whitespace.__init__">Whitespace</a></td>
-<td>Constructor</td>
-</tr>
-<tr>
-<td><a href="#Whitespace.equal">equal</a></td>
-<td>Public method to compare the indentation levels of two Whitespace objects for equality.</td>
-</tr>
-<tr>
-<td><a href="#Whitespace.indent_level">indent_level</a></td>
-<td>Public method to determine the indentation level.</td>
-</tr>
-<tr>
-<td><a href="#Whitespace.less">less</a></td>
-<td>Public method to compare the indentation level against another Whitespace objects to be smaller.</td>
-</tr>
-<tr>
-<td><a href="#Whitespace.longest_run_of_spaces">longest_run_of_spaces</a></td>
-<td>Public method to calculate the length of longest contiguous run of spaces.</td>
-</tr>
-<tr>
-<td><a href="#Whitespace.not_equal_witness">not_equal_witness</a></td>
-<td>Public method to calculate a tuple of witnessing tab size.</td>
-</tr>
-<tr>
-<td><a href="#Whitespace.not_less_witness">not_less_witness</a></td>
-<td>Public method to calculate a tuple of witnessing tab size.</td>
-</tr>
-</table>
-<h3>Static Methods</h3>
-
-<table>
-<tr><td>None</td></tr>
-</table>
-
-<a NAME="Whitespace.__init__" ID="Whitespace.__init__"></a>
-<h4>Whitespace (Constructor)</h4>
-<b>Whitespace</b>(<i>ws</i>)
-
-<p>
-        Constructor
-</p>
-<dl>
-
-<dt><i>ws</i></dt>
-<dd>
-The string to be checked.
-</dd>
-</dl>
-<a NAME="Whitespace.equal" ID="Whitespace.equal"></a>
-<h4>Whitespace.equal</h4>
-<b>equal</b>(<i>other</i>)
-
-<p>
-        Public method to compare the indentation levels of two Whitespace
-        objects for equality.
-</p>
-<dl>
-
-<dt><i>other</i></dt>
-<dd>
-Whitespace object to compare against.
-</dd>
-</dl>
-<dl>
-<dt>Returns:</dt>
-<dd>
-True, if we compare equal against the other Whitespace object.
-</dd>
-</dl>
-<a NAME="Whitespace.indent_level" ID="Whitespace.indent_level"></a>
-<h4>Whitespace.indent_level</h4>
-<b>indent_level</b>(<i>tabsize</i>)
-
-<p>
-        Public method to determine the indentation level.
-</p>
-<dl>
-
-<dt><i>tabsize</i></dt>
-<dd>
-The length of a tab stop. (integer)
-</dd>
-</dl>
-<dl>
-<dt>Returns:</dt>
-<dd>
-indentation level (integer)
-</dd>
-</dl>
-<a NAME="Whitespace.less" ID="Whitespace.less"></a>
-<h4>Whitespace.less</h4>
-<b>less</b>(<i>other</i>)
-
-<p>
-        Public method to compare the indentation level against another
-        Whitespace objects to be smaller.
-</p>
-<dl>
-
-<dt><i>other</i></dt>
-<dd>
-Whitespace object to compare against.
-</dd>
-</dl>
-<dl>
-<dt>Returns:</dt>
-<dd>
-True, if we compare less against the other Whitespace object.
-</dd>
-</dl>
-<a NAME="Whitespace.longest_run_of_spaces" ID="Whitespace.longest_run_of_spaces"></a>
-<h4>Whitespace.longest_run_of_spaces</h4>
-<b>longest_run_of_spaces</b>(<i></i>)
-
-<p>
-        Public method to calculate the length of longest contiguous run of
-        spaces.
-</p>
-<dl>
-<dt>Returns:</dt>
-<dd>
-The length of longest contiguous run of spaces (whether or not
-            preceding a tab)
-</dd>
-</dl>
-<a NAME="Whitespace.not_equal_witness" ID="Whitespace.not_equal_witness"></a>
-<h4>Whitespace.not_equal_witness</h4>
-<b>not_equal_witness</b>(<i>other</i>)
-
-<p>
-        Public method to calculate a tuple of witnessing tab size.
-</p>
-<p>
-        Intended to be used after not self.equal(other) is known, in which
-        case it will return at least one witnessing tab size.
-</p>
-<dl>
-
-<dt><i>other</i></dt>
-<dd>
-Whitespace object to calculate against.
-</dd>
-</dl>
-<dl>
-<dt>Returns:</dt>
-<dd>
-A list of tuples (ts, i1, i2) such that
-            i1 == self.indent_level(ts) != other.indent_level(ts) == i2.
-</dd>
-</dl>
-<a NAME="Whitespace.not_less_witness" ID="Whitespace.not_less_witness"></a>
-<h4>Whitespace.not_less_witness</h4>
-<b>not_less_witness</b>(<i>other</i>)
-
-<p>
-        Public method to calculate a tuple of witnessing tab size.
-</p>
-<p>
-        Intended to be used after not self.less(other is known, in which
-        case it will return at least one witnessing tab size.
-</p>
-<dl>
-
-<dt><i>other</i></dt>
-<dd>
-Whitespace object to calculate against.
-</dd>
-</dl>
-<dl>
-<dt>Returns:</dt>
-<dd>
-A list of tuples (ts, i1, i2) such that
-            i1 == self.indent_level(ts) >= other.indent_level(ts) == i2.
-</dd>
-</dl>
-<div align="right"><a href="#top">Up</a></div>
-<hr />
-<hr />
-<a NAME="__check" ID="__check"></a>
-<h2>__check</h2>
-<b>__check</b>(<i>file, text=""</i>)
-
-<p>
-    Private function to check one Python source file for whitespace related
-    problems.
-</p>
-<dl>
-
-<dt><i>file</i></dt>
-<dd>
-source filename (string)
-</dd>
-<dt><i>text</i></dt>
-<dd>
-source text (string)
-</dd>
-</dl>
-<dl>
-<dt>Returns:</dt>
-<dd>
-A tuple indicating status (True = an error was found), the
-        filename, the linenumber and the error message
-        (boolean, string, string). The values are only
-        valid, if the status is True.
-</dd>
-</dl>
-<div align="right"><a href="#top">Up</a></div>
-<hr />
-<hr />
-<a NAME="batchCheck" ID="batchCheck"></a>
-<h2>batchCheck</h2>
-<b>batchCheck</b>(<i>argumentsList, send, fx, cancelled, maxProcesses=0</i>)
-
-<p>
-    Module function to check a batch of files for whitespace related problems.
-</p>
-<dl>
-
-<dt><i>argumentsList</i> (list)</dt>
-<dd>
-list of arguments tuples as given for check
-</dd>
-<dt><i>send</i> (func)</dt>
-<dd>
-reference to send function
-</dd>
-<dt><i>fx</i> (str)</dt>
-<dd>
-registered service name
-</dd>
-<dt><i>cancelled</i> (func)</dt>
-<dd>
-reference to function checking for a cancellation
-</dd>
-<dt><i>maxProcesses</i> (int)</dt>
-<dd>
-number of processes to be used
-</dd>
-</dl>
-<div align="right"><a href="#top">Up</a></div>
-<hr />
-<hr />
-<a NAME="check" ID="check"></a>
-<h2>check</h2>
-<b>check</b>(<i>file, text=""</i>)
-
-<p>
-    Private function to check one Python source file for whitespace related
-    problems.
-</p>
-<dl>
-
-<dt><i>file</i></dt>
-<dd>
-source filename (string)
-</dd>
-<dt><i>text</i></dt>
-<dd>
-source text (string)
-</dd>
-</dl>
-<dl>
-<dt>Returns:</dt>
-<dd>
-A tuple indicating status (True = an error was found), the
-        filename, the linenumber and the error message
-        (boolean, string, string, string). The values are only
-        valid, if the status is True.
-</dd>
-</dl>
-<div align="right"><a href="#top">Up</a></div>
-<hr />
-<hr />
-<a NAME="format_witnesses" ID="format_witnesses"></a>
-<h2>format_witnesses</h2>
-<b>format_witnesses</b>(<i>w</i>)
-
-<p>
-    Function to format the witnesses as a readable string.
-</p>
-<dl>
-
-<dt><i>w</i></dt>
-<dd>
-A list of witnesses
-</dd>
-</dl>
-<dl>
-<dt>Returns:</dt>
-<dd>
-A formated string of the witnesses.
-</dd>
-</dl>
-<div align="right"><a href="#top">Up</a></div>
-<hr />
-<hr />
-<a NAME="initBatchService" ID="initBatchService"></a>
-<h2>initBatchService</h2>
-<b>initBatchService</b>(<i></i>)
-
-<p>
-    Initialize the batch service and return the entry point.
-</p>
-<dl>
-<dt>Returns:</dt>
-<dd>
-the entry point for the background client (function)
-</dd>
-</dl>
-<div align="right"><a href="#top">Up</a></div>
-<hr />
-<hr />
-<a NAME="initService" ID="initService"></a>
-<h2>initService</h2>
-<b>initService</b>(<i></i>)
-
-<p>
-    Initialize the service and return the entry point.
-</p>
-<dl>
-<dt>Returns:</dt>
-<dd>
-the entry point for the background client (function)
-</dd>
-</dl>
-<div align="right"><a href="#top">Up</a></div>
-<hr />
-<hr />
-<a NAME="process_tokens" ID="process_tokens"></a>
-<h2>process_tokens</h2>
-<b>process_tokens</b>(<i>tokens</i>)
-
-<p>
-    Function processing all tokens generated by a tokenizer run.
-</p>
-<dl>
-
-<dt><i>tokens</i></dt>
-<dd>
-list of tokens
-</dd>
-</dl>
-<dl>
-
-<dt>Raises <b>NannyNag</b>:</dt>
-<dd>
-raised to indicate an indentation error
-</dd>
-</dl>
-<div align="right"><a href="#top">Up</a></div>
-<hr />
-<hr />
-<a NAME="worker" ID="worker"></a>
-<h2>worker</h2>
-<b>worker</b>(<i>inputQueue, outputQueue</i>)
-
-<p>
-    Module function acting as the parallel worker for the style check.
-</p>
-<dl>
-
-<dt><i>inputQueue</i></dt>
-<dd>
-input queue (multiprocessing.Queue)
-</dd>
-<dt><i>outputQueue</i></dt>
-<dd>
-output queue (multiprocessing.Queue)
-</dd>
-</dl>
-<div align="right"><a href="#top">Up</a></div>
-<hr />
-</body></html>
\ No newline at end of file
--- a/eric6/Documentation/Source/eric6.Plugins.CheckerPlugins.Tabnanny.TabnannyDialog.html	Sat Aug 01 10:39:12 2020 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,363 +0,0 @@
-<!DOCTYPE html>
-<html><head>
-<title>eric6.Plugins.CheckerPlugins.Tabnanny.TabnannyDialog</title>
-<meta charset="UTF-8">
-<style>
-body {
-    background: #EDECE6;
-    margin: 0em 1em 10em 1em;
-    color: black;
-}
-
-h1 { color: white; background: #85774A; }
-h2 { color: white; background: #85774A; }
-h3 { color: white; background: #9D936E; }
-h4 { color: white; background: #9D936E; }
-    
-a { color: #BA6D36; }
-
-</style>
-</head>
-<body>
-<a NAME="top" ID="top"></a>
-<h1>eric6.Plugins.CheckerPlugins.Tabnanny.TabnannyDialog</h1>
-
-<p>
-Module implementing a dialog to show the output of the tabnanny command
-process.
-</p>
-<h3>Global Attributes</h3>
-
-<table>
-<tr><td>None</td></tr>
-</table>
-<h3>Classes</h3>
-
-<table>
-
-<tr>
-<td><a href="#TabnannyDialog">TabnannyDialog</a></td>
-<td>Class implementing a dialog to show the results of the tabnanny check run.</td>
-</tr>
-</table>
-<h3>Functions</h3>
-
-<table>
-<tr><td>None</td></tr>
-</table>
-<hr />
-<hr />
-<a NAME="TabnannyDialog" ID="TabnannyDialog"></a>
-<h2>TabnannyDialog</h2>
-
-<p>
-    Class implementing a dialog to show the results of the tabnanny check run.
-</p>
-<h3>Derived from</h3>
-QDialog, Ui_TabnannyDialog
-<h3>Class Attributes</h3>
-
-<table>
-<tr><td>filenameRole</td></tr>
-</table>
-<h3>Class Methods</h3>
-
-<table>
-<tr><td>None</td></tr>
-</table>
-<h3>Methods</h3>
-
-<table>
-
-<tr>
-<td><a href="#TabnannyDialog.__init__">TabnannyDialog</a></td>
-<td>Constructor</td>
-</tr>
-<tr>
-<td><a href="#TabnannyDialog.__batchFinished">__batchFinished</a></td>
-<td>Private slot handling the completion of a batch job.</td>
-</tr>
-<tr>
-<td><a href="#TabnannyDialog.__createErrorItem">__createErrorItem</a></td>
-<td>Private slot to create a new error item in the result list.</td>
-</tr>
-<tr>
-<td><a href="#TabnannyDialog.__createResultItem">__createResultItem</a></td>
-<td>Private method to create an entry in the result list.</td>
-</tr>
-<tr>
-<td><a href="#TabnannyDialog.__finish">__finish</a></td>
-<td>Private slot called when the action or the user pressed the button.</td>
-</tr>
-<tr>
-<td><a href="#TabnannyDialog.__processError">__processError</a></td>
-<td>Private slot to process an error indication from the service.</td>
-</tr>
-<tr>
-<td><a href="#TabnannyDialog.__processResult">__processResult</a></td>
-<td>Private slot called after perfoming a style check on one file.</td>
-</tr>
-<tr>
-<td><a href="#TabnannyDialog.__resort">__resort</a></td>
-<td>Private method to resort the tree.</td>
-</tr>
-<tr>
-<td><a href="#TabnannyDialog.check">check</a></td>
-<td>Public method to start an indentation check for one file.</td>
-</tr>
-<tr>
-<td><a href="#TabnannyDialog.checkBatch">checkBatch</a></td>
-<td>Public method to start an indentation check batch job.</td>
-</tr>
-<tr>
-<td><a href="#TabnannyDialog.on_buttonBox_clicked">on_buttonBox_clicked</a></td>
-<td>Private slot called by a button of the button box clicked.</td>
-</tr>
-<tr>
-<td><a href="#TabnannyDialog.on_resultList_itemActivated">on_resultList_itemActivated</a></td>
-<td>Private slot to handle the activation of an item.</td>
-</tr>
-<tr>
-<td><a href="#TabnannyDialog.on_startButton_clicked">on_startButton_clicked</a></td>
-<td>Private slot to start a code metrics run.</td>
-</tr>
-<tr>
-<td><a href="#TabnannyDialog.prepare">prepare</a></td>
-<td>Public method to prepare the dialog with a list of filenames.</td>
-</tr>
-<tr>
-<td><a href="#TabnannyDialog.start">start</a></td>
-<td>Public slot to start the tabnanny check.</td>
-</tr>
-</table>
-<h3>Static Methods</h3>
-
-<table>
-<tr><td>None</td></tr>
-</table>
-
-<a NAME="TabnannyDialog.__init__" ID="TabnannyDialog.__init__"></a>
-<h4>TabnannyDialog (Constructor)</h4>
-<b>TabnannyDialog</b>(<i>indentCheckService, parent=None</i>)
-
-<p>
-        Constructor
-</p>
-<dl>
-
-<dt><i>indentCheckService</i></dt>
-<dd>
-reference to the service (IndentCheckService)
-</dd>
-<dt><i>parent</i></dt>
-<dd>
-The parent widget (QWidget).
-</dd>
-</dl>
-<a NAME="TabnannyDialog.__batchFinished" ID="TabnannyDialog.__batchFinished"></a>
-<h4>TabnannyDialog.__batchFinished</h4>
-<b>__batchFinished</b>(<i></i>)
-
-<p>
-        Private slot handling the completion of a batch job.
-</p>
-<a NAME="TabnannyDialog.__createErrorItem" ID="TabnannyDialog.__createErrorItem"></a>
-<h4>TabnannyDialog.__createErrorItem</h4>
-<b>__createErrorItem</b>(<i>filename, message</i>)
-
-<p>
-        Private slot to create a new error item in the result list.
-</p>
-<dl>
-
-<dt><i>filename</i> (str)</dt>
-<dd>
-name of the file
-</dd>
-<dt><i>message</i> (str)</dt>
-<dd>
-error message
-</dd>
-</dl>
-<a NAME="TabnannyDialog.__createResultItem" ID="TabnannyDialog.__createResultItem"></a>
-<h4>TabnannyDialog.__createResultItem</h4>
-<b>__createResultItem</b>(<i>filename, line, sourcecode</i>)
-
-<p>
-        Private method to create an entry in the result list.
-</p>
-<dl>
-
-<dt><i>filename</i></dt>
-<dd>
-filename of file (string)
-</dd>
-<dt><i>line</i></dt>
-<dd>
-linenumber of faulty source (integer or string)
-</dd>
-<dt><i>sourcecode</i></dt>
-<dd>
-faulty line of code (string)
-</dd>
-</dl>
-<a NAME="TabnannyDialog.__finish" ID="TabnannyDialog.__finish"></a>
-<h4>TabnannyDialog.__finish</h4>
-<b>__finish</b>(<i></i>)
-
-<p>
-        Private slot called when the action or the user pressed the button.
-</p>
-<a NAME="TabnannyDialog.__processError" ID="TabnannyDialog.__processError"></a>
-<h4>TabnannyDialog.__processError</h4>
-<b>__processError</b>(<i>fn, msg</i>)
-
-<p>
-        Private slot to process an error indication from the service.
-</p>
-<dl>
-
-<dt><i>fn</i> (str)</dt>
-<dd>
-filename of the file
-</dd>
-<dt><i>msg</i> (str)</dt>
-<dd>
-error message
-</dd>
-</dl>
-<a NAME="TabnannyDialog.__processResult" ID="TabnannyDialog.__processResult"></a>
-<h4>TabnannyDialog.__processResult</h4>
-<b>__processResult</b>(<i>fn, nok, line, error</i>)
-
-<p>
-        Private slot called after perfoming a style check on one file.
-</p>
-<dl>
-
-<dt><i>fn</i></dt>
-<dd>
-filename of the just checked file (str)
-</dd>
-<dt><i>nok</i></dt>
-<dd>
-flag if a problem was found (bool)
-</dd>
-<dt><i>line</i></dt>
-<dd>
-line number (str)
-</dd>
-<dt><i>error</i></dt>
-<dd>
-text of the problem (str)
-</dd>
-</dl>
-<a NAME="TabnannyDialog.__resort" ID="TabnannyDialog.__resort"></a>
-<h4>TabnannyDialog.__resort</h4>
-<b>__resort</b>(<i></i>)
-
-<p>
-        Private method to resort the tree.
-</p>
-<a NAME="TabnannyDialog.check" ID="TabnannyDialog.check"></a>
-<h4>TabnannyDialog.check</h4>
-<b>check</b>(<i>codestring=''</i>)
-
-<p>
-        Public method to start an indentation check for one file.
-</p>
-<p>
-        The results are reported to the __processResult slot.
-</p>
-<dl>
-
-<dt><i>codestring=</i></dt>
-<dd>
-optional sourcestring (str)
-</dd>
-</dl>
-<a NAME="TabnannyDialog.checkBatch" ID="TabnannyDialog.checkBatch"></a>
-<h4>TabnannyDialog.checkBatch</h4>
-<b>checkBatch</b>(<i></i>)
-
-<p>
-        Public method to start an indentation check batch job.
-</p>
-<p>
-        The results are reported to the __processResult slot.
-</p>
-<a NAME="TabnannyDialog.on_buttonBox_clicked" ID="TabnannyDialog.on_buttonBox_clicked"></a>
-<h4>TabnannyDialog.on_buttonBox_clicked</h4>
-<b>on_buttonBox_clicked</b>(<i>button</i>)
-
-<p>
-        Private slot called by a button of the button box clicked.
-</p>
-<dl>
-
-<dt><i>button</i></dt>
-<dd>
-button that was clicked (QAbstractButton)
-</dd>
-</dl>
-<a NAME="TabnannyDialog.on_resultList_itemActivated" ID="TabnannyDialog.on_resultList_itemActivated"></a>
-<h4>TabnannyDialog.on_resultList_itemActivated</h4>
-<b>on_resultList_itemActivated</b>(<i>itm, col</i>)
-
-<p>
-        Private slot to handle the activation of an item.
-</p>
-<dl>
-
-<dt><i>itm</i></dt>
-<dd>
-reference to the activated item (QTreeWidgetItem)
-</dd>
-<dt><i>col</i></dt>
-<dd>
-column the item was activated in (integer)
-</dd>
-</dl>
-<a NAME="TabnannyDialog.on_startButton_clicked" ID="TabnannyDialog.on_startButton_clicked"></a>
-<h4>TabnannyDialog.on_startButton_clicked</h4>
-<b>on_startButton_clicked</b>(<i></i>)
-
-<p>
-        Private slot to start a code metrics run.
-</p>
-<a NAME="TabnannyDialog.prepare" ID="TabnannyDialog.prepare"></a>
-<h4>TabnannyDialog.prepare</h4>
-<b>prepare</b>(<i>fileList, project</i>)
-
-<p>
-        Public method to prepare the dialog with a list of filenames.
-</p>
-<dl>
-
-<dt><i>fileList</i></dt>
-<dd>
-list of filenames (list of strings)
-</dd>
-<dt><i>project</i></dt>
-<dd>
-reference to the project object (Project)
-</dd>
-</dl>
-<a NAME="TabnannyDialog.start" ID="TabnannyDialog.start"></a>
-<h4>TabnannyDialog.start</h4>
-<b>start</b>(<i>fn</i>)
-
-<p>
-        Public slot to start the tabnanny check.
-</p>
-<dl>
-
-<dt><i>fn</i></dt>
-<dd>
-File or list of files or directory to be checked
-                (string or list of strings)
-</dd>
-</dl>
-<div align="right"><a href="#top">Up</a></div>
-<hr />
-</body></html>
\ No newline at end of file
--- a/eric6/Documentation/Source/eric6.Plugins.PluginTabnanny.html	Sat Aug 01 10:39:12 2020 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,430 +0,0 @@
-<!DOCTYPE html>
-<html><head>
-<title>eric6.Plugins.PluginTabnanny</title>
-<meta charset="UTF-8">
-<style>
-body {
-    background: #EDECE6;
-    margin: 0em 1em 10em 1em;
-    color: black;
-}
-
-h1 { color: white; background: #85774A; }
-h2 { color: white; background: #85774A; }
-h3 { color: white; background: #9D936E; }
-h4 { color: white; background: #9D936E; }
-    
-a { color: #BA6D36; }
-
-</style>
-</head>
-<body>
-<a NAME="top" ID="top"></a>
-<h1>eric6.Plugins.PluginTabnanny</h1>
-
-<p>
-Module implementing the Tabnanny plugin.
-</p>
-<h3>Global Attributes</h3>
-
-<table>
-<tr><td>author</td></tr><tr><td>autoactivate</td></tr><tr><td>className</td></tr><tr><td>deactivateable</td></tr><tr><td>error</td></tr><tr><td>longDescription</td></tr><tr><td>name</td></tr><tr><td>packageName</td></tr><tr><td>pyqtApi</td></tr><tr><td>shortDescription</td></tr><tr><td>version</td></tr>
-</table>
-<h3>Classes</h3>
-
-<table>
-
-<tr>
-<td><a href="#TabnannyPlugin">TabnannyPlugin</a></td>
-<td>Class implementing the Tabnanny plugin.</td>
-</tr>
-</table>
-<h3>Functions</h3>
-
-<table>
-<tr><td>None</td></tr>
-</table>
-<hr />
-<hr />
-<a NAME="TabnannyPlugin" ID="TabnannyPlugin"></a>
-<h2>TabnannyPlugin</h2>
-
-<p>
-    Class implementing the Tabnanny plugin.
-</p>
-<h3>Signals</h3>
-<dl>
-
-<dt>batchFinished()</dt>
-<dd>
-emitted when a style check batch is done
-</dd>
-<dt>error(str, str)</dt>
-<dd>
-emitted in case of an error
-</dd>
-<dt>indentChecked(str, bool, str, str)</dt>
-<dd>
-emitted when the indent
-        check was done.
-</dd>
-</dl>
-<h3>Derived from</h3>
-QObject
-<h3>Class Attributes</h3>
-
-<table>
-<tr><td>None</td></tr>
-</table>
-<h3>Class Methods</h3>
-
-<table>
-<tr><td>None</td></tr>
-</table>
-<h3>Methods</h3>
-
-<table>
-
-<tr>
-<td><a href="#TabnannyPlugin.__init__">TabnannyPlugin</a></td>
-<td>Constructor</td>
-</tr>
-<tr>
-<td><a href="#TabnannyPlugin.__editorClosed">__editorClosed</a></td>
-<td>Private slot called, when an editor was closed.</td>
-</tr>
-<tr>
-<td><a href="#TabnannyPlugin.__editorOpened">__editorOpened</a></td>
-<td>Private slot called, when a new editor was opened.</td>
-</tr>
-<tr>
-<td><a href="#TabnannyPlugin.__editorShowMenu">__editorShowMenu</a></td>
-<td>Private slot called, when the the editor context menu or a submenu is about to be shown.</td>
-</tr>
-<tr>
-<td><a href="#TabnannyPlugin.__editorTabnanny">__editorTabnanny</a></td>
-<td>Private slot to handle the tabnanny context menu action of the editors.</td>
-</tr>
-<tr>
-<td><a href="#TabnannyPlugin.__initialize">__initialize</a></td>
-<td>Private slot to (re)initialize the plugin.</td>
-</tr>
-<tr>
-<td><a href="#TabnannyPlugin.__projectBrowserShowMenu">__projectBrowserShowMenu</a></td>
-<td>Private slot called, when the the project browser context menu or a submenu is about to be shown.</td>
-</tr>
-<tr>
-<td><a href="#TabnannyPlugin.__projectBrowserTabnanny">__projectBrowserTabnanny</a></td>
-<td>Private method to handle the tabnanny context menu action of the project sources browser.</td>
-</tr>
-<tr>
-<td><a href="#TabnannyPlugin.__projectShowMenu">__projectShowMenu</a></td>
-<td>Private slot called, when the the project menu or a submenu is about to be shown.</td>
-</tr>
-<tr>
-<td><a href="#TabnannyPlugin.__projectTabnanny">__projectTabnanny</a></td>
-<td>Private slot used to check the project files for bad indentations.</td>
-</tr>
-<tr>
-<td><a href="#TabnannyPlugin.__serviceError">__serviceError</a></td>
-<td>Private slot handling service errors.</td>
-</tr>
-<tr>
-<td><a href="#TabnannyPlugin.activate">activate</a></td>
-<td>Public method to activate this plugin.</td>
-</tr>
-<tr>
-<td><a href="#TabnannyPlugin.batchJobDone">batchJobDone</a></td>
-<td>Public slot handling the completion of a batch job.</td>
-</tr>
-<tr>
-<td><a href="#TabnannyPlugin.cancelIndentBatchCheck">cancelIndentBatchCheck</a></td>
-<td>Public method to cancel all batch jobs.</td>
-</tr>
-<tr>
-<td><a href="#TabnannyPlugin.deactivate">deactivate</a></td>
-<td>Public method to deactivate this plugin.</td>
-</tr>
-<tr>
-<td><a href="#TabnannyPlugin.indentBatchCheck">indentBatchCheck</a></td>
-<td>Public method to prepare an indentation check on multiple Python source files.</td>
-</tr>
-<tr>
-<td><a href="#TabnannyPlugin.indentCheck">indentCheck</a></td>
-<td>Public method to prepare an indentation check on one Python source file.</td>
-</tr>
-<tr>
-<td><a href="#TabnannyPlugin.serviceErrorPy3">serviceErrorPy3</a></td>
-<td>Public slot handling service errors for Python 3.</td>
-</tr>
-</table>
-<h3>Static Methods</h3>
-
-<table>
-<tr><td>None</td></tr>
-</table>
-
-<a NAME="TabnannyPlugin.__init__" ID="TabnannyPlugin.__init__"></a>
-<h4>TabnannyPlugin (Constructor)</h4>
-<b>TabnannyPlugin</b>(<i>ui</i>)
-
-<p>
-        Constructor
-</p>
-<dl>
-
-<dt><i>ui</i></dt>
-<dd>
-reference to the user interface object (UI.UserInterface)
-</dd>
-</dl>
-<a NAME="TabnannyPlugin.__editorClosed" ID="TabnannyPlugin.__editorClosed"></a>
-<h4>TabnannyPlugin.__editorClosed</h4>
-<b>__editorClosed</b>(<i>editor</i>)
-
-<p>
-        Private slot called, when an editor was closed.
-</p>
-<dl>
-
-<dt><i>editor</i></dt>
-<dd>
-reference to the editor (QScintilla.Editor)
-</dd>
-</dl>
-<a NAME="TabnannyPlugin.__editorOpened" ID="TabnannyPlugin.__editorOpened"></a>
-<h4>TabnannyPlugin.__editorOpened</h4>
-<b>__editorOpened</b>(<i>editor</i>)
-
-<p>
-        Private slot called, when a new editor was opened.
-</p>
-<dl>
-
-<dt><i>editor</i></dt>
-<dd>
-reference to the new editor (QScintilla.Editor)
-</dd>
-</dl>
-<a NAME="TabnannyPlugin.__editorShowMenu" ID="TabnannyPlugin.__editorShowMenu"></a>
-<h4>TabnannyPlugin.__editorShowMenu</h4>
-<b>__editorShowMenu</b>(<i>menuName, menu, editor</i>)
-
-<p>
-        Private slot called, when the the editor context menu or a submenu is
-        about to be shown.
-</p>
-<dl>
-
-<dt><i>menuName</i></dt>
-<dd>
-name of the menu to be shown (string)
-</dd>
-<dt><i>menu</i></dt>
-<dd>
-reference to the menu (QMenu)
-</dd>
-<dt><i>editor</i></dt>
-<dd>
-reference to the editor
-</dd>
-</dl>
-<a NAME="TabnannyPlugin.__editorTabnanny" ID="TabnannyPlugin.__editorTabnanny"></a>
-<h4>TabnannyPlugin.__editorTabnanny</h4>
-<b>__editorTabnanny</b>(<i></i>)
-
-<p>
-        Private slot to handle the tabnanny context menu action of the editors.
-</p>
-<a NAME="TabnannyPlugin.__initialize" ID="TabnannyPlugin.__initialize"></a>
-<h4>TabnannyPlugin.__initialize</h4>
-<b>__initialize</b>(<i></i>)
-
-<p>
-        Private slot to (re)initialize the plugin.
-</p>
-<a NAME="TabnannyPlugin.__projectBrowserShowMenu" ID="TabnannyPlugin.__projectBrowserShowMenu"></a>
-<h4>TabnannyPlugin.__projectBrowserShowMenu</h4>
-<b>__projectBrowserShowMenu</b>(<i>menuName, menu</i>)
-
-<p>
-        Private slot called, when the the project browser context menu or a
-        submenu is about to be shown.
-</p>
-<dl>
-
-<dt><i>menuName</i></dt>
-<dd>
-name of the menu to be shown (string)
-</dd>
-<dt><i>menu</i></dt>
-<dd>
-reference to the menu (QMenu)
-</dd>
-</dl>
-<a NAME="TabnannyPlugin.__projectBrowserTabnanny" ID="TabnannyPlugin.__projectBrowserTabnanny"></a>
-<h4>TabnannyPlugin.__projectBrowserTabnanny</h4>
-<b>__projectBrowserTabnanny</b>(<i></i>)
-
-<p>
-        Private method to handle the tabnanny context menu action of the
-        project sources browser.
-</p>
-<a NAME="TabnannyPlugin.__projectShowMenu" ID="TabnannyPlugin.__projectShowMenu"></a>
-<h4>TabnannyPlugin.__projectShowMenu</h4>
-<b>__projectShowMenu</b>(<i>menuName, menu</i>)
-
-<p>
-        Private slot called, when the the project menu or a submenu is
-        about to be shown.
-</p>
-<dl>
-
-<dt><i>menuName</i></dt>
-<dd>
-name of the menu to be shown (string)
-</dd>
-<dt><i>menu</i></dt>
-<dd>
-reference to the menu (QMenu)
-</dd>
-</dl>
-<a NAME="TabnannyPlugin.__projectTabnanny" ID="TabnannyPlugin.__projectTabnanny"></a>
-<h4>TabnannyPlugin.__projectTabnanny</h4>
-<b>__projectTabnanny</b>(<i></i>)
-
-<p>
-        Private slot used to check the project files for bad indentations.
-</p>
-<a NAME="TabnannyPlugin.__serviceError" ID="TabnannyPlugin.__serviceError"></a>
-<h4>TabnannyPlugin.__serviceError</h4>
-<b>__serviceError</b>(<i>fn, msg</i>)
-
-<p>
-        Private slot handling service errors.
-</p>
-<dl>
-
-<dt><i>fn</i></dt>
-<dd>
-file name (string)
-</dd>
-<dt><i>msg</i></dt>
-<dd>
-message text (string)
-</dd>
-</dl>
-<a NAME="TabnannyPlugin.activate" ID="TabnannyPlugin.activate"></a>
-<h4>TabnannyPlugin.activate</h4>
-<b>activate</b>(<i></i>)
-
-<p>
-        Public method to activate this plugin.
-</p>
-<dl>
-<dt>Returns:</dt>
-<dd>
-tuple of None and activation status (boolean)
-</dd>
-</dl>
-<a NAME="TabnannyPlugin.batchJobDone" ID="TabnannyPlugin.batchJobDone"></a>
-<h4>TabnannyPlugin.batchJobDone</h4>
-<b>batchJobDone</b>(<i>fx, lang</i>)
-
-<p>
-        Public slot handling the completion of a batch job.
-</p>
-<dl>
-
-<dt><i>fx</i></dt>
-<dd>
-service name (string)
-</dd>
-<dt><i>lang</i></dt>
-<dd>
-language (string)
-</dd>
-</dl>
-<a NAME="TabnannyPlugin.cancelIndentBatchCheck" ID="TabnannyPlugin.cancelIndentBatchCheck"></a>
-<h4>TabnannyPlugin.cancelIndentBatchCheck</h4>
-<b>cancelIndentBatchCheck</b>(<i></i>)
-
-<p>
-        Public method to cancel all batch jobs.
-</p>
-<a NAME="TabnannyPlugin.deactivate" ID="TabnannyPlugin.deactivate"></a>
-<h4>TabnannyPlugin.deactivate</h4>
-<b>deactivate</b>(<i></i>)
-
-<p>
-        Public method to deactivate this plugin.
-</p>
-<a NAME="TabnannyPlugin.indentBatchCheck" ID="TabnannyPlugin.indentBatchCheck"></a>
-<h4>TabnannyPlugin.indentBatchCheck</h4>
-<b>indentBatchCheck</b>(<i>argumentsList</i>)
-
-<p>
-        Public method to prepare an indentation check on multiple Python
-        source files.
-</p>
-<dl>
-
-<dt><i>argumentsList</i></dt>
-<dd>
-list of arguments tuples with each tuple
-            containing filename and source (string, string)
-</dd>
-</dl>
-<a NAME="TabnannyPlugin.indentCheck" ID="TabnannyPlugin.indentCheck"></a>
-<h4>TabnannyPlugin.indentCheck</h4>
-<b>indentCheck</b>(<i>lang, filename, source</i>)
-
-<p>
-        Public method to prepare an indentation check on one Python source
-        file.
-</p>
-<dl>
-
-<dt><i>lang</i></dt>
-<dd>
-language of the file or None to determine by internal
-            algorithm (str or None)
-</dd>
-<dt><i>filename</i></dt>
-<dd>
-source filename (string)
-</dd>
-<dt><i>source</i></dt>
-<dd>
-string containing the code to check (string)
-</dd>
-</dl>
-<a NAME="TabnannyPlugin.serviceErrorPy3" ID="TabnannyPlugin.serviceErrorPy3"></a>
-<h4>TabnannyPlugin.serviceErrorPy3</h4>
-<b>serviceErrorPy3</b>(<i>fx, lang, fn, msg</i>)
-
-<p>
-        Public slot handling service errors for Python 3.
-</p>
-<dl>
-
-<dt><i>fx</i></dt>
-<dd>
-service name (string)
-</dd>
-<dt><i>lang</i></dt>
-<dd>
-language (string)
-</dd>
-<dt><i>fn</i></dt>
-<dd>
-file name (string)
-</dd>
-<dt><i>msg</i></dt>
-<dd>
-message text (string)
-</dd>
-</dl>
-<div align="right"><a href="#top">Up</a></div>
-<hr />
-</body></html>
\ No newline at end of file
--- a/eric6/Documentation/Source/eric6.Plugins.VcsPlugins.vcsMercurial.FetchExtension.HgFetchDialog.html	Sat Aug 01 10:39:12 2020 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,138 +0,0 @@
-<!DOCTYPE html>
-<html><head>
-<title>eric6.Plugins.VcsPlugins.vcsMercurial.FetchExtension.HgFetchDialog</title>
-<meta charset="UTF-8">
-<style>
-body {
-    background: #EDECE6;
-    margin: 0em 1em 10em 1em;
-    color: black;
-}
-
-h1 { color: white; background: #85774A; }
-h2 { color: white; background: #85774A; }
-h3 { color: white; background: #9D936E; }
-h4 { color: white; background: #9D936E; }
-    
-a { color: #BA6D36; }
-
-</style>
-</head>
-<body>
-<a NAME="top" ID="top"></a>
-<h1>eric6.Plugins.VcsPlugins.vcsMercurial.FetchExtension.HgFetchDialog</h1>
-
-<p>
-Module implementing a dialog to enter data to be used for a fetch operation.
-</p>
-<h3>Global Attributes</h3>
-
-<table>
-<tr><td>None</td></tr>
-</table>
-<h3>Classes</h3>
-
-<table>
-
-<tr>
-<td><a href="#HgFetchDialog">HgFetchDialog</a></td>
-<td>Class implementing a dialog to enter data to be used for a fetch operation.</td>
-</tr>
-</table>
-<h3>Functions</h3>
-
-<table>
-<tr><td>None</td></tr>
-</table>
-<hr />
-<hr />
-<a NAME="HgFetchDialog" ID="HgFetchDialog"></a>
-<h2>HgFetchDialog</h2>
-
-<p>
-    Class implementing a dialog to enter data to be used for a fetch operation.
-</p>
-<h3>Derived from</h3>
-QDialog, Ui_HgFetchDialog
-<h3>Class Attributes</h3>
-
-<table>
-<tr><td>None</td></tr>
-</table>
-<h3>Class Methods</h3>
-
-<table>
-<tr><td>None</td></tr>
-</table>
-<h3>Methods</h3>
-
-<table>
-
-<tr>
-<td><a href="#HgFetchDialog.__init__">HgFetchDialog</a></td>
-<td>Constructor</td>
-</tr>
-<tr>
-<td><a href="#HgFetchDialog.getData">getData</a></td>
-<td>Public method to get the data for the fetch operation.</td>
-</tr>
-<tr>
-<td><a href="#HgFetchDialog.on_recentComboBox_activated">on_recentComboBox_activated</a></td>
-<td>Private slot to select a commit message from recent ones.</td>
-</tr>
-</table>
-<h3>Static Methods</h3>
-
-<table>
-<tr><td>None</td></tr>
-</table>
-
-<a NAME="HgFetchDialog.__init__" ID="HgFetchDialog.__init__"></a>
-<h4>HgFetchDialog (Constructor)</h4>
-<b>HgFetchDialog</b>(<i>vcs, parent=None</i>)
-
-<p>
-        Constructor
-</p>
-<dl>
-
-<dt><i>vcs</i> (Hg)</dt>
-<dd>
-reference to the Mercurial vcs object
-</dd>
-<dt><i>parent</i> (QWidget)</dt>
-<dd>
-reference to the parent widget
-</dd>
-</dl>
-<a NAME="HgFetchDialog.getData" ID="HgFetchDialog.getData"></a>
-<h4>HgFetchDialog.getData</h4>
-<b>getData</b>(<i></i>)
-
-<p>
-        Public method to get the data for the fetch operation.
-</p>
-<dl>
-<dt>Returns:</dt>
-<dd>
-tuple with the commit message and a flag indicating to switch
-            the merge order (string, boolean)
-</dd>
-</dl>
-<a NAME="HgFetchDialog.on_recentComboBox_activated" ID="HgFetchDialog.on_recentComboBox_activated"></a>
-<h4>HgFetchDialog.on_recentComboBox_activated</h4>
-<b>on_recentComboBox_activated</b>(<i>txt</i>)
-
-<p>
-        Private slot to select a commit message from recent ones.
-</p>
-<dl>
-
-<dt><i>txt</i></dt>
-<dd>
-text of the selected entry (string)
-</dd>
-</dl>
-<div align="right"><a href="#top">Up</a></div>
-<hr />
-</body></html>
\ No newline at end of file
--- a/eric6/Documentation/Source/eric6.Plugins.VcsPlugins.vcsMercurial.FetchExtension.ProjectHelper.html	Sat Aug 01 10:39:12 2020 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,165 +0,0 @@
-<!DOCTYPE html>
-<html><head>
-<title>eric6.Plugins.VcsPlugins.vcsMercurial.FetchExtension.ProjectHelper</title>
-<meta charset="UTF-8">
-<style>
-body {
-    background: #EDECE6;
-    margin: 0em 1em 10em 1em;
-    color: black;
-}
-
-h1 { color: white; background: #85774A; }
-h2 { color: white; background: #85774A; }
-h3 { color: white; background: #9D936E; }
-h4 { color: white; background: #9D936E; }
-    
-a { color: #BA6D36; }
-
-</style>
-</head>
-<body>
-<a NAME="top" ID="top"></a>
-<h1>eric6.Plugins.VcsPlugins.vcsMercurial.FetchExtension.ProjectHelper</h1>
-
-<p>
-Module implementing the fetch extension project helper.
-</p>
-<h3>Global Attributes</h3>
-
-<table>
-<tr><td>None</td></tr>
-</table>
-<h3>Classes</h3>
-
-<table>
-
-<tr>
-<td><a href="#FetchProjectHelper">FetchProjectHelper</a></td>
-<td>Class implementing the fetch extension project helper.</td>
-</tr>
-</table>
-<h3>Functions</h3>
-
-<table>
-<tr><td>None</td></tr>
-</table>
-<hr />
-<hr />
-<a NAME="FetchProjectHelper" ID="FetchProjectHelper"></a>
-<h2>FetchProjectHelper</h2>
-
-<p>
-    Class implementing the fetch extension project helper.
-</p>
-<h3>Derived from</h3>
-HgExtensionProjectHelper
-<h3>Class Attributes</h3>
-
-<table>
-<tr><td>None</td></tr>
-</table>
-<h3>Class Methods</h3>
-
-<table>
-<tr><td>None</td></tr>
-</table>
-<h3>Methods</h3>
-
-<table>
-
-<tr>
-<td><a href="#FetchProjectHelper.__init__">FetchProjectHelper</a></td>
-<td>Constructor</td>
-</tr>
-<tr>
-<td><a href="#FetchProjectHelper.__aboutToShowMenu">__aboutToShowMenu</a></td>
-<td>Private slot to handle the aboutToShow signal of the background menu.</td>
-</tr>
-<tr>
-<td><a href="#FetchProjectHelper.__hgFetch">__hgFetch</a></td>
-<td>Private slot used to fetch changes from a remote repository.</td>
-</tr>
-<tr>
-<td><a href="#FetchProjectHelper.initActions">initActions</a></td>
-<td>Public method to generate the action objects.</td>
-</tr>
-<tr>
-<td><a href="#FetchProjectHelper.initMenu">initMenu</a></td>
-<td>Public method to generate the extension menu.</td>
-</tr>
-<tr>
-<td><a href="#FetchProjectHelper.menuTitle">menuTitle</a></td>
-<td>Public method to get the menu title.</td>
-</tr>
-</table>
-<h3>Static Methods</h3>
-
-<table>
-<tr><td>None</td></tr>
-</table>
-
-<a NAME="FetchProjectHelper.__init__" ID="FetchProjectHelper.__init__"></a>
-<h4>FetchProjectHelper (Constructor)</h4>
-<b>FetchProjectHelper</b>(<i></i>)
-
-<p>
-        Constructor
-</p>
-<a NAME="FetchProjectHelper.__aboutToShowMenu" ID="FetchProjectHelper.__aboutToShowMenu"></a>
-<h4>FetchProjectHelper.__aboutToShowMenu</h4>
-<b>__aboutToShowMenu</b>(<i></i>)
-
-<p>
-        Private slot to handle the aboutToShow signal of the background menu.
-</p>
-<a NAME="FetchProjectHelper.__hgFetch" ID="FetchProjectHelper.__hgFetch"></a>
-<h4>FetchProjectHelper.__hgFetch</h4>
-<b>__hgFetch</b>(<i></i>)
-
-<p>
-        Private slot used to fetch changes from a remote repository.
-</p>
-<a NAME="FetchProjectHelper.initActions" ID="FetchProjectHelper.initActions"></a>
-<h4>FetchProjectHelper.initActions</h4>
-<b>initActions</b>(<i></i>)
-
-<p>
-        Public method to generate the action objects.
-</p>
-<a NAME="FetchProjectHelper.initMenu" ID="FetchProjectHelper.initMenu"></a>
-<h4>FetchProjectHelper.initMenu</h4>
-<b>initMenu</b>(<i>mainMenu</i>)
-
-<p>
-        Public method to generate the extension menu.
-</p>
-<dl>
-
-<dt><i>mainMenu</i></dt>
-<dd>
-reference to the main menu (QMenu)
-</dd>
-</dl>
-<dl>
-<dt>Returns:</dt>
-<dd>
-populated menu (QMenu)
-</dd>
-</dl>
-<a NAME="FetchProjectHelper.menuTitle" ID="FetchProjectHelper.menuTitle"></a>
-<h4>FetchProjectHelper.menuTitle</h4>
-<b>menuTitle</b>(<i></i>)
-
-<p>
-        Public method to get the menu title.
-</p>
-<dl>
-<dt>Returns:</dt>
-<dd>
-title of the menu (string)
-</dd>
-</dl>
-<div align="right"><a href="#top">Up</a></div>
-<hr />
-</body></html>
\ No newline at end of file
--- a/eric6/Documentation/Source/eric6.Plugins.VcsPlugins.vcsMercurial.FetchExtension.fetch.html	Sat Aug 01 10:39:12 2020 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,133 +0,0 @@
-<!DOCTYPE html>
-<html><head>
-<title>eric6.Plugins.VcsPlugins.vcsMercurial.FetchExtension.fetch</title>
-<meta charset="UTF-8">
-<style>
-body {
-    background: #EDECE6;
-    margin: 0em 1em 10em 1em;
-    color: black;
-}
-
-h1 { color: white; background: #85774A; }
-h2 { color: white; background: #85774A; }
-h3 { color: white; background: #9D936E; }
-h4 { color: white; background: #9D936E; }
-    
-a { color: #BA6D36; }
-
-</style>
-</head>
-<body>
-<a NAME="top" ID="top"></a>
-<h1>eric6.Plugins.VcsPlugins.vcsMercurial.FetchExtension.fetch</h1>
-
-<p>
-Module implementing the fetch extension interface.
-</p>
-<h3>Global Attributes</h3>
-
-<table>
-<tr><td>None</td></tr>
-</table>
-<h3>Classes</h3>
-
-<table>
-
-<tr>
-<td><a href="#Fetch">Fetch</a></td>
-<td>Class implementing the fetch extension interface.</td>
-</tr>
-</table>
-<h3>Functions</h3>
-
-<table>
-<tr><td>None</td></tr>
-</table>
-<hr />
-<hr />
-<a NAME="Fetch" ID="Fetch"></a>
-<h2>Fetch</h2>
-
-<p>
-    Class implementing the fetch extension interface.
-</p>
-<h3>Derived from</h3>
-HgExtension
-<h3>Class Attributes</h3>
-
-<table>
-<tr><td>None</td></tr>
-</table>
-<h3>Class Methods</h3>
-
-<table>
-<tr><td>None</td></tr>
-</table>
-<h3>Methods</h3>
-
-<table>
-
-<tr>
-<td><a href="#Fetch.__init__">Fetch</a></td>
-<td>Constructor</td>
-</tr>
-<tr>
-<td><a href="#Fetch.hgFetch">hgFetch</a></td>
-<td>Public method to fetch changes from a remote repository.</td>
-</tr>
-</table>
-<h3>Static Methods</h3>
-
-<table>
-<tr><td>None</td></tr>
-</table>
-
-<a NAME="Fetch.__init__" ID="Fetch.__init__"></a>
-<h4>Fetch (Constructor)</h4>
-<b>Fetch</b>(<i>vcs</i>)
-
-<p>
-        Constructor
-</p>
-<dl>
-
-<dt><i>vcs</i></dt>
-<dd>
-reference to the Mercurial vcs object
-</dd>
-</dl>
-<a NAME="Fetch.hgFetch" ID="Fetch.hgFetch"></a>
-<h4>Fetch.hgFetch</h4>
-<b>hgFetch</b>(<i>name, revisions=None</i>)
-
-<p>
-        Public method to fetch changes from a remote repository.
-</p>
-<dl>
-
-<dt><i>name</i> (str)</dt>
-<dd>
-directory name of the project to be fetched to
-</dd>
-<dt><i>revisions</i> (list of str)</dt>
-<dd>
-list of revisions to be pulled
-</dd>
-</dl>
-<dl>
-<dt>Returns:</dt>
-<dd>
-flag indicating, that the update contained an add
-            or delete
-</dd>
-</dl>
-<dl>
-<dt>Return Type:</dt>
-<dd>
-bool
-</dd>
-</dl>
-<div align="right"><a href="#top">Up</a></div>
-<hr />
-</body></html>
\ No newline at end of file
--- a/eric6/Documentation/Source/eric6.Plugins.VcsPlugins.vcsMercurial.GpgExtension.gpg.html	Sat Aug 01 10:39:12 2020 +0200
+++ b/eric6/Documentation/Source/eric6.Plugins.VcsPlugins.vcsMercurial.GpgExtension.gpg.html	Wed Sep 02 18:06:20 2020 +0200
@@ -36,7 +36,7 @@
 
 <tr>
 <td><a href="#Gpg">Gpg</a></td>
-<td>Class implementing the fetch extension interface.</td>
+<td>Class implementing the gpg extension interface.</td>
 </tr>
 </table>
 <h3>Functions</h3>
@@ -50,7 +50,7 @@
 <h2>Gpg</h2>
 
 <p>
-    Class implementing the fetch extension interface.
+    Class implementing the gpg extension interface.
 </p>
 <h3>Derived from</h3>
 HgExtension
@@ -86,7 +86,7 @@
 </tr>
 <tr>
 <td><a href="#Gpg.shutdown">shutdown</a></td>
-<td>Public method used to shutdown the fetch interface.</td>
+<td>Public method used to shutdown the gpg interface.</td>
 </tr>
 </table>
 <h3>Static Methods</h3>
@@ -164,7 +164,7 @@
 <b>shutdown</b>(<i></i>)
 
 <p>
-        Public method used to shutdown the fetch interface.
+        Public method used to shutdown the gpg interface.
 </p>
 <div align="right"><a href="#top">Up</a></div>
 <hr />
--- a/eric6/Documentation/Source/eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html	Sat Aug 01 10:39:12 2020 +0200
+++ b/eric6/Documentation/Source/eric6.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html	Wed Sep 02 18:06:20 2020 +0200
@@ -101,10 +101,6 @@
 <td>Private slot to close the selected head revisions.</td>
 </tr>
 <tr>
-<td><a href="#HgLogBrowserDialog.__fetchActTriggered">__fetchActTriggered</a></td>
-<td>Private slot to fetch changes from a remote repository.</td>
-</tr>
-<tr>
 <td><a href="#HgLogBrowserDialog.__filterLogs">__filterLogs</a></td>
 <td>Private method to filter the log entries.</td>
 </tr>
@@ -500,13 +496,6 @@
 <p>
         Private slot to close the selected head revisions.
 </p>
-<a NAME="HgLogBrowserDialog.__fetchActTriggered" ID="HgLogBrowserDialog.__fetchActTriggered"></a>
-<h4>HgLogBrowserDialog.__fetchActTriggered</h4>
-<b>__fetchActTriggered</b>(<i></i>)
-
-<p>
-        Private slot to fetch changes from a remote repository.
-</p>
 <a NAME="HgLogBrowserDialog.__filterLogs" ID="HgLogBrowserDialog.__filterLogs"></a>
 <h4>HgLogBrowserDialog.__filterLogs</h4>
 <b>__filterLogs</b>(<i></i>)
--- a/eric6/Documentation/Source/eric6.Tasks.Task.html	Sat Aug 01 10:39:12 2020 +0200
+++ b/eric6/Documentation/Source/eric6.Tasks.Task.html	Wed Sep 02 18:06:20 2020 +0200
@@ -57,7 +57,7 @@
 <h3>Class Attributes</h3>
 
 <table>
-<tr><td>TypeFixme</td></tr><tr><td>TypeNone</td></tr><tr><td>TypeNote</td></tr><tr><td>TypeTodo</td></tr><tr><td>TypeWarning</td></tr>
+<tr><td>TaskType2ColorName</td></tr><tr><td>TaskType2IconName</td></tr><tr><td>TaskType2MarkersName</td></tr><tr><td>TypeDocu</td></tr><tr><td>TypeFixme</td></tr><tr><td>TypeNone</td></tr><tr><td>TypeNote</td></tr><tr><td>TypeTest</td></tr><tr><td>TypeTodo</td></tr><tr><td>TypeWarning</td></tr>
 </table>
 <h3>Class Methods</h3>
 
@@ -176,7 +176,7 @@
 <dt><i>taskType</i></dt>
 <dd>
 type of the task (one of TypeFixme, TypeTodo,
-            TypeWarning, TypeNote)
+            TypeWarning, TypeNote, TypeTest, TypeDocu)
 </dd>
 <dt><i>project</i></dt>
 <dd>
--- a/eric6/Documentation/Source/eric6.UI.Browser.html	Sat Aug 01 10:39:12 2020 +0200
+++ b/eric6/Documentation/Source/eric6.UI.Browser.html	Wed Sep 02 18:06:20 2020 +0200
@@ -171,6 +171,10 @@
 <td>Private slot to refresh a directory entry.</td>
 </tr>
 <tr>
+<td><a href="#Browser.__refreshSource">__refreshSource</a></td>
+<td>Private slot to refresh the structure of a source file.</td>
+</tr>
+<tr>
 <td><a href="#Browser.__removeToplevel">__removeToplevel</a></td>
 <td>Private slot to handle the Remove from toplevel popup menu entry.</td>
 </tr>
@@ -330,6 +334,13 @@
 <p>
         Private slot to refresh a directory entry.
 </p>
+<a NAME="Browser.__refreshSource" ID="Browser.__refreshSource"></a>
+<h4>Browser.__refreshSource</h4>
+<b>__refreshSource</b>(<i></i>)
+
+<p>
+        Private slot to refresh the structure of a source file.
+</p>
 <a NAME="Browser.__removeToplevel" ID="Browser.__removeToplevel"></a>
 <h4>Browser.__removeToplevel</h4>
 <b>__removeToplevel</b>(<i></i>)
--- a/eric6/Documentation/Source/eric6.UI.BrowserModel.html	Sat Aug 01 10:39:12 2020 +0200
+++ b/eric6/Documentation/Source/eric6.UI.BrowserModel.html	Wed Sep 02 18:06:20 2020 +0200
@@ -2188,6 +2188,10 @@
 <td>Public slot to handle the directoryChanged signal of the watcher.</td>
 </tr>
 <tr>
+<td><a href="#BrowserModel.fileChanged">fileChanged</a></td>
+<td>Public method to react upon file changes.</td>
+</tr>
+<tr>
 <td><a href="#BrowserModel.flags">flags</a></td>
 <td>Public method to get the item flags.</td>
 </tr>
@@ -2252,6 +2256,10 @@
 <td>Public method to remove a toplevel directory.</td>
 </tr>
 <tr>
+<td><a href="#BrowserModel.repopulateFileItem">repopulateFileItem</a></td>
+<td>Public method to repopulate a file item.</td>
+</tr>
+<tr>
 <td><a href="#BrowserModel.rowCount">rowCount</a></td>
 <td>Public method to get the number of rows.</td>
 </tr>
@@ -2435,6 +2443,20 @@
 path of the directory (string)
 </dd>
 </dl>
+<a NAME="BrowserModel.fileChanged" ID="BrowserModel.fileChanged"></a>
+<h4>BrowserModel.fileChanged</h4>
+<b>fileChanged</b>(<i>fileName</i>)
+
+<p>
+        Public method to react upon file changes.
+</p>
+<dl>
+
+<dt><i>fileName</i> (str)</dt>
+<dd>
+path of the changed file
+</dd>
+</dl>
 <a NAME="BrowserModel.flags" ID="BrowserModel.flags"></a>
 <h4>BrowserModel.flags</h4>
 <b>flags</b>(<i>index</i>)
@@ -2746,6 +2768,20 @@
             (QModelIndex)
 </dd>
 </dl>
+<a NAME="BrowserModel.repopulateFileItem" ID="BrowserModel.repopulateFileItem"></a>
+<h4>BrowserModel.repopulateFileItem</h4>
+<b>repopulateFileItem</b>(<i>itm</i>)
+
+<p>
+        Public method to repopulate a file item.
+</p>
+<dl>
+
+<dt><i>itm</i> (BrowserFileItem)</dt>
+<dd>
+reference to the item to be repopulated
+</dd>
+</dl>
 <a NAME="BrowserModel.rowCount" ID="BrowserModel.rowCount"></a>
 <h4>BrowserModel.rowCount</h4>
 <b>rowCount</b>(<i>parent=None</i>)
--- a/eric6/Documentation/Source/eric6.UI.UserInterface.html	Sat Aug 01 10:39:12 2020 +0200
+++ b/eric6/Documentation/Source/eric6.UI.UserInterface.html	Wed Sep 02 18:06:20 2020 +0200
@@ -999,6 +999,10 @@
 <td>Public method to get a reference to a specific toolbar.</td>
 </tr>
 <tr>
+<td><a href="#UserInterface.getToolbarsByCategory">getToolbarsByCategory</a></td>
+<td>Public method to get a list of toolbars belonging to a given toolbar category.</td>
+</tr>
+<tr>
 <td><a href="#UserInterface.getViewProfile">getViewProfile</a></td>
 <td>Public method to get the current view profile.</td>
 </tr>
@@ -3278,6 +3282,33 @@
 reference to the toolbar entry (tuple of string and QToolBar)
 </dd>
 </dl>
+<a NAME="UserInterface.getToolbarsByCategory" ID="UserInterface.getToolbarsByCategory"></a>
+<h4>UserInterface.getToolbarsByCategory</h4>
+<b>getToolbarsByCategory</b>(<i>category</i>)
+
+<p>
+        Public method to get a list of toolbars belonging to a given toolbar
+        category.
+</p>
+<dl>
+
+<dt><i>category</i> (str)</dt>
+<dd>
+toolbar category
+</dd>
+</dl>
+<dl>
+<dt>Returns:</dt>
+<dd>
+list of toolbars
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+list of QToolBar
+</dd>
+</dl>
 <a NAME="UserInterface.getViewProfile" ID="UserInterface.getViewProfile"></a>
 <h4>UserInterface.getViewProfile</h4>
 <b>getViewProfile</b>(<i></i>)
@@ -3422,7 +3453,7 @@
 </dl>
 <a NAME="UserInterface.registerToolbar" ID="UserInterface.registerToolbar"></a>
 <h4>UserInterface.registerToolbar</h4>
-<b>registerToolbar</b>(<i>name, text, toolbar</i>)
+<b>registerToolbar</b>(<i>name, text, toolbar, category=""</i>)
 
 <p>
         Public method to register a toolbar.
@@ -3433,18 +3464,22 @@
 </p>
 <dl>
 
-<dt><i>name</i></dt>
+<dt><i>name</i> (str)</dt>
 <dd>
-name of the toolbar (string). This is used as the key into
+name of the toolbar. This is used as the key into
             the dictionary of toolbar references.
 </dd>
-<dt><i>text</i></dt>
+<dt><i>text</i> (str)</dt>
 <dd>
-user visible text for the toolbar entry (string)
+user visible text for the toolbar entry
 </dd>
-<dt><i>toolbar</i></dt>
+<dt><i>toolbar</i> (QToolBar)</dt>
 <dd>
-reference to the toolbar to be registered (QToolBar)
+reference to the toolbar to be registered
+</dd>
+<dt><i>category</i> (str)</dt>
+<dd>
+toolbar category
 </dd>
 </dl>
 <dl>
@@ -3490,20 +3525,24 @@
 </dl>
 <a NAME="UserInterface.reregisterToolbar" ID="UserInterface.reregisterToolbar"></a>
 <h4>UserInterface.reregisterToolbar</h4>
-<b>reregisterToolbar</b>(<i>name, text</i>)
+<b>reregisterToolbar</b>(<i>name, text, category=""</i>)
 
 <p>
         Public method to change the visible text for the named toolbar.
 </p>
 <dl>
 
-<dt><i>name</i></dt>
+<dt><i>name</i> (str)</dt>
 <dd>
-name of the toolbar to be changed (string)
+name of the toolbar to be changed
 </dd>
-<dt><i>text</i></dt>
+<dt><i>text</i> (str)</dt>
 <dd>
-new user visible text for the toolbar entry (string)
+new user visible text for the toolbar entry
+</dd>
+<dt><i>category</i> (str)</dt>
+<dd>
+new toolbar category for the toolbar entry
 </dd>
 </dl>
 <a NAME="UserInterface.setDebugProfile" ID="UserInterface.setDebugProfile"></a>
--- a/eric6/Documentation/Source/eric6.Utilities.binplistlib.html	Sat Aug 01 10:39:12 2020 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1483 +0,0 @@
-<!DOCTYPE html>
-<html><head>
-<title>eric6.Utilities.binplistlib</title>
-<meta charset="UTF-8">
-<style>
-body {
-    background: #EDECE6;
-    margin: 0em 1em 10em 1em;
-    color: black;
-}
-
-h1 { color: white; background: #85774A; }
-h2 { color: white; background: #85774A; }
-h3 { color: white; background: #9D936E; }
-h4 { color: white; background: #9D936E; }
-    
-a { color: #BA6D36; }
-
-</style>
-</head>
-<body>
-<a NAME="top" ID="top"></a>
-<h1>eric6.Utilities.binplistlib</h1>
-
-<p>
-Module implementing a library for reading and writing binary property list
-files.
-</p>
-<p>
-Binary Property List (plist) files provide a faster and smaller serialization
-format for property lists on OS X. This is a library for generating binary
-plists which can be read by OS X, iOS, or other clients.
-</p>
-<p>
-The API models the plistlib API, and will call through to plistlib when
-XML serialization or deserialization is required.
-</p>
-<p>
-To generate plists with UID values, wrap the values with the Uid object. The
-value must be an int.
-</p>
-<p>
-To generate plists with NSData/CFData values, wrap the values with the
-Data object. The value must be a bytes object.
-</p>
-<p>
-Date values can only be datetime.datetime objects.
-</p>
-<p>
-The exceptions InvalidPlistException and NotBinaryPlistException may be
-thrown to indicate that the data cannot be serialized or deserialized as
-a binary plist.
-</p>
-<p>
-Plist generation example:
-<pre>
-    from binplistlib import *
-    from datetime import datetime
-    plist = {'aKey':'aValue',
-             '0':1.322,
-             'now':datetime.now(),
-             'list':[1,2,3],
-             'tuple':('a','b','c')
-             }
-    try:
-        writePlist(plist, "example.plist")
-    except (InvalidPlistException, NotBinaryPlistException) as e:
-        print("Something bad happened:", e)
-</pre>
-Plist parsing example:
-<pre>
-    from binplistlib import *
-    try:
-        plist = readPlist("example.plist")
-        print(plist)
-    except (InvalidPlistException, NotBinaryPlistException) as e:
-        print("Not a plist:", e)
-</pre>
-</p>
-<h3>Global Attributes</h3>
-
-<table>
-<tr><td>PlistByteCounts</td></tr><tr><td>PlistTrailer</td></tr><tr><td>__all__</td></tr><tr><td>apple_reference_date_offset</td></tr>
-</table>
-<h3>Classes</h3>
-
-<table>
-
-<tr>
-<td><a href="#BoolWrapper">BoolWrapper</a></td>
-<td>Class wrapping a boolean value.</td>
-</tr>
-<tr>
-<td><a href="#Data">Data</a></td>
-<td>Class implementing a wrapper around bytes types for representing Data values.</td>
-</tr>
-<tr>
-<td><a href="#HashableWrapper">HashableWrapper</a></td>
-<td>Class wrapping a hashable value.</td>
-</tr>
-<tr>
-<td><a href="#InvalidPlistException">InvalidPlistException</a></td>
-<td>Exception raised when the plist is incorrectly formatted.</td>
-</tr>
-<tr>
-<td><a href="#NotBinaryPlistException">NotBinaryPlistException</a></td>
-<td>Exception raised when a binary plist was expected but not encountered.</td>
-</tr>
-<tr>
-<td><a href="#PlistReader">PlistReader</a></td>
-<td>Class implementing the plist reader.</td>
-</tr>
-<tr>
-<td><a href="#PlistWriter">PlistWriter</a></td>
-<td>Class implementing the plist writer.</td>
-</tr>
-<tr>
-<td><a href="#Uid">Uid</a></td>
-<td>Class implementing a wrapper around integers for representing UID values.</td>
-</tr>
-</table>
-<h3>Functions</h3>
-
-<table>
-
-<tr>
-<td><a href="#is_stream_binary_plist">is_stream_binary_plist</a></td>
-<td>Module function to check, if the stream is a binary plist.</td>
-</tr>
-<tr>
-<td><a href="#readPlist">readPlist</a></td>
-<td>Module function to read a plist file.</td>
-</tr>
-<tr>
-<td><a href="#readPlistFromBytes">readPlistFromBytes</a></td>
-<td>Module function to read from a plist bytes object.</td>
-</tr>
-<tr>
-<td><a href="#writePlist">writePlist</a></td>
-<td>Module function to write a plist file.</td>
-</tr>
-<tr>
-<td><a href="#writePlistToBytes">writePlistToBytes</a></td>
-<td>Module function to write a plist bytes object.</td>
-</tr>
-</table>
-<hr />
-<hr />
-<a NAME="BoolWrapper" ID="BoolWrapper"></a>
-<h2>BoolWrapper</h2>
-
-<p>
-    Class wrapping a boolean value.
-</p>
-<h3>Derived from</h3>
-object
-<h3>Class Attributes</h3>
-
-<table>
-<tr><td>None</td></tr>
-</table>
-<h3>Class Methods</h3>
-
-<table>
-<tr><td>None</td></tr>
-</table>
-<h3>Methods</h3>
-
-<table>
-
-<tr>
-<td><a href="#BoolWrapper.__init__">BoolWrapper</a></td>
-<td>Constructor</td>
-</tr>
-<tr>
-<td><a href="#BoolWrapper.__repr__">__repr__</a></td>
-<td>Special method to generate a representation of the object.</td>
-</tr>
-</table>
-<h3>Static Methods</h3>
-
-<table>
-<tr><td>None</td></tr>
-</table>
-
-<a NAME="BoolWrapper.__init__" ID="BoolWrapper.__init__"></a>
-<h4>BoolWrapper (Constructor)</h4>
-<b>BoolWrapper</b>(<i>value</i>)
-
-<p>
-        Constructor
-</p>
-<dl>
-
-<dt><i>value</i></dt>
-<dd>
-object value (boolean)
-</dd>
-</dl>
-<a NAME="BoolWrapper.__repr__" ID="BoolWrapper.__repr__"></a>
-<h4>BoolWrapper.__repr__</h4>
-<b>__repr__</b>(<i></i>)
-
-<p>
-        Special method to generate a representation of the object.
-</p>
-<dl>
-<dt>Returns:</dt>
-<dd>
-object representation (string)
-</dd>
-</dl>
-<div align="right"><a href="#top">Up</a></div>
-<hr />
-<hr />
-<a NAME="Data" ID="Data"></a>
-<h2>Data</h2>
-
-<p>
-    Class implementing a wrapper around bytes types for representing Data
-    values.
-</p>
-<h3>Derived from</h3>
-bytes
-<h3>Class Attributes</h3>
-
-<table>
-<tr><td>None</td></tr>
-</table>
-<h3>Class Methods</h3>
-
-<table>
-<tr><td>None</td></tr>
-</table>
-<h3>Methods</h3>
-
-<table>
-<tr><td>None</td></tr>
-</table>
-<h3>Static Methods</h3>
-
-<table>
-<tr><td>None</td></tr>
-</table>
-
-<div align="right"><a href="#top">Up</a></div>
-<hr />
-<hr />
-<a NAME="HashableWrapper" ID="HashableWrapper"></a>
-<h2>HashableWrapper</h2>
-
-<p>
-    Class wrapping a hashable value.
-</p>
-<h3>Derived from</h3>
-object
-<h3>Class Attributes</h3>
-
-<table>
-<tr><td>None</td></tr>
-</table>
-<h3>Class Methods</h3>
-
-<table>
-<tr><td>None</td></tr>
-</table>
-<h3>Methods</h3>
-
-<table>
-
-<tr>
-<td><a href="#HashableWrapper.__init__">HashableWrapper</a></td>
-<td>Constructor</td>
-</tr>
-<tr>
-<td><a href="#HashableWrapper.__repr__">__repr__</a></td>
-<td>Special method to generate a representation of the object.</td>
-</tr>
-</table>
-<h3>Static Methods</h3>
-
-<table>
-<tr><td>None</td></tr>
-</table>
-
-<a NAME="HashableWrapper.__init__" ID="HashableWrapper.__init__"></a>
-<h4>HashableWrapper (Constructor)</h4>
-<b>HashableWrapper</b>(<i>value</i>)
-
-<p>
-        Constructor
-</p>
-<dl>
-
-<dt><i>value</i></dt>
-<dd>
-object value
-</dd>
-</dl>
-<a NAME="HashableWrapper.__repr__" ID="HashableWrapper.__repr__"></a>
-<h4>HashableWrapper.__repr__</h4>
-<b>__repr__</b>(<i></i>)
-
-<p>
-        Special method to generate a representation of the object.
-</p>
-<dl>
-<dt>Returns:</dt>
-<dd>
-object representation (string)
-</dd>
-</dl>
-<div align="right"><a href="#top">Up</a></div>
-<hr />
-<hr />
-<a NAME="InvalidPlistException" ID="InvalidPlistException"></a>
-<h2>InvalidPlistException</h2>
-
-<p>
-    Exception raised when the plist is incorrectly formatted.
-</p>
-<h3>Derived from</h3>
-Exception
-<h3>Class Attributes</h3>
-
-<table>
-<tr><td>None</td></tr>
-</table>
-<h3>Class Methods</h3>
-
-<table>
-<tr><td>None</td></tr>
-</table>
-<h3>Methods</h3>
-
-<table>
-<tr><td>None</td></tr>
-</table>
-<h3>Static Methods</h3>
-
-<table>
-<tr><td>None</td></tr>
-</table>
-
-<div align="right"><a href="#top">Up</a></div>
-<hr />
-<hr />
-<a NAME="NotBinaryPlistException" ID="NotBinaryPlistException"></a>
-<h2>NotBinaryPlistException</h2>
-
-<p>
-    Exception raised when a binary plist was expected but not encountered.
-</p>
-<h3>Derived from</h3>
-Exception
-<h3>Class Attributes</h3>
-
-<table>
-<tr><td>None</td></tr>
-</table>
-<h3>Class Methods</h3>
-
-<table>
-<tr><td>None</td></tr>
-</table>
-<h3>Methods</h3>
-
-<table>
-<tr><td>None</td></tr>
-</table>
-<h3>Static Methods</h3>
-
-<table>
-<tr><td>None</td></tr>
-</table>
-
-<div align="right"><a href="#top">Up</a></div>
-<hr />
-<hr />
-<a NAME="PlistReader" ID="PlistReader"></a>
-<h2>PlistReader</h2>
-
-<p>
-    Class implementing the plist reader.
-</p>
-<h3>Derived from</h3>
-object
-<h3>Class Attributes</h3>
-
-<table>
-<tr><td>contents</td></tr><tr><td>currentOffset</td></tr><tr><td>file</td></tr><tr><td>offsets</td></tr><tr><td>trailer</td></tr>
-</table>
-<h3>Class Methods</h3>
-
-<table>
-<tr><td>None</td></tr>
-</table>
-<h3>Methods</h3>
-
-<table>
-
-<tr>
-<td><a href="#PlistReader.__init__">PlistReader</a></td>
-<td>Constructor</td>
-</tr>
-<tr>
-<td><a href="#PlistReader.getSizedInteger">getSizedInteger</a></td>
-<td>Public method to read an integer of a specific size.</td>
-</tr>
-<tr>
-<td><a href="#PlistReader.parse">parse</a></td>
-<td>Public method to parse the plist data.</td>
-</tr>
-<tr>
-<td><a href="#PlistReader.proc_extra">proc_extra</a></td>
-<td></td>
-</tr>
-<tr>
-<td><a href="#PlistReader.readArray">readArray</a></td>
-<td>Public method to read an Array object.</td>
-</tr>
-<tr>
-<td><a href="#PlistReader.readAsciiString">readAsciiString</a></td>
-<td>Public method to read an ASCII encoded string.</td>
-</tr>
-<tr>
-<td><a href="#PlistReader.readData">readData</a></td>
-<td>Public method to read some bytes.</td>
-</tr>
-<tr>
-<td><a href="#PlistReader.readDate">readDate</a></td>
-<td>Public method to read a date.</td>
-</tr>
-<tr>
-<td><a href="#PlistReader.readDict">readDict</a></td>
-<td>Public method to read a Dictionary object.</td>
-</tr>
-<tr>
-<td><a href="#PlistReader.readInteger">readInteger</a></td>
-<td>Public method to read an Integer object.</td>
-</tr>
-<tr>
-<td><a href="#PlistReader.readObject">readObject</a></td>
-<td>Public method to read the object data.</td>
-</tr>
-<tr>
-<td><a href="#PlistReader.readReal">readReal</a></td>
-<td>Public method to read a Real object.</td>
-</tr>
-<tr>
-<td><a href="#PlistReader.readRefs">readRefs</a></td>
-<td>Public method to read References.</td>
-</tr>
-<tr>
-<td><a href="#PlistReader.readRoot">readRoot</a></td>
-<td>Public method to read the root object.</td>
-</tr>
-<tr>
-<td><a href="#PlistReader.readUid">readUid</a></td>
-<td>Public method to read a UID.</td>
-</tr>
-<tr>
-<td><a href="#PlistReader.readUnicode">readUnicode</a></td>
-<td>Public method to read an Unicode encoded string.</td>
-</tr>
-<tr>
-<td><a href="#PlistReader.reset">reset</a></td>
-<td>Public method to reset the instance object.</td>
-</tr>
-<tr>
-<td><a href="#PlistReader.setCurrentOffsetToObjectNumber">setCurrentOffsetToObjectNumber</a></td>
-<td>Public method to set the current offset.</td>
-</tr>
-</table>
-<h3>Static Methods</h3>
-
-<table>
-<tr><td>None</td></tr>
-</table>
-
-<a NAME="PlistReader.__init__" ID="PlistReader.__init__"></a>
-<h4>PlistReader (Constructor)</h4>
-<b>PlistReader</b>(<i>fileOrStream</i>)
-
-<p>
-        Constructor
-</p>
-<dl>
-
-<dt><i>fileOrStream</i></dt>
-<dd>
-open file containing the plist data (file object)
-</dd>
-</dl>
-<a NAME="PlistReader.getSizedInteger" ID="PlistReader.getSizedInteger"></a>
-<h4>PlistReader.getSizedInteger</h4>
-<b>getSizedInteger</b>(<i>data, length</i>)
-
-<p>
-        Public method to read an integer of a specific size.
-</p>
-<dl>
-
-<dt><i>data</i></dt>
-<dd>
-data to extract the integer from (bytes)
-</dd>
-<dt><i>length</i></dt>
-<dd>
-length of the integer (integer)
-</dd>
-</dl>
-<dl>
-<dt>Returns:</dt>
-<dd>
-read integer (integer)
-</dd>
-</dl>
-<dl>
-
-<dt>Raises <b>InvalidPlistException</b>:</dt>
-<dd>
-raised to indicate an invalid
-            plist file
-</dd>
-</dl>
-<a NAME="PlistReader.parse" ID="PlistReader.parse"></a>
-<h4>PlistReader.parse</h4>
-<b>parse</b>(<i></i>)
-
-<p>
-        Public method to parse the plist data.
-</p>
-<dl>
-<dt>Returns:</dt>
-<dd>
-unpickled object
-</dd>
-</dl>
-<a NAME="PlistReader.proc_extra" ID="PlistReader.proc_extra"></a>
-<h4>PlistReader.proc_extra</h4>
-<b>proc_extra</b>(<i></i>)
-
-<a NAME="PlistReader.readArray" ID="PlistReader.readArray"></a>
-<h4>PlistReader.readArray</h4>
-<b>readArray</b>(<i>count</i>)
-
-<p>
-        Public method to read an Array object.
-</p>
-<dl>
-
-<dt><i>count</i></dt>
-<dd>
-number of array elements (integer)
-</dd>
-</dl>
-<dl>
-<dt>Returns:</dt>
-<dd>
-list of unpickled objects
-</dd>
-</dl>
-<a NAME="PlistReader.readAsciiString" ID="PlistReader.readAsciiString"></a>
-<h4>PlistReader.readAsciiString</h4>
-<b>readAsciiString</b>(<i>length</i>)
-
-<p>
-        Public method to read an ASCII encoded string.
-</p>
-<dl>
-
-<dt><i>length</i></dt>
-<dd>
-length of the string (integer)
-</dd>
-</dl>
-<dl>
-<dt>Returns:</dt>
-<dd>
-ASCII encoded string
-</dd>
-</dl>
-<a NAME="PlistReader.readData" ID="PlistReader.readData"></a>
-<h4>PlistReader.readData</h4>
-<b>readData</b>(<i>length</i>)
-
-<p>
-        Public method to read some bytes.
-</p>
-<dl>
-
-<dt><i>length</i></dt>
-<dd>
-number of bytes to read (integer)
-</dd>
-</dl>
-<dl>
-<dt>Returns:</dt>
-<dd>
-Data object
-</dd>
-</dl>
-<a NAME="PlistReader.readDate" ID="PlistReader.readDate"></a>
-<h4>PlistReader.readDate</h4>
-<b>readDate</b>(<i></i>)
-
-<p>
-        Public method to read a date.
-</p>
-<dl>
-<dt>Returns:</dt>
-<dd>
-date object (datetime.datetime)
-</dd>
-</dl>
-<a NAME="PlistReader.readDict" ID="PlistReader.readDict"></a>
-<h4>PlistReader.readDict</h4>
-<b>readDict</b>(<i>count</i>)
-
-<p>
-        Public method to read a Dictionary object.
-</p>
-<dl>
-
-<dt><i>count</i></dt>
-<dd>
-number of dictionary elements (integer)
-</dd>
-</dl>
-<dl>
-<dt>Returns:</dt>
-<dd>
-dictionary of unpickled objects
-</dd>
-</dl>
-<a NAME="PlistReader.readInteger" ID="PlistReader.readInteger"></a>
-<h4>PlistReader.readInteger</h4>
-<b>readInteger</b>(<i>length</i>)
-
-<p>
-        Public method to read an Integer object.
-</p>
-<dl>
-
-<dt><i>length</i></dt>
-<dd>
-length of the object (integer)
-</dd>
-</dl>
-<dl>
-<dt>Returns:</dt>
-<dd>
-integer object
-</dd>
-</dl>
-<a NAME="PlistReader.readObject" ID="PlistReader.readObject"></a>
-<h4>PlistReader.readObject</h4>
-<b>readObject</b>(<i></i>)
-
-<p>
-        Public method to read the object data.
-</p>
-<dl>
-<dt>Returns:</dt>
-<dd>
-unpickled object
-</dd>
-</dl>
-<dl>
-
-<dt>Raises <b>InvalidPlistException</b>:</dt>
-<dd>
-raised to indicate an invalid
-            plist file
-</dd>
-</dl>
-<a NAME="PlistReader.readReal" ID="PlistReader.readReal"></a>
-<h4>PlistReader.readReal</h4>
-<b>readReal</b>(<i>length</i>)
-
-<p>
-        Public method to read a Real object.
-</p>
-<dl>
-
-<dt><i>length</i></dt>
-<dd>
-length of the object (integer)
-</dd>
-</dl>
-<dl>
-<dt>Returns:</dt>
-<dd>
-float object
-</dd>
-</dl>
-<dl>
-
-<dt>Raises <b>InvalidPlistException</b>:</dt>
-<dd>
-raised to indicate an invalid
-            plist file
-</dd>
-</dl>
-<a NAME="PlistReader.readRefs" ID="PlistReader.readRefs"></a>
-<h4>PlistReader.readRefs</h4>
-<b>readRefs</b>(<i>count</i>)
-
-<p>
-        Public method to read References.
-</p>
-<dl>
-
-<dt><i>count</i></dt>
-<dd>
-amount of the references (integer)
-</dd>
-</dl>
-<dl>
-<dt>Returns:</dt>
-<dd>
-list of references (list of integers)
-</dd>
-</dl>
-<a NAME="PlistReader.readRoot" ID="PlistReader.readRoot"></a>
-<h4>PlistReader.readRoot</h4>
-<b>readRoot</b>(<i></i>)
-
-<p>
-        Public method to read the root object.
-</p>
-<dl>
-<dt>Returns:</dt>
-<dd>
-unpickled object
-</dd>
-</dl>
-<dl>
-
-<dt>Raises <b>InvalidPlistException</b>:</dt>
-<dd>
-raised to indicate an invalid
-            plist file
-</dd>
-<dt>Raises <b>NotBinaryPlistException</b>:</dt>
-<dd>
-raised to indicate, that the
-            plist file is not a binary file
-</dd>
-</dl>
-<a NAME="PlistReader.readUid" ID="PlistReader.readUid"></a>
-<h4>PlistReader.readUid</h4>
-<b>readUid</b>(<i>length</i>)
-
-<p>
-        Public method to read a UID.
-</p>
-<dl>
-
-<dt><i>length</i></dt>
-<dd>
-length of the UID (integer)
-</dd>
-</dl>
-<dl>
-<dt>Returns:</dt>
-<dd>
-Uid object
-</dd>
-</dl>
-<a NAME="PlistReader.readUnicode" ID="PlistReader.readUnicode"></a>
-<h4>PlistReader.readUnicode</h4>
-<b>readUnicode</b>(<i>length</i>)
-
-<p>
-        Public method to read an Unicode encoded string.
-</p>
-<dl>
-
-<dt><i>length</i></dt>
-<dd>
-length of the string (integer)
-</dd>
-</dl>
-<dl>
-<dt>Returns:</dt>
-<dd>
-unicode encoded string
-</dd>
-</dl>
-<a NAME="PlistReader.reset" ID="PlistReader.reset"></a>
-<h4>PlistReader.reset</h4>
-<b>reset</b>(<i></i>)
-
-<p>
-        Public method to reset the instance object.
-</p>
-<a NAME="PlistReader.setCurrentOffsetToObjectNumber" ID="PlistReader.setCurrentOffsetToObjectNumber"></a>
-<h4>PlistReader.setCurrentOffsetToObjectNumber</h4>
-<b>setCurrentOffsetToObjectNumber</b>(<i>objectNumber</i>)
-
-<p>
-        Public method to set the current offset.
-</p>
-<dl>
-
-<dt><i>objectNumber</i></dt>
-<dd>
-number of the object (integer)
-</dd>
-</dl>
-<div align="right"><a href="#top">Up</a></div>
-<hr />
-<hr />
-<a NAME="PlistWriter" ID="PlistWriter"></a>
-<h2>PlistWriter</h2>
-
-<p>
-    Class implementing the plist writer.
-</p>
-<h3>Derived from</h3>
-object
-<h3>Class Attributes</h3>
-
-<table>
-<tr><td>byteCounts</td></tr><tr><td>computedUniques</td></tr><tr><td>file</td></tr><tr><td>header</td></tr><tr><td>referencePositions</td></tr><tr><td>trailer</td></tr><tr><td>wrappedFalse</td></tr><tr><td>wrappedTrue</td></tr><tr><td>writtenReferences</td></tr>
-</table>
-<h3>Class Methods</h3>
-
-<table>
-<tr><td>None</td></tr>
-</table>
-<h3>Methods</h3>
-
-<table>
-
-<tr>
-<td><a href="#PlistWriter.__init__">PlistWriter</a></td>
-<td>Constructor</td>
-</tr>
-<tr>
-<td><a href="#PlistWriter.__checkKey">__checkKey</a></td>
-<td>Private method to check the validity of a key.</td>
-</tr>
-<tr>
-<td><a href="#PlistWriter.__processSize">__processSize</a></td>
-<td>Private method to process a size.</td>
-</tr>
-<tr>
-<td><a href="#PlistWriter.binaryInt">binaryInt</a></td>
-<td>Public method to pack an integer object.</td>
-</tr>
-<tr>
-<td><a href="#PlistWriter.binaryReal">binaryReal</a></td>
-<td>Public method to pack a real object.</td>
-</tr>
-<tr>
-<td><a href="#PlistWriter.computeOffsets">computeOffsets</a></td>
-<td>Public method to compute offsets of an object.</td>
-</tr>
-<tr>
-<td><a href="#PlistWriter.incrementByteCount">incrementByteCount</a></td>
-<td>Public method to increment the byte count.</td>
-</tr>
-<tr>
-<td><a href="#PlistWriter.intSize">intSize</a></td>
-<td>Public method to determine the number of bytes necessary to store the given integer.</td>
-</tr>
-<tr>
-<td><a href="#PlistWriter.positionOfObjectReference">positionOfObjectReference</a></td>
-<td>Public method to get the position of an object.</td>
-</tr>
-<tr>
-<td><a href="#PlistWriter.proc_variable_length">proc_variable_length</a></td>
-<td></td>
-</tr>
-<tr>
-<td><a href="#PlistWriter.realSize">realSize</a></td>
-<td>Public method to determine the number of bytes necessary to store the given real.</td>
-</tr>
-<tr>
-<td><a href="#PlistWriter.reset">reset</a></td>
-<td>Public method to reset the instance object.</td>
-</tr>
-<tr>
-<td><a href="#PlistWriter.wrapRoot">wrapRoot</a></td>
-<td>Public method to generate object wrappers.</td>
-</tr>
-<tr>
-<td><a href="#PlistWriter.writeObject">writeObject</a></td>
-<td>Public method to serialize the given object to the output.</td>
-</tr>
-<tr>
-<td><a href="#PlistWriter.writeObjectReference">writeObjectReference</a></td>
-<td>Public method to write an object reference.</td>
-</tr>
-<tr>
-<td><a href="#PlistWriter.writeOffsetTable">writeOffsetTable</a></td>
-<td>Public method to write all of the object reference offsets.</td>
-</tr>
-<tr>
-<td><a href="#PlistWriter.writeRoot">writeRoot</a></td>
-<td>Public method to write an object to a plist file.</td>
-</tr>
-</table>
-<h3>Static Methods</h3>
-
-<table>
-<tr><td>None</td></tr>
-</table>
-
-<a NAME="PlistWriter.__init__" ID="PlistWriter.__init__"></a>
-<h4>PlistWriter (Constructor)</h4>
-<b>PlistWriter</b>(<i>file</i>)
-
-<p>
-        Constructor
-</p>
-<dl>
-
-<dt><i>file</i></dt>
-<dd>
-file to write the plist data to (file object)
-</dd>
-</dl>
-<a NAME="PlistWriter.__checkKey" ID="PlistWriter.__checkKey"></a>
-<h4>PlistWriter.__checkKey</h4>
-<b>__checkKey</b>(<i>key</i>)
-
-<p>
-        Private method to check the validity of a key.
-</p>
-<dl>
-
-<dt><i>key</i></dt>
-<dd>
-key to be checked
-</dd>
-</dl>
-<dl>
-
-<dt>Raises <b>InvalidPlistException</b>:</dt>
-<dd>
-raised to indicate an invalid
-            plist file
-</dd>
-</dl>
-<a NAME="PlistWriter.__processSize" ID="PlistWriter.__processSize"></a>
-<h4>PlistWriter.__processSize</h4>
-<b>__processSize</b>(<i>size</i>)
-
-<p>
-        Private method to process a size.
-</p>
-<dl>
-
-<dt><i>size</i></dt>
-<dd>
-size value to be processed (int)
-</dd>
-</dl>
-<dl>
-<dt>Returns:</dt>
-<dd>
-processed size (int)
-</dd>
-</dl>
-<a NAME="PlistWriter.binaryInt" ID="PlistWriter.binaryInt"></a>
-<h4>PlistWriter.binaryInt</h4>
-<b>binaryInt</b>(<i>obj, length=None</i>)
-
-<p>
-        Public method to pack an integer object.
-</p>
-<dl>
-
-<dt><i>obj</i></dt>
-<dd>
-integer to be packed
-</dd>
-<dt><i>length</i></dt>
-<dd>
-length the integer should be packed into (integer)
-</dd>
-</dl>
-<dl>
-<dt>Returns:</dt>
-<dd>
-serialized object (bytes)
-</dd>
-</dl>
-<dl>
-
-<dt>Raises <b>InvalidPlistException</b>:</dt>
-<dd>
-raised to indicate an invalid
-            plist file
-</dd>
-</dl>
-<a NAME="PlistWriter.binaryReal" ID="PlistWriter.binaryReal"></a>
-<h4>PlistWriter.binaryReal</h4>
-<b>binaryReal</b>(<i>obj</i>)
-
-<p>
-        Public method to pack a real object.
-</p>
-<dl>
-
-<dt><i>obj</i></dt>
-<dd>
-real to be packed
-</dd>
-</dl>
-<dl>
-<dt>Returns:</dt>
-<dd>
-serialized object (bytes)
-</dd>
-</dl>
-<a NAME="PlistWriter.computeOffsets" ID="PlistWriter.computeOffsets"></a>
-<h4>PlistWriter.computeOffsets</h4>
-<b>computeOffsets</b>(<i>obj, asReference=False, isRoot=False</i>)
-
-<p>
-        Public method to compute offsets of an object.
-</p>
-<dl>
-
-<dt><i>obj</i></dt>
-<dd>
-plist object
-</dd>
-<dt><i>asReference</i></dt>
-<dd>
-flag indicating offsets as references (boolean)
-</dd>
-<dt><i>isRoot</i></dt>
-<dd>
-flag indicating a root object (boolean)
-</dd>
-</dl>
-<dl>
-
-<dt>Raises <b>InvalidPlistException</b>:</dt>
-<dd>
-raised to indicate an invalid
-            plist file
-</dd>
-</dl>
-<a NAME="PlistWriter.incrementByteCount" ID="PlistWriter.incrementByteCount"></a>
-<h4>PlistWriter.incrementByteCount</h4>
-<b>incrementByteCount</b>(<i>field, incr=1</i>)
-
-<p>
-        Public method to increment the byte count.
-</p>
-<dl>
-
-<dt><i>field</i></dt>
-<dd>
-field to evaluate
-</dd>
-<dt><i>incr</i></dt>
-<dd>
-byte count increment (integer)
-</dd>
-</dl>
-<a NAME="PlistWriter.intSize" ID="PlistWriter.intSize"></a>
-<h4>PlistWriter.intSize</h4>
-<b>intSize</b>(<i>obj</i>)
-
-<p>
-        Public method to determine the number of bytes necessary to store the
-        given integer.
-</p>
-<dl>
-
-<dt><i>obj</i></dt>
-<dd>
-integer object
-</dd>
-</dl>
-<dl>
-<dt>Returns:</dt>
-<dd>
-number of bytes required (integer)
-</dd>
-</dl>
-<dl>
-
-<dt>Raises <b>InvalidPlistException</b>:</dt>
-<dd>
-raised to indicate an invalid
-            plist file
-</dd>
-</dl>
-<a NAME="PlistWriter.positionOfObjectReference" ID="PlistWriter.positionOfObjectReference"></a>
-<h4>PlistWriter.positionOfObjectReference</h4>
-<b>positionOfObjectReference</b>(<i>obj</i>)
-
-<p>
-        Public method to get the position of an object.
-</p>
-<p>
-        If the given object has been written already, return its
-        position in the offset table. Otherwise, return None.
-</p>
-<dl>
-
-<dt><i>obj</i></dt>
-<dd>
-object
-</dd>
-</dl>
-<dl>
-<dt>Returns:</dt>
-<dd>
-position of the object (integer)
-</dd>
-</dl>
-<a NAME="PlistWriter.proc_variable_length" ID="PlistWriter.proc_variable_length"></a>
-<h4>PlistWriter.proc_variable_length</h4>
-<b>proc_variable_length</b>(<i>length</i>)
-
-<a NAME="PlistWriter.realSize" ID="PlistWriter.realSize"></a>
-<h4>PlistWriter.realSize</h4>
-<b>realSize</b>(<i>obj</i>)
-
-<p>
-        Public method to determine the number of bytes necessary to store the
-        given real.
-</p>
-<dl>
-
-<dt><i>obj</i></dt>
-<dd>
-real object
-</dd>
-</dl>
-<dl>
-<dt>Returns:</dt>
-<dd>
-number of bytes required (integer)
-</dd>
-</dl>
-<a NAME="PlistWriter.reset" ID="PlistWriter.reset"></a>
-<h4>PlistWriter.reset</h4>
-<b>reset</b>(<i></i>)
-
-<p>
-        Public method to reset the instance object.
-</p>
-<a NAME="PlistWriter.wrapRoot" ID="PlistWriter.wrapRoot"></a>
-<h4>PlistWriter.wrapRoot</h4>
-<b>wrapRoot</b>(<i>root</i>)
-
-<p>
-        Public method to generate object wrappers.
-</p>
-<dl>
-
-<dt><i>root</i></dt>
-<dd>
-object to be wrapped
-</dd>
-</dl>
-<dl>
-<dt>Returns:</dt>
-<dd>
-wrapped object
-</dd>
-</dl>
-<a NAME="PlistWriter.writeObject" ID="PlistWriter.writeObject"></a>
-<h4>PlistWriter.writeObject</h4>
-<b>writeObject</b>(<i>obj, output, setReferencePosition=False</i>)
-
-<p>
-        Public method to serialize the given object to the output.
-</p>
-<dl>
-
-<dt><i>obj</i></dt>
-<dd>
-object to be serialized
-</dd>
-<dt><i>output</i></dt>
-<dd>
-output to be serialized to (bytes)
-</dd>
-<dt><i>setReferencePosition</i></dt>
-<dd>
-flag indicating, that the reference
-            position the object was written to shall be recorded (boolean)
-</dd>
-</dl>
-<dl>
-<dt>Returns:</dt>
-<dd>
-new output
-</dd>
-</dl>
-<a NAME="PlistWriter.writeObjectReference" ID="PlistWriter.writeObjectReference"></a>
-<h4>PlistWriter.writeObjectReference</h4>
-<b>writeObjectReference</b>(<i>obj, output</i>)
-
-<p>
-        Public method to write an object reference.
-</p>
-<p>
-        Tries to write an object reference, adding it to the references
-        table. Does not write the actual object bytes or set the reference
-        position. Returns a tuple of whether the object was a new reference
-        (True if it was, False if it already was in the reference table)
-        and the new output.
-</p>
-<dl>
-
-<dt><i>obj</i></dt>
-<dd>
-object to be written
-</dd>
-<dt><i>output</i></dt>
-<dd>
-output stream to append the object to
-</dd>
-</dl>
-<dl>
-<dt>Returns:</dt>
-<dd>
-flag indicating a new reference and the new output
-</dd>
-</dl>
-<a NAME="PlistWriter.writeOffsetTable" ID="PlistWriter.writeOffsetTable"></a>
-<h4>PlistWriter.writeOffsetTable</h4>
-<b>writeOffsetTable</b>(<i>output</i>)
-
-<p>
-        Public method to write all of the object reference offsets.
-</p>
-<dl>
-
-<dt><i>output</i></dt>
-<dd>
-current output (bytes)
-</dd>
-</dl>
-<dl>
-<dt>Returns:</dt>
-<dd>
-new output (bytes)
-</dd>
-</dl>
-<dl>
-
-<dt>Raises <b>InvalidPlistException</b>:</dt>
-<dd>
-raised to indicate an invalid
-            plist file
-</dd>
-</dl>
-<a NAME="PlistWriter.writeRoot" ID="PlistWriter.writeRoot"></a>
-<h4>PlistWriter.writeRoot</h4>
-<b>writeRoot</b>(<i>root</i>)
-
-<p>
-        Public method to write an object to a plist file.
-</p>
-<p>
-        Strategy is:
-        <ul>
-        <li>write header</li>
-        <li>wrap root object so everything is hashable</li>
-        <li>compute size of objects which will be written
-          <ul>
-          <li>need to do this in order to know how large the object refs
-            will be in the list/dict/set reference lists</li>
-        </ul></li>
-        <li>write objects
-          <ul>
-          <li>keep objects in writtenReferences</li>
-          <li>keep positions of object references in referencePositions</li>
-          <li>write object references with the length computed previously</li>
-        </ul></li>
-        <li>computer object reference length</li>
-        <li>write object reference positions</li>
-        <li>write trailer</li>
-        </ul>
-</p>
-<dl>
-
-<dt><i>root</i></dt>
-<dd>
-reference to the object to be written
-</dd>
-</dl>
-<div align="right"><a href="#top">Up</a></div>
-<hr />
-<hr />
-<a NAME="Uid" ID="Uid"></a>
-<h2>Uid</h2>
-
-<p>
-    Class implementing a wrapper around integers for representing UID values.
-</p>
-<p>
-    This is used in keyed archiving.
-</p>
-<h3>Derived from</h3>
-int
-<h3>Class Attributes</h3>
-
-<table>
-<tr><td>None</td></tr>
-</table>
-<h3>Class Methods</h3>
-
-<table>
-<tr><td>None</td></tr>
-</table>
-<h3>Methods</h3>
-
-<table>
-
-<tr>
-<td><a href="#Uid.__repr__">__repr__</a></td>
-<td>Special method to return an object representation.</td>
-</tr>
-</table>
-<h3>Static Methods</h3>
-
-<table>
-<tr><td>None</td></tr>
-</table>
-
-<a NAME="Uid.__repr__" ID="Uid.__repr__"></a>
-<h4>Uid.__repr__</h4>
-<b>__repr__</b>(<i></i>)
-
-<p>
-        Special method to return an object representation.
-</p>
-<dl>
-<dt>Returns:</dt>
-<dd>
-object representation (string)
-</dd>
-</dl>
-<div align="right"><a href="#top">Up</a></div>
-<hr />
-<hr />
-<a NAME="is_stream_binary_plist" ID="is_stream_binary_plist"></a>
-<h2>is_stream_binary_plist</h2>
-<b>is_stream_binary_plist</b>(<i>stream</i>)
-
-<p>
-    Module function to check, if the stream is a binary plist.
-</p>
-<dl>
-
-<dt><i>stream</i></dt>
-<dd>
-plist stream (file object)
-</dd>
-</dl>
-<dl>
-<dt>Returns:</dt>
-<dd>
-flag indicating a binary plist (boolean)
-</dd>
-</dl>
-<div align="right"><a href="#top">Up</a></div>
-<hr />
-<hr />
-<a NAME="readPlist" ID="readPlist"></a>
-<h2>readPlist</h2>
-<b>readPlist</b>(<i>pathOrFile</i>)
-
-<p>
-    Module function to read a plist file.
-</p>
-<dl>
-
-<dt><i>pathOrFile</i></dt>
-<dd>
-name of the plist file (string) or an open file
-        (file object)
-</dd>
-</dl>
-<dl>
-<dt>Returns:</dt>
-<dd>
-reference to the read object
-</dd>
-</dl>
-<dl>
-
-<dt>Raises <b>InvalidPlistException</b>:</dt>
-<dd>
-raised to signal an invalid plist file
-</dd>
-</dl>
-<div align="right"><a href="#top">Up</a></div>
-<hr />
-<hr />
-<a NAME="readPlistFromBytes" ID="readPlistFromBytes"></a>
-<h2>readPlistFromBytes</h2>
-<b>readPlistFromBytes</b>(<i>data</i>)
-
-<p>
-    Module function to read from a plist bytes object.
-</p>
-<dl>
-
-<dt><i>data</i></dt>
-<dd>
-plist data (bytes)
-</dd>
-</dl>
-<dl>
-<dt>Returns:</dt>
-<dd>
-reference to the read object
-</dd>
-</dl>
-<div align="right"><a href="#top">Up</a></div>
-<hr />
-<hr />
-<a NAME="writePlist" ID="writePlist"></a>
-<h2>writePlist</h2>
-<b>writePlist</b>(<i>rootObject, pathOrFile, binary=True</i>)
-
-<p>
-    Module function to write a plist file.
-</p>
-<dl>
-
-<dt><i>rootObject</i></dt>
-<dd>
-reference to the object to be written
-</dd>
-<dt><i>pathOrFile</i></dt>
-<dd>
-name of the plist file (string) or an open file
-        (file object)
-</dd>
-<dt><i>binary</i></dt>
-<dd>
-flag indicating the generation of a binary plist file
-        (boolean)
-</dd>
-</dl>
-<div align="right"><a href="#top">Up</a></div>
-<hr />
-<hr />
-<a NAME="writePlistToBytes" ID="writePlistToBytes"></a>
-<h2>writePlistToBytes</h2>
-<b>writePlistToBytes</b>(<i>rootObject, binary=True</i>)
-
-<p>
-    Module function to write a plist bytes object.
-</p>
-<dl>
-
-<dt><i>rootObject</i></dt>
-<dd>
-reference to the object to be written
-</dd>
-<dt><i>binary</i></dt>
-<dd>
-flag indicating the generation of a binary plist bytes
-        object (boolean)
-</dd>
-</dl>
-<dl>
-<dt>Returns:</dt>
-<dd>
-bytes object containing the plist data
-</dd>
-</dl>
-<div align="right"><a href="#top">Up</a></div>
-<hr />
-</body></html>
\ No newline at end of file
--- a/eric6/Documentation/Source/eric6.VirtualEnv.VirtualenvManagerDialog.html	Sat Aug 01 10:39:12 2020 +0200
+++ b/eric6/Documentation/Source/eric6.VirtualEnv.VirtualenvManagerDialog.html	Wed Sep 02 18:06:20 2020 +0200
@@ -59,7 +59,7 @@
 <h3>Class Attributes</h3>
 
 <table>
-<tr><td>ExecPathRole</td></tr><tr><td>IsCondaRole</td></tr><tr><td>IsGlobalRole</td></tr><tr><td>IsRemoteRole</td></tr><tr><td>PythonVariantRole</td></tr>
+<tr><td>ExecPathRole</td></tr><tr><td>IsCondaRole</td></tr><tr><td>IsGlobalRole</td></tr><tr><td>IsRemoteRole</td></tr>
 </table>
 <h3>Class Methods</h3>
 
--- a/eric6/Documentation/Source/index-eric6.Plugins.CheckerPlugins.html	Sat Aug 01 10:39:12 2020 +0200
+++ b/eric6/Documentation/Source/index-eric6.Plugins.CheckerPlugins.html	Wed Sep 02 18:06:20 2020 +0200
@@ -36,10 +36,6 @@
 <td><a href="index-eric6.Plugins.CheckerPlugins.SyntaxChecker.html">SyntaxChecker</a></td>
 <td>Package containing the Syntax Checker plugin.</td>
 </tr>
-<tr>
-<td><a href="index-eric6.Plugins.CheckerPlugins.Tabnanny.html">Tabnanny</a></td>
-<td>Package containing the Tabnanny plugin.</td>
-</tr>
 </table>
 
 </body></html>
\ No newline at end of file
--- a/eric6/Documentation/Source/index-eric6.Plugins.VcsPlugins.vcsMercurial.FetchExtension.html	Sat Aug 01 10:39:12 2020 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,45 +0,0 @@
-<!DOCTYPE html>
-<html><head>
-<title>eric6.Plugins.VcsPlugins.vcsMercurial.FetchExtension</title>
-<meta charset="UTF-8">
-<style>
-body {
-    background: #EDECE6;
-    margin: 0em 1em 10em 1em;
-    color: black;
-}
-
-h1 { color: white; background: #85774A; }
-h2 { color: white; background: #85774A; }
-h3 { color: white; background: #9D936E; }
-h4 { color: white; background: #9D936E; }
-    
-a { color: #BA6D36; }
-
-</style>
-</head>
-<body>
-<h1>eric6.Plugins.VcsPlugins.vcsMercurial.FetchExtension</h1>
-
-<p>
-Package implementing the fetch extension support interface.
-</p>
-
-
-<h3>Modules</h3>
-<table>
-
-<tr>
-<td><a href="eric6.Plugins.VcsPlugins.vcsMercurial.FetchExtension.HgFetchDialog.html">HgFetchDialog</a></td>
-<td>Module implementing a dialog to enter data to be used for a fetch operation.</td>
-</tr>
-<tr>
-<td><a href="eric6.Plugins.VcsPlugins.vcsMercurial.FetchExtension.ProjectHelper.html">ProjectHelper</a></td>
-<td>Module implementing the fetch extension project helper.</td>
-</tr>
-<tr>
-<td><a href="eric6.Plugins.VcsPlugins.vcsMercurial.FetchExtension.fetch.html">fetch</a></td>
-<td>Module implementing the fetch extension interface.</td>
-</tr>
-</table>
-</body></html>
\ No newline at end of file
--- a/eric6/Documentation/Source/index-eric6.Plugins.VcsPlugins.vcsMercurial.html	Sat Aug 01 10:39:12 2020 +0200
+++ b/eric6/Documentation/Source/index-eric6.Plugins.VcsPlugins.vcsMercurial.html	Wed Sep 02 18:06:20 2020 +0200
@@ -41,10 +41,6 @@
 <td>Package implementing the the Mercurial configuration page.</td>
 </tr>
 <tr>
-<td><a href="index-eric6.Plugins.VcsPlugins.vcsMercurial.FetchExtension.html">FetchExtension</a></td>
-<td>Package implementing the fetch extension support interface.</td>
-</tr>
-<tr>
 <td><a href="index-eric6.Plugins.VcsPlugins.vcsMercurial.GpgExtension.html">GpgExtension</a></td>
 <td>Package implementing the gpg extension support interface.</td>
 </tr>
--- a/eric6/Documentation/Source/index-eric6.Plugins.html	Sat Aug 01 10:39:12 2020 +0200
+++ b/eric6/Documentation/Source/index-eric6.Plugins.html	Wed Sep 02 18:06:20 2020 +0200
@@ -82,10 +82,6 @@
 <td>Module implementing the Syntax Checker plugin.</td>
 </tr>
 <tr>
-<td><a href="eric6.Plugins.PluginTabnanny.html">PluginTabnanny</a></td>
-<td>Module implementing the Tabnanny plugin.</td>
-</tr>
-<tr>
 <td><a href="eric6.Plugins.PluginTranslator.html">PluginTranslator</a></td>
 <td>Module implementing the Translator plugin.</td>
 </tr>
--- a/eric6/Documentation/Source/index-eric6.Utilities.html	Sat Aug 01 10:39:12 2020 +0200
+++ b/eric6/Documentation/Source/index-eric6.Utilities.html	Wed Sep 02 18:06:20 2020 +0200
@@ -86,10 +86,6 @@
 <td>Package implementing various functions/classes needed everywhere within eric6.</td>
 </tr>
 <tr>
-<td><a href="eric6.Utilities.binplistlib.html">binplistlib</a></td>
-<td>Module implementing a library for reading and writing binary property list files.</td>
-</tr>
-<tr>
 <td><a href="eric6.Utilities.uic.html">uic</a></td>
 <td>Module implementing a function to compile all user interface files of a directory or directory tree.</td>
 </tr>
--- a/eric6/Globals/__init__.py	Sat Aug 01 10:39:12 2020 +0200
+++ b/eric6/Globals/__init__.py	Wed Sep 02 18:06:20 2020 +0200
@@ -371,7 +371,11 @@
     # step 1: extract suffix
     version = re.split(r"[^\d.]", version)[0]
     for part in version.split("."):
-        versionParts.append(int(part))
+        try:
+            versionParts.append(int(part.strip()))
+        except ValueError:
+            # skip non-integer parts
+            pass
     versionParts.extend([0] * length)
     
     return tuple(versionParts[:length])
--- a/eric6/Plugins/CheckerPlugins/Tabnanny/Tabnanny.py	Sat Aug 01 10:39:12 2020 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,524 +0,0 @@
-# -*- coding: utf-8 -*-
-
-"""
-The Tab Nanny despises ambiguous indentation.  She knows no mercy.
-
-tabnanny -- Detection of ambiguous indentation
-
-For the time being this module is intended to be called as a script.
-However it is possible to import it into an IDE and use the function
-check() described below.
-
-Warning: The API provided by this module is likely to change in future
-releases; such changes may not be backward compatible.
-
-This is a modified version to make the original tabnanny better suitable
-for being called from within the eric6 IDE.
-
-@exception ValueError The tokenize module is too old.
-"""
-
-# Released to the public domain, by Tim Peters, 15 April 1998.
-
-# XXX Note: this is now a standard library module.
-# XXX The API needs to undergo changes however; the current code is too
-# XXX script-like.  This will be addressed later.
-
-#
-# This is a modified version to make the original tabnanny better suitable
-# for being called from within the eric6 IDE. The modifications are as
-# follows:
-#
-# - there is no main function anymore
-# - check function has been modified to only accept a filename and return
-#   a tuple indicating status (1 = an error was found), the filename, the
-#   linenumber and the error message (boolean, string, string, string). The
-#   values are only valid, if the status equals 1.
-#
-# Mofifications Copyright (c) 2003-2020 Detlev Offenbach
-# <detlev@die-offenbachs.de>
-#
-
-__version__ = "6_eric"
-
-import tokenize
-try:
-    import StringIO as io
-    import Queue as queue
-except (ImportError):
-    import io    # __IGNORE_WARNING__
-    import queue
-
-import multiprocessing
-
-
-if not hasattr(tokenize, 'NL'):
-    raise ValueError("tokenize.NL doesn't exist -- tokenize module too old")
-
-__all__ = ["check", "NannyNag", "process_tokens"]
-
-
-def initService():
-    """
-    Initialize the service and return the entry point.
-    
-    @return the entry point for the background client (function)
-    """
-    return check
-
-
-def initBatchService():
-    """
-    Initialize the batch service and return the entry point.
-    
-    @return the entry point for the background client (function)
-    """
-    return batchCheck
-
-
-class NannyNag(Exception):
-    """
-    Class implementing an exception for indentation issues.
-    
-    Raised by tokeneater() if detecting an ambiguous indent.
-    Captured and handled in check().
-    """
-    def __init__(self, lineno, msg, line):
-        """
-        Constructor
-        
-        @param lineno Line number of the ambiguous indent.
-        @param msg Descriptive message assigned to this problem.
-        @param line The offending source line.
-        """
-        self.lineno, self.msg, self.line = lineno, msg, line
-        
-    def get_lineno(self):
-        """
-        Public method to retrieve the line number.
-        
-        @return The line number (integer)
-        """
-        return self.lineno
-        
-    def get_msg(self):
-        """
-        Public method to retrieve the message.
-        
-        @return The error message (string)
-        """
-        return self.msg
-        
-    def get_line(self):
-        """
-        Public method to retrieve the offending line.
-        
-        @return The line of code (string)
-        """
-        return self.line
-
-
-def check(file, text=""):
-    """
-    Private function to check one Python source file for whitespace related
-    problems.
-    
-    @param file source filename (string)
-    @param text source text (string)
-    @return A tuple indicating status (True = an error was found), the
-        filename, the linenumber and the error message
-        (boolean, string, string, string). The values are only
-        valid, if the status is True.
-    """
-    return __check(file, text)
-
-
-def batchCheck(argumentsList, send, fx, cancelled, maxProcesses=0):
-    """
-    Module function to check a batch of files for whitespace related problems.
-    
-    @param argumentsList list of arguments tuples as given for check
-    @type list
-    @param send reference to send function
-    @type func
-    @param fx registered service name
-    @type str
-    @param cancelled reference to function checking for a cancellation
-    @type func
-    @param maxProcesses number of processes to be used
-    @type int
-    """
-    if maxProcesses == 0:
-        # determine based on CPU count
-        try:
-            NumberOfProcesses = multiprocessing.cpu_count()
-            if NumberOfProcesses >= 1:
-                NumberOfProcesses -= 1
-        except NotImplementedError:
-            NumberOfProcesses = 1
-    else:
-        NumberOfProcesses = maxProcesses
-
-    # Create queues
-    taskQueue = multiprocessing.Queue()
-    doneQueue = multiprocessing.Queue()
-
-    # Submit tasks (initially two time number of processes
-    initialTasks = 2 * NumberOfProcesses
-    for task in argumentsList[:initialTasks]:
-        taskQueue.put(task)
-
-    # Start worker processes
-    for _ in range(NumberOfProcesses):
-        multiprocessing.Process(
-            target=worker, args=(taskQueue, doneQueue)
-        ).start()
-
-    # Get and send results
-    endIndex = len(argumentsList) - initialTasks
-    for i in range(len(argumentsList)):
-        resultSent = False
-        wasCancelled = False
-        
-        while not resultSent:
-            try:
-                # get result (waiting max. 3 seconds and send it to frontend
-                filename, result = doneQueue.get()
-                send(fx, filename, result)
-                resultSent = True
-            except queue.Empty:
-                # ignore empty queue, just carry on
-                if cancelled():
-                    wasCancelled = True
-                    break
-        
-        if wasCancelled or cancelled():
-            # just exit the loop ignoring the results of queued tasks
-            break
-        
-        if i < endIndex:
-            taskQueue.put(argumentsList[i + initialTasks])
-
-    # Tell child processes to stop
-    for _ in range(NumberOfProcesses):
-        taskQueue.put('STOP')
-
-
-def worker(inputQueue, outputQueue):
-    """
-    Module function acting as the parallel worker for the style check.
-    
-    @param inputQueue input queue (multiprocessing.Queue)
-    @param outputQueue output queue (multiprocessing.Queue)
-    """
-    for filename, source in iter(inputQueue.get, 'STOP'):
-        result = __check(filename, source)
-        outputQueue.put((filename, result))
-
-
-def __check(file, text=""):
-    """
-    Private function to check one Python source file for whitespace related
-    problems.
-    
-    @param file source filename (string)
-    @param text source text (string)
-    @return A tuple indicating status (True = an error was found), the
-        filename, the linenumber and the error message
-        (boolean, string, string). The values are only
-        valid, if the status is True.
-    """
-    global indents, check_equal
-    indents = [Whitespace("")]
-    check_equal = 0
-    if not text:
-        return (True, "1", "Error: source code missing.")
-    
-    source = io.StringIO(text)
-    try:
-        process_tokens(tokenize.generate_tokens(source.readline))
-    
-    except tokenize.TokenError as msg:
-        return (True, "1", "Token Error: {0}".format(str(msg)))
-    
-    except IndentationError as err:
-        return (True, str(err.lineno),
-                "Indentation Error: {0}".format(str(err.msg)))
-    
-    except NannyNag as nag:
-        badline = nag.get_lineno()
-        line = nag.get_line()
-        return (True, str(badline), line)
-    
-    except Exception as err:
-        return (True, "1", "Unspecific Error: {0}".format(str(err)))
-    
-    return (False, "", "")
-
-
-class Whitespace(object):
-    """
-    Class implementing the whitespace checker.
-    """
-    # the characters used for space and tab
-    S, T = ' \t'
-
-    # members:
-    #   raw
-    #       the original string
-    #   n
-    #       the number of leading whitespace characters in raw
-    #   nt
-    #       the number of tabs in raw[:n]
-    #   norm
-    #       the normal form as a pair (count, trailing), where:
-    #       count
-    #           a tuple such that raw[:n] contains count[i]
-    #           instances of S * i + T
-    #       trailing
-    #           the number of trailing spaces in raw[:n]
-    #       It's A Theorem that m.indent_level(t) ==
-    #       n.indent_level(t) for all t >= 1 iff m.norm == n.norm.
-    #   is_simple
-    #       true iff raw[:n] is of the form (T*)(S*)
-
-    def __init__(self, ws):
-        """
-        Constructor
-        
-        @param ws The string to be checked.
-        """
-        self.raw = ws
-        S, T = Whitespace.S, Whitespace.T
-        count = []
-        b = n = nt = 0
-        for ch in self.raw:
-            if ch == S:
-                n = n + 1
-                b = b + 1
-            elif ch == T:
-                n = n + 1
-                nt = nt + 1
-                if b >= len(count):
-                    count = count + [0] * (b - len(count) + 1)
-                count[b] = count[b] + 1
-                b = 0
-            else:
-                break
-        self.n = n
-        self.nt = nt
-        self.norm = tuple(count), b
-        self.is_simple = len(count) <= 1
-
-    # return length of longest contiguous run of spaces (whether or not
-    # preceding a tab)
-    def longest_run_of_spaces(self):
-        """
-        Public method to calculate the length of longest contiguous run of
-        spaces.
-        
-        @return The length of longest contiguous run of spaces (whether or not
-            preceding a tab)
-        """
-        count, trailing = self.norm
-        return max(len(count) - 1, trailing)
-
-    def indent_level(self, tabsize):
-        """
-        Public method to determine the indentation level.
-        
-        @param tabsize The length of a tab stop. (integer)
-        @return indentation level (integer)
-        """
-        ## count, il = self.norm
-        ## for i in range(len(count)):
-        ##    if count[i]:
-        ##        il = il + (i/tabsize + 1)*tabsize * count[i]
-        ## return il
-
-        ## quicker:
-        ## il = trailing + sum (i/ts + 1)*ts*count[i] =
-        ## trailing + ts * sum (i/ts + 1)*count[i] =
-        ## trailing + ts * sum i/ts*count[i] + count[i] =
-        ## trailing + ts * [(sum i/ts*count[i]) + (sum count[i])] =
-        ## trailing + ts * [(sum i/ts*count[i]) + num_tabs]
-        ## and note that i/ts*count[i] is 0 when i < ts
-
-        count, trailing = self.norm
-        il = 0
-        for i in range(tabsize, len(count)):
-            il = il + i / tabsize * count[i]
-        return trailing + tabsize * (il + self.nt)
-
-    # return true iff self.indent_level(t) == other.indent_level(t)
-    # for all t >= 1
-    def equal(self, other):
-        """
-        Public method to compare the indentation levels of two Whitespace
-        objects for equality.
-        
-        @param other Whitespace object to compare against.
-        @return True, if we compare equal against the other Whitespace object.
-        """
-        return self.norm == other.norm
-
-    # return a list of tuples (ts, i1, i2) such that
-    # i1 == self.indent_level(ts) != other.indent_level(ts) == i2.
-    # Intended to be used after not self.equal(other) is known, in which
-    # case it will return at least one witnessing tab size.
-    def not_equal_witness(self, other):
-        """
-        Public method to calculate a tuple of witnessing tab size.
-        
-        Intended to be used after not self.equal(other) is known, in which
-        case it will return at least one witnessing tab size.
-        
-        @param other Whitespace object to calculate against.
-        @return A list of tuples (ts, i1, i2) such that
-            i1 == self.indent_level(ts) != other.indent_level(ts) == i2.
-        """
-        n = max(self.longest_run_of_spaces(),
-                other.longest_run_of_spaces()) + 1
-        a = []
-        for ts in range(1, n + 1):
-            if self.indent_level(ts) != other.indent_level(ts):
-                a.append((ts,
-                         self.indent_level(ts),
-                         other.indent_level(ts)))
-        return a
-
-    # Return True iff self.indent_level(t) < other.indent_level(t)
-    # for all t >= 1.
-    # The algorithm is due to Vincent Broman.
-    # Easy to prove it's correct.
-    # XXXpost that.
-    # Trivial to prove n is sharp (consider T vs ST).
-    # Unknown whether there's a faster general way.  I suspected so at
-    # first, but no longer.
-    # For the special (but common!) case where M and N are both of the
-    # form (T*)(S*), M.less(N) iff M.len() < N.len() and
-    # M.num_tabs() <= N.num_tabs(). Proof is easy but kinda long-winded.
-    # XXXwrite that up.
-    # Note that M is of the form (T*)(S*) iff len(M.norm[0]) <= 1.
-    def less(self, other):
-        """
-        Public method to compare the indentation level against another
-        Whitespace objects to be smaller.
-        
-        @param other Whitespace object to compare against.
-        @return True, if we compare less against the other Whitespace object.
-        """
-        if self.n >= other.n:
-            return False
-        if self.is_simple and other.is_simple:
-            return self.nt <= other.nt
-        n = max(self.longest_run_of_spaces(),
-                other.longest_run_of_spaces()) + 1
-        # the self.n >= other.n test already did it for ts=1
-        for ts in range(2, n + 1):
-            if self.indent_level(ts) >= other.indent_level(ts):
-                return False
-        return True
-
-    # return a list of tuples (ts, i1, i2) such that
-    # i1 == self.indent_level(ts) >= other.indent_level(ts) == i2.
-    # Intended to be used after not self.less(other) is known, in which
-    # case it will return at least one witnessing tab size.
-    def not_less_witness(self, other):
-        """
-        Public method to calculate a tuple of witnessing tab size.
-        
-        Intended to be used after not self.less(other is known, in which
-        case it will return at least one witnessing tab size.
-        
-        @param other Whitespace object to calculate against.
-        @return A list of tuples (ts, i1, i2) such that
-            i1 == self.indent_level(ts) >= other.indent_level(ts) == i2.
-        """
-        n = max(self.longest_run_of_spaces(),
-                other.longest_run_of_spaces()) + 1
-        a = []
-        for ts in range(1, n + 1):
-            if self.indent_level(ts) >= other.indent_level(ts):
-                a.append((ts,
-                         self.indent_level(ts),
-                         other.indent_level(ts)))
-        return a
-
-
-def format_witnesses(w):
-    """
-    Function to format the witnesses as a readable string.
-    
-    @param w A list of witnesses
-    @return A formated string of the witnesses.
-    """
-    firsts = [str(tup[0]) for tup in w]
-    prefix = "at tab size"
-    if len(w) > 1:
-        prefix = prefix + "s"
-    return prefix + " " + ', '.join(firsts)
-
-
-def process_tokens(tokens):
-    """
-    Function processing all tokens generated by a tokenizer run.
-    
-    @param tokens list of tokens
-    @exception NannyNag raised to indicate an indentation error
-    """
-    INDENT = tokenize.INDENT
-    DEDENT = tokenize.DEDENT
-    NEWLINE = tokenize.NEWLINE
-    JUNK = tokenize.COMMENT, tokenize.NL
-    indents = [Whitespace("")]
-    check_equal = 0
-    
-    for (tokenType, token, start, _end, line) in tokens:
-        if tokenType == NEWLINE:
-            # a program statement, or ENDMARKER, will eventually follow,
-            # after some (possibly empty) run of tokens of the form
-            #     (NL | COMMENT)* (INDENT | DEDENT+)?
-            # If an INDENT appears, setting check_equal is wrong, and will
-            # be undone when we see the INDENT.
-            check_equal = 1
-
-        elif tokenType == INDENT:
-            check_equal = 0
-            thisguy = Whitespace(token)
-            if not indents[-1].less(thisguy):
-                witness = indents[-1].not_less_witness(thisguy)
-                msg = "indent not greater e.g. " + format_witnesses(witness)
-                raise NannyNag(start[0], msg, line)
-            indents.append(thisguy)
-
-        elif tokenType == DEDENT:
-            # there's nothing we need to check here!  what's important is
-            # that when the run of DEDENTs ends, the indentation of the
-            # program statement (or ENDMARKER) that triggered the run is
-            # equal to what's left at the top of the indents stack
-
-            # Ouch!  This assert triggers if the last line of the source
-            # is indented *and* lacks a newline -- then DEDENTs pop out
-            # of thin air.
-            # assert check_equal  # else no earlier NEWLINE, or an
-            # earlier INDENT
-            check_equal = 1
-
-            del indents[-1]
-
-        elif check_equal and tokenType not in JUNK:
-            # this is the first "real token" following a NEWLINE, so it
-            # must be the first token of the next program statement, or an
-            # ENDMARKER; the "line" argument exposes the leading whitespace
-            # for this statement; in the case of ENDMARKER, line is an empty
-            # string, so will properly match the empty string with which the
-            # "indents" stack was seeded
-            check_equal = 0
-            thisguy = Whitespace(line)
-            if not indents[-1].equal(thisguy):
-                witness = indents[-1].not_equal_witness(thisguy)
-                msg = "indent not equal e.g. " + format_witnesses(witness)
-                raise NannyNag(start[0], msg, line)
-
-# eflag: noqa = M111
--- a/eric6/Plugins/CheckerPlugins/Tabnanny/TabnannyDialog.py	Sat Aug 01 10:39:12 2020 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,391 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Copyright (c) 2003 - 2020 Detlev Offenbach <detlev@die-offenbachs.de>
-#
-
-"""
-Module implementing a dialog to show the output of the tabnanny command
-process.
-"""
-
-
-import os
-import fnmatch
-
-from PyQt5.QtCore import pyqtSlot, Qt, QTimer
-from PyQt5.QtWidgets import (
-    QDialog, QDialogButtonBox, QTreeWidgetItem, QApplication, QHeaderView
-)
-
-from E5Gui.E5Application import e5App
-
-from .Ui_TabnannyDialog import Ui_TabnannyDialog
-
-import Utilities
-import Preferences
-
-
-class TabnannyDialog(QDialog, Ui_TabnannyDialog):
-    """
-    Class implementing a dialog to show the results of the tabnanny check run.
-    """
-    filenameRole = Qt.UserRole + 1
-    
-    def __init__(self, indentCheckService, parent=None):
-        """
-        Constructor
-        
-        @param indentCheckService reference to the service (IndentCheckService)
-        @param parent The parent widget (QWidget).
-        """
-        super(TabnannyDialog, self).__init__(parent)
-        self.setupUi(self)
-        self.setWindowFlags(Qt.Window)
-        
-        self.buttonBox.button(QDialogButtonBox.Close).setEnabled(False)
-        self.buttonBox.button(QDialogButtonBox.Cancel).setDefault(True)
-        
-        self.resultList.headerItem().setText(self.resultList.columnCount(), "")
-        self.resultList.header().setSortIndicator(0, Qt.AscendingOrder)
-        
-        self.indentCheckService = indentCheckService
-        self.indentCheckService.indentChecked.connect(self.__processResult)
-        self.indentCheckService.batchFinished.connect(self.__batchFinished)
-        self.indentCheckService.error.connect(self.__processError)
-        self.filename = None
-        
-        self.noResults = True
-        self.cancelled = False
-        self.__finished = True
-        self.__errorItem = None
-        
-        self.__fileList = []
-        self.__project = None
-        self.filterFrame.setVisible(False)
-        
-        self.checkProgress.setVisible(False)
-        self.checkProgressLabel.setVisible(False)
-        self.checkProgressLabel.setMaximumWidth(600)
-        
-    def __resort(self):
-        """
-        Private method to resort the tree.
-        """
-        self.resultList.sortItems(
-            self.resultList.sortColumn(),
-            self.resultList.header().sortIndicatorOrder())
-    
-    def __createErrorItem(self, filename, message):
-        """
-        Private slot to create a new error item in the result list.
-        
-        @param filename name of the file
-        @type str
-        @param message error message
-        @type str
-        """
-        if self.__errorItem is None:
-            self.__errorItem = QTreeWidgetItem(self.resultList, [
-                self.tr("Errors")])
-            self.__errorItem.setExpanded(True)
-            self.__errorItem.setForeground(0, Qt.red)
-        
-        msg = "{0} ({1})".format(self.__project.getRelativePath(filename),
-                                 message)
-        if not self.resultList.findItems(msg, Qt.MatchExactly):
-            itm = QTreeWidgetItem(self.__errorItem, [msg])
-            itm.setForeground(0, Qt.red)
-            itm.setFirstColumnSpanned(True)
-        
-    def __createResultItem(self, filename, line, sourcecode):
-        """
-        Private method to create an entry in the result list.
-        
-        @param filename filename of file (string)
-        @param line linenumber of faulty source (integer or string)
-        @param sourcecode faulty line of code (string)
-        """
-        itm = QTreeWidgetItem(self.resultList)
-        itm.setData(0, Qt.DisplayRole,
-                    self.__project.getRelativePath(filename))
-        itm.setData(1, Qt.DisplayRole, line)
-        itm.setData(2, Qt.DisplayRole, sourcecode)
-        itm.setTextAlignment(1, Qt.AlignRight)
-        itm.setData(0, self.filenameRole, filename)
-        
-    def prepare(self, fileList, project):
-        """
-        Public method to prepare the dialog with a list of filenames.
-        
-        @param fileList list of filenames (list of strings)
-        @param project reference to the project object (Project)
-        """
-        self.__fileList = fileList[:]
-        self.__project = project
-        
-        self.buttonBox.button(QDialogButtonBox.Close).setEnabled(True)
-        self.buttonBox.button(QDialogButtonBox.Cancel).setEnabled(False)
-        self.buttonBox.button(QDialogButtonBox.Close).setDefault(True)
-        
-        self.filterFrame.setVisible(True)
-        
-        self.__data = self.__project.getData("CHECKERSPARMS", "Tabnanny")
-        if self.__data is None or "ExcludeFiles" not in self.__data:
-            self.__data = {"ExcludeFiles": ""}
-        self.excludeFilesEdit.setText(self.__data["ExcludeFiles"])
-        
-    def start(self, fn):
-        """
-        Public slot to start the tabnanny check.
-        
-        @param fn File or list of files or directory to be checked
-                (string or list of strings)
-        """
-        if self.__project is None:
-            self.__project = e5App().getObject("Project")
-        
-        self.cancelled = False
-        self.buttonBox.button(QDialogButtonBox.Close).setEnabled(False)
-        self.buttonBox.button(QDialogButtonBox.Cancel).setEnabled(True)
-        self.buttonBox.button(QDialogButtonBox.Cancel).setDefault(True)
-        self.checkProgress.setVisible(True)
-        QApplication.processEvents()
-        
-        if isinstance(fn, list):
-            self.files = fn
-        elif os.path.isdir(fn):
-            self.files = []
-            extensions = set(Preferences.getPython("Python3Extensions"))
-            for ext in extensions:
-                self.files.extend(
-                    Utilities.direntries(fn, True, '*{0}'.format(ext), 0))
-        else:
-            self.files = [fn]
-        
-        self.__errorItem = None
-        
-        if len(self.files) > 0:
-            self.checkProgress.setMaximum(len(self.files))
-            self.checkProgress.setVisible(len(self.files) > 1)
-            self.checkProgressLabel.setVisible(len(self.files) > 1)
-            QApplication.processEvents()
-            
-            # now go through all the files
-            self.progress = 0
-            self.files.sort()
-            if len(self.files) == 1:
-                self.__batch = False
-                self.check()
-            else:
-                self.__batch = True
-                self.checkBatch()
-
-    def check(self, codestring=''):
-        """
-        Public method to start an indentation check for one file.
-        
-        The results are reported to the __processResult slot.
-        @keyparam codestring optional sourcestring (str)
-        """
-        if not self.files:
-            self.checkProgressLabel.setPath("")
-            self.checkProgress.setMaximum(1)
-            self.checkProgress.setValue(1)
-            self.__finish()
-            return
-        
-        self.filename = self.files.pop(0)
-        self.checkProgress.setValue(self.progress)
-        self.checkProgressLabel.setPath(self.filename)
-        QApplication.processEvents()
-        self.__resort()
-        
-        if self.cancelled:
-            return
-        
-        try:
-            self.source = Utilities.readEncodedFile(self.filename)[0]
-            self.source = Utilities.normalizeCode(self.source)
-        except (UnicodeError, IOError) as msg:
-            self.noResults = False
-            self.__createResultItem(
-                self.filename, 1,
-                "Error: {0}".format(str(msg)).rstrip())
-            self.progress += 1
-            # Continue with next file
-            self.check()
-            return
-
-        self.__finished = False
-        self.indentCheckService.indentCheck(
-            None, self.filename, self.source)
-
-    def checkBatch(self):
-        """
-        Public method to start an indentation check batch job.
-        
-        The results are reported to the __processResult slot.
-        """
-        self.__lastFileItem = None
-        
-        self.checkProgressLabel.setPath(self.tr("Preparing files..."))
-        progress = 0
-        
-        argumentsList = []
-        for filename in self.files:
-            progress += 1
-            self.checkProgress.setValue(progress)
-            QApplication.processEvents()
-            
-            try:
-                source = Utilities.readEncodedFile(filename)[0]
-                source = Utilities.normalizeCode(source)
-            except (UnicodeError, IOError) as msg:
-                self.noResults = False
-                self.__createResultItem(
-                    filename, 1,
-                    "Error: {0}".format(str(msg)).rstrip())
-                continue
-            
-            argumentsList.append((filename, source))
-        
-        # reset the progress bar to the checked files
-        self.checkProgress.setValue(self.progress)
-        self.checkProgressLabel.setPath(self.tr("Transferring data..."))
-        QApplication.processEvents()
-        
-        self.__finished = False
-        self.indentCheckService.indentBatchCheck(argumentsList)
-    
-    def __batchFinished(self):
-        """
-        Private slot handling the completion of a batch job.
-        """
-        self.checkProgressLabel.setPath("")
-        self.checkProgress.setMaximum(1)
-        self.checkProgress.setValue(1)
-        self.__finish()
-    
-    def __processError(self, fn, msg):
-        """
-        Private slot to process an error indication from the service.
-        
-        @param fn filename of the file
-        @type str
-        @param msg error message
-        @type str
-        """
-        self.__createErrorItem(fn, msg)
-        
-        if not self.__batch:
-            self.check()
-    
-    def __processResult(self, fn, nok, line, error):
-        """
-        Private slot called after perfoming a style check on one file.
-        
-        @param fn filename of the just checked file (str)
-        @param nok flag if a problem was found (bool)
-        @param line line number (str)
-        @param error text of the problem (str)
-        """
-        if self.__finished:
-            return
-        
-        # Check if it's the requested file, otherwise ignore signal if not
-        # in batch mode
-        if not self.__batch and fn != self.filename:
-            return
-        
-        if nok:
-            self.noResults = False
-            self.__createResultItem(fn, line, error.rstrip())
-        self.progress += 1
-        
-        self.checkProgress.setValue(self.progress)
-        self.checkProgressLabel.setPath(fn)
-        QApplication.processEvents()
-        self.__resort()
-        
-        if not self.__batch:
-            self.check()
-
-    def __finish(self):
-        """
-        Private slot called when the action or the user pressed the button.
-        """
-        if not self.__finished:
-            self.__finished = True
-            
-            self.cancelled = True
-            self.buttonBox.button(QDialogButtonBox.Close).setEnabled(True)
-            self.buttonBox.button(QDialogButtonBox.Cancel).setEnabled(False)
-            self.buttonBox.button(QDialogButtonBox.Close).setDefault(True)
-            
-            if self.noResults:
-                self.__createResultItem(
-                    self.tr('No indentation errors found.'), "", "")
-                QApplication.processEvents()
-            self.resultList.header().resizeSections(
-                QHeaderView.ResizeToContents)
-            self.resultList.header().setStretchLastSection(True)
-            
-            self.checkProgress.setVisible(False)
-            self.checkProgressLabel.setVisible(False)
-        
-    def on_buttonBox_clicked(self, button):
-        """
-        Private slot called by a button of the button box clicked.
-        
-        @param button button that was clicked (QAbstractButton)
-        """
-        if button == self.buttonBox.button(QDialogButtonBox.Close):
-            self.close()
-        elif button == self.buttonBox.button(QDialogButtonBox.Cancel):
-            if self.__batch:
-                self.indentCheckService.cancelIndentBatchCheck()
-                QTimer.singleShot(1000, self.__finish)
-            else:
-                self.__finish()
-        
-    @pyqtSlot()
-    def on_startButton_clicked(self):
-        """
-        Private slot to start a code metrics run.
-        """
-        fileList = self.__fileList[:]
-        
-        filterString = self.excludeFilesEdit.text()
-        if (
-            "ExcludeFiles" not in self.__data or
-            filterString != self.__data["ExcludeFiles"]
-        ):
-            self.__data["ExcludeFiles"] = filterString
-            self.__project.setData("CHECKERSPARMS", "Tabnanny", self.__data)
-        filterList = [f.strip() for f in filterString.split(",")
-                      if f.strip()]
-        if filterList:
-            for fileFilter in filterList:
-                fileList = [
-                    f for f in fileList if not fnmatch.fnmatch(f, fileFilter)
-                ]
-        
-        self.resultList.clear()
-        self.noResults = True
-        self.cancelled = False
-        self.start(fileList)
-        
-    def on_resultList_itemActivated(self, itm, col):
-        """
-        Private slot to handle the activation of an item.
-        
-        @param itm reference to the activated item (QTreeWidgetItem)
-        @param col column the item was activated in (integer)
-        """
-        if self.noResults:
-            return
-        
-        fn = Utilities.normabspath(itm.data(0, self.filenameRole))
-        lineno = int(itm.text(1))
-        
-        e5App().getObject("ViewManager").openSourceFile(fn, lineno)
--- a/eric6/Plugins/CheckerPlugins/Tabnanny/TabnannyDialog.ui	Sat Aug 01 10:39:12 2020 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,173 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>TabnannyDialog</class>
- <widget class="QDialog" name="TabnannyDialog">
-  <property name="geometry">
-   <rect>
-    <x>0</x>
-    <y>0</y>
-    <width>650</width>
-    <height>400</height>
-   </rect>
-  </property>
-  <property name="windowTitle">
-   <string>Tabnanny Result</string>
-  </property>
-  <property name="whatsThis">
-   <string>&lt;b&gt;Tabnanny Results&lt;/b&gt;
-&lt;p&gt;This dialog shows the results of the tabnanny command. Double clicking an
-entry will open an editor window and position the cursor at the respective line.&lt;/p&gt;</string>
-  </property>
-  <property name="sizeGripEnabled">
-   <bool>true</bool>
-  </property>
-  <layout class="QVBoxLayout" name="verticalLayout">
-   <item>
-    <widget class="QFrame" name="filterFrame">
-     <property name="frameShape">
-      <enum>QFrame::NoFrame</enum>
-     </property>
-     <property name="frameShadow">
-      <enum>QFrame::Raised</enum>
-     </property>
-     <layout class="QHBoxLayout" name="horizontalLayout">
-      <property name="margin">
-       <number>0</number>
-      </property>
-      <item>
-       <widget class="QLabel" name="label_2">
-        <property name="text">
-         <string>Exclude Files:</string>
-        </property>
-       </widget>
-      </item>
-      <item>
-       <widget class="E5ClearableLineEdit" name="excludeFilesEdit">
-        <property name="toolTip">
-         <string>Enter filename patterns of files to be excluded separated by a comma</string>
-        </property>
-       </widget>
-      </item>
-      <item>
-       <widget class="Line" name="line">
-        <property name="lineWidth">
-         <number>2</number>
-        </property>
-        <property name="orientation">
-         <enum>Qt::Vertical</enum>
-        </property>
-       </widget>
-      </item>
-      <item>
-       <widget class="QPushButton" name="startButton">
-        <property name="toolTip">
-         <string>Press to start the tabnanny run</string>
-        </property>
-        <property name="text">
-         <string>Start</string>
-        </property>
-       </widget>
-      </item>
-     </layout>
-    </widget>
-   </item>
-   <item>
-    <widget class="QTreeWidget" name="resultList">
-     <property name="whatsThis">
-      <string>&lt;b&gt;Result List&lt;/b&gt;
-&lt;p&gt;This list shows the results of the tabnanny command. Double clicking
-an entry will open this entry in an editor window and position the cursor at
-the respective line.&lt;/p&gt;</string>
-     </property>
-     <property name="alternatingRowColors">
-      <bool>true</bool>
-     </property>
-     <property name="rootIsDecorated">
-      <bool>false</bool>
-     </property>
-     <property name="itemsExpandable">
-      <bool>false</bool>
-     </property>
-     <property name="sortingEnabled">
-      <bool>true</bool>
-     </property>
-     <column>
-      <property name="text">
-       <string>Filename</string>
-      </property>
-     </column>
-     <column>
-      <property name="text">
-       <string>#</string>
-      </property>
-     </column>
-     <column>
-      <property name="text">
-       <string>Source</string>
-      </property>
-     </column>
-    </widget>
-   </item>
-   <item>
-    <widget class="E5SqueezeLabelPath" name="checkProgressLabel">
-     <property name="sizePolicy">
-      <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
-       <horstretch>0</horstretch>
-       <verstretch>0</verstretch>
-      </sizepolicy>
-     </property>
-     <property name="text">
-      <string/>
-     </property>
-    </widget>
-   </item>
-   <item>
-    <widget class="QProgressBar" name="checkProgress">
-     <property name="toolTip">
-      <string>Shows the progress of the tabnanny action</string>
-     </property>
-     <property name="value">
-      <number>0</number>
-     </property>
-     <property name="orientation">
-      <enum>Qt::Horizontal</enum>
-     </property>
-     <property name="format">
-      <string>%v/%m Files</string>
-     </property>
-    </widget>
-   </item>
-   <item>
-    <widget class="QDialogButtonBox" name="buttonBox">
-     <property name="orientation">
-      <enum>Qt::Horizontal</enum>
-     </property>
-     <property name="standardButtons">
-      <set>QDialogButtonBox::Cancel|QDialogButtonBox::Close</set>
-     </property>
-    </widget>
-   </item>
-  </layout>
- </widget>
- <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
- <customwidgets>
-  <customwidget>
-   <class>E5SqueezeLabelPath</class>
-   <extends>QLabel</extends>
-   <header>E5Gui/E5SqueezeLabels.h</header>
-  </customwidget>
-  <customwidget>
-   <class>E5ClearableLineEdit</class>
-   <extends>QLineEdit</extends>
-   <header>E5Gui/E5LineEdit.h</header>
-  </customwidget>
- </customwidgets>
- <tabstops>
-  <tabstop>startButton</tabstop>
-  <tabstop>excludeFilesEdit</tabstop>
-  <tabstop>resultList</tabstop>
-  <tabstop>buttonBox</tabstop>
- </tabstops>
- <resources/>
- <connections/>
-</ui>
--- a/eric6/Plugins/CheckerPlugins/Tabnanny/__init__.py	Sat Aug 01 10:39:12 2020 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,8 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Copyright (c) 2007 - 2020 Detlev Offenbach <detlev@die-offenbachs.de>
-#
-
-"""
-Package containing the Tabnanny plugin.
-"""
--- a/eric6/Plugins/PluginTabnanny.py	Sat Aug 01 10:39:12 2020 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,392 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Copyright (c) 2007 - 2020 Detlev Offenbach <detlev@die-offenbachs.de>
-#
-
-"""
-Module implementing the Tabnanny plugin.
-"""
-
-# TODO: remove tabnanny as it is obsolete
-
-import os
-
-from PyQt5.QtCore import QObject, pyqtSignal
-
-from E5Gui.E5Application import e5App
-from E5Gui.E5Action import E5Action
-from Project.ProjectBrowserModel import ProjectBrowserFileItem
-from Utilities import determinePythonVersion
-
-import Preferences
-import UI.Info
-
-# Start-Of-Header
-name = "Tabnanny Plugin"
-author = "Detlev Offenbach <detlev@die-offenbachs.de>"
-autoactivate = True
-deactivateable = True
-version = UI.Info.VersionOnly
-className = "TabnannyPlugin"
-packageName = "__core__"
-shortDescription = "Show the Tabnanny dialog."
-longDescription = (
-    """This plugin implements the Tabnanny dialog."""
-    """ Tabnanny is used to check Python source files for correct"""
-    """ indentations."""
-)
-pyqtApi = 2
-# End-Of-Header
-
-error = ""
-
-
-class TabnannyPlugin(QObject):
-    """
-    Class implementing the Tabnanny plugin.
-    
-    @signal indentChecked(str, bool, str, str) emitted when the indent
-        check was done.
-    @signal batchFinished() emitted when a style check batch is done
-    @signal error(str, str) emitted in case of an error
-    """
-    indentChecked = pyqtSignal(str, bool, str, str)
-    batchFinished = pyqtSignal()
-    error = pyqtSignal(str, str)
-    
-    def __init__(self, ui):
-        """
-        Constructor
-        
-        @param ui reference to the user interface object (UI.UserInterface)
-        """
-        super(TabnannyPlugin, self).__init__(ui)
-        self.__ui = ui
-        self.__initialize()
-        
-        self.backgroundService = e5App().getObject("BackgroundService")
-        
-        path = os.path.join(
-            os.path.dirname(__file__), 'CheckerPlugins', 'Tabnanny')
-        self.backgroundService.serviceConnect(
-            'indent', 'Python3', path, 'Tabnanny',
-            lambda *args: self.indentChecked.emit(*args),
-            onErrorCallback=self.serviceErrorPy3,
-            onBatchDone=self.batchJobDone)
-        
-        self.queuedBatches = []
-        self.batchesFinished = True
-    
-    def __serviceError(self, fn, msg):
-        """
-        Private slot handling service errors.
-        
-        @param fn file name (string)
-        @param msg message text (string)
-        """
-        self.error.emit(fn, msg)
-    
-    def serviceErrorPy3(self, fx, lang, fn, msg):
-        """
-        Public slot handling service errors for Python 3.
-        
-        @param fx service name (string)
-        @param lang language (string)
-        @param fn file name (string)
-        @param msg message text (string)
-        """
-        if fx in ['indent', 'batch_indent'] and lang == 'Python3':
-            if fx == 'indent':
-                self.__serviceError(fn, msg)
-            else:
-                self.__serviceError(self.tr("Python 3 batch check"), msg)
-                self.batchJobDone(fx, lang)
-    
-    def batchJobDone(self, fx, lang):
-        """
-        Public slot handling the completion of a batch job.
-        
-        @param fx service name (string)
-        @param lang language (string)
-        """
-        if fx in ['indent', 'batch_indent']:
-            if lang in self.queuedBatches:
-                self.queuedBatches.remove(lang)
-            # prevent sending the signal multiple times
-            if len(self.queuedBatches) == 0 and not self.batchesFinished:
-                self.batchFinished.emit()
-                self.batchesFinished = True
-    
-    def __initialize(self):
-        """
-        Private slot to (re)initialize the plugin.
-        """
-        self.__projectAct = None
-        self.__projectTabnannyDialog = None
-        
-        self.__projectBrowserAct = None
-        self.__projectBrowserMenu = None
-        self.__projectBrowserTabnannyDialog = None
-        
-        self.__editors = []
-        self.__editorAct = None
-        self.__editorTabnannyDialog = None
-
-    def indentCheck(self, lang, filename, source):
-        """
-        Public method to prepare an indentation check on one Python source
-        file.
-
-        @param lang language of the file or None to determine by internal
-            algorithm (str or None)
-        @param filename source filename (string)
-        @param source string containing the code to check (string)
-        """
-        if lang is None:
-            lang = 'Python{0}'.format(determinePythonVersion(filename, source))
-        if lang != 'Python3':
-            return
-        
-        self.backgroundService.enqueueRequest(
-            'indent', lang, filename, [source])
-
-    def indentBatchCheck(self, argumentsList):
-        """
-        Public method to prepare an indentation check on multiple Python
-        source files.
-        
-        @param argumentsList list of arguments tuples with each tuple
-            containing filename and source (string, string)
-        """
-        data = {
-            "Python3": [],
-        }
-        for filename, source in argumentsList:
-            lang = 'Python{0}'.format(determinePythonVersion(filename, source))
-            if lang != 'Python3':
-                continue
-            else:
-                data[lang].append((filename, source))
-        
-        self.queuedBatches = []
-        if data['Python3']:
-            self.queuedBatches.append('Python3')
-            self.backgroundService.enqueueRequest(
-                'batch_indent', 'Python3', "", data['Python3'])
-            self.batchesFinished = False
-    
-    def cancelIndentBatchCheck(self):
-        """
-        Public method to cancel all batch jobs.
-        """
-        self.backgroundService.requestCancel('batch_style', 'Python3')
-    
-    def activate(self):
-        """
-        Public method to activate this plugin.
-        
-        @return tuple of None and activation status (boolean)
-        """
-        menu = e5App().getObject("Project").getMenu("Checks")
-        if menu:
-            self.__projectAct = E5Action(
-                self.tr('Check Indentations'),
-                self.tr('&Indentations...'), 0, 0,
-                self, 'project_check_indentations')
-            self.__projectAct.setStatusTip(
-                self.tr('Check indentations using tabnanny.'))
-            self.__projectAct.setWhatsThis(self.tr(
-                """<b>Check Indentations...</b>"""
-                """<p>This checks Python files"""
-                """ for bad indentations using tabnanny.</p>"""
-            ))
-            self.__projectAct.triggered.connect(self.__projectTabnanny)
-            e5App().getObject("Project").addE5Actions([self.__projectAct])
-            menu.addAction(self.__projectAct)
-        
-        self.__editorAct = E5Action(
-            self.tr('Check Indentations'),
-            self.tr('&Indentations...'), 0, 0,
-            self, "")
-        self.__editorAct.setWhatsThis(self.tr(
-            """<b>Check Indentations...</b>"""
-            """<p>This checks Python files"""
-            """ for bad indentations using tabnanny.</p>"""
-        ))
-        self.__editorAct.triggered.connect(self.__editorTabnanny)
-        
-        e5App().getObject("Project").showMenu.connect(self.__projectShowMenu)
-        e5App().getObject("ProjectBrowser").getProjectBrowser(
-            "sources").showMenu.connect(self.__projectBrowserShowMenu)
-        e5App().getObject("ViewManager").editorOpenedEd.connect(
-            self.__editorOpened)
-        e5App().getObject("ViewManager").editorClosedEd.connect(
-            self.__editorClosed)
-        
-        for editor in e5App().getObject("ViewManager").getOpenEditors():
-            self.__editorOpened(editor)
-        
-        return None, True
-
-    def deactivate(self):
-        """
-        Public method to deactivate this plugin.
-        """
-        e5App().getObject("Project").showMenu.disconnect(
-            self.__projectShowMenu)
-        e5App().getObject("ProjectBrowser").getProjectBrowser(
-            "sources").showMenu.disconnect(self.__projectBrowserShowMenu)
-        e5App().getObject("ViewManager").editorOpenedEd.disconnect(
-            self.__editorOpened)
-        e5App().getObject("ViewManager").editorClosedEd.disconnect(
-            self.__editorClosed)
-        
-        menu = e5App().getObject("Project").getMenu("Checks")
-        if menu:
-            menu.removeAction(self.__projectAct)
-        
-        if self.__projectBrowserMenu:
-            if self.__projectBrowserAct:
-                self.__projectBrowserMenu.removeAction(
-                    self.__projectBrowserAct)
-        
-        for editor in self.__editors:
-            editor.showMenu.disconnect(self.__editorShowMenu)
-            menu = editor.getMenu("Checks")
-            if menu is not None:
-                menu.removeAction(self.__editorAct)
-        
-        self.__initialize()
-    
-    def __projectShowMenu(self, menuName, menu):
-        """
-        Private slot called, when the the project menu or a submenu is
-        about to be shown.
-        
-        @param menuName name of the menu to be shown (string)
-        @param menu reference to the menu (QMenu)
-        """
-        if menuName == "Checks" and self.__projectAct is not None:
-            self.__projectAct.setEnabled(
-                e5App().getObject("Project").getProjectLanguage() in
-                ["Python3", "MicroPython"])
-    
-    def __projectBrowserShowMenu(self, menuName, menu):
-        """
-        Private slot called, when the the project browser context menu or a
-        submenu is about to be shown.
-        
-        @param menuName name of the menu to be shown (string)
-        @param menu reference to the menu (QMenu)
-        """
-        if (
-            menuName == "Checks" and
-            e5App().getObject("Project").getProjectLanguage() in
-                ["Python3", "MicroPython"]
-        ):
-            self.__projectBrowserMenu = menu
-            if self.__projectBrowserAct is None:
-                self.__projectBrowserAct = E5Action(
-                    self.tr('Check Indentations'),
-                    self.tr('&Indentations...'), 0, 0,
-                    self, "")
-                self.__projectBrowserAct.setWhatsThis(self.tr(
-                    """<b>Check Indentations...</b>"""
-                    """<p>This checks Python files"""
-                    """ for bad indentations using tabnanny.</p>"""
-                ))
-                self.__projectBrowserAct.triggered.connect(
-                    self.__projectBrowserTabnanny)
-            if self.__projectBrowserAct not in menu.actions():
-                menu.addAction(self.__projectBrowserAct)
-    
-    def __projectTabnanny(self):
-        """
-        Private slot used to check the project files for bad indentations.
-        """
-        project = e5App().getObject("Project")
-        project.saveAllScripts()
-        ppath = project.getProjectPath()
-        files = [os.path.join(ppath, file)
-                 for file in project.pdata["SOURCES"]
-                 if file.endswith(
-                     tuple(Preferences.getPython("Python3Extensions")))]
-        
-        from CheckerPlugins.Tabnanny.TabnannyDialog import TabnannyDialog
-        self.__projectTabnannyDialog = TabnannyDialog(self)
-        self.__projectTabnannyDialog.show()
-        self.__projectTabnannyDialog.prepare(files, project)
-    
-    def __projectBrowserTabnanny(self):
-        """
-        Private method to handle the tabnanny context menu action of the
-        project sources browser.
-        """
-        browser = e5App().getObject("ProjectBrowser").getProjectBrowser(
-            "sources")
-        if browser.getSelectedItemsCount([ProjectBrowserFileItem]) > 1:
-            fn = []
-            for itm in browser.getSelectedItems([ProjectBrowserFileItem]):
-                fn.append(itm.fileName())
-        else:
-            itm = browser.model().item(browser.currentIndex())
-            try:
-                fn = itm.fileName()
-            except AttributeError:
-                fn = itm.dirName()
-        
-        from CheckerPlugins.Tabnanny.TabnannyDialog import TabnannyDialog
-        self.__projectBrowserTabnannyDialog = TabnannyDialog(self)
-        self.__projectBrowserTabnannyDialog.show()
-        self.__projectBrowserTabnannyDialog.start(fn)
-    
-    def __editorOpened(self, editor):
-        """
-        Private slot called, when a new editor was opened.
-        
-        @param editor reference to the new editor (QScintilla.Editor)
-        """
-        menu = editor.getMenu("Checks")
-        if menu is not None:
-            menu.addAction(self.__editorAct)
-            editor.showMenu.connect(self.__editorShowMenu)
-            self.__editors.append(editor)
-    
-    def __editorClosed(self, editor):
-        """
-        Private slot called, when an editor was closed.
-        
-        @param editor reference to the editor (QScintilla.Editor)
-        """
-        try:
-            self.__editors.remove(editor)
-        except ValueError:
-            pass
-    
-    def __editorShowMenu(self, menuName, menu, editor):
-        """
-        Private slot called, when the the editor context menu or a submenu is
-        about to be shown.
-        
-        @param menuName name of the menu to be shown (string)
-        @param menu reference to the menu (QMenu)
-        @param editor reference to the editor
-        """
-        if menuName == "Checks":
-            if self.__editorAct not in menu.actions():
-                menu.addAction(self.__editorAct)
-            self.__editorAct.setEnabled(editor.isPyFile())
-    
-    def __editorTabnanny(self):
-        """
-        Private slot to handle the tabnanny context menu action of the editors.
-        """
-        editor = e5App().getObject("ViewManager").activeWindow()
-        if editor is not None:
-            if editor.checkDirty() and editor.getFileName() is not None:
-                from CheckerPlugins.Tabnanny.TabnannyDialog import (
-                    TabnannyDialog
-                )
-                self.__editorTabnannyDialog = TabnannyDialog(self)
-                self.__editorTabnannyDialog.show()
-                self.__editorTabnannyDialog.start(editor.getFileName())
--- a/eric6/Plugins/PluginVcsGit.py	Sat Aug 01 10:39:12 2020 +0200
+++ b/eric6/Plugins/PluginVcsGit.py	Wed Sep 02 18:06:20 2020 +0200
@@ -234,17 +234,13 @@
         from VcsPlugins.vcsGit.git import Git
         self.__object = Git(self, self.__ui)
         
-        tbData = self.__ui.getToolbar("vcs")
-        if tbData:
-            tb = tbData[1]
-            tb.setVisible(False)
-            tb.setEnabled(False)
+        tb = self.__ui.getToolbar("vcs")[1]
+        tb.setVisible(False)
+        tb.setEnabled(False)
         
-        tbData = self.__ui.getToolbar("git")
-        if tbData:
-            tb = tbData[1]
-            tb.setVisible(True)
-            tb.setEnabled(True)
+        tb = self.__ui.getToolbar("git")[1]
+        tb.setVisible(Preferences.getVCS("ShowVcsToolbar"))
+        tb.setEnabled(True)
         
         return self.__object, True
     
@@ -254,17 +250,13 @@
         """
         self.__object = None
         
-        tbData = self.__ui.getToolbar("git")
-        if tbData:
-            tb = tbData[1]
-            tb.setVisible(False)
-            tb.setEnabled(False)
+        tb = self.__ui.getToolbar("git")[1]
+        tb.setVisible(False)
+        tb.setEnabled(False)
         
-        tbData = self.__ui.getToolbar("vcs")
-        if tbData:
-            tb = tbData[1]
-            tb.setVisible(True)
-            tb.setEnabled(True)
+        tb = self.__ui.getToolbar("vcs")[1]
+        tb.setVisible(Preferences.getVCS("ShowVcsToolbar"))
+        tb.setEnabled(True)
     
     @classmethod
     def getPreferences(cls, key):
--- a/eric6/Plugins/PluginVcsMercurial.py	Sat Aug 01 10:39:12 2020 +0200
+++ b/eric6/Plugins/PluginVcsMercurial.py	Wed Sep 02 18:06:20 2020 +0200
@@ -239,7 +239,7 @@
         tb.setEnabled(False)
         
         tb = self.__ui.getToolbar("mercurial")[1]
-        tb.setVisible(True)
+        tb.setVisible(Preferences.getVCS("ShowVcsToolbar"))
         tb.setEnabled(True)
         
         return self.__object, True
@@ -255,7 +255,7 @@
         tb.setEnabled(False)
         
         tb = self.__ui.getToolbar("vcs")[1]
-        tb.setVisible(True)
+        tb.setVisible(Preferences.getVCS("ShowVcsToolbar"))
         tb.setEnabled(True)
     
     @classmethod
--- a/eric6/Plugins/PluginVcsPySvn.py	Sat Aug 01 10:39:12 2020 +0200
+++ b/eric6/Plugins/PluginVcsPySvn.py	Wed Sep 02 18:06:20 2020 +0200
@@ -202,7 +202,7 @@
         tb.setEnabled(False)
         
         tb = self.__ui.getToolbar("pysvn")[1]
-        tb.setVisible(True)
+        tb.setVisible(Preferences.getVCS("ShowVcsToolbar"))
         tb.setEnabled(True)
         
         return self.__object, True
@@ -218,7 +218,7 @@
         tb.setEnabled(False)
         
         tb = self.__ui.getToolbar("vcs")[1]
-        tb.setVisible(True)
+        tb.setVisible(Preferences.getVCS("ShowVcsToolbar"))
         tb.setEnabled(True)
     
     def getPreferences(self, key):
--- a/eric6/Plugins/PluginVcsSubversion.py	Sat Aug 01 10:39:12 2020 +0200
+++ b/eric6/Plugins/PluginVcsSubversion.py	Wed Sep 02 18:06:20 2020 +0200
@@ -208,7 +208,7 @@
         tb.setEnabled(False)
         
         tb = self.__ui.getToolbar("subversion")[1]
-        tb.setVisible(True)
+        tb.setVisible(Preferences.getVCS("ShowVcsToolbar"))
         tb.setEnabled(True)
         
         return self.__object, True
@@ -224,7 +224,7 @@
         tb.setEnabled(False)
         
         tb = self.__ui.getToolbar("vcs")[1]
-        tb.setVisible(True)
+        tb.setVisible(Preferences.getVCS("ShowVcsToolbar"))
         tb.setEnabled(True)
     
     def getPreferences(self, key):
--- a/eric6/Plugins/VcsPlugins/vcsGit/ProjectHelper.py	Sat Aug 01 10:39:12 2020 +0200
+++ b/eric6/Plugins/VcsPlugins/vcsGit/ProjectHelper.py	Wed Sep 02 18:06:20 2020 +0200
@@ -1601,7 +1601,7 @@
         self.__toolbar.setVisible(False)
         
         ui.registerToolbar("git", self.__toolbar.windowTitle(),
-                           self.__toolbar)
+                           self.__toolbar, "vcs")
         ui.addToolBar(self.__toolbar)
     
     def removeToolbar(self, ui, toolbarManager):
--- a/eric6/Plugins/VcsPlugins/vcsMercurial/FetchExtension/HgFetchDialog.py	Sat Aug 01 10:39:12 2020 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,72 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Copyright (c) 2011 - 2020 Detlev Offenbach <detlev@die-offenbachs.de>
-#
-
-"""
-Module implementing a dialog to enter data to be used for a fetch operation.
-"""
-
-
-from PyQt5.QtCore import pyqtSlot
-from PyQt5.QtWidgets import QDialog
-
-from .Ui_HgFetchDialog import Ui_HgFetchDialog
-
-
-class HgFetchDialog(QDialog, Ui_HgFetchDialog):
-    """
-    Class implementing a dialog to enter data to be used for a fetch operation.
-    """
-    def __init__(self, vcs, parent=None):
-        """
-        Constructor
-        
-        @param vcs reference to the Mercurial vcs object
-        @type Hg
-        @param parent reference to the parent widget
-        @type QWidget
-        """
-        super(HgFetchDialog, self).__init__(parent)
-        self.setupUi(self)
-        
-        self.__vcs = vcs
-        
-        commitMessages = self.__vcs.getPlugin().getPreferences('Commits')
-        self.recentComboBox.clear()
-        self.recentComboBox.addItem("")
-        for message in commitMessages:
-            abbrMsg = message[:60]
-            if len(message) > 60:
-                abbrMsg += "..."
-            self.recentComboBox.addItem(abbrMsg, message)
-    
-    @pyqtSlot(str)
-    def on_recentComboBox_activated(self, txt):
-        """
-        Private slot to select a commit message from recent ones.
-        
-        @param txt text of the selected entry (string)
-        """
-        if txt:
-            self.messageEdit.setPlainText(self.recentComboBox.currentData())
-    
-    def getData(self):
-        """
-        Public method to get the data for the fetch operation.
-        
-        @return tuple with the commit message and a flag indicating to switch
-            the merge order (string, boolean)
-        """
-        msg = self.messageEdit.toPlainText()
-        if msg:
-            commitMessages = self.__vcs.getPlugin().getPreferences('Commits')
-            if msg in commitMessages:
-                commitMessages.remove(msg)
-            commitMessages.insert(0, msg)
-            no = self.__vcs.getPlugin().getPreferences("CommitMessages")
-            del commitMessages[no:]
-            self.__vcs.getPlugin().setPreferences(
-                'Commits', commitMessages)
-        
-        return msg, self.switchCheckBox.isChecked()
--- a/eric6/Plugins/VcsPlugins/vcsMercurial/FetchExtension/HgFetchDialog.ui	Sat Aug 01 10:39:12 2020 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,116 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>HgFetchDialog</class>
- <widget class="QDialog" name="HgFetchDialog">
-  <property name="geometry">
-   <rect>
-    <x>0</x>
-    <y>0</y>
-    <width>400</width>
-    <height>300</height>
-   </rect>
-  </property>
-  <property name="windowTitle">
-   <string>Fetch Changes</string>
-  </property>
-  <property name="sizeGripEnabled">
-   <bool>true</bool>
-  </property>
-  <layout class="QVBoxLayout" name="verticalLayout_2">
-   <item>
-    <widget class="QGroupBox" name="groupBox">
-     <property name="title">
-      <string>Commit Message</string>
-     </property>
-     <layout class="QVBoxLayout" name="verticalLayout">
-      <item>
-       <widget class="QPlainTextEdit" name="messageEdit">
-        <property name="toolTip">
-         <string>Enter commit message or leave empty to use the default message</string>
-        </property>
-        <property name="tabChangesFocus">
-         <bool>true</bool>
-        </property>
-       </widget>
-      </item>
-      <item>
-       <widget class="QLabel" name="label_2">
-        <property name="text">
-         <string>Recent commit messages</string>
-        </property>
-       </widget>
-      </item>
-      <item>
-       <widget class="QComboBox" name="recentComboBox">
-        <property name="toolTip">
-         <string>Select a recent commit message to use</string>
-        </property>
-       </widget>
-      </item>
-     </layout>
-    </widget>
-   </item>
-   <item>
-    <widget class="QCheckBox" name="switchCheckBox">
-     <property name="toolTip">
-      <string>Select to switch the merge order</string>
-     </property>
-     <property name="text">
-      <string>Switch Parents when Merging</string>
-     </property>
-    </widget>
-   </item>
-   <item>
-    <widget class="QDialogButtonBox" name="buttonBox">
-     <property name="orientation">
-      <enum>Qt::Horizontal</enum>
-     </property>
-     <property name="standardButtons">
-      <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
-     </property>
-    </widget>
-   </item>
-  </layout>
- </widget>
- <tabstops>
-  <tabstop>messageEdit</tabstop>
-  <tabstop>recentComboBox</tabstop>
-  <tabstop>switchCheckBox</tabstop>
-  <tabstop>buttonBox</tabstop>
- </tabstops>
- <resources/>
- <connections>
-  <connection>
-   <sender>buttonBox</sender>
-   <signal>accepted()</signal>
-   <receiver>HgFetchDialog</receiver>
-   <slot>accept()</slot>
-   <hints>
-    <hint type="sourcelabel">
-     <x>248</x>
-     <y>254</y>
-    </hint>
-    <hint type="destinationlabel">
-     <x>157</x>
-     <y>274</y>
-    </hint>
-   </hints>
-  </connection>
-  <connection>
-   <sender>buttonBox</sender>
-   <signal>rejected()</signal>
-   <receiver>HgFetchDialog</receiver>
-   <slot>reject()</slot>
-   <hints>
-    <hint type="sourcelabel">
-     <x>316</x>
-     <y>260</y>
-    </hint>
-    <hint type="destinationlabel">
-     <x>286</x>
-     <y>274</y>
-    </hint>
-   </hints>
-  </connection>
- </connections>
-</ui>
--- a/eric6/Plugins/VcsPlugins/vcsMercurial/FetchExtension/ProjectHelper.py	Sat Aug 01 10:39:12 2020 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,98 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Copyright (c) 2011 - 2020 Detlev Offenbach <detlev@die-offenbachs.de>
-#
-
-"""
-Module implementing the fetch extension project helper.
-"""
-
-
-from PyQt5.QtWidgets import QMenu
-
-from E5Gui.E5Action import E5Action
-from E5Gui import E5MessageBox
-
-from ..HgExtensionProjectHelper import HgExtensionProjectHelper
-
-import UI.PixmapCache
-
-
-class FetchProjectHelper(HgExtensionProjectHelper):
-    """
-    Class implementing the fetch extension project helper.
-    """
-    def __init__(self):
-        """
-        Constructor
-        """
-        super(FetchProjectHelper, self).__init__()
-    
-    def initActions(self):
-        """
-        Public method to generate the action objects.
-        """
-        self.hgFetchAct = E5Action(
-            self.tr('Fetch changes'),
-            UI.PixmapCache.getIcon("vcsUpdate"),
-            self.tr('Fetch changes'),
-            0, 0, self, 'mercurial_fetch')
-        self.hgFetchAct.setStatusTip(self.tr(
-            'Fetch changes from a remote repository'
-        ))
-        self.hgFetchAct.setWhatsThis(self.tr(
-            """<b>Fetch changes</b>"""
-            """<p>This pulls changes from a remote repository into the """
-            """local repository. If the pulled changes add a new branch"""
-            """ head, the head is automatically merged, and the result of"""
-            """ the merge is committed. Otherwise, the working directory"""
-            """ is updated to include the new changes.</p>"""
-        ))
-        self.hgFetchAct.triggered.connect(self.__hgFetch)
-        self.actions.append(self.hgFetchAct)
-    
-    def initMenu(self, mainMenu):
-        """
-        Public method to generate the extension menu.
-        
-        @param mainMenu reference to the main menu (QMenu)
-        @return populated menu (QMenu)
-        """
-        menu = QMenu(self.menuTitle(), mainMenu)
-        menu.setIcon(UI.PixmapCache.getIcon("vcsUpdate"))
-        menu.setTearOffEnabled(True)
-        
-        menu.addAction(self.hgFetchAct)
-        
-        menu.aboutToShow.connect(self.__aboutToShowMenu)
-        
-        return menu
-    
-    def __aboutToShowMenu(self):
-        """
-        Private slot to handle the aboutToShow signal of the background menu.
-        """
-        self.hgFetchAct.setEnabled(self.vcs.canPull())
-    
-    def menuTitle(self):
-        """
-        Public method to get the menu title.
-        
-        @return title of the menu (string)
-        """
-        return self.tr("Fetch")
-    
-    def __hgFetch(self):
-        """
-        Private slot used to fetch changes from a remote repository.
-        """
-        shouldReopen = self.vcs.getExtensionObject("fetch").hgFetch(
-            self.project.getProjectPath())
-        if shouldReopen:
-            res = E5MessageBox.yesNo(
-                None,
-                self.tr("Fetch"),
-                self.tr("""The project should be reread. Do this now?"""),
-                yesDefault=True)
-            if res:
-                self.project.reopenProject()
--- a/eric6/Plugins/VcsPlugins/vcsMercurial/FetchExtension/__init__.py	Sat Aug 01 10:39:12 2020 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,8 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Copyright (c) 2011 - 2020 Detlev Offenbach <detlev@die-offenbachs.de>
-#
-
-"""
-Package implementing the fetch extension support interface.
-"""
--- a/eric6/Plugins/VcsPlugins/vcsMercurial/FetchExtension/fetch.py	Sat Aug 01 10:39:12 2020 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,78 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Copyright (c) 2011 - 2020 Detlev Offenbach <detlev@die-offenbachs.de>
-#
-
-"""
-Module implementing the fetch extension interface.
-"""
-
-
-import os
-
-from PyQt5.QtWidgets import QDialog
-
-from ..HgExtension import HgExtension
-from ..HgDialog import HgDialog
-
-
-class Fetch(HgExtension):
-    """
-    Class implementing the fetch extension interface.
-    """
-    def __init__(self, vcs):
-        """
-        Constructor
-        
-        @param vcs reference to the Mercurial vcs object
-        """
-        super(Fetch, self).__init__(vcs)
-        
-        self.__vcs = vcs
-    
-    def hgFetch(self, name, revisions=None):
-        """
-        Public method to fetch changes from a remote repository.
-        
-        @param name directory name of the project to be fetched to
-        @type str
-        @param revisions list of revisions to be pulled
-        @type list of str
-        @return flag indicating, that the update contained an add
-            or delete
-        @rtype bool
-        """
-        # find the root of the repo
-        repodir = self.vcs.splitPath(name)[0]
-        while not os.path.isdir(os.path.join(repodir, self.vcs.adminDir)):
-            repodir = os.path.dirname(repodir)
-            if os.path.splitdrive(repodir)[1] == os.sep:
-                return False
-        
-        from .HgFetchDialog import HgFetchDialog
-        res = False
-        dlg = HgFetchDialog(self.__vcs)
-        if dlg.exec_() == QDialog.Accepted:
-            message, switchParent = dlg.getData()
-            
-            args = self.vcs.initCommand("fetch")
-            if message != "":
-                args.append("--message")
-                args.append(message)
-            if switchParent:
-                args.append("--switch-parent")
-            args.append("-v")
-            if revisions:
-                for rev in revisions:
-                    args.append("--rev")
-                    args.append(rev)
-            
-            dia = HgDialog(
-                self.tr('Fetching from a remote Mercurial repository'),
-                self.vcs)
-            res = dia.startProcess(args, repodir)
-            if res:
-                dia.exec_()
-                res = dia.hasAddOrDelete()
-                self.vcs.checkVCSStatus()
-        return res
--- a/eric6/Plugins/VcsPlugins/vcsMercurial/GpgExtension/gpg.py	Sat Aug 01 10:39:12 2020 +0200
+++ b/eric6/Plugins/VcsPlugins/vcsMercurial/GpgExtension/gpg.py	Wed Sep 02 18:06:20 2020 +0200
@@ -19,7 +19,7 @@
 
 class Gpg(HgExtension):
     """
-    Class implementing the fetch extension interface.
+    Class implementing the gpg extension interface.
     """
     def __init__(self, vcs):
         """
@@ -33,7 +33,7 @@
     
     def shutdown(self):
         """
-        Public method used to shutdown the fetch interface.
+        Public method used to shutdown the gpg interface.
         """
         if self.gpgSignaturesDialog is not None:
             self.gpgSignaturesDialog.close()
--- a/eric6/Plugins/VcsPlugins/vcsMercurial/HgDialog.py	Sat Aug 01 10:39:12 2020 +0200
+++ b/eric6/Plugins/VcsPlugins/vcsMercurial/HgDialog.py	Wed Sep 02 18:06:20 2020 +0200
@@ -97,7 +97,7 @@
         
         self.__hasAddOrDelete = False
         if (
-            args[0] in ["fetch", "qpush", "qpop", "qgoto", "rebase",
+            args[0] in ["qpush", "qpop", "qgoto", "rebase",
                         "update", "import", "revert", "graft", "shelve",
                         "unshelve", "strip", "histedit"] or
             (args[0] in ["pull", "unbundle"] and
--- a/eric6/Plugins/VcsPlugins/vcsMercurial/HgLogBrowserDialog.py	Sat Aug 01 10:39:12 2020 +0200
+++ b/eric6/Plugins/VcsPlugins/vcsMercurial/HgLogBrowserDialog.py	Wed Sep 02 18:06:20 2020 +0200
@@ -319,10 +319,6 @@
             self.tr("Pull Large Files"), self.__lfPullActTriggered)
         self.__lfPullAct.setToolTip(self.tr(
             "Pull large files for selected revisions"))
-        self.__fetchAct = self.__actionsMenu.addAction(
-            self.tr("Fetch Changes"), self.__fetchActTriggered)
-        self.__fetchAct.setToolTip(self.tr(
-            "Fetch changes from a remote repository"))
         
         self.__actionsMenu.addSeparator()
         
@@ -1449,21 +1445,16 @@
             
             if selectedIncomingItemsCount > 0:
                 self.__pullAct.setText(self.tr("Pull Selected Changes"))
-                self.__fetchAct.setText(self.tr("Fetch Selected Changes"))
             else:
                 self.__pullAct.setText(self.tr("Pull Changes"))
-                self.__fetchAct.setText(self.tr("Fetch Changes"))
             if self.vcs.canPull():
                 self.__pullAct.setEnabled(True)
                 self.__lfPullAct.setEnabled(
                     self.vcs.isExtensionActive("largefiles") and
                     selectedItemsCount > 0)
-                self.__fetchAct.setEnabled(
-                    self.vcs.isExtensionActive("fetch"))
             else:
                 self.__pullAct.setEnabled(False)
                 self.__lfPullAct.setEnabled(False)
-                self.__fetchAct.setEnabled(False)
             
             if self.vcs.canPush():
                 self.__pushAct.setEnabled(
@@ -1524,7 +1515,6 @@
                 act.setEnabled(False)
             
             self.__pullAct.setText(self.tr("Pull Selected Changes"))
-            self.__fetchAct.setText(self.tr("Fetch Selected Changes"))
             if self.vcs.canPull() and not bool(self.__bundle):
                 selectedIncomingItemsCount = len([
                     itm for itm in self.logTree.selectedItems()
@@ -1534,13 +1524,9 @@
                 self.__lfPullAct.setEnabled(
                     self.vcs.isExtensionActive("largefiles") and
                     selectedIncomingItemsCount > 0)
-                self.__fetchAct.setEnabled(
-                    self.vcs.isExtensionActive("fetch") and
-                    selectedIncomingItemsCount > 0)
             else:
                 self.__pullAct.setEnabled(False)
                 self.__lfPullAct.setEnabled(False)
-                self.__fetchAct.setEnabled(False)
             
             self.__unbundleAct.setEnabled(bool(self.__bundle))
             
@@ -1550,7 +1536,7 @@
             for act in [self.__phaseAct, self.__graftAct, self.__mergeAct,
                         self.__tagAct, self.__closeHeadsAct, self.__switchAct,
                         self.__bookmarkAct, self.__bookmarkMoveAct,
-                        self.__pullAct, self.__lfPullAct, self.__fetchAct,
+                        self.__pullAct, self.__lfPullAct,
                         self.__stripAct, self.__gpgSignAct,
                         self.__gpgVerifyAct, self.__unbundleAct]:
                 act.setEnabled(False)
@@ -2151,41 +2137,6 @@
                 self.repodir, revisions=revs)
     
     @pyqtSlot()
-    def __fetchActTriggered(self):
-        """
-        Private slot to fetch changes from a remote repository.
-        """
-        shouldReopen = False
-        refresh = False
-        addNext = False
-        
-        if self.initialCommandMode in ("log", "full_log", "incoming"):
-            revs = []
-            for itm in [item for item in self.logTree.selectedItems()
-                        if item.data(0, self.__incomingRole)]:
-                rev = itm.text(self.RevisionColumn).split(":")[1].strip()
-                if rev:
-                    revs.append(rev)
-            shouldReopen = self.vcs.getExtensionObject("fetch").hgFetch(
-                self.repodir, revisions=revs)
-            refresh = True
-            if self.initialCommandMode == "incoming":
-                addNext = True
-        if shouldReopen:
-            res = E5MessageBox.yesNo(
-                None,
-                self.tr("Fetch Changes"),
-                self.tr(
-                    """The project should be reread. Do this now?"""),
-                yesDefault=True)
-            if res:
-                e5App().getObject("Project").reopenProject()
-                return
-        
-        if refresh:
-            self.on_refreshButton_clicked(addNext=addNext)
-    
-    @pyqtSlot()
     def __pullActTriggered(self):
         """
         Private slot to pull changes from a remote repository.
--- a/eric6/Plugins/VcsPlugins/vcsMercurial/HgUserConfigDialog.py	Sat Aug 01 10:39:12 2020 +0200
+++ b/eric6/Plugins/VcsPlugins/vcsMercurial/HgUserConfigDialog.py	Wed Sep 02 18:06:20 2020 +0200
@@ -121,12 +121,6 @@
         ###################################################################
         if "extensions" not in self.__config:
             self.__config["extensions"] = {}
-        if self.fetchCheckBox.isChecked():
-            self.__config["extensions"]["fetch"] = ""
-        else:
-            if "fetch" in self.__config["extensions"]:
-                del self.__config["extensions"]["fetch"]
-            self.__config["extensions"]["#fetch"] = ""
         
         if self.gpgCheckBox.isChecked():
             self.__config["extensions"]["gpg"] = ""
@@ -331,8 +325,6 @@
             
             # step 2: extract extensions information
             if "extensions" in self.__config:
-                self.fetchCheckBox.setChecked(
-                    "fetch" in self.__config["extensions"])
                 self.gpgCheckBox.setChecked(
                     "gpg" in self.__config["extensions"])
                 self.purgeCheckBox.setChecked(
@@ -459,7 +451,6 @@
         self.userNameEdit.clear()
         self.emailEdit.clear()
         
-        self.fetchCheckBox.setChecked(False)
         self.gpgCheckBox.setChecked(False)
         self.purgeCheckBox.setChecked(False)
         self.queuesCheckBox.setChecked(False)
--- a/eric6/Plugins/VcsPlugins/vcsMercurial/HgUserConfigDialog.ui	Sat Aug 01 10:39:12 2020 +0200
+++ b/eric6/Plugins/VcsPlugins/vcsMercurial/HgUserConfigDialog.ui	Wed Sep 02 18:06:20 2020 +0200
@@ -131,16 +131,6 @@
            </widget>
           </item>
           <item row="0" column="1">
-           <widget class="QCheckBox" name="fetchCheckBox">
-            <property name="toolTip">
-             <string>Select to activate the fetch extension</string>
-            </property>
-            <property name="text">
-             <string>Fetch</string>
-            </property>
-           </widget>
-          </item>
-          <item row="1" column="0">
            <widget class="QCheckBox" name="gpgCheckBox">
             <property name="toolTip">
              <string>Select to activate the GPG extension</string>
@@ -150,7 +140,7 @@
             </property>
            </widget>
           </item>
-          <item row="1" column="1">
+          <item row="1" column="0">
            <widget class="QCheckBox" name="histeditCheckBox">
             <property name="toolTip">
              <string>Select to activate the histedit extension</string>
@@ -160,7 +150,7 @@
             </property>
            </widget>
           </item>
-          <item row="2" column="0">
+          <item row="1" column="1">
            <widget class="QCheckBox" name="largefilesCheckBox">
             <property name="toolTip">
              <string>Select to activate the largefiles extension</string>
@@ -170,7 +160,7 @@
             </property>
            </widget>
           </item>
-          <item row="2" column="1">
+          <item row="2" column="0">
            <widget class="QCheckBox" name="purgeCheckBox">
             <property name="toolTip">
              <string>Select to activate the Purge extension</string>
@@ -180,7 +170,7 @@
             </property>
            </widget>
           </item>
-          <item row="3" column="0">
+          <item row="2" column="1">
            <widget class="QCheckBox" name="queuesCheckBox">
             <property name="toolTip">
              <string>Select to activate the queues extension</string>
@@ -190,7 +180,7 @@
             </property>
            </widget>
           </item>
-          <item row="3" column="1">
+          <item row="3" column="0">
            <widget class="QCheckBox" name="rebaseCheckBox">
             <property name="toolTip">
              <string>Select to activate the rebase extension</string>
@@ -200,7 +190,7 @@
             </property>
            </widget>
           </item>
-          <item row="4" column="0">
+          <item row="3" column="1">
            <widget class="QCheckBox" name="shelveCheckBox">
             <property name="toolTip">
              <string>Select to activate the shelve extension</string>
@@ -210,7 +200,7 @@
             </property>
            </widget>
           </item>
-          <item row="4" column="1">
+          <item row="4" column="0">
            <widget class="QCheckBox" name="stripCheckBox">
             <property name="toolTip">
              <string>Select to activate the strip extension</string>
@@ -683,15 +673,6 @@
   <tabstop>userNameEdit</tabstop>
   <tabstop>emailEdit</tabstop>
   <tabstop>closeheadCheckBox</tabstop>
-  <tabstop>fetchCheckBox</tabstop>
-  <tabstop>gpgCheckBox</tabstop>
-  <tabstop>histeditCheckBox</tabstop>
-  <tabstop>largefilesCheckBox</tabstop>
-  <tabstop>purgeCheckBox</tabstop>
-  <tabstop>queuesCheckBox</tabstop>
-  <tabstop>rebaseCheckBox</tabstop>
-  <tabstop>shelveCheckBox</tabstop>
-  <tabstop>stripCheckBox</tabstop>
   <tabstop>lfFileSizeSpinBox</tabstop>
   <tabstop>lfFilePatternsEdit</tabstop>
   <tabstop>lfUserCachePicker</tabstop>
--- a/eric6/Plugins/VcsPlugins/vcsMercurial/ProjectHelper.py	Sat Aug 01 10:39:12 2020 +0200
+++ b/eric6/Plugins/VcsPlugins/vcsMercurial/ProjectHelper.py	Wed Sep 02 18:06:20 2020 +0200
@@ -40,7 +40,6 @@
         
         # instantiate the extensions
         from .QueuesExtension.ProjectHelper import QueuesProjectHelper
-        from .FetchExtension.ProjectHelper import FetchProjectHelper
         from .PurgeExtension.ProjectHelper import PurgeProjectHelper
         from .GpgExtension.ProjectHelper import GpgProjectHelper
         from .RebaseExtension.ProjectHelper import RebaseProjectHelper
@@ -51,7 +50,6 @@
         from .CloseheadExtension.ProjectHelper import CloseheadProjectHelper
         self.__extensions = {
             "mq": QueuesProjectHelper(),
-            "fetch": FetchProjectHelper(),
             "purge": PurgeProjectHelper(),
             "gpg": GpgProjectHelper(),
             "rebase": RebaseProjectHelper(),
@@ -1579,7 +1577,7 @@
         self.__toolbar.setVisible(False)
         
         ui.registerToolbar("mercurial", self.__toolbar.windowTitle(),
-                           self.__toolbar)
+                           self.__toolbar, "vcs")
         ui.addToolBar(self.__toolbar)
     
     def removeToolbar(self, ui, toolbarManager):
--- a/eric6/Plugins/VcsPlugins/vcsMercurial/hg.py	Sat Aug 01 10:39:12 2020 +0200
+++ b/eric6/Plugins/VcsPlugins/vcsMercurial/hg.py	Wed Sep 02 18:06:20 2020 +0200
@@ -137,7 +137,6 @@
         
         # instantiate the extensions
         from .QueuesExtension.queues import Queues
-        from .FetchExtension.fetch import Fetch
         from .PurgeExtension.purge import Purge
         from .GpgExtension.gpg import Gpg
         from .RebaseExtension.rebase import Rebase
@@ -148,7 +147,6 @@
         from .CloseheadExtension.closehead import Closehead
         self.__extensions = {
             "mq": Queues(self),
-            "fetch": Fetch(self),
             "purge": Purge(self),
             "gpg": Gpg(self),
             "rebase": Rebase(self),
--- a/eric6/Plugins/VcsPlugins/vcsPySvn/ProjectHelper.py	Sat Aug 01 10:39:12 2020 +0200
+++ b/eric6/Plugins/VcsPlugins/vcsPySvn/ProjectHelper.py	Wed Sep 02 18:06:20 2020 +0200
@@ -585,7 +585,7 @@
         self.__toolbar.setVisible(False)
         
         ui.registerToolbar("pysvn", self.__toolbar.windowTitle(),
-                           self.__toolbar)
+                           self.__toolbar, "vcs")
         ui.addToolBar(self.__toolbar)
     
     def removeToolbar(self, ui, toolbarManager):
--- a/eric6/Plugins/VcsPlugins/vcsSubversion/ProjectHelper.py	Sat Aug 01 10:39:12 2020 +0200
+++ b/eric6/Plugins/VcsPlugins/vcsSubversion/ProjectHelper.py	Wed Sep 02 18:06:20 2020 +0200
@@ -568,7 +568,7 @@
         self.__toolbar.setVisible(False)
         
         ui.registerToolbar("subversion", self.__toolbar.windowTitle(),
-                           self.__toolbar)
+                           self.__toolbar, "vcs")
         ui.addToolBar(self.__toolbar)
     
     def removeToolbar(self, ui, toolbarManager):
--- a/eric6/Preferences/ConfigurationPages/TasksPage.py	Sat Aug 01 10:39:12 2020 +0200
+++ b/eric6/Preferences/ConfigurationPages/TasksPage.py	Wed Sep 02 18:06:20 2020 +0200
@@ -35,6 +35,10 @@
             Preferences.getTasks("TasksTodoMarkers"))
         self.tasksMarkerNoteEdit.setText(
             Preferences.getTasks("TasksNoteMarkers"))
+        self.tasksMarkerTestEdit.setText(
+            Preferences.getTasks("TasksTestMarkers"))
+        self.tasksMarkerDocuEdit.setText(
+            Preferences.getTasks("TasksDocuMarkers"))
         
         self.initColour(
             "TasksFixmeColor", self.tasksFixmeColourButton,
@@ -48,6 +52,12 @@
         self.initColour(
             "TasksNoteColor", self.tasksNoteColourButton,
             Preferences.getTasks)
+        self.initColour(
+            "TasksTestColor", self.tasksTestColourButton,
+            Preferences.getTasks)
+        self.initColour(
+            "TasksDocuColor", self.tasksDocuColourButton,
+            Preferences.getTasks)
         
         self.clearCheckBox.setChecked(Preferences.getTasks("ClearOnFileClose"))
         
@@ -64,6 +74,10 @@
         Preferences.setTasks(
             "TasksNoteMarkers", self.tasksMarkerNoteEdit.text())
         Preferences.setTasks(
+            "TasksTestMarkers", self.tasksMarkerTestEdit.text())
+        Preferences.setTasks(
+            "TasksDocuMarkers", self.tasksMarkerDocuEdit.text())
+        Preferences.setTasks(
             "ClearOnFileClose", self.clearCheckBox.isChecked())
         
         self.saveColours(Preferences.setTasks)
--- a/eric6/Preferences/ConfigurationPages/TasksPage.ui	Sat Aug 01 10:39:12 2020 +0200
+++ b/eric6/Preferences/ConfigurationPages/TasksPage.ui	Wed Sep 02 18:06:20 2020 +0200
@@ -6,8 +6,8 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>586</width>
-    <height>475</height>
+    <width>600</width>
+    <height>678</height>
    </rect>
   </property>
   <layout class="QVBoxLayout" name="verticalLayout">
@@ -96,6 +96,34 @@
         </property>
        </widget>
       </item>
+      <item row="4" column="0">
+       <widget class="QLabel" name="textLabel4_7">
+        <property name="text">
+         <string>Test tasks:</string>
+        </property>
+       </widget>
+      </item>
+      <item row="4" column="1">
+       <widget class="QLineEdit" name="tasksMarkerTestEdit">
+        <property name="toolTip">
+         <string>Enter the tasks markers separated by a space character.</string>
+        </property>
+       </widget>
+      </item>
+      <item row="5" column="0">
+       <widget class="QLabel" name="textLabel4_6">
+        <property name="text">
+         <string>Documentation tasks:</string>
+        </property>
+       </widget>
+      </item>
+      <item row="5" column="1">
+       <widget class="QLineEdit" name="tasksMarkerDocuEdit">
+        <property name="toolTip">
+         <string>Enter the tasks markers separated by a space character.</string>
+        </property>
+       </widget>
+      </item>
      </layout>
     </widget>
    </item>
@@ -210,6 +238,52 @@
         </property>
        </widget>
       </item>
+      <item row="4" column="0">
+       <widget class="QLabel" name="textLabel1_4">
+        <property name="text">
+         <string>Test tasks:</string>
+        </property>
+       </widget>
+      </item>
+      <item row="4" column="1">
+       <widget class="QPushButton" name="tasksTestColourButton">
+        <property name="minimumSize">
+         <size>
+          <width>100</width>
+          <height>0</height>
+         </size>
+        </property>
+        <property name="toolTip">
+         <string>Select the background color for these tasks.</string>
+        </property>
+        <property name="text">
+         <string/>
+        </property>
+       </widget>
+      </item>
+      <item row="5" column="0">
+       <widget class="QLabel" name="textLabel3_5">
+        <property name="text">
+         <string>Documentation tasks:</string>
+        </property>
+       </widget>
+      </item>
+      <item row="5" column="1">
+       <widget class="QPushButton" name="tasksDocuColourButton">
+        <property name="minimumSize">
+         <size>
+          <width>100</width>
+          <height>0</height>
+         </size>
+        </property>
+        <property name="toolTip">
+         <string>Select the background color for these tasks.</string>
+        </property>
+        <property name="text">
+         <string/>
+        </property>
+       </widget>
+      </item>
      </layout>
     </widget>
    </item>
@@ -252,10 +326,14 @@
   <tabstop>tasksMarkerWarningEdit</tabstop>
   <tabstop>tasksMarkerTodoEdit</tabstop>
   <tabstop>tasksMarkerNoteEdit</tabstop>
+  <tabstop>tasksMarkerTestEdit</tabstop>
+  <tabstop>tasksMarkerDocuEdit</tabstop>
   <tabstop>tasksFixmeColourButton</tabstop>
   <tabstop>tasksWarningColourButton</tabstop>
   <tabstop>tasksTodoColourButton</tabstop>
   <tabstop>tasksNoteColourButton</tabstop>
+  <tabstop>tasksTestColourButton</tabstop>
+  <tabstop>tasksDocuColourButton</tabstop>
   <tabstop>clearCheckBox</tabstop>
  </tabstops>
  <resources/>
--- a/eric6/Preferences/ConfigurationPages/VcsPage.py	Sat Aug 01 10:39:12 2020 +0200
+++ b/eric6/Preferences/ConfigurationPages/VcsPage.py	Wed Sep 02 18:06:20 2020 +0200
@@ -38,6 +38,8 @@
             Preferences.getVCS("MonitorLocalStatus"))
         self.autoUpdateCheckBox.setChecked(
             Preferences.getVCS("AutoUpdate"))
+        self.vcsToolbarCheckBox.setChecked(
+            Preferences.getVCS("ShowVcsToolbar"))
         
         self.initColour(
             "VcsAdded", self.pbVcsAddedButton,
@@ -80,6 +82,9 @@
         Preferences.setVCS(
             "AutoUpdate",
             self.autoUpdateCheckBox.isChecked())
+        Preferences.setVCS(
+            "ShowVcsToolbar",
+            self.vcsToolbarCheckBox.isChecked())
     
         self.saveColours(Preferences.setProjectBrowserColour)
 
--- a/eric6/Preferences/ConfigurationPages/VcsPage.ui	Sat Aug 01 10:39:12 2020 +0200
+++ b/eric6/Preferences/ConfigurationPages/VcsPage.ui	Wed Sep 02 18:06:20 2020 +0200
@@ -10,7 +10,7 @@
     <height>572</height>
    </rect>
   </property>
-  <layout class="QVBoxLayout" name="verticalLayout">
+  <layout class="QVBoxLayout" name="verticalLayout_2">
    <item>
     <widget class="QLabel" name="headerLabel">
      <property name="text">
@@ -283,6 +283,25 @@
     </widget>
    </item>
    <item>
+    <widget class="QGroupBox" name="groupBox_4">
+     <property name="title">
+      <string>Toolbars</string>
+     </property>
+     <layout class="QVBoxLayout" name="verticalLayout">
+      <item>
+       <widget class="QCheckBox" name="vcsToolbarCheckBox">
+        <property name="toolTip">
+         <string>Select to show VCS specific toolbars</string>
+        </property>
+        <property name="text">
+         <string>Show VCS Toolbar</string>
+        </property>
+       </widget>
+      </item>
+     </layout>
+    </widget>
+   </item>
+   <item>
     <spacer>
      <property name="orientation">
       <enum>Qt::Vertical</enum>
--- a/eric6/Preferences/__init__.py	Sat Aug 01 10:39:12 2020 +0200
+++ b/eric6/Preferences/__init__.py	Wed Sep 02 18:06:20 2020 +0200
@@ -979,7 +979,7 @@
         "FlashCookiesWhitelist": [],
         "FlashCookiesBlacklist": [],
         "FlashCookiesDataPath": flashDataPathForOS(),
-        # PIM:                  identical to helpDefaults
+        # PIM:
         "PimFullName": "",
         "PimFirstName": "",
         "PimLastName": "",
@@ -1237,6 +1237,7 @@
         "AutoUpdate": False,
         "StatusMonitorInterval": 30,
         "MonitorLocalStatus": False,
+        "ShowVcsToolbar": True,
     }
     
     # defaults for tasks related stuff
@@ -1245,11 +1246,15 @@
         "TasksWarningMarkers": "WARN" + "ING:",
         "TasksTodoMarkers": "TO" + "DO:",
         "TasksNoteMarkers": "NO" + "TE:",
+        "TasksTestMarkers": "TE" + "ST:",
+        "TasksDocuMarkers": "DO" + "CU:",
         # needed to keep it from being recognized as a task
         "TasksFixmeColor": QColor("#FFA0A0"),
         "TasksWarningColor": QColor("#FFFFA0"),
         "TasksTodoColor": QColor("#A0FFA0"),
         "TasksNoteColor": QColor("#A0A0FF"),
+        "TasksTestColor": QColor("#FFD000"),
+        "TasksDocuColor": QColor("#FFA0FF"),
         "ClearOnFileClose": True,
     }
     
@@ -2737,7 +2742,7 @@
         value = int(prefClass.settings.value(
             "WebBrowser/" + key, prefClass.webBrowserDefaults[key]))
         if QWebEngineSettings is None:
-            value = prefClass.helpDefaults[key]
+            value = prefClass.webBrowserDefaults[key]
         return value
     elif key in ["StartupBehavior", "HistoryLimit",
                  "DownloadManagerRemovePolicy", "SyncType", "SyncFtpPort",
@@ -3100,7 +3105,8 @@
     @return the requested user setting
     """
     if key in ["TasksFixmeColor", "TasksWarningColor",
-               "TasksTodoColor", "TasksNoteColor"]:
+               "TasksTodoColor", "TasksNoteColor",
+               "TasksTestColor", "TasksDocuColor"]:
         col = prefClass.settings.value("Tasks/" + key)
         if col is not None:
             return QColor(col)
@@ -3710,16 +3716,6 @@
         )
     for key in ["SyncFtpPassword", "SyncEncryptionKey"]:
         prefClass.settings.setValue(
-            "Help/" + key,
-            pwRecode(
-                prefClass.settings.value("Help/" + key,
-                                         prefClass.helpDefaults[key]),
-                oldPassword,
-                newPassword
-            )
-        )
-    for key in ["SyncFtpPassword", "SyncEncryptionKey"]:
-        prefClass.settings.setValue(
             "WebBrowser/" + key,
             pwRecode(
                 prefClass.settings.value("WebBrowser/" + key,
--- a/eric6/QScintilla/Editor.py	Sat Aug 01 10:39:12 2020 +0200
+++ b/eric6/QScintilla/Editor.py	Wed Sep 02 18:06:20 2020 +0200
@@ -2769,14 +2769,8 @@
         """
         from Tasks.Task import Task
         markers = {
-            Task.TypeWarning:
-            Preferences.getTasks("TasksWarningMarkers").split(),
-            Task.TypeNote:
-            Preferences.getTasks("TasksNoteMarkers").split(),
-            Task.TypeTodo:
-            Preferences.getTasks("TasksTodoMarkers").split(),
-            Task.TypeFixme:
-            Preferences.getTasks("TasksFixmeMarkers").split(),
+            taskType: Preferences.getTasks(markersName).split()
+            for taskType, markersName in Task.TaskType2MarkersName.items()
         }
         txtList = self.text().split(self.getLineSeparator())
         
--- a/eric6/QScintilla/Lexers/LexerPython.py	Sat Aug 01 10:39:12 2020 +0200
+++ b/eric6/QScintilla/Lexers/LexerPython.py	Wed Sep 02 18:06:20 2020 +0200
@@ -234,6 +234,9 @@
         """
         if kwSet == 1:
             if self.language() == "Python3":
+                import keyword
+                keywords = " ".join(keyword.kwlist)
+            elif self.language() == "MicroPython":
                 keywords = ("False None True and as assert break class "
                             "continue def del elif else except finally for "
                             "from global if import in is lambda nonlocal not "
--- a/eric6/Tasks/Task.py	Sat Aug 01 10:39:12 2020 +0200
+++ b/eric6/Tasks/Task.py	Wed Sep 02 18:06:20 2020 +0200
@@ -27,6 +27,33 @@
     TypeTodo = 1
     TypeWarning = 2
     TypeNote = 3
+    TypeTest = 4
+    TypeDocu = 5
+    
+    TaskType2IconName = {
+        TypeFixme: "taskFixme",
+        TypeTodo: "taskTodo",
+        TypeWarning: "taskWarning",
+        TypeNote: "taskNote",
+        TypeTest: "taskTest",
+        TypeDocu: "taskDocu",
+    }
+    TaskType2ColorName = {
+        TypeFixme: "TasksFixmeColor",
+        TypeTodo: "TasksTodoColor",
+        TypeWarning: "TasksWarningColor",
+        TypeNote: "TasksNoteColor",
+        TypeTest: "TasksTestColor",
+        TypeDocu: "TasksDocuColor",
+    }
+    TaskType2MarkersName = {
+        TypeFixme: "TasksFixmeMarkers",
+        TypeTodo: "TasksTodoMarkers",
+        TypeWarning: "TasksWarningMarkers",
+        TypeNote: "TasksNoteMarkers",
+        TypeTest: "TasksTestMarkers",
+        TypeDocu: "TasksDocuMarkers",
+    }
     
     def __init__(self, summary, priority=1, filename="", lineno=0,
                  completed=False, _time=0, isProjectTask=False,
@@ -44,7 +71,7 @@
         @param isProjectTask flag indicating a task related to the current
             project (boolean)
         @param taskType type of the task (one of TypeFixme, TypeTodo,
-            TypeWarning, TypeNote)
+            TypeWarning, TypeNote, TypeTest, TypeDocu)
         @param project reference to the project object (Project)
         @param description explanatory text of the task (string)
         @param uid unique id of the task (string)
@@ -100,14 +127,11 @@
         else:
             self.setIcon(1, UI.PixmapCache.getIcon("empty"))
         
-        if self.taskType == Task.TypeFixme:
-            self.setIcon(2, UI.PixmapCache.getIcon("taskFixme"))
-        elif self.taskType == Task.TypeWarning:
-            self.setIcon(2, UI.PixmapCache.getIcon("taskWarning"))
-        elif self.taskType == Task.TypeTodo:
-            self.setIcon(2, UI.PixmapCache.getIcon("taskTodo"))
-        else:
-            self.setIcon(2, UI.PixmapCache.getIcon("taskNote"))
+        try:
+            self.setIcon(2, UI.PixmapCache.getIcon(
+                Task.TaskType2IconName[self.taskType]))
+        except KeyError:
+            self.setIcon(2, UI.PixmapCache.getIcon("empty"))
         
         self.colorizeTask()
         self.setTextAlignment(4, Qt.AlignRight)
@@ -121,18 +145,14 @@
         nonBoldFont = self.font(0)
         nonBoldFont.setBold(False)
         for col in range(5):
-            if self.taskType == Task.TypeFixme:
-                self.setBackground(
-                    col, Preferences.getTasks("TasksFixmeColor"))
-            elif self.taskType == Task.TypeWarning:
+            try:
                 self.setBackground(
-                    col, Preferences.getTasks("TasksWarningColor"))
-            elif self.taskType == Task.TypeTodo:
-                self.setBackground(
-                    col, Preferences.getTasks("TasksTodoColor"))
-            else:
-                self.setBackground(
-                    col, Preferences.getTasks("TasksNoteColor"))
+                    col, Preferences.getTasks(
+                        Task.TaskType2ColorName[self.taskType]))
+            except KeyError:
+                # do not set background color if type is not known
+                pass
+            
             if self._isProjectTask:
                 self.setFont(col, boldFont)
             else:
--- a/eric6/Tasks/TaskViewer.py	Sat Aug 01 10:39:12 2020 +0200
+++ b/eric6/Tasks/TaskViewer.py	Wed Sep 02 18:06:20 2020 +0200
@@ -694,11 +694,8 @@
         @type bool
         """
         markers = {
-            Task.TypeWarning:
-            Preferences.getTasks("TasksWarningMarkers").split(),
-            Task.TypeNote: Preferences.getTasks("TasksNoteMarkers").split(),
-            Task.TypeTodo: Preferences.getTasks("TasksTodoMarkers").split(),
-            Task.TypeFixme: Preferences.getTasks("TasksFixmeMarkers").split(),
+            taskType: Preferences.getTasks(markersName).split()
+            for taskType, markersName in Task.TaskType2MarkersName.items()
         }
         files = self.project.pdata["SOURCES"]
         
--- a/eric6/UI/Browser.py	Sat Aug 01 10:39:12 2020 +0200
+++ b/eric6/UI/Browser.py	Wed Sep 02 18:06:20 2020 +0200
@@ -218,6 +218,10 @@
             self.__showMimeType)
         self.sourceMenu.addSeparator()
         self.sourceMenu.addAction(
+            QCoreApplication.translate('Browser', 'Refresh Source File'),
+            self.__refreshSource)
+        self.sourceMenu.addSeparator()
+        self.sourceMenu.addAction(
             QCoreApplication.translate('Browser', 'Copy Path to Clipboard'),
             self._copyToClipboard)
         
@@ -510,7 +514,15 @@
                     if ok:
                         textMimeTypesList.append(mimetype)
                         Preferences.setUI("TextMimeTypes", textMimeTypesList)
-        
+    
+    def __refreshSource(self):
+        """
+        Private slot to refresh the structure of a source file.
+        """
+        itmList = self.getSelectedItems([BrowserFileItem])
+        if itmList:
+            self.__model.repopulateFileItem(itmList[0])
+    
     def _editPixmap(self):
         """
         Protected slot to handle the open in icon editor popup menu entry.
--- a/eric6/UI/BrowserModel.py	Sat Aug 01 10:39:12 2020 +0200
+++ b/eric6/UI/BrowserModel.py	Wed Sep 02 18:06:20 2020 +0200
@@ -57,8 +57,10 @@
         
         if not nopopulate:
             self.watchedItems = {}
+            self.watchedFileItems = {}
             self.watcher = QFileSystemWatcher(self)
             self.watcher.directoryChanged.connect(self.directoryChanged)
+            self.watcher.fileChanged.connect(self.fileChanged)
             
             rootData = QCoreApplication.translate("BrowserModel", "Name")
             self.rootItem = BrowserItem(None, rootData)
@@ -691,6 +693,47 @@
             if repopulate:
                 self.endInsertRows()
         parentItem._populated = True
+        if (parentItem.type_ == BrowserItemFile and
+            fileName not in self.watchedFileItems
+        ):
+            # watch the file only in the file browser not the project viewer
+            self.watcher.addPath(fileName)
+            self.watchedFileItems[fileName] = parentItem
+
+    def repopulateFileItem(self, itm):
+        """
+        Public method to repopulate a file item.
+        
+        @param itm reference to the item to be repopulated
+        @type BrowserFileItem
+        """
+        if isinstance(itm, BrowserFileItem) and itm.isLazyPopulated():
+            if not itm.isPopulated():
+                # item is not populated yet, nothing to do
+                return
+            
+            if itm.childCount():
+                index = self.createIndex(itm.row(), 0, itm)
+                self.beginRemoveRows(index, 0, itm.childCount() - 1)
+                itm.removeChildren()
+                self.endRemoveRows()
+            
+            self.populateFileItem(itm, True)
+
+    def fileChanged(self, fileName):
+        """
+        Public method to react upon file changes.
+        
+        @param fileName path of the changed file
+        @type str
+        """
+        if fileName in self.watchedFileItems:
+            if os.path.exists(fileName):
+                # the file was changed
+                self.repopulateFileItem(self.watchedFileItems[fileName])
+            else:
+                # the file does not exist anymore
+                del self.watchedFileItems[fileName]
 
     def populateClassItem(self, parentItem, repopulate=False):
         """
--- a/eric6/UI/Previewers/PreviewerHTML.py	Sat Aug 01 10:39:12 2020 +0200
+++ b/eric6/UI/Previewers/PreviewerHTML.py	Wed Sep 02 18:06:20 2020 +0200
@@ -580,10 +580,12 @@
                 """<p>Alternatively you may disable Sphinx usage"""
                 """ on the Editor, Filehandling configuration page.</p>""")
         
-        tempDir = tempfile.mkdtemp(prefix='eric-rest-')
+        srcTempDir = tempfile.mkdtemp(prefix="eric-rest-src-")
+        outTempDir = tempfile.mkdtemp(prefix="eric-rest-out-")
+        doctreeTempDir = tempfile.mkdtemp(prefix="eric-rest-doctree-")
         try:
             filename = 'sphinx_preview'
-            basePath = os.path.join(tempDir, filename)
+            basePath = os.path.join(srcTempDir, filename)
             fh = open(basePath + '.rst', 'w', encoding='utf-8')
             fh.write(text)
             fh.close()
@@ -595,17 +597,20 @@
                          'html_use_modindex': False,
                          'html_use_smartypants': True,
                          'master_doc': filename}
-            app = Sphinx(srcdir=tempDir, confdir=None, outdir=tempDir,
-                         doctreedir=tempDir, buildername='html',
+            app = Sphinx(srcdir=srcTempDir, confdir=None, outdir=outTempDir,
+                         doctreedir=doctreeTempDir, buildername='html',
                          confoverrides=overrides, status=None,
                          warning=io.StringIO())
             app.build(force_all=True, filenames=None)
 
+            basePath = os.path.join(outTempDir, filename)
             fh = open(basePath + '.html', 'r', encoding='utf-8')
             html = fh.read()
             fh.close()
         finally:
-            shutil.rmtree(tempDir)
+            shutil.rmtree(srcTempDir)
+            shutil.rmtree(outTempDir)
+            shutil.rmtree(doctreeTempDir)
         
         return html
     
--- a/eric6/UI/UserInterface.py	Sat Aug 01 10:39:12 2020 +0200
+++ b/eric6/UI/UserInterface.py	Wed Sep 02 18:06:20 2020 +0200
@@ -687,6 +687,15 @@
         splash.showMessage(self.tr("Setting View Profile..."))
         self.__setEditProfile()
         
+        # special treatment for the VCS toolbars
+        for tb in self.getToolbarsByCategory("vcs"):
+            tb.setVisible(False)
+            tb.setEnabled(False)
+        tb = self.getToolbar("vcs")[1]
+        tb.setEnabled(True)
+        if Preferences.getVCS("ShowVcsToolbar"):
+            tb.setVisible(True)
+        
         # now read the saved tasks
         splash.showMessage(self.tr("Reading Tasks..."))
         self.__readTasks()
@@ -3298,27 +3307,31 @@
 
         # just add new toolbars to the end of the list
         self.__toolbars = {}
-        self.__toolbars["file"] = [filetb.windowTitle(), filetb]
-        self.__toolbars["edit"] = [edittb.windowTitle(), edittb]
-        self.__toolbars["search"] = [searchtb.windowTitle(), searchtb]
-        self.__toolbars["view"] = [viewtb.windowTitle(), viewtb]
-        self.__toolbars["start"] = [starttb.windowTitle(), starttb]
-        self.__toolbars["debug"] = [debugtb.windowTitle(), debugtb]
-        self.__toolbars["project"] = [projecttb.windowTitle(), projecttb]
-        self.__toolbars["tools"] = [toolstb.windowTitle(), toolstb]
-        self.__toolbars["help"] = [helptb.windowTitle(), helptb]
-        self.__toolbars["settings"] = [settingstb.windowTitle(), settingstb]
-        self.__toolbars["bookmarks"] = [bookmarktb.windowTitle(), bookmarktb]
-        self.__toolbars["unittest"] = [unittesttb.windowTitle(), unittesttb]
+        self.__toolbars["file"] = [filetb.windowTitle(), filetb, ""]
+        self.__toolbars["edit"] = [edittb.windowTitle(), edittb, ""]
+        self.__toolbars["search"] = [searchtb.windowTitle(), searchtb, ""]
+        self.__toolbars["view"] = [viewtb.windowTitle(), viewtb, ""]
+        self.__toolbars["start"] = [starttb.windowTitle(), starttb, ""]
+        self.__toolbars["debug"] = [debugtb.windowTitle(), debugtb, ""]
+        self.__toolbars["project"] = [projecttb.windowTitle(), projecttb, ""]
+        self.__toolbars["tools"] = [toolstb.windowTitle(), toolstb, ""]
+        self.__toolbars["help"] = [helptb.windowTitle(), helptb, ""]
+        self.__toolbars["settings"] = [settingstb.windowTitle(), settingstb,
+                                       ""]
+        self.__toolbars["bookmarks"] = [bookmarktb.windowTitle(), bookmarktb,
+                                        ""]
+        self.__toolbars["unittest"] = [unittesttb.windowTitle(), unittesttb,
+                                       ""]
         self.__toolbars["view_profiles"] = [profilestb.windowTitle(),
-                                            profilestb]
-        self.__toolbars["plugins"] = [pluginstb.windowTitle(), pluginstb]
+                                            profilestb, ""]
+        self.__toolbars["plugins"] = [pluginstb.windowTitle(), pluginstb, ""]
         self.__toolbars["quicksearch"] = [quicksearchtb.windowTitle(),
-                                          quicksearchtb]
+                                          quicksearchtb, ""]
         self.__toolbars["multiproject"] = [multiprojecttb.windowTitle(),
-                                           multiprojecttb]
-        self.__toolbars["spelling"] = [spellingtb.windowTitle(), spellingtb]
-        self.__toolbars["vcs"] = [vcstb.windowTitle(), vcstb]
+                                           multiprojecttb, ""]
+        self.__toolbars["spelling"] = [spellingtb.windowTitle(), spellingtb,
+                                       ""]
+        self.__toolbars["vcs"] = [vcstb.windowTitle(), vcstb, "vcs"]
         
     def __initDebugToolbarsLayout(self):
         """
@@ -3842,34 +3855,44 @@
         except KeyError:
             return None
         
-    def registerToolbar(self, name, text, toolbar):
+    def registerToolbar(self, name, text, toolbar, category=""):
         """
         Public method to register a toolbar.
         
         This method must be called in order to make a toolbar manageable by the
         UserInterface object.
         
-        @param name name of the toolbar (string). This is used as the key into
+        @param name name of the toolbar. This is used as the key into
             the dictionary of toolbar references.
-        @param text user visible text for the toolbar entry (string)
-        @param toolbar reference to the toolbar to be registered (QToolBar)
+        @type str
+        @param text user visible text for the toolbar entry
+        @type str
+        @param toolbar reference to the toolbar to be registered
+        @type QToolBar
+        @param category toolbar category
+        @type str
         @exception KeyError raised, if a toolbar with the given name was
             already registered
         """
         if name in self.__toolbars:
             raise KeyError("Toolbar '{0}' already registered.".format(name))
         
-        self.__toolbars[name] = [text, toolbar]
-        
-    def reregisterToolbar(self, name, text):
+        self.__toolbars[name] = [text, toolbar, category]
+        
+    def reregisterToolbar(self, name, text, category=""):
         """
         Public method to change the visible text for the named toolbar.
         
-        @param name name of the toolbar to be changed (string)
-        @param text new user visible text for the toolbar entry (string)
+        @param name name of the toolbar to be changed
+        @type str
+        @param text new user visible text for the toolbar entry
+        @type str
+        @param category new toolbar category for the toolbar entry
+        @type str
         """
         if name in self.__toolbars:
             self.__toolbars[name][0] = text
+            self.__toolbars[name][2] = category
         
     def unregisterToolbar(self, name):
         """
@@ -3891,7 +3914,28 @@
             return self.__toolbars[name]
         except KeyError:
             return None
-        
+    
+    def getToolbarsByCategory(self, category):
+        """
+        Public method to get a list of toolbars belonging to a given toolbar
+        category.
+        
+        @param category toolbar category
+        @type str
+        @return list of toolbars
+        @rtype list of QToolBar
+        """
+        toolbars = []
+        for tbName in self.__toolbars:
+            try:
+                if self.__toolbars[tbName][2] == category:
+                    toolbars.append(self.__toolbars[tbName][1])
+            except IndexError:
+                # backward compatibility; category is not yet supported
+                pass
+        
+        return toolbars
+    
     def getLocale(self):
         """
         Public method to get the locale of the IDE.
@@ -4110,8 +4154,9 @@
         """
         menu.clear()
         
-        for name, (text, tb) in sorted(self.__toolbars.items(),
-                                       key=lambda t: t[1][0]):
+        for name, (text, tb, category) in sorted(
+            self.__toolbars.items(), key=lambda t: t[1][0]
+        ):
             act = menu.addAction(text)
             act.setCheckable(True)
             act.setChecked(not tb.isHidden())
@@ -4151,12 +4196,12 @@
         name = act.data()
         if name:
             if name == "__SHOW__":
-                for _text, tb in self.__toolbars.values():
+                for _text, tb, category in self.__toolbars.values():
                     tb.show()
                 if self.__menus["toolbars"].isTearOffMenuVisible():
                     self.__menus["toolbars"].hideTearOffMenu()
             elif name == "__HIDE__":
-                for _text, tb in self.__toolbars.values():
+                for _text, tb, category in self.__toolbars.values():
                     tb.hide()
                 if self.__menus["toolbars"].isTearOffMenuVisible():
                     self.__menus["toolbars"].hideTearOffMenu()
@@ -4164,6 +4209,7 @@
                 tb = self.__toolbars[name][1]
                 if act.isChecked():
                     tb.show()
+                    tb.setEnabled(True)
                 else:
                     tb.hide()
 
@@ -4177,15 +4223,16 @@
         name = act.data()
         if name:
             if name == "__SHOW__":
-                for _text, tb in self.__toolbars.values():
+                for _text, tb, category in self.__toolbars.values():
                     tb.show()
             elif name == "__HIDE__":
-                for _text, tb in self.__toolbars.values():
+                for _text, tb, category in self.__toolbars.values():
                     tb.hide()
             else:
                 tb = self.__toolbars[name][1]
                 if act.isChecked():
                     tb.show()
+                    tb.setEnabled(True)
                 else:
                     tb.hide()
             if self.__menus["toolbars"].isTearOffMenuVisible():
--- a/eric6/Utilities/BackgroundClient.py	Sat Aug 01 10:39:12 2020 +0200
+++ b/eric6/Utilities/BackgroundClient.py	Wed Sep 02 18:06:20 2020 +0200
@@ -181,6 +181,9 @@
                     else:
                         ret = 'Unknown service.'
                 
+                if isinstance(ret, Exception):
+                    ret = str(ret)
+                
                 self.__send(fx, fn, ret)
         except socket.error:
             pass
--- a/eric6/Utilities/ClassBrowsers/idlclbr.py	Sat Aug 01 10:39:12 2020 +0200
+++ b/eric6/Utilities/ClassBrowsers/idlclbr.py	Wed Sep 02 18:06:20 2020 +0200
@@ -240,6 +240,8 @@
         # can't do anything with this module
         _modules[module] = dictionary
         return dictionary
+    # convert eol markers the Python style
+    src = src.replace("\r\n", "\n").replace("\r", "\n")
 
     lineno, last_lineno_pos = 1, 0
     lastGlobalEntry = None
--- a/eric6/Utilities/ClassBrowsers/jsclbr.py	Sat Aug 01 10:39:12 2020 +0200
+++ b/eric6/Utilities/ClassBrowsers/jsclbr.py	Wed Sep 02 18:06:20 2020 +0200
@@ -313,6 +313,8 @@
         # can't do anything with this module
         _modules[module] = dictionary
         return dictionary
+    # convert eol markers the Python style
+    src = src.replace("\r\n", "\n").replace("\r", "\n")
     
     visitor = Visitor(src, module, file)
     dictionary = visitor.parse()
--- a/eric6/Utilities/ClassBrowsers/protoclbr.py	Sat Aug 01 10:39:12 2020 +0200
+++ b/eric6/Utilities/ClassBrowsers/protoclbr.py	Wed Sep 02 18:06:20 2020 +0200
@@ -230,6 +230,8 @@
         # can't do anything with this module
         _modules[module] = dictionary
         return dictionary
+    # convert eol markers the Python style
+    src = src.replace("\r\n", "\n").replace("\r", "\n")
 
     lineno, last_lineno_pos = 1, 0
     lastGlobalEntry = None
--- a/eric6/Utilities/ClassBrowsers/pyclbr.py	Sat Aug 01 10:39:12 2020 +0200
+++ b/eric6/Utilities/ClassBrowsers/pyclbr.py	Wed Sep 02 18:06:20 2020 +0200
@@ -386,6 +386,8 @@
         # can't do anything with this module
         _modules[module] = dictionary
         return dictionary
+    # convert eol markers the Python style
+    src = src.replace("\r\n", "\n").replace("\r", "\n")
 
     lineno, last_lineno_pos = 1, 0
     lastGlobalEntry = None
--- a/eric6/Utilities/ClassBrowsers/rbclbr.py	Sat Aug 01 10:39:12 2020 +0200
+++ b/eric6/Utilities/ClassBrowsers/rbclbr.py	Wed Sep 02 18:06:20 2020 +0200
@@ -288,6 +288,8 @@
         # can't do anything with this module
         _modules[module] = dictionary
         return dictionary
+    # convert eol markers the Python style
+    src = src.replace("\r\n", "\n").replace("\r", "\n")
 
     lineno, last_lineno_pos = 1, 0
     cur_obj = None
--- a/eric6/Utilities/ModuleParser.py	Sat Aug 01 10:39:12 2020 +0200
+++ b/eric6/Utilities/ModuleParser.py	Wed Sep 02 18:06:20 2020 +0200
@@ -497,6 +497,8 @@
         
         @param src the source text to be scanned (string)
         """
+        # convert eol markers the Python style
+        src = src.replace("\r\n", "\n").replace("\r", "\n")
         if self.type in [PY_SOURCE, PTL_SOURCE]:
             self.__py_scan(src)
         elif self.type == RB_SOURCE:
--- a/eric6/Utilities/binplistlib.py	Sat Aug 01 10:39:12 2020 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1078 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Copyright (c) 2012 - 2020 Detlev Offenbach <detlev@die-offenbachs.de>
-#
-
-"""
-Module implementing a library for reading and writing binary property list
-files.
-
-Binary Property List (plist) files provide a faster and smaller serialization
-format for property lists on OS X. This is a library for generating binary
-plists which can be read by OS X, iOS, or other clients.
-
-The API models the plistlib API, and will call through to plistlib when
-XML serialization or deserialization is required.
-
-To generate plists with UID values, wrap the values with the Uid object. The
-value must be an int.
-
-To generate plists with NSData/CFData values, wrap the values with the
-Data object. The value must be a bytes object.
-
-Date values can only be datetime.datetime objects.
-
-The exceptions InvalidPlistException and NotBinaryPlistException may be
-thrown to indicate that the data cannot be serialized or deserialized as
-a binary plist.
-
-Plist generation example:
-<pre>
-    from binplistlib import *
-    from datetime import datetime
-    plist = {'aKey':'aValue',
-             '0':1.322,
-             'now':datetime.now(),
-             'list':[1,2,3],
-             'tuple':('a','b','c')
-             }
-    try:
-        writePlist(plist, "example.plist")
-    except (InvalidPlistException, NotBinaryPlistException) as e:
-        print("Something bad happened:", e)
-</pre>
-Plist parsing example:
-<pre>
-    from binplistlib import *
-    try:
-        plist = readPlist("example.plist")
-        print(plist)
-    except (InvalidPlistException, NotBinaryPlistException) as e:
-        print("Not a plist:", e)
-</pre>
-"""
-
-
-#
-# Ported from the biplist.py script.
-#
-# Original License:
-#
-# Copyright (c) 2010, Andrew Wooster
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions are met:
-#
-#    * Redistributions of source code must retain the above copyright notice,
-#      this list of conditions and the following disclaimer.
-#    * Redistributions in binary form must reproduce the above copyright
-#      notice, this list of conditions and the following disclaimer in the
-#      documentation and/or other materials provided with the distribution.
-#    * Neither the name of biplist nor the names of its contributors may be
-#      used to endorse or promote products derived from this software without
-#      specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
-# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-# POSSIBILITY OF SUCH DAMAGE.
-#
-
-from collections import namedtuple
-from io import BytesIO
-import calendar
-import datetime
-import math
-import plistlib
-from struct import pack, unpack
-
-__all__ = [
-    'Uid', 'Data', 'readPlist', 'writePlist', 'readPlistFromBytes',
-    'writePlistToBytes', 'InvalidPlistException', 'NotBinaryPlistException'
-]
-
-apple_reference_date_offset = 978307200
-
-
-class Uid(int):
-    """
-    Class implementing a wrapper around integers for representing UID values.
-    
-    This is used in keyed archiving.
-    """
-    def __repr__(self):
-        """
-        Special method to return an object representation.
-        
-        @return object representation (string)
-        """
-        return "Uid({0:d})".format(self)
-
-
-class Data(bytes):
-    """
-    Class implementing a wrapper around bytes types for representing Data
-    values.
-    """
-    pass
-
-
-class InvalidPlistException(Exception):
-    """
-    Exception raised when the plist is incorrectly formatted.
-    """
-    pass
-
-
-class NotBinaryPlistException(Exception):
-    """
-    Exception raised when a binary plist was expected but not encountered.
-    """
-    pass
-
-
-def readPlist(pathOrFile):
-    """
-    Module function to read a plist file.
-    
-    @param pathOrFile name of the plist file (string) or an open file
-        (file object)
-    @return reference to the read object
-    @exception InvalidPlistException raised to signal an invalid plist file
-    """
-    didOpen = False
-    result = None
-    if isinstance(pathOrFile, str):
-        pathOrFile = open(pathOrFile, 'rb')
-        didOpen = True
-    try:
-        reader = PlistReader(pathOrFile)
-        result = reader.parse()
-    except NotBinaryPlistException:
-        try:
-            pathOrFile.seek(0)
-            result = plistlib.readPlist(pathOrFile)
-        except Exception as e:
-            raise InvalidPlistException(e)
-    if didOpen:
-        pathOrFile.close()
-    return result
-
-
-def writePlist(rootObject, pathOrFile, binary=True):
-    """
-    Module function to write a plist file.
-    
-    @param rootObject reference to the object to be written
-    @param pathOrFile name of the plist file (string) or an open file
-        (file object)
-    @param binary flag indicating the generation of a binary plist file
-        (boolean)
-    """
-    if not binary:
-        plistlib.writePlist(rootObject, pathOrFile)
-        return
-    else:
-        didOpen = False
-        if isinstance(pathOrFile, str):
-            pathOrFile = open(pathOrFile, 'wb')
-            didOpen = True
-        writer = PlistWriter(pathOrFile)
-        writer.writeRoot(rootObject)
-        if didOpen:
-            pathOrFile.close()
-        return
-
-
-def readPlistFromBytes(data):
-    """
-    Module function to read from a plist bytes object.
-    
-    @param data plist data (bytes)
-    @return reference to the read object
-    """
-    return readPlist(BytesIO(data))
-
-
-def writePlistToBytes(rootObject, binary=True):
-    """
-    Module function to write a plist bytes object.
-    
-    @param rootObject reference to the object to be written
-    @param binary flag indicating the generation of a binary plist bytes
-        object (boolean)
-    @return bytes object containing the plist data
-    """
-    if not binary:
-        return plistlib.writePlistToBytes(rootObject)
-    else:
-        io = BytesIO()
-        writer = PlistWriter(io)
-        writer.writeRoot(rootObject)
-        return io.getvalue()
-
-
-def is_stream_binary_plist(stream):
-    """
-    Module function to check, if the stream is a binary plist.
-    
-    @param stream plist stream (file object)
-    @return flag indicating a binary plist (boolean)
-    """
-    stream.seek(0)
-    header = stream.read(7)
-    if header == b'bplist0':
-        return True
-    else:
-        return False
-
-PlistTrailer = namedtuple(
-    'PlistTrailer',
-    'offsetSize, objectRefSize, offsetCount, topLevelObjectNumber,'
-    ' offsetTableOffset')
-PlistByteCounts = namedtuple(
-    'PlistByteCounts',
-    'nullBytes, boolBytes, intBytes, realBytes, dateBytes, dataBytes,'
-    ' stringBytes, uidBytes, arrayBytes, setBytes, dictBytes')
-
-
-class PlistReader(object):
-    """
-    Class implementing the plist reader.
-    """
-    file = None
-    contents = b''
-    offsets = None
-    trailer = None
-    currentOffset = 0
-    
-    def __init__(self, fileOrStream):
-        """
-        Constructor
-        
-        @param fileOrStream open file containing the plist data (file object)
-        """
-        self.reset()
-        self.file = fileOrStream
-    
-    def parse(self):
-        """
-        Public method to parse the plist data.
-        
-        @return unpickled object
-        """
-        return self.readRoot()
-    
-    def reset(self):
-        """
-        Public method to reset the instance object.
-        """
-        self.trailer = None
-        self.contents = b''
-        self.offsets = []
-        self.currentOffset = 0
-    
-    def readRoot(self):
-        """
-        Public method to read the root object.
-        
-        @return unpickled object
-        @exception InvalidPlistException raised to indicate an invalid
-            plist file
-        @exception NotBinaryPlistException raised to indicate, that the
-            plist file is not a binary file
-        """
-        result = None
-        self.reset()
-        # Get the header, make sure it's a valid file.
-        if not is_stream_binary_plist(self.file):
-            raise NotBinaryPlistException()
-        self.file.seek(0)
-        self.contents = self.file.read()
-        if len(self.contents) < 32:
-            raise InvalidPlistException("File is too short.")
-        trailerContents = self.contents[-32:]
-        try:
-            self.trailer = PlistTrailer._make(
-                unpack("!xxxxxxBBQQQ", trailerContents))
-            offset_size = self.trailer.offsetSize * self.trailer.offsetCount
-            offset = self.trailer.offsetTableOffset
-            offset_contents = self.contents[offset:offset + offset_size]
-            offset_i = 0
-            while offset_i < self.trailer.offsetCount:
-                begin = self.trailer.offsetSize * offset_i
-                tmp_contents = offset_contents[
-                    begin:begin + self.trailer.offsetSize]
-                tmp_sized = self.getSizedInteger(
-                    tmp_contents, self.trailer.offsetSize)
-                self.offsets.append(tmp_sized)
-                offset_i += 1
-            self.setCurrentOffsetToObjectNumber(
-                self.trailer.topLevelObjectNumber)
-            result = self.readObject()
-        except TypeError as e:
-            raise InvalidPlistException(e)
-        return result
-    
-    def setCurrentOffsetToObjectNumber(self, objectNumber):
-        """
-        Public method to set the current offset.
-        
-        @param objectNumber number of the object (integer)
-        """
-        self.currentOffset = self.offsets[objectNumber]
-    
-    def readObject(self):
-        """
-        Public method to read the object data.
-        
-        @return unpickled object
-        @exception InvalidPlistException raised to indicate an invalid
-            plist file
-        """
-        result = None
-        tmp_byte = self.contents[self.currentOffset:self.currentOffset + 1]
-        marker_byte = unpack("!B", tmp_byte)[0]
-        formatNibble = (marker_byte >> 4) & 0x0f
-        extra = marker_byte & 0x0f
-        self.currentOffset += 1
-        
-        def proc_extra(extra):
-            if extra == 0b1111:
-                extra = self.readObject()
-            return extra
-        
-        # bool, null, or fill byte
-        if formatNibble == 0b0000:
-            if extra == 0b0000:
-                result = None
-            elif extra == 0b1000:
-                result = False
-            elif extra == 0b1001:
-                result = True
-            elif extra == 0b1111:
-                pass  # fill byte
-            else:
-                raise InvalidPlistException(
-                    "Invalid object found at offset: {0}".format(
-                        self.currentOffset - 1))
-        # int
-        elif formatNibble == 0b0001:
-            extra = proc_extra(extra)
-            result = self.readInteger(pow(2, extra))
-        # real
-        elif formatNibble == 0b0010:
-            extra = proc_extra(extra)
-            result = self.readReal(extra)
-        # date
-        elif formatNibble == 0b0011 and extra == 0b0011:
-            result = self.readDate()
-        # data
-        elif formatNibble == 0b0100:
-            extra = proc_extra(extra)
-            result = self.readData(extra)
-        # ascii string
-        elif formatNibble == 0b0101:
-            extra = proc_extra(extra)
-            result = self.readAsciiString(extra)
-        # Unicode string
-        elif formatNibble == 0b0110:
-            extra = proc_extra(extra)
-            result = self.readUnicode(extra)
-        # uid
-        elif formatNibble == 0b1000:
-            result = self.readUid(extra)
-        # array
-        elif formatNibble == 0b1010:
-            extra = proc_extra(extra)
-            result = self.readArray(extra)
-        # set
-        elif formatNibble == 0b1100:
-            extra = proc_extra(extra)
-            result = set(self.readArray(extra))
-        # dict
-        elif formatNibble == 0b1101:
-            extra = proc_extra(extra)
-            result = self.readDict(extra)
-        else:
-            raise InvalidPlistException(
-                "Invalid object found: {{format: {0}, extra: {1}}}".format(
-                    bin(formatNibble), bin(extra)))
-        return result
-    
-    def readInteger(self, length):
-        """
-        Public method to read an Integer object.
-        
-        @param length length of the object (integer)
-        @return integer object
-        """
-        result = 0
-        original_offset = self.currentOffset
-        data = self.contents[self.currentOffset:self.currentOffset + length]
-        result = self.getSizedInteger(data, length)
-        self.currentOffset = original_offset + length
-        return result
-    
-    def readReal(self, length):
-        """
-        Public method to read a Real object.
-        
-        @param length length of the object (integer)
-        @return float object
-        @exception InvalidPlistException raised to indicate an invalid
-            plist file
-        """
-        result = 0.0
-        to_read = pow(2, length)
-        data = self.contents[self.currentOffset:self.currentOffset + to_read]
-        if length == 2:  # 4 bytes
-            result = unpack('>f', data)[0]
-        elif length == 3:  # 8 bytes
-            result = unpack('>d', data)[0]
-        else:
-            raise InvalidPlistException(
-                "Unknown real of length {0} bytes".format(to_read))
-        return result
-    
-    def readRefs(self, count):
-        """
-        Public method to read References.
-        
-        @param count amount of the references (integer)
-        @return list of references (list of integers)
-        """
-        refs = []
-        i = 0
-        while i < count:
-            fragment = self.contents[
-                self.currentOffset:
-                self.currentOffset + self.trailer.objectRefSize]
-            ref = self.getSizedInteger(fragment, len(fragment))
-            refs.append(ref)
-            self.currentOffset += self.trailer.objectRefSize
-            i += 1
-        return refs
-    
-    def readArray(self, count):
-        """
-        Public method to read an Array object.
-        
-        @param count number of array elements (integer)
-        @return list of unpickled objects
-        """
-        result = []
-        values = self.readRefs(count)
-        i = 0
-        while i < len(values):
-            self.setCurrentOffsetToObjectNumber(values[i])
-            value = self.readObject()
-            result.append(value)
-            i += 1
-        return result
-    
-    def readDict(self, count):
-        """
-        Public method to read a Dictionary object.
-        
-        @param count number of dictionary elements (integer)
-        @return dictionary of unpickled objects
-        """
-        result = {}
-        keys = self.readRefs(count)
-        values = self.readRefs(count)
-        i = 0
-        while i < len(keys):
-            self.setCurrentOffsetToObjectNumber(keys[i])
-            key = self.readObject()
-            self.setCurrentOffsetToObjectNumber(values[i])
-            value = self.readObject()
-            result[key] = value
-            i += 1
-        return result
-    
-    def readAsciiString(self, length):
-        """
-        Public method to read an ASCII encoded string.
-        
-        @param length length of the string (integer)
-        @return ASCII encoded string
-        """
-        result = str(unpack(
-            "!{0}s".format(length),
-            self.contents[self.currentOffset:self.currentOffset + length])[0],
-            encoding="ascii")
-        self.currentOffset += length
-        return result
-    
-    def readUnicode(self, length):
-        """
-        Public method to read an Unicode encoded string.
-        
-        @param length length of the string (integer)
-        @return unicode encoded string
-        """
-        actual_length = length * 2
-        data = self.contents[
-            self.currentOffset:self.currentOffset + actual_length]
-        self.currentOffset += actual_length
-        return data.decode('utf_16_be')
-    
-    def readDate(self):
-        """
-        Public method to read a date.
-        
-        @return date object (datetime.datetime)
-        """
-        global apple_reference_date_offset
-        result = unpack(
-            ">d",
-            self.contents[self.currentOffset:self.currentOffset + 8])[0]
-        result = datetime.datetime.utcfromtimestamp(
-            result + apple_reference_date_offset)
-        self.currentOffset += 8
-        return result
-    
-    def readData(self, length):
-        """
-        Public method to read some bytes.
-        
-        @param length number of bytes to read (integer)
-        @return Data object
-        """
-        result = self.contents[self.currentOffset:self.currentOffset + length]
-        self.currentOffset += length
-        return Data(result)
-    
-    def readUid(self, length):
-        """
-        Public method to read a UID.
-        
-        @param length length of the UID (integer)
-        @return Uid object
-        """
-        return Uid(self.readInteger(length + 1))
-    
-    def getSizedInteger(self, data, length):
-        """
-        Public method to read an integer of a specific size.
-        
-        @param data data to extract the integer from (bytes)
-        @param length length of the integer (integer)
-        @return read integer (integer)
-        @exception InvalidPlistException raised to indicate an invalid
-            plist file
-        """
-        result = 0
-        # 1, 2, and 4 byte integers are unsigned
-        if length == 1:
-            result = unpack('>B', data)[0]
-        elif length == 2:
-            result = unpack('>H', data)[0]
-        elif length == 4:
-            result = unpack('>L', data)[0]
-        elif length == 8:
-            result = unpack('>q', data)[0]
-        else:
-            raise InvalidPlistException(
-                "Encountered integer longer than 8 bytes.")
-        return result
-
-
-class HashableWrapper(object):
-    """
-    Class wrapping a hashable value.
-    """
-    def __init__(self, value):
-        """
-        Constructor
-        
-        @param value object value
-        """
-        self.value = value
-
-    def __repr__(self):
-        """
-        Special method to generate a representation of the object.
-        
-        @return object representation (string)
-        """
-        return "<HashableWrapper: {0}>".format([self.value])
-
-
-class BoolWrapper(object):
-    """
-    Class wrapping a boolean value.
-    """
-    def __init__(self, value):
-        """
-        Constructor
-        
-        @param value object value (boolean)
-        """
-        self.value = value
-
-    def __repr__(self):
-        """
-        Special method to generate a representation of the object.
-        
-        @return object representation (string)
-        """
-        return "<BoolWrapper: {0}>".format(self.value)
-
-
-class PlistWriter(object):
-    """
-    Class implementing the plist writer.
-    """
-    header = b'bplist00bybiplist1.0'
-    file = None
-    byteCounts = None
-    trailer = None
-    computedUniques = None
-    writtenReferences = None
-    referencePositions = None
-    wrappedTrue = None
-    wrappedFalse = None
-    
-    def __init__(self, file):
-        """
-        Constructor
-        
-        @param file file to write the plist data to (file object)
-        """
-        self.reset()
-        self.file = file
-        self.wrappedTrue = BoolWrapper(True)
-        self.wrappedFalse = BoolWrapper(False)
-
-    def reset(self):
-        """
-        Public method to reset the instance object.
-        """
-        self.byteCounts = PlistByteCounts(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
-        self.trailer = PlistTrailer(0, 0, 0, 0, 0)
-        
-        # A set of all the uniques which have been computed.
-        self.computedUniques = set()
-        # A list of all the uniques which have been written.
-        self.writtenReferences = {}
-        # A dict of the positions of the written uniques.
-        self.referencePositions = {}
-        
-    def positionOfObjectReference(self, obj):
-        """
-        Public method to get the position of an object.
-        
-        If the given object has been written already, return its
-        position in the offset table. Otherwise, return None.
-        
-        @param obj object
-        @return position of the object (integer)
-        """
-        return self.writtenReferences.get(obj)
-        
-    def writeRoot(self, root):
-        """
-        Public method to write an object to a plist file.
-        
-        Strategy is:
-        <ul>
-        <li>write header</li>
-        <li>wrap root object so everything is hashable</li>
-        <li>compute size of objects which will be written
-          <ul>
-          <li>need to do this in order to know how large the object refs
-            will be in the list/dict/set reference lists</li>
-        </ul></li>
-        <li>write objects
-          <ul>
-          <li>keep objects in writtenReferences</li>
-          <li>keep positions of object references in referencePositions</li>
-          <li>write object references with the length computed previously</li>
-        </ul></li>
-        <li>computer object reference length</li>
-        <li>write object reference positions</li>
-        <li>write trailer</li>
-        </ul>
-        
-        @param root reference to the object to be written
-        """
-        output = self.header
-        wrapped_root = self.wrapRoot(root)
-        should_reference_root = True
-        self.computeOffsets(
-            wrapped_root, asReference=should_reference_root, isRoot=True)
-        self.trailer = self.trailer._replace(
-            **{'objectRefSize': self.intSize(len(self.computedUniques))})
-        (_, output) = self.writeObjectReference(wrapped_root, output)
-        output = self.writeObject(
-            wrapped_root, output, setReferencePosition=True)
-        
-        # output size at this point is an upper bound on how big the
-        # object reference offsets need to be.
-        self.trailer = self.trailer._replace(**{
-            'offsetSize': self.intSize(len(output)),
-            'offsetCount': len(self.computedUniques),
-            'offsetTableOffset': len(output),
-            'topLevelObjectNumber': 0
-        })
-        
-        output = self.writeOffsetTable(output)
-        output += pack('!xxxxxxBBQQQ', *self.trailer)
-        self.file.write(output)
-    
-    def wrapRoot(self, root):
-        """
-        Public method to generate object wrappers.
-        
-        @param root object to be wrapped
-        @return wrapped object
-        """
-        if isinstance(root, bool):
-            if root is True:
-                return self.wrappedTrue
-            else:
-                return self.wrappedFalse
-        elif isinstance(root, set):
-            n = set()
-            for value in root:
-                n.add(self.wrapRoot(value))
-            return HashableWrapper(n)
-        elif isinstance(root, dict):
-            n = {}
-            for key, value in root.items():
-                n[self.wrapRoot(key)] = self.wrapRoot(value)
-            return HashableWrapper(n)
-        elif isinstance(root, list):
-            n = []
-            for value in root:
-                n.append(self.wrapRoot(value))
-            return HashableWrapper(n)
-        elif isinstance(root, tuple):
-            n = tuple(self.wrapRoot(value) for value in root)
-            return HashableWrapper(n)
-        else:
-            return root
-
-    def incrementByteCount(self, field, incr=1):
-        """
-        Public method to increment the byte count.
-        
-        @param field field to evaluate
-        @param incr byte count increment (integer)
-        """
-        self.byteCounts = self.byteCounts._replace(
-            **{field: self.byteCounts.__getattribute__(field) + incr})
-
-    def __checkKey(self, key):
-        """
-        Private method to check the validity of a key.
-        
-        @param key key to be checked
-        @exception InvalidPlistException raised to indicate an invalid
-            plist file
-        """
-        if key is None:
-            raise InvalidPlistException(
-                'Dictionary keys cannot be null in plists.')
-        elif isinstance(key, Data):
-            raise InvalidPlistException(
-                'Data cannot be dictionary keys in plists.')
-        elif not isinstance(key, str):
-            raise InvalidPlistException('Keys must be strings.')
-    
-    def __processSize(self, size):
-        """
-        Private method to process a size.
-        
-        @param size size value to be processed (int)
-        @return processed size (int)
-        """
-        if size > 0b1110:
-            size += self.intSize(size)
-        return size
-    
-    def computeOffsets(self, obj, asReference=False, isRoot=False):
-        """
-        Public method to compute offsets of an object.
-        
-        @param obj plist object
-        @param asReference flag indicating offsets as references (boolean)
-        @param isRoot flag indicating a root object (boolean)
-        @exception InvalidPlistException raised to indicate an invalid
-            plist file
-        """
-        # If this should be a reference, then we keep a record of it in the
-        # uniques table.
-        if asReference:
-            if obj in self.computedUniques:
-                return
-            else:
-                self.computedUniques.add(obj)
-        
-        if obj is None:
-            self.incrementByteCount('nullBytes')
-        elif isinstance(obj, BoolWrapper):
-            self.incrementByteCount('boolBytes')
-        elif isinstance(obj, Uid):
-            size = self.intSize(obj)
-            self.incrementByteCount('uidBytes', incr=1 + size)
-        elif isinstance(obj, int):
-            size = self.intSize(obj)
-            self.incrementByteCount('intBytes', incr=1 + size)
-        elif isinstance(obj, (float)):
-            size = self.realSize(obj)
-            self.incrementByteCount('realBytes', incr=1 + size)
-        elif isinstance(obj, datetime.datetime):
-            self.incrementByteCount('dateBytes', incr=2)
-        elif isinstance(obj, Data):
-            size = self.__processSize(len(obj))
-            self.incrementByteCount('dataBytes', incr=1 + size)
-        elif isinstance(obj, str):
-            size = self.__processSize(len(obj))
-            self.incrementByteCount('stringBytes', incr=1 + size)
-        elif isinstance(obj, HashableWrapper):
-            obj = obj.value
-            if isinstance(obj, set):
-                size = self.__processSize(len(obj))
-                self.incrementByteCount('setBytes', incr=1 + size)
-                for value in obj:
-                    self.computeOffsets(value, asReference=True)
-            elif isinstance(obj, (list, tuple)):
-                size = self.__processSize(len(obj))
-                self.incrementByteCount('arrayBytes', incr=1 + size)
-                for value in obj:
-                    self.computeOffsets(value, asReference=True)
-            elif isinstance(obj, dict):
-                size = self.__processSize(len(obj))
-                self.incrementByteCount('dictBytes', incr=1 + size)
-                for key, value in obj.items():
-                    self.__checkKey(key)
-                    self.computeOffsets(key, asReference=True)
-                    self.computeOffsets(value, asReference=True)
-        else:
-            raise InvalidPlistException("Unknown object type.")
-
-    def writeObjectReference(self, obj, output):
-        """
-        Public method to write an object reference.
-        
-        Tries to write an object reference, adding it to the references
-        table. Does not write the actual object bytes or set the reference
-        position. Returns a tuple of whether the object was a new reference
-        (True if it was, False if it already was in the reference table)
-        and the new output.
-        
-        @param obj object to be written
-        @param output output stream to append the object to
-        @return flag indicating a new reference and the new output
-        """
-        position = self.positionOfObjectReference(obj)
-        if position is None:
-            self.writtenReferences[obj] = len(self.writtenReferences)
-            output += self.binaryInt(len(self.writtenReferences) - 1,
-                                     bytes=self.trailer.objectRefSize)
-            return (True, output)
-        else:
-            output += self.binaryInt(
-                position, bytes=self.trailer.objectRefSize)
-            return (False, output)
-
-    def writeObject(self, obj, output, setReferencePosition=False):
-        """
-        Public method to serialize the given object to the output.
-        
-        @param obj object to be serialized
-        @param output output to be serialized to (bytes)
-        @param setReferencePosition flag indicating, that the reference
-            position the object was written to shall be recorded (boolean)
-        @return new output
-        """
-        def proc_variable_length(formatNibble, length):
-            result = ''
-            if length > 0b1110:
-                result += pack('!B', (formatNibble << 4) | 0b1111)
-                result = self.writeObject(length, result)
-            else:
-                result += pack('!B', (formatNibble << 4) | length)
-            return result
-        
-        if setReferencePosition:
-            self.referencePositions[obj] = len(output)
-        
-        if obj is None:
-            output += pack('!B', 0b00000000)
-        elif isinstance(obj, BoolWrapper):
-            if obj.value is False:
-                output += pack('!B', 0b00001000)
-            else:
-                output += pack('!B', 0b00001001)
-        elif isinstance(obj, Uid):
-            size = self.intSize(obj)
-            output += pack('!B', (0b1000 << 4) | size - 1)
-            output += self.binaryInt(obj)
-        elif isinstance(obj, int):
-            length = self.intSize(obj)
-            root = math.log(length, 2)
-            output += pack('!B', (0b0001 << 4) | int(root))
-            output += self.binaryInt(obj)
-        elif isinstance(obj, float):
-            # just use doubles
-            output += pack('!B', (0b0010 << 4) | 3)
-            output += self.binaryReal(obj)
-        elif isinstance(obj, datetime.datetime):
-            timestamp = calendar.timegm(obj.utctimetuple())
-            timestamp -= apple_reference_date_offset
-            output += pack('!B', 0b00110011)
-            output += pack('!d', float(timestamp))
-        elif isinstance(obj, Data):
-            output += proc_variable_length(0b0100, len(obj))
-            output += obj
-        elif isinstance(obj, str):
-            length = obj.encode('utf_16_be')
-            output += proc_variable_length(0b0110, len(length) / 2)
-            output += length
-        elif isinstance(obj, HashableWrapper):
-            obj = obj.value
-            if isinstance(obj, (set, list, tuple)):
-                if isinstance(obj, set):
-                    output += proc_variable_length(0b1100, len(obj))
-                else:
-                    output += proc_variable_length(0b1010, len(obj))
-            
-                objectsToWrite = []
-                for objRef in obj:
-                    (isNew, output) = self.writeObjectReference(objRef, output)
-                    if isNew:
-                        objectsToWrite.append(objRef)
-                for objRef in objectsToWrite:
-                    output = self.writeObject(
-                        objRef, output, setReferencePosition=True)
-            elif isinstance(obj, dict):
-                output += proc_variable_length(0b1101, len(obj))
-                keys = []
-                values = []
-                objectsToWrite = []
-                for key, value in obj.items():
-                    keys.append(key)
-                    values.append(value)
-                for key in keys:
-                    (isNew, output) = self.writeObjectReference(key, output)
-                    if isNew:
-                        objectsToWrite.append(key)
-                for value in values:
-                    (isNew, output) = self.writeObjectReference(value, output)
-                    if isNew:
-                        objectsToWrite.append(value)
-                for objRef in objectsToWrite:
-                    output = self.writeObject(
-                        objRef, output, setReferencePosition=True)
-        return output
-    
-    def writeOffsetTable(self, output):
-        """
-        Public method to write all of the object reference offsets.
-        
-        @param output current output (bytes)
-        @return new output (bytes)
-        @exception InvalidPlistException raised to indicate an invalid
-            plist file
-        """
-        all_positions = []
-        writtenReferences = list(self.writtenReferences.items())
-        writtenReferences.sort(key=lambda x: x[1])
-        for obj, _order in writtenReferences:
-            position = self.referencePositions.get(obj)
-            if position is None:
-                raise InvalidPlistException(
-                    "Error while writing offsets table. Object not found. {0}"
-                    .format(obj))
-            output += self.binaryInt(position, self.trailer.offsetSize)
-            all_positions.append(position)
-        return output
-    
-    def binaryReal(self, obj):
-        """
-        Public method to pack a real object.
-        
-        @param obj real to be packed
-        @return serialized object (bytes)
-        """
-        # just use doubles
-        result = pack('>d', obj)
-        return result
-    
-    def binaryInt(self, obj, length=None):
-        """
-        Public method to pack an integer object.
-        
-        @param obj integer to be packed
-        @param length length the integer should be packed into (integer)
-        @return serialized object (bytes)
-        @exception InvalidPlistException raised to indicate an invalid
-            plist file
-        """
-        result = ''
-        if length is None:
-            length = self.intSize(obj)
-        if length == 1:
-            result += pack('>B', obj)
-        elif length == 2:
-            result += pack('>H', obj)
-        elif length == 4:
-            result += pack('>L', obj)
-        elif length == 8:
-            result += pack('>q', obj)
-        else:
-            raise InvalidPlistException(
-                "Core Foundation can't handle integers with size greater"
-                " than 8 bytes.")
-        return result
-    
-    def intSize(self, obj):
-        """
-        Public method to determine the number of bytes necessary to store the
-        given integer.
-        
-        @param obj integer object
-        @return number of bytes required (integer)
-        @exception InvalidPlistException raised to indicate an invalid
-            plist file
-        """
-        # SIGNED
-        if obj < 0:  # Signed integer, always 8 bytes
-            return 8
-        # UNSIGNED
-        elif obj <= 0xFF:  # 1 byte
-            return 1
-        elif obj <= 0xFFFF:  # 2 bytes
-            return 2
-        elif obj <= 0xFFFFFFFF:  # 4 bytes
-            return 4
-        # SIGNED
-        # 0x7FFFFFFFFFFFFFFF is the max.
-        elif obj <= 0x7FFFFFFFFFFFFFFF:  # 8 bytes
-            return 8
-        else:
-            raise InvalidPlistException(
-                "Core Foundation can't handle integers with size greater"
-                " than 8 bytes.")
-    
-    def realSize(self, obj):
-        """
-        Public method to determine the number of bytes necessary to store the
-        given real.
-        
-        @param obj real object
-        @return number of bytes required (integer)
-        """
-        return 8
--- a/eric6/VirtualEnv/VirtualenvInterpreterSelectionDialog.py	Sat Aug 01 10:39:12 2020 +0200
+++ b/eric6/VirtualEnv/VirtualenvInterpreterSelectionDialog.py	Wed Sep 02 18:06:20 2020 +0200
@@ -76,4 +76,4 @@
         @return path of the selected Python interpreter
         @rtype str
         """
-        return self.pythonExecPicker.text(),
+        return self.pythonExecPicker.text()
--- a/eric6/VirtualEnv/VirtualenvManagerDialog.py	Sat Aug 01 10:39:12 2020 +0200
+++ b/eric6/VirtualEnv/VirtualenvManagerDialog.py	Wed Sep 02 18:06:20 2020 +0200
@@ -20,7 +20,6 @@
     Class implementing a dialog to manage the list of defined virtual
     environments.
     """
-    PythonVariantRole = Qt.UserRole
     IsGlobalRole = Qt.UserRole + 1
     IsCondaRole = Qt.UserRole + 2
     IsRemoteRole = Qt.UserRole + 3
@@ -124,7 +123,6 @@
         dlg = VirtualenvAddEditDialog(
             self.__manager, selectedItem.text(0),
             selectedItem.text(1), selectedItem.text(2),
-            selectedItem.data(0, VirtualenvManagerDialog.PythonVariantRole),
             selectedItem.data(0, VirtualenvManagerDialog.IsGlobalRole),
             selectedItem.data(0, VirtualenvManagerDialog.IsCondaRole),
             selectedItem.data(0, VirtualenvManagerDialog.IsRemoteRole),
@@ -234,8 +232,6 @@
                 environments[venvName]["path"],
                 environments[venvName]["interpreter"],
             ])
-            itm.setData(0, VirtualenvManagerDialog.PythonVariantRole,
-                        environments[venvName]["variant"])
             itm.setData(0, VirtualenvManagerDialog.IsGlobalRole,
                         environments[venvName]["is_global"])
             itm.setData(0, VirtualenvManagerDialog.IsCondaRole,
--- a/eric6/VirtualEnv/VirtualenvManagerDialog.ui	Sat Aug 01 10:39:12 2020 +0200
+++ b/eric6/VirtualEnv/VirtualenvManagerDialog.ui	Wed Sep 02 18:06:20 2020 +0200
@@ -77,6 +77,9 @@
        <property name="text">
         <string>New...</string>
        </property>
+       <property name="autoDefault">
+        <bool>false</bool>
+       </property>
       </widget>
      </item>
      <item>
@@ -94,9 +97,6 @@
        <property name="text">
         <string>Edit...</string>
        </property>
-       <property name="autoDefault">
-        <bool>false</bool>
-       </property>
       </widget>
      </item>
      <item>
--- a/eric6/WebBrowser/Bookmarks/BookmarksImporters/SafariImporter.py	Sat Aug 01 10:39:12 2020 +0200
+++ b/eric6/WebBrowser/Bookmarks/BookmarksImporters/SafariImporter.py	Wed Sep 02 18:06:20 2020 +0200
@@ -7,8 +7,8 @@
 Module implementing an importer for Apple Safari bookmarks.
 """
 
-
 import os
+import plistlib
 
 from PyQt5.QtCore import QCoreApplication, QDate, Qt
 
@@ -17,8 +17,6 @@
 import UI.PixmapCache
 import Globals
 
-from Utilities import binplistlib
-
 
 def getImporterInfo(sourceId):
     """
@@ -102,8 +100,10 @@
         @return imported bookmarks (BookmarkNode)
         """
         try:
-            bookmarksDict = binplistlib.readPlist(self.__fileName)
-        except binplistlib.InvalidPlistException as err:
+            f = open(self.__fileName, "rb")
+            bookmarksDict = plistlib.load(f)
+            f.close()
+        except (plistlib.InvalidFileException, EnvironmentError) as err:
             self._error = True
             self._errorString = self.tr(
                 "Bookmarks file cannot be read.\nReason: {0}".format(str(err)))
--- a/eric6/i18n/eric6_cs.ts	Sat Aug 01 10:39:12 2020 +0200
+++ b/eric6/i18n/eric6_cs.ts	Wed Sep 02 18:06:20 2020 +0200
@@ -1117,72 +1117,72 @@
 <context>
     <name>AnnotationsChecker</name>
     <message>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="808"/>
+        <source>missing type annotation for function argument &apos;{0}&apos;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
         <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="811"/>
-        <source>missing type annotation for function argument &apos;{0}&apos;</source>
+        <source>missing type annotation for &apos;*{0}&apos;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="814"/>
-        <source>missing type annotation for &apos;*{0}&apos;</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="817"/>
         <source>missing type annotation for &apos;**{0}&apos;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="823"/>
+        <source>missing return type annotation for public function</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
         <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="826"/>
-        <source>missing return type annotation for public function</source>
+        <source>missing return type annotation for protected function</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="829"/>
-        <source>missing return type annotation for protected function</source>
+        <source>missing return type annotation for private function</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="832"/>
-        <source>missing return type annotation for private function</source>
+        <source>missing return type annotation for special method</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="835"/>
-        <source>missing return type annotation for special method</source>
+        <source>missing return type annotation for staticmethod</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="838"/>
-        <source>missing return type annotation for staticmethod</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="841"/>
         <source>missing return type annotation for classmethod</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="853"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="850"/>
         <source>{0}: {1}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="817"/>
+        <source>missing type annotation for &apos;self&apos; in method</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
         <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="820"/>
-        <source>missing type annotation for &apos;self&apos; in method</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="823"/>
         <source>missing type annotation for &apos;cls&apos; in classmethod</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="845"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="842"/>
         <source>type annotation coverage of {0}% is too low</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="849"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="846"/>
         <source>type annotation is too complex ({0} &gt; {1})</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1195,37 +1195,37 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Graphics/ApplicationDiagramBuilder.py" line="68"/>
+        <location filename="../Graphics/ApplicationDiagramBuilder.py" line="67"/>
         <source>Parsing modules...</source>
         <translation type="unfinished">Parsování modulů...</translation>
     </message>
     <message>
-        <location filename="../Graphics/ApplicationDiagramBuilder.py" line="203"/>
+        <location filename="../Graphics/ApplicationDiagramBuilder.py" line="202"/>
         <source>&lt;&lt;Application&gt;&gt;</source>
         <translation type="unfinished">&lt;&lt;Aplikace&gt;&gt;</translation>
     </message>
     <message>
-        <location filename="../Graphics/ApplicationDiagramBuilder.py" line="205"/>
+        <location filename="../Graphics/ApplicationDiagramBuilder.py" line="204"/>
         <source>&lt;&lt;Others&gt;&gt;</source>
         <translation type="unfinished">&lt;&lt;Ostatní&gt;&gt;</translation>
     </message>
     <message>
-        <location filename="../Graphics/ApplicationDiagramBuilder.py" line="294"/>
+        <location filename="../Graphics/ApplicationDiagramBuilder.py" line="293"/>
         <source>Load Diagram</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Graphics/ApplicationDiagramBuilder.py" line="294"/>
+        <location filename="../Graphics/ApplicationDiagramBuilder.py" line="293"/>
         <source>&lt;p&gt;The diagram belongs to the project &lt;b&gt;{0}&lt;/b&gt;. Shall this project be opened?&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Graphics/ApplicationDiagramBuilder.py" line="68"/>
+        <location filename="../Graphics/ApplicationDiagramBuilder.py" line="67"/>
         <source>%v/%m Modules</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Graphics/ApplicationDiagramBuilder.py" line="71"/>
+        <location filename="../Graphics/ApplicationDiagramBuilder.py" line="70"/>
         <source>Application Diagram</source>
         <translation type="unfinished">Diagram aplikace</translation>
     </message>
@@ -2297,7 +2297,7 @@
         <translation>Prohlížeč souborů</translation>
     </message>
     <message>
-        <location filename="../UI/Browser.py" line="245"/>
+        <location filename="../UI/Browser.py" line="249"/>
         <source>Open</source>
         <translation>Otevřít</translation>
     </message>
@@ -2307,27 +2307,27 @@
         <translation>Spustit unittest...</translation>
     </message>
     <message>
-        <location filename="../UI/Browser.py" line="290"/>
+        <location filename="../UI/Browser.py" line="294"/>
         <source>New toplevel directory...</source>
         <translation>Nový adresář toplevel...</translation>
     </message>
     <message>
-        <location filename="../UI/Browser.py" line="253"/>
+        <location filename="../UI/Browser.py" line="257"/>
         <source>Add as toplevel directory</source>
         <translation>Přidat jako toplevel adresář</translation>
     </message>
     <message>
-        <location filename="../UI/Browser.py" line="256"/>
+        <location filename="../UI/Browser.py" line="260"/>
         <source>Remove from toplevel</source>
         <translation>Odebrat z toplevelu</translation>
     </message>
     <message>
-        <location filename="../UI/Browser.py" line="264"/>
+        <location filename="../UI/Browser.py" line="268"/>
         <source>Find in this directory</source>
         <translation>Hledat v tomto adresáři</translation>
     </message>
     <message>
-        <location filename="../UI/Browser.py" line="570"/>
+        <location filename="../UI/Browser.py" line="582"/>
         <source>New toplevel directory</source>
         <translation>Nový toplevel adresář</translation>
     </message>
@@ -2342,27 +2342,27 @@
         <translation type="obsolete">Konfigurovat...</translation>
     </message>
     <message>
-        <location filename="../UI/Browser.py" line="231"/>
+        <location filename="../UI/Browser.py" line="235"/>
         <source>Open in Icon Editor</source>
         <translation>Otevřit v editoru ikon</translation>
     </message>
     <message>
-        <location filename="../UI/Browser.py" line="271"/>
+        <location filename="../UI/Browser.py" line="275"/>
         <source>Copy Path to Clipboard</source>
         <translation>Kopírovat cestu do schránky</translation>
     </message>
     <message>
-        <location filename="../UI/Browser.py" line="260"/>
+        <location filename="../UI/Browser.py" line="264"/>
         <source>Refresh directory</source>
         <translation>Obnovit složku</translation>
     </message>
     <message>
-        <location filename="../UI/Browser.py" line="276"/>
+        <location filename="../UI/Browser.py" line="280"/>
         <source>Goto</source>
         <translation type="unfinished">Jít na</translation>
     </message>
     <message>
-        <location filename="../UI/Browser.py" line="381"/>
+        <location filename="../UI/Browser.py" line="385"/>
         <source>Line {0}</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2372,65 +2372,70 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/Browser.py" line="501"/>
+        <location filename="../UI/Browser.py" line="505"/>
         <source>Show Mime-Type</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/Browser.py" line="474"/>
+        <location filename="../UI/Browser.py" line="478"/>
         <source>The mime type of the file could not be determined.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/Browser.py" line="492"/>
+        <location filename="../UI/Browser.py" line="496"/>
         <source>The file has the mime type &lt;b&gt;{0}&lt;/b&gt;.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/Browser.py" line="501"/>
+        <location filename="../UI/Browser.py" line="505"/>
         <source>The file has the mime type &lt;b&gt;{0}&lt;/b&gt;.&lt;br/&gt; Shall it be added to the list of text mime types?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/Browser.py" line="228"/>
+        <location filename="../UI/Browser.py" line="232"/>
         <source>Open in Hex Editor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/Browser.py" line="267"/>
+        <location filename="../UI/Browser.py" line="271"/>
         <source>Find &amp;&amp; Replace in this directory</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../UI/Browser.py" line="220"/>
+        <source>Refresh Source File</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>BrowserModel</name>
     <message>
-        <location filename="../UI/BrowserModel.py" line="63"/>
+        <location filename="../UI/BrowserModel.py" line="65"/>
         <source>Name</source>
         <translation>Jméno</translation>
     </message>
     <message>
-        <location filename="../UI/BrowserModel.py" line="731"/>
+        <location filename="../UI/BrowserModel.py" line="774"/>
         <source>Attributes</source>
         <translation>Atributy</translation>
     </message>
     <message>
-        <location filename="../UI/BrowserModel.py" line="661"/>
+        <location filename="../UI/BrowserModel.py" line="663"/>
         <source>Globals</source>
         <translation>Globální</translation>
     </message>
     <message>
-        <location filename="../UI/BrowserModel.py" line="655"/>
+        <location filename="../UI/BrowserModel.py" line="657"/>
         <source>Coding: {0}</source>
         <translation>Kódování: {0}</translation>
     </message>
     <message>
-        <location filename="../UI/BrowserModel.py" line="741"/>
+        <location filename="../UI/BrowserModel.py" line="784"/>
         <source>Class Attributes</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/BrowserModel.py" line="667"/>
+        <location filename="../UI/BrowserModel.py" line="669"/>
         <source>Imports</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3393,7 +3398,7 @@
 <context>
     <name>CodeStyleChecker</name>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="1133"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="1130"/>
         <source>No message defined for code &apos;{0}&apos;.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3596,7 +3601,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="1016"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="1015"/>
         <source>No issues found.</source>
         <translation type="unfinished">Žádné problémy nenalezeny.</translation>
     </message>
@@ -3621,12 +3626,12 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="942"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="941"/>
         <source>{0} (ignored)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="835"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="834"/>
         <source>Preparing files...</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3641,7 +3646,7 @@
         <translation type="unfinished">Chyby</translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="874"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="873"/>
         <source>Transferring data...</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3746,7 +3751,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="1019"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="1018"/>
         <source>No files found (check your ignore list).</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4105,142 +4110,142 @@
 <context>
     <name>CodeStyleFixer</name>
     <message>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="858"/>
+        <source>Triple single quotes converted to triple double quotes.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
         <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="861"/>
-        <source>Triple single quotes converted to triple double quotes.</source>
+        <source>Introductory quotes corrected to be {0}&quot;&quot;&quot;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="864"/>
-        <source>Introductory quotes corrected to be {0}&quot;&quot;&quot;</source>
+        <source>Single line docstring put on one line.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="867"/>
-        <source>Single line docstring put on one line.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="870"/>
         <source>Period added to summary line.</source>
         <translation type="un