Merged with default branch to prepare new release. maintenance release-18.04

Mon, 02 Apr 2018 12:04:18 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Mon, 02 Apr 2018 12:04:18 +0200
branch
maintenance
changeset 6206
a02b03b7bfec
parent 6205
ad8ed15f90e5 (current diff)
parent 6200
89f2dc1bcfcd (diff)
child 6207
0a74c1efab70

Merged with default branch to prepare new release.

APIs/Python3/eric6.api file | annotate | diff | comparison | revisions
DebugClients/Python/ThreadExtension.py file | annotate | diff | comparison | revisions
Documentation/Help/source.qch file | annotate | diff | comparison | revisions
Documentation/Help/source.qhp file | annotate | diff | comparison | revisions
Documentation/Source/eric6.QScintilla.Editor.html file | annotate | diff | comparison | revisions
Helpviewer/HelpBrowserWV.py file | annotate | diff | comparison | revisions
Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py file | annotate | diff | comparison | revisions
Preferences/ConfigurationDialog.py file | annotate | diff | comparison | revisions
Preferences/__init__.py file | annotate | diff | comparison | revisions
QScintilla/Editor.py file | annotate | diff | comparison | revisions
UI/UserInterface.py file | annotate | diff | comparison | revisions
changelog file | annotate | diff | comparison | revisions
eric6.e4p file | annotate | diff | comparison | revisions
i18n/eric6_cs.ts file | annotate | diff | comparison | revisions
i18n/eric6_de.qm file | annotate | diff | comparison | revisions
i18n/eric6_de.ts file | annotate | diff | comparison | revisions
i18n/eric6_empty.ts file | annotate | diff | comparison | revisions
i18n/eric6_en.ts file | annotate | diff | comparison | revisions
i18n/eric6_es.qm file | annotate | diff | comparison | revisions
i18n/eric6_es.ts file | annotate | diff | comparison | revisions
i18n/eric6_fr.ts file | annotate | diff | comparison | revisions
i18n/eric6_it.ts file | annotate | diff | comparison | revisions
i18n/eric6_pt.ts file | annotate | diff | comparison | revisions
i18n/eric6_ru.qm file | annotate | diff | comparison | revisions
i18n/eric6_ru.ts file | annotate | diff | comparison | revisions
i18n/eric6_tr.ts file | annotate | diff | comparison | revisions
i18n/eric6_zh_CN.ts file | annotate | diff | comparison | revisions
--- a/APIs/Python3/eric6.api	Sun Mar 04 14:55:23 2018 +0100
+++ b/APIs/Python3/eric6.api	Mon Apr 02 12:04:18 2018 +0200
@@ -315,7 +315,9 @@
 eric6.DebugClients.Python.ThreadExtension.ThreadExtension.unlockClient?4()
 eric6.DebugClients.Python.ThreadExtension.ThreadExtension.updateThreadList?4()
 eric6.DebugClients.Python.ThreadExtension.ThreadExtension?1()
+eric6.DebugClients.Python.ThreadExtension.ThreadWrapper.timer?7
 eric6.DebugClients.Python.ThreadExtension.ThreadWrapper?1(*args, **kwargs)
+eric6.DebugClients.Python.ThreadExtension.TimerWrapper?1(interval, function, *args, **kwargs)
 eric6.DebugClients.Python.ThreadExtension._qtThreadNumber?8
 eric6.DebugClients.Python.eric6dbgstub.debugger?7
 eric6.DebugClients.Python.eric6dbgstub.ericpath?7
@@ -2391,7 +2393,7 @@
 eric6.Helpviewer.GreaseMonkey.GreaseMonkeyManager.GreaseMonkeyManager.disableScript?4(script)
 eric6.Helpviewer.GreaseMonkey.GreaseMonkeyManager.GreaseMonkeyManager.downloadScript?4(request)
 eric6.Helpviewer.GreaseMonkey.GreaseMonkeyManager.GreaseMonkeyManager.enableScript?4(script)
-eric6.Helpviewer.GreaseMonkey.GreaseMonkeyManager.GreaseMonkeyManager.pageLoadStarted?4(frame)
+eric6.Helpviewer.GreaseMonkey.GreaseMonkeyManager.GreaseMonkeyManager.pageLoadStarted?4()
 eric6.Helpviewer.GreaseMonkey.GreaseMonkeyManager.GreaseMonkeyManager.removeScript?4(script)
 eric6.Helpviewer.GreaseMonkey.GreaseMonkeyManager.GreaseMonkeyManager.requireScripts?4(urlList)
 eric6.Helpviewer.GreaseMonkey.GreaseMonkeyManager.GreaseMonkeyManager.requireScriptsDirectory?4()
@@ -4021,12 +4023,30 @@
 eric6.Plugins.CheckerPlugins.CodeStyleChecker.DocStyleChecker.DocStyleContext.ssource?4()
 eric6.Plugins.CheckerPlugins.CodeStyleChecker.DocStyleChecker.DocStyleContext.start?4()
 eric6.Plugins.CheckerPlugins.CodeStyleChecker.DocStyleChecker.DocStyleContext?1(source, startLine, contextType)
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.BugBearVisitor.NodeWindowSize?7
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.BugBearVisitor.visit?4(node)
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.BugBearVisitor.visit_Assign?4(node)
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.BugBearVisitor.visit_Attribute?4(node)
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.BugBearVisitor.visit_Call?4(node)
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.BugBearVisitor.visit_For?4(node)
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.BugBearVisitor.visit_UAdd?4(node)
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.BugBearVisitor?1()
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.LoggingVisitor.LoggingLevels?7
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.LoggingVisitor.visit_BinOp?4(node)
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.LoggingVisitor.visit_Call?4(node)
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.LoggingVisitor.visit_JoinedStr?4(node)
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.LoggingVisitor?1()
 eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.MiscellaneousChecker.BuiltinsWhiteList?7
 eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.MiscellaneousChecker.Codes?7
 eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.MiscellaneousChecker.FormatFieldRegex?7
 eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.MiscellaneousChecker.Formatter?7
 eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.MiscellaneousChecker.run?4()
 eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.MiscellaneousChecker?1(source, filename, select, ignore, expected, repeat, args)
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.NameFinder.getNames?4()
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.NameFinder.visit?4(node)
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.NameFinder.visit_Name?4(node)
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.NameFinder?1()
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.TextVisitor.visit_AsyncFunctionDef?4(node)
 eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.TextVisitor.visit_Bytes?4(node)
 eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.TextVisitor.visit_Call?4(node)
 eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.TextVisitor.visit_ClassDef?4(node)
@@ -4034,6 +4054,7 @@
 eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.TextVisitor.visit_Module?4(node)
 eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.TextVisitor.visit_Str?4(node)
 eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.TextVisitor?1()
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.composeCallPath?4(node)
 eric6.Plugins.CheckerPlugins.CodeStyleChecker.NamingStyleChecker.NamingStyleChecker.CamelcaseRegexp?7
 eric6.Plugins.CheckerPlugins.CodeStyleChecker.NamingStyleChecker.NamingStyleChecker.Codes?7
 eric6.Plugins.CheckerPlugins.CodeStyleChecker.NamingStyleChecker.NamingStyleChecker.LowercaseRegex?7
@@ -8925,6 +8946,7 @@
 eric6.QScintilla.MiniEditor.MiniEditor.setLanguage?4(filename, initTextDisplay=True, pyname="")
 eric6.QScintilla.MiniEditor.MiniEditor.setSearchIndicator?4(startPos, indicLength)
 eric6.QScintilla.MiniEditor.MiniEditor.setText?4(txt, filetype=None)
+eric6.QScintilla.MiniEditor.MiniEditor.setWindowModified?4(modified)
 eric6.QScintilla.MiniEditor.MiniEditor.showReplaceWidget?4()
 eric6.QScintilla.MiniEditor.MiniEditor.showSearchWidget?4()
 eric6.QScintilla.MiniEditor.MiniEditor.textForFind?4()
--- a/APIs/Python3/eric6.bas	Sun Mar 04 14:55:23 2018 +0100
+++ b/APIs/Python3/eric6.bas	Mon Apr 02 12:04:18 2018 +0200
@@ -64,6 +64,7 @@
 BrowserModel QAbstractItemModel
 BrowserSortFilterProxyModel QSortFilterProxyModel
 BrowserSysPathItem BrowserItem
+BugBearVisitor ast.NodeVisitor
 CallStackViewer QTreeWidget
 CallTraceViewer QWidget Ui_CallTraceViewer
 ChangeBookmarkCommand QUndoCommand
@@ -578,6 +579,7 @@
 LogViewer QWidget
 LogViewerEdit QTextEdit
 LogViewerPage ConfigurationPageBase Ui_LogViewerPage
+LoggingVisitor ast.NodeVisitor
 ManageDictionariesDialog QDialog Ui_ManageDictionariesDialog
 MarkdownProvider MarkupBase
 MasterPasswordEntryDialog QDialog Ui_MasterPasswordEntryDialog
@@ -600,6 +602,7 @@
 MultiProjectWriter XMLStreamWriterBase
 MultiValueDictResolver DictResolver
 MyMemoryEngine TranslationEngine
+NameFinder ast.NodeVisitor
 NannyNag Exception
 NavigationBar QWidget
 NavigationContainer QWidget
@@ -908,6 +911,7 @@
 TemplatesWriter XMLStreamWriterBase
 TextVisitor ast.NodeVisitor
 ThreadWrapper module.Thread
+TimerWrapper ThreadWrapper timer
 Token str
 ToolConfigurationDialog QDialog Ui_ToolConfigurationDialog
 ToolGroupConfigurationDialog QDialog Ui_ToolGroupConfigurationDialog
--- a/DataViews/CodeMetrics.py	Sun Mar 04 14:55:23 2018 +0100
+++ b/DataViews/CodeMetrics.py	Mon Apr 02 12:04:18 2018 +0200
@@ -171,7 +171,7 @@
         @param key the key to be incremented
         @param value the increment (int)
         """
-        for counterId, level, row in self.active:
+        for counterId, _level, _row in self.active:
             counters = self.counters.setdefault(counterId, {})
             counters[key] = counters.setdefault(key, 0) + value
 
--- a/DataViews/PyProfileDialog.py	Sun Mar 04 14:55:23 2018 +0100
+++ b/DataViews/PyProfileDialog.py	Mon Apr 02 12:04:18 2018 +0200
@@ -169,7 +169,7 @@
             self.resultList.setSortingEnabled(False)
             
             # now go through all the files
-            for func, (cc, nc, tt, ct, callers) in list(self.stats.items()):
+            for func, (cc, nc, tt, ct, _callers) in list(self.stats.items()):
                 if self.cancelled:
                     return
                 
--- a/DebugClients/Python/FlexCompleter.py	Sun Mar 04 14:55:23 2018 +0100
+++ b/DebugClients/Python/FlexCompleter.py	Mon Apr 02 12:04:18 2018 +0200
@@ -125,7 +125,7 @@
         @param word word to ammend (string)
         @return ammended word (string)
         """
-        if hasattr(val, '__call__'):
+        if callable(val):
             word = word + "("
         return word
 
@@ -139,13 +139,22 @@
         """
         import keyword
         matches = []
+        seen = {"__builtins__"}
         n = len(text)
         for word in keyword.kwlist:
             if word[:n] == text:
+                seen.add(word)
+                if word in {'finally', 'try'}:
+                    word = word + ':'
+                elif word not in {'False', 'None', 'True',
+                                  'break', 'continue', 'pass',
+                                  'else'}:
+                    word = word + ' '
                 matches.append(word)
         for nspace in [builtins.__dict__, self.namespace]:
             for word, val in nspace.items():
-                if word[:n] == text and word != "__builtins__":
+                if word[:n] == text and word not in seen:
+                    seen.add(word)
                     matches.append(self._callable_postfix(val, word))
         return matches
 
@@ -166,9 +175,7 @@
         """
         import re
 
-        # Another option, seems to work great. Catches things like ''.<tab>
-        m = re.match(r"(\S+(\.\w+)*)\.(\w*)", text)
-
+        m = re.match(r"(\w+(\.\w+)*)\.(\w*)", text)
         if not m:
             return
         expr, attr = m.group(1, 3)
@@ -178,27 +185,39 @@
             return []
 
         # get the content of the object, except __builtins__
-        words = dir(thisobject)
-        if "__builtins__" in words:
-            words.remove("__builtins__")
+        words = set(dir(thisobject))
+        words.discard("__builtins__")
 
         if hasattr(object, '__class__'):
-            words.append('__class__')
-            words = words + get_class_members(object.__class__)
+            words.add('__class__')
+            words.update(get_class_members(thisobject.__class__))
         matches = []
         n = len(attr)
-        for word in words:
-            try:
-                if word[:n] == attr and hasattr(thisobject, word):
-                    val = getattr(thisobject, word)
-                    word = self._callable_postfix(
-                        val, "{0}.{1}".format(expr, word))
-                    matches.append(word)
-            except Exception:
-                # some badly behaved objects pollute dir() with non-strings,
-                # which cause the completion to fail.  This way we skip the
-                # bad entries and can still continue processing the others.
-                pass
+        if attr == '':
+            noprefix = '_'
+        elif attr == '_':
+            noprefix = '__'
+        else:
+            noprefix = None
+        while True:
+            for word in words:
+                if word[:n] == attr and \
+                   not (noprefix and word[:n + 1] == noprefix):
+                    match = "{0}.{1}".format(expr, word)
+                    try:
+                        val = getattr(thisobject, word)
+                    except Exception:
+                        pass  # Include even if attribute not set
+                    else:
+                        match = self._callable_postfix(val, match)
+                    matches.append(match)
+            if matches or not noprefix:
+                break
+            if noprefix == '_':
+                noprefix = '__'
+            else:
+                noprefix = None
+        matches.sort()
         return matches
 
 
--- a/DebugClients/Python/ThreadExtension.py	Sun Mar 04 14:55:23 2018 +0100
+++ b/DebugClients/Python/ThreadExtension.py	Mon Apr 02 12:04:18 2018 +0200
@@ -321,9 +321,13 @@
                     sys.settrace(None)
             
             class ThreadWrapper(module.Thread):
-                """ Wrapper class for threading.Thread. """
-                
+                """
+                Wrapper class for threading.Thread.
+                """
                 def __init__(self, *args, **kwargs):
+                    """
+                    Constructor
+                    """
                     # Overwrite the provided run method with our own, to
                     # intercept the thread creation by threading.Thread
                     self.run = lambda s=self, run=self.run: _bootstrap(s, run)
@@ -331,6 +335,28 @@
                     super(ThreadWrapper, self).__init__(*args, **kwargs)
             
             module.Thread = ThreadWrapper
+            
+            # Special handling of threading.(_)Timer
+            if sys.version_info[0] == 2:
+                timer = module._Timer
+            else:
+                timer = module.Timer
+                
+            class TimerWrapper(timer, ThreadWrapper):
+                """
+                Wrapper class for threading.(_)Timer.
+                """
+                def __init__(self, interval, function, *args, **kwargs):
+                    """
+                    Constructor
+                    """
+                    super(TimerWrapper, self).__init__(
+                        interval, function, *args, **kwargs)
+            
+            if sys.version_info[0] == 2:
+                module._Timer = TimerWrapper
+            else:
+                module.Timer = TimerWrapper
         
         # Add hook for *.QThread
         elif (fullname in ['PyQt4.QtCore', 'PyQt5.QtCore',
@@ -375,9 +401,13 @@
                     sys.settrace(None)
         
             class QThreadWrapper(module.QThread):
-                """ Wrapper class for *.QThread. """
-                
+                """
+                Wrapper class for *.QThread.
+                """
                 def __init__(self, *args, **kwargs):
+                    """
+                    Constructor
+                    """
                     # Overwrite the provided run method with our own, to
                     # intercept the thread creation by Qt
                     self.run = lambda s=self, run=self.run: (
Binary file Documentation/Help/source.qch has changed
--- a/Documentation/Help/source.qhp	Sun Mar 04 14:55:23 2018 +0100
+++ b/Documentation/Help/source.qhp	Mon Apr 02 12:04:18 2018 +0200
@@ -2734,6 +2734,16 @@
       <keyword name="BrowserSysPathItem" id="BrowserSysPathItem" ref="eric6.UI.BrowserModel.html#BrowserSysPathItem" />
       <keyword name="BrowserSysPathItem (Constructor)" id="BrowserSysPathItem (Constructor)" ref="eric6.UI.BrowserModel.html#BrowserSysPathItem.__init__" />
       <keyword name="BrowserSysPathItem.name" id="BrowserSysPathItem.name" ref="eric6.UI.BrowserModel.html#BrowserSysPathItem.name" />
+      <keyword name="BugBearVisitor" id="BugBearVisitor" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html#BugBearVisitor" />
+      <keyword name="BugBearVisitor (Constructor)" id="BugBearVisitor (Constructor)" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html#BugBearVisitor.__init__" />
+      <keyword name="BugBearVisitor.__checkForM502" id="BugBearVisitor.__checkForM502" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html#BugBearVisitor.__checkForM502" />
+      <keyword name="BugBearVisitor.__checkForM507" id="BugBearVisitor.__checkForM507" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html#BugBearVisitor.__checkForM507" />
+      <keyword name="BugBearVisitor.visit" id="BugBearVisitor.visit" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html#BugBearVisitor.visit" />
+      <keyword name="BugBearVisitor.visit_Assign" id="BugBearVisitor.visit_Assign" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html#BugBearVisitor.visit_Assign" />
+      <keyword name="BugBearVisitor.visit_Attribute" id="BugBearVisitor.visit_Attribute" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html#BugBearVisitor.visit_Attribute" />
+      <keyword name="BugBearVisitor.visit_Call" id="BugBearVisitor.visit_Call" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html#BugBearVisitor.visit_Call" />
+      <keyword name="BugBearVisitor.visit_For" id="BugBearVisitor.visit_For" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html#BugBearVisitor.visit_For" />
+      <keyword name="BugBearVisitor.visit_UAdd" id="BugBearVisitor.visit_UAdd" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html#BugBearVisitor.visit_UAdd" />
       <keyword name="CallStackViewer" id="CallStackViewer" ref="eric6.Debugger.CallStackViewer.html#CallStackViewer" />
       <keyword name="CallStackViewer (Constructor)" id="CallStackViewer (Constructor)" ref="eric6.Debugger.CallStackViewer.html#CallStackViewer.__init__" />
       <keyword name="CallStackViewer (Module)" id="CallStackViewer (Module)" ref="eric6.Debugger.CallStackViewer.html" />
@@ -7871,13 +7881,12 @@
       <keyword name="HelpWebSearchWidget" id="HelpWebSearchWidget" ref="eric6.Helpviewer.HelpWebSearchWidget.html#HelpWebSearchWidget" />
       <keyword name="HelpWebSearchWidget (Constructor)" id="HelpWebSearchWidget (Constructor)" ref="eric6.Helpviewer.HelpWebSearchWidget.html#HelpWebSearchWidget.__init__" />
       <keyword name="HelpWebSearchWidget (Module)" id="HelpWebSearchWidget (Module)" ref="eric6.Helpviewer.HelpWebSearchWidget.html" />
-      <keyword name="HelpWebSearchWidget.__addEngineFromUrl" id="HelpWebSearchWidget.__addEngineFromUrl" ref="eric6.Helpviewer.HelpWebSearchWidget.html#HelpWebSearchWidget.__addEngineFromUrl" />
-      <keyword name="HelpWebSearchWidget.__changeCurrentEngine" id="HelpWebSearchWidget.__changeCurrentEngine" ref="eric6.Helpviewer.HelpWebSearchWidget.html#HelpWebSearchWidget.__changeCurrentEngine" />
       <keyword name="HelpWebSearchWidget.__completerActivated" id="HelpWebSearchWidget.__completerActivated" ref="eric6.Helpviewer.HelpWebSearchWidget.html#HelpWebSearchWidget.__completerActivated" />
       <keyword name="HelpWebSearchWidget.__completerHighlighted" id="HelpWebSearchWidget.__completerHighlighted" ref="eric6.Helpviewer.HelpWebSearchWidget.html#HelpWebSearchWidget.__completerHighlighted" />
       <keyword name="HelpWebSearchWidget.__currentEngineChanged" id="HelpWebSearchWidget.__currentEngineChanged" ref="eric6.Helpviewer.HelpWebSearchWidget.html#HelpWebSearchWidget.__currentEngineChanged" />
       <keyword name="HelpWebSearchWidget.__engineImageChanged" id="HelpWebSearchWidget.__engineImageChanged" ref="eric6.Helpviewer.HelpWebSearchWidget.html#HelpWebSearchWidget.__engineImageChanged" />
       <keyword name="HelpWebSearchWidget.__getSuggestions" id="HelpWebSearchWidget.__getSuggestions" ref="eric6.Helpviewer.HelpWebSearchWidget.html#HelpWebSearchWidget.__getSuggestions" />
+      <keyword name="HelpWebSearchWidget.__handleEnginesMenuActionTriggered" id="HelpWebSearchWidget.__handleEnginesMenuActionTriggered" ref="eric6.Helpviewer.HelpWebSearchWidget.html#HelpWebSearchWidget.__handleEnginesMenuActionTriggered" />
       <keyword name="HelpWebSearchWidget.__loadSearches" id="HelpWebSearchWidget.__loadSearches" ref="eric6.Helpviewer.HelpWebSearchWidget.html#HelpWebSearchWidget.__loadSearches" />
       <keyword name="HelpWebSearchWidget.__newSuggestions" id="HelpWebSearchWidget.__newSuggestions" ref="eric6.Helpviewer.HelpWebSearchWidget.html#HelpWebSearchWidget.__newSuggestions" />
       <keyword name="HelpWebSearchWidget.__searchButtonClicked" id="HelpWebSearchWidget.__searchButtonClicked" ref="eric6.Helpviewer.HelpWebSearchWidget.html#HelpWebSearchWidget.__searchButtonClicked" />
@@ -10779,6 +10788,16 @@
       <keyword name="LogViewerPage (Constructor)" id="LogViewerPage (Constructor)" ref="eric6.Preferences.ConfigurationPages.LogViewerPage.html#LogViewerPage.__init__" />
       <keyword name="LogViewerPage (Module)" id="LogViewerPage (Module)" ref="eric6.Preferences.ConfigurationPages.LogViewerPage.html" />
       <keyword name="LogViewerPage.save" id="LogViewerPage.save" ref="eric6.Preferences.ConfigurationPages.LogViewerPage.html#LogViewerPage.save" />
+      <keyword name="LoggingVisitor" id="LoggingVisitor" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html#LoggingVisitor" />
+      <keyword name="LoggingVisitor (Constructor)" id="LoggingVisitor (Constructor)" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html#LoggingVisitor.__init__" />
+      <keyword name="LoggingVisitor.__detectLoggingLevel" id="LoggingVisitor.__detectLoggingLevel" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html#LoggingVisitor.__detectLoggingLevel" />
+      <keyword name="LoggingVisitor.__isFormatCall" id="LoggingVisitor.__isFormatCall" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html#LoggingVisitor.__isFormatCall" />
+      <keyword name="LoggingVisitor.__withinExtraKeyword" id="LoggingVisitor.__withinExtraKeyword" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html#LoggingVisitor.__withinExtraKeyword" />
+      <keyword name="LoggingVisitor.__withinLoggingArgument" id="LoggingVisitor.__withinLoggingArgument" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html#LoggingVisitor.__withinLoggingArgument" />
+      <keyword name="LoggingVisitor.__withinLoggingStatement" id="LoggingVisitor.__withinLoggingStatement" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html#LoggingVisitor.__withinLoggingStatement" />
+      <keyword name="LoggingVisitor.visit_BinOp" id="LoggingVisitor.visit_BinOp" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html#LoggingVisitor.visit_BinOp" />
+      <keyword name="LoggingVisitor.visit_Call" id="LoggingVisitor.visit_Call" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html#LoggingVisitor.visit_Call" />
+      <keyword name="LoggingVisitor.visit_JoinedStr" id="LoggingVisitor.visit_JoinedStr" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html#LoggingVisitor.visit_JoinedStr" />
       <keyword name="LoginForm" id="LoginForm" ref="eric6.Helpviewer.Passwords.LoginForm.html#LoginForm" />
       <keyword name="LoginForm" id="LoginForm" ref="eric6.WebBrowser.Passwords.LoginForm.html#LoginForm" />
       <keyword name="LoginForm (Constructor)" id="LoginForm (Constructor)" ref="eric6.Helpviewer.Passwords.LoginForm.html#LoginForm.__init__" />
@@ -10996,6 +11015,7 @@
       <keyword name="MiniEditor.setLanguage" id="MiniEditor.setLanguage" ref="eric6.QScintilla.MiniEditor.html#MiniEditor.setLanguage" />
       <keyword name="MiniEditor.setSearchIndicator" id="MiniEditor.setSearchIndicator" ref="eric6.QScintilla.MiniEditor.html#MiniEditor.setSearchIndicator" />
       <keyword name="MiniEditor.setText" id="MiniEditor.setText" ref="eric6.QScintilla.MiniEditor.html#MiniEditor.setText" />
+      <keyword name="MiniEditor.setWindowModified" id="MiniEditor.setWindowModified" ref="eric6.QScintilla.MiniEditor.html#MiniEditor.setWindowModified" />
       <keyword name="MiniEditor.showReplaceWidget" id="MiniEditor.showReplaceWidget" ref="eric6.QScintilla.MiniEditor.html#MiniEditor.showReplaceWidget" />
       <keyword name="MiniEditor.showSearchWidget" id="MiniEditor.showSearchWidget" ref="eric6.QScintilla.MiniEditor.html#MiniEditor.showSearchWidget" />
       <keyword name="MiniEditor.textForFind" id="MiniEditor.textForFind" ref="eric6.QScintilla.MiniEditor.html#MiniEditor.textForFind" />
@@ -11008,16 +11028,21 @@
       <keyword name="MiscellaneousChecker" id="MiscellaneousChecker" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html#MiscellaneousChecker" />
       <keyword name="MiscellaneousChecker (Constructor)" id="MiscellaneousChecker (Constructor)" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html#MiscellaneousChecker.__init__" />
       <keyword name="MiscellaneousChecker (Module)" id="MiscellaneousChecker (Module)" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html" />
+      <keyword name="MiscellaneousChecker.__checkBugBear" id="MiscellaneousChecker.__checkBugBear" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html#MiscellaneousChecker.__checkBugBear" />
       <keyword name="MiscellaneousChecker.__checkBuiltins" id="MiscellaneousChecker.__checkBuiltins" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html#MiscellaneousChecker.__checkBuiltins" />
       <keyword name="MiscellaneousChecker.__checkCoding" id="MiscellaneousChecker.__checkCoding" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html#MiscellaneousChecker.__checkCoding" />
       <keyword name="MiscellaneousChecker.__checkComprehensions" id="MiscellaneousChecker.__checkComprehensions" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html#MiscellaneousChecker.__checkComprehensions" />
       <keyword name="MiscellaneousChecker.__checkCopyright" id="MiscellaneousChecker.__checkCopyright" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html#MiscellaneousChecker.__checkCopyright" />
+      <keyword name="MiscellaneousChecker.__checkDictWithSortedKeys" id="MiscellaneousChecker.__checkDictWithSortedKeys" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html#MiscellaneousChecker.__checkDictWithSortedKeys" />
       <keyword name="MiscellaneousChecker.__checkFormatString" id="MiscellaneousChecker.__checkFormatString" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html#MiscellaneousChecker.__checkFormatString" />
       <keyword name="MiscellaneousChecker.__checkFuture" id="MiscellaneousChecker.__checkFuture" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html#MiscellaneousChecker.__checkFuture" />
+      <keyword name="MiscellaneousChecker.__checkGettext" id="MiscellaneousChecker.__checkGettext" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html#MiscellaneousChecker.__checkGettext" />
+      <keyword name="MiscellaneousChecker.__checkLogging" id="MiscellaneousChecker.__checkLogging" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html#MiscellaneousChecker.__checkLogging" />
       <keyword name="MiscellaneousChecker.__checkMutableDefault" id="MiscellaneousChecker.__checkMutableDefault" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html#MiscellaneousChecker.__checkMutableDefault" />
       <keyword name="MiscellaneousChecker.__checkPep3101" id="MiscellaneousChecker.__checkPep3101" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html#MiscellaneousChecker.__checkPep3101" />
       <keyword name="MiscellaneousChecker.__checkPrintStatements" id="MiscellaneousChecker.__checkPrintStatements" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html#MiscellaneousChecker.__checkPrintStatements" />
       <keyword name="MiscellaneousChecker.__checkTuple" id="MiscellaneousChecker.__checkTuple" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html#MiscellaneousChecker.__checkTuple" />
+      <keyword name="MiscellaneousChecker.__dictShouldBeChecked" id="MiscellaneousChecker.__dictShouldBeChecked" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html#MiscellaneousChecker.__dictShouldBeChecked" />
       <keyword name="MiscellaneousChecker.__error" id="MiscellaneousChecker.__error" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html#MiscellaneousChecker.__error" />
       <keyword name="MiscellaneousChecker.__getCoding" id="MiscellaneousChecker.__getCoding" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html#MiscellaneousChecker.__getCoding" />
       <keyword name="MiscellaneousChecker.__getFields" id="MiscellaneousChecker.__getFields" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html#MiscellaneousChecker.__getFields" />
@@ -11193,6 +11218,11 @@
       <keyword name="MyMemoryEngine.engineName" id="MyMemoryEngine.engineName" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.MyMemoryEngine.html#MyMemoryEngine.engineName" />
       <keyword name="MyMemoryEngine.getTranslation" id="MyMemoryEngine.getTranslation" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.MyMemoryEngine.html#MyMemoryEngine.getTranslation" />
       <keyword name="MyMemoryEngine.supportedLanguages" id="MyMemoryEngine.supportedLanguages" ref="eric6.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.MyMemoryEngine.html#MyMemoryEngine.supportedLanguages" />
+      <keyword name="NameFinder" id="NameFinder" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html#NameFinder" />
+      <keyword name="NameFinder (Constructor)" id="NameFinder (Constructor)" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html#NameFinder.__init__" />
+      <keyword name="NameFinder.getNames" id="NameFinder.getNames" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html#NameFinder.getNames" />
+      <keyword name="NameFinder.visit" id="NameFinder.visit" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html#NameFinder.visit" />
+      <keyword name="NameFinder.visit_Name" id="NameFinder.visit_Name" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html#NameFinder.visit_Name" />
       <keyword name="NamingStyleChecker" id="NamingStyleChecker" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.NamingStyleChecker.html#NamingStyleChecker" />
       <keyword name="NamingStyleChecker (Constructor)" id="NamingStyleChecker (Constructor)" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.NamingStyleChecker.html#NamingStyleChecker.__init__" />
       <keyword name="NamingStyleChecker (Module)" id="NamingStyleChecker (Module)" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.NamingStyleChecker.html" />
@@ -16092,6 +16122,7 @@
       <keyword name="TextVisitor.__isBaseString" id="TextVisitor.__isBaseString" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html#TextVisitor.__isBaseString" />
       <keyword name="TextVisitor.__visitBody" id="TextVisitor.__visitBody" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html#TextVisitor.__visitBody" />
       <keyword name="TextVisitor.__visitDefinition" id="TextVisitor.__visitDefinition" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html#TextVisitor.__visitDefinition" />
+      <keyword name="TextVisitor.visit_AsyncFunctionDef" id="TextVisitor.visit_AsyncFunctionDef" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html#TextVisitor.visit_AsyncFunctionDef" />
       <keyword name="TextVisitor.visit_Bytes" id="TextVisitor.visit_Bytes" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html#TextVisitor.visit_Bytes" />
       <keyword name="TextVisitor.visit_Call" id="TextVisitor.visit_Call" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html#TextVisitor.visit_Call" />
       <keyword name="TextVisitor.visit_ClassDef" id="TextVisitor.visit_ClassDef" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html#TextVisitor.visit_ClassDef" />
@@ -16120,6 +16151,8 @@
       <keyword name="ThreatList.__repr__" id="ThreatList.__repr__" ref="eric6.WebBrowser.SafeBrowsing.SafeBrowsingCache.html#ThreatList.__repr__" />
       <keyword name="ThreatList.asTuple" id="ThreatList.asTuple" ref="eric6.WebBrowser.SafeBrowsing.SafeBrowsingCache.html#ThreatList.asTuple" />
       <keyword name="ThreatList.fromApiEntry" id="ThreatList.fromApiEntry" ref="eric6.WebBrowser.SafeBrowsing.SafeBrowsingCache.html#ThreatList.fromApiEntry" />
+      <keyword name="TimerWrapper" id="TimerWrapper" ref="eric6.DebugClients.Python.ThreadExtension.html#TimerWrapper" />
+      <keyword name="TimerWrapper (Constructor)" id="TimerWrapper (Constructor)" ref="eric6.DebugClients.Python.ThreadExtension.html#TimerWrapper.__init__" />
       <keyword name="Token" id="Token" ref="eric6.DataViews.CodeMetrics.html#Token" />
       <keyword name="Token" id="Token" ref="eric6.E5Network.E5RFC6266.html#Token" />
       <keyword name="Token (Constructor)" id="Token (Constructor)" ref="eric6.DataViews.CodeMetrics.html#Token.__init__" />
@@ -17543,7 +17576,6 @@
       <keyword name="WebBrowserPage (Module)" id="WebBrowserPage (Module)" ref="eric6.WebBrowser.WebBrowserPage.html" />
       <keyword name="WebBrowserPage.__featurePermissionRequested" id="WebBrowserPage.__featurePermissionRequested" ref="eric6.WebBrowser.WebBrowserPage.html#WebBrowserPage.__featurePermissionRequested" />
       <keyword name="WebBrowserPage.__fullScreenRequested" id="WebBrowserPage.__fullScreenRequested" ref="eric6.WebBrowser.WebBrowserPage.html#WebBrowserPage.__fullScreenRequested" />
-      <keyword name="WebBrowserPage.__loadProgressSlot" id="WebBrowserPage.__loadProgressSlot" ref="eric6.WebBrowser.WebBrowserPage.html#WebBrowserPage.__loadProgressSlot" />
       <keyword name="WebBrowserPage.__setupChannelTimeout" id="WebBrowserPage.__setupChannelTimeout" ref="eric6.WebBrowser.WebBrowserPage.html#WebBrowserPage.__setupChannelTimeout" />
       <keyword name="WebBrowserPage.__setupWebChannelForUrl" id="WebBrowserPage.__setupWebChannelForUrl" ref="eric6.WebBrowser.WebBrowserPage.html#WebBrowserPage.__setupWebChannelForUrl" />
       <keyword name="WebBrowserPage.__urlChanged" id="WebBrowserPage.__urlChanged" ref="eric6.WebBrowser.WebBrowserPage.html#WebBrowserPage.__urlChanged" />
@@ -17779,13 +17811,12 @@
       <keyword name="WebBrowserWebSearchWidget" id="WebBrowserWebSearchWidget" ref="eric6.WebBrowser.WebBrowserWebSearchWidget.html#WebBrowserWebSearchWidget" />
       <keyword name="WebBrowserWebSearchWidget (Constructor)" id="WebBrowserWebSearchWidget (Constructor)" ref="eric6.WebBrowser.WebBrowserWebSearchWidget.html#WebBrowserWebSearchWidget.__init__" />
       <keyword name="WebBrowserWebSearchWidget (Module)" id="WebBrowserWebSearchWidget (Module)" ref="eric6.WebBrowser.WebBrowserWebSearchWidget.html" />
-      <keyword name="WebBrowserWebSearchWidget.__addEngineFromUrl" id="WebBrowserWebSearchWidget.__addEngineFromUrl" ref="eric6.WebBrowser.WebBrowserWebSearchWidget.html#WebBrowserWebSearchWidget.__addEngineFromUrl" />
-      <keyword name="WebBrowserWebSearchWidget.__changeCurrentEngine" id="WebBrowserWebSearchWidget.__changeCurrentEngine" ref="eric6.WebBrowser.WebBrowserWebSearchWidget.html#WebBrowserWebSearchWidget.__changeCurrentEngine" />
       <keyword name="WebBrowserWebSearchWidget.__completerActivated" id="WebBrowserWebSearchWidget.__completerActivated" ref="eric6.WebBrowser.WebBrowserWebSearchWidget.html#WebBrowserWebSearchWidget.__completerActivated" />
       <keyword name="WebBrowserWebSearchWidget.__completerHighlighted" id="WebBrowserWebSearchWidget.__completerHighlighted" ref="eric6.WebBrowser.WebBrowserWebSearchWidget.html#WebBrowserWebSearchWidget.__completerHighlighted" />
       <keyword name="WebBrowserWebSearchWidget.__currentEngineChanged" id="WebBrowserWebSearchWidget.__currentEngineChanged" ref="eric6.WebBrowser.WebBrowserWebSearchWidget.html#WebBrowserWebSearchWidget.__currentEngineChanged" />
       <keyword name="WebBrowserWebSearchWidget.__engineImageChanged" id="WebBrowserWebSearchWidget.__engineImageChanged" ref="eric6.WebBrowser.WebBrowserWebSearchWidget.html#WebBrowserWebSearchWidget.__engineImageChanged" />
       <keyword name="WebBrowserWebSearchWidget.__getSuggestions" id="WebBrowserWebSearchWidget.__getSuggestions" ref="eric6.WebBrowser.WebBrowserWebSearchWidget.html#WebBrowserWebSearchWidget.__getSuggestions" />
+      <keyword name="WebBrowserWebSearchWidget.__handleEnginesMenuActionTriggered" id="WebBrowserWebSearchWidget.__handleEnginesMenuActionTriggered" ref="eric6.WebBrowser.WebBrowserWebSearchWidget.html#WebBrowserWebSearchWidget.__handleEnginesMenuActionTriggered" />
       <keyword name="WebBrowserWebSearchWidget.__loadSearches" id="WebBrowserWebSearchWidget.__loadSearches" ref="eric6.WebBrowser.WebBrowserWebSearchWidget.html#WebBrowserWebSearchWidget.__loadSearches" />
       <keyword name="WebBrowserWebSearchWidget.__newSuggestions" id="WebBrowserWebSearchWidget.__newSuggestions" ref="eric6.WebBrowser.WebBrowserWebSearchWidget.html#WebBrowserWebSearchWidget.__newSuggestions" />
       <keyword name="WebBrowserWebSearchWidget.__searchButtonClicked" id="WebBrowserWebSearchWidget.__searchButtonClicked" ref="eric6.WebBrowser.WebBrowserWebSearchWidget.html#WebBrowserWebSearchWidget.__searchButtonClicked" />
@@ -18352,6 +18383,7 @@
       <keyword name="compileUiFiles" id="compileUiFiles" ref="eric6.install.html#compileUiFiles" />
       <keyword name="compileUiFiles (Module)" id="compileUiFiles (Module)" ref="eric6.compileUiFiles.html" />
       <keyword name="completeFormData" id="completeFormData" ref="eric6.WebBrowser.Tools.Scripts.html#completeFormData" />
+      <keyword name="composeCallPath" id="composeCallPath" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html#composeCallPath" />
       <keyword name="compound_statements" id="compound_statements" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#compound_statements" />
       <keyword name="containsSpace" id="containsSpace" ref="eric6.WebBrowser.Tools.WebBrowserTools.html#containsSpace" />
       <keyword name="contentSniff" id="contentSniff" ref="eric6.Helpviewer.HelpBrowserWV.html#contentSniff" />
--- a/Documentation/Source/eric6.DebugClients.Python.ThreadExtension.html	Sun Mar 04 14:55:23 2018 +0100
+++ b/Documentation/Source/eric6.DebugClients.Python.ThreadExtension.html	Mon Apr 02 12:04:18 2018 +0200
@@ -38,6 +38,9 @@
 </tr><tr>
 <td><a href="#ThreadWrapper">ThreadWrapper</a></td>
 <td>Wrapper class for threading.Thread.</td>
+</tr><tr>
+<td><a href="#TimerWrapper">TimerWrapper</a></td>
+<td>Wrapper class for threading.(_)Timer.</td>
 </tr>
 </table>
 <h3>Functions</h3>
@@ -48,7 +51,7 @@
 <a NAME="QThreadWrapper" ID="QThreadWrapper"></a>
 <h2>QThreadWrapper</h2>
 <p>
- Wrapper class for *.QThread. 
+                Wrapper class for *.QThread.
 </p>
 <h3>Derived from</h3>
 module.QThread
@@ -64,7 +67,7 @@
 <table>
 <tr>
 <td><a href="#QThreadWrapper.__init__">QThreadWrapper</a></td>
-<td></td>
+<td>Constructor</td>
 </tr>
 </table>
 <h3>Static Methods</h3>
@@ -74,7 +77,9 @@
 <a NAME="QThreadWrapper.__init__" ID="QThreadWrapper.__init__"></a>
 <h4>QThreadWrapper (Constructor)</h4>
 <b>QThreadWrapper</b>(<i>*args, **kwargs</i>)
-
+<p>
+                    Constructor
+</p>
 <div align="right"><a href="#top">Up</a></div>
 <hr /><hr />
 <a NAME="ThreadExtension" ID="ThreadExtension"></a>
@@ -320,12 +325,46 @@
 <a NAME="ThreadWrapper" ID="ThreadWrapper"></a>
 <h2>ThreadWrapper</h2>
 <p>
- Wrapper class for threading.Thread. 
+                Wrapper class for threading.Thread.
 </p>
 <h3>Derived from</h3>
 module.Thread
 <h3>Class Attributes</h3>
 <table>
+<tr><td>timer</td></tr>
+</table>
+<h3>Class Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Methods</h3>
+<table>
+<tr>
+<td><a href="#ThreadWrapper.__init__">ThreadWrapper</a></td>
+<td>Constructor</td>
+</tr>
+</table>
+<h3>Static Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<a NAME="ThreadWrapper.__init__" ID="ThreadWrapper.__init__"></a>
+<h4>ThreadWrapper (Constructor)</h4>
+<b>ThreadWrapper</b>(<i>*args, **kwargs</i>)
+<p>
+                    Constructor
+</p>
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="TimerWrapper" ID="TimerWrapper"></a>
+<h2>TimerWrapper</h2>
+<p>
+                Wrapper class for threading.(_)Timer.
+</p>
+<h3>Derived from</h3>
+timer, ThreadWrapper
+<h3>Class Attributes</h3>
+<table>
 <tr><td>None</td></tr>
 </table>
 <h3>Class Methods</h3>
@@ -335,18 +374,20 @@
 <h3>Methods</h3>
 <table>
 <tr>
-<td><a href="#ThreadWrapper.__init__">ThreadWrapper</a></td>
-<td></td>
+<td><a href="#TimerWrapper.__init__">TimerWrapper</a></td>
+<td>Constructor</td>
 </tr>
 </table>
 <h3>Static Methods</h3>
 <table>
 <tr><td>None</td></tr>
 </table>
-<a NAME="ThreadWrapper.__init__" ID="ThreadWrapper.__init__"></a>
-<h4>ThreadWrapper (Constructor)</h4>
-<b>ThreadWrapper</b>(<i>*args, **kwargs</i>)
-
+<a NAME="TimerWrapper.__init__" ID="TimerWrapper.__init__"></a>
+<h4>TimerWrapper (Constructor)</h4>
+<b>TimerWrapper</b>(<i>interval, function, *args, **kwargs</i>)
+<p>
+                    Constructor
+</p>
 <div align="right"><a href="#top">Up</a></div>
 <hr />
 </body></html>
\ No newline at end of file
--- a/Documentation/Source/eric6.Helpviewer.GreaseMonkey.GreaseMonkeyManager.html	Sun Mar 04 14:55:23 2018 +0100
+++ b/Documentation/Source/eric6.Helpviewer.GreaseMonkey.GreaseMonkeyManager.html	Mon Apr 02 12:04:18 2018 +0200
@@ -270,15 +270,10 @@
 </dd>
 </dl><a NAME="GreaseMonkeyManager.pageLoadStarted" ID="GreaseMonkeyManager.pageLoadStarted"></a>
 <h4>GreaseMonkeyManager.pageLoadStarted</h4>
-<b>pageLoadStarted</b>(<i>frame</i>)
+<b>pageLoadStarted</b>(<i></i>)
 <p>
         Public slot to handle the start of loading a page.
-</p><dl>
-<dt><i>frame</i> (QWebFrame)</dt>
-<dd>
-reference to the main frame of the loading page
-</dd>
-</dl><a NAME="GreaseMonkeyManager.removeScript" ID="GreaseMonkeyManager.removeScript"></a>
+</p><a NAME="GreaseMonkeyManager.removeScript" ID="GreaseMonkeyManager.removeScript"></a>
 <h4>GreaseMonkeyManager.removeScript</h4>
 <b>removeScript</b>(<i>script</i>)
 <p>
--- a/Documentation/Source/eric6.Helpviewer.HelpBrowserWV.html	Sun Mar 04 14:55:23 2018 +0100
+++ b/Documentation/Source/eric6.Helpviewer.HelpBrowserWV.html	Mon Apr 02 12:04:18 2018 +0200
@@ -403,16 +403,13 @@
         Private slot to switch the display of access keys.
 </p><a NAME="HelpBrowser.__addExternalBinding" ID="HelpBrowser.__addExternalBinding"></a>
 <h4>HelpBrowser.__addExternalBinding</h4>
-<b>__addExternalBinding</b>(<i>frame, frameCleared</i>)
+<b>__addExternalBinding</b>(<i>frame=None</i>)
 <p>
         Private slot to add javascript bindings for adding search providers.
 </p><dl>
 <dt><i>frame</i> (QWebFrame)</dt>
 <dd>
 reference to the web frame
-</dd><dt><i>frameCleared</i> (bool)</dt>
-<dd>
-flag indicate, that the frame was cleared
 </dd>
 </dl><a NAME="HelpBrowser.__addSearchEngine" ID="HelpBrowser.__addSearchEngine"></a>
 <h4>HelpBrowser.__addSearchEngine</h4>
--- a/Documentation/Source/eric6.Helpviewer.HelpTabWidget.html	Sun Mar 04 14:55:23 2018 +0100
+++ b/Documentation/Source/eric6.Helpviewer.HelpTabWidget.html	Mon Apr 02 12:04:18 2018 +0200
@@ -338,16 +338,13 @@
 </dd>
 </dl><a NAME="HelpTabWidget.__loadFinished" ID="HelpTabWidget.__loadFinished"></a>
 <h4>HelpTabWidget.__loadFinished</h4>
-<b>__loadFinished</b>(<i>ok, browser</i>)
+<b>__loadFinished</b>(<i>ok</i>)
 <p>
         Private method to handle the loadFinished signal.
 </p><dl>
 <dt><i>ok</i> (bool)</dt>
 <dd>
 flag indicating the result
-</dd><dt><i>browser</i> (HelpBrowser)</dt>
-<dd>
-reference to the web browser
 </dd>
 </dl><a NAME="HelpTabWidget.__loadStarted" ID="HelpTabWidget.__loadStarted"></a>
 <h4>HelpTabWidget.__loadStarted</h4>
--- a/Documentation/Source/eric6.Helpviewer.HelpWebSearchWidget.html	Sun Mar 04 14:55:23 2018 +0100
+++ b/Documentation/Source/eric6.Helpviewer.HelpWebSearchWidget.html	Mon Apr 02 12:04:18 2018 +0200
@@ -66,12 +66,6 @@
 <td><a href="#HelpWebSearchWidget.__init__">HelpWebSearchWidget</a></td>
 <td>Constructor</td>
 </tr><tr>
-<td><a href="#HelpWebSearchWidget.__addEngineFromUrl">__addEngineFromUrl</a></td>
-<td>Private slot to add a search engine given its URL.</td>
-</tr><tr>
-<td><a href="#HelpWebSearchWidget.__changeCurrentEngine">__changeCurrentEngine</a></td>
-<td>Private slot to handle the selection of a search engine.</td>
-</tr><tr>
 <td><a href="#HelpWebSearchWidget.__completerActivated">__completerActivated</a></td>
 <td>Private slot handling the selection of an entry from the completer.</td>
 </tr><tr>
@@ -87,6 +81,9 @@
 <td><a href="#HelpWebSearchWidget.__getSuggestions">__getSuggestions</a></td>
 <td>Private slot to get search suggestions from the configured search engine.</td>
 </tr><tr>
+<td><a href="#HelpWebSearchWidget.__handleEnginesMenuActionTriggered">__handleEnginesMenuActionTriggered</a></td>
+<td>Private slot to handle an action of the menu being triggered.</td>
+</tr><tr>
 <td><a href="#HelpWebSearchWidget.__loadSearches">__loadSearches</a></td>
 <td>Private method to load the recently performed web searches.</td>
 </tr><tr>
@@ -138,26 +135,6 @@
 <dd>
 reference to the parent widget (QWidget)
 </dd>
-</dl><a NAME="HelpWebSearchWidget.__addEngineFromUrl" ID="HelpWebSearchWidget.__addEngineFromUrl"></a>
-<h4>HelpWebSearchWidget.__addEngineFromUrl</h4>
-<b>__addEngineFromUrl</b>(<i>action</i>)
-<p>
-        Private slot to add a search engine given its URL.
-</p><dl>
-<dt><i>action</i> (QAction)</dt>
-<dd>
-reference to the action that triggered
-</dd>
-</dl><a NAME="HelpWebSearchWidget.__changeCurrentEngine" ID="HelpWebSearchWidget.__changeCurrentEngine"></a>
-<h4>HelpWebSearchWidget.__changeCurrentEngine</h4>
-<b>__changeCurrentEngine</b>(<i>action</i>)
-<p>
-        Private slot to handle the selection of a search engine.
-</p><dl>
-<dt><i>action</i> (QAction)</dt>
-<dd>
-reference to the action that triggered
-</dd>
 </dl><a NAME="HelpWebSearchWidget.__completerActivated" ID="HelpWebSearchWidget.__completerActivated"></a>
 <h4>HelpWebSearchWidget.__completerActivated</h4>
 <b>__completerActivated</b>(<i>index</i>)
@@ -199,7 +176,17 @@
 <p>
         Private slot to get search suggestions from the configured search
         engine.
-</p><a NAME="HelpWebSearchWidget.__loadSearches" ID="HelpWebSearchWidget.__loadSearches"></a>
+</p><a NAME="HelpWebSearchWidget.__handleEnginesMenuActionTriggered" ID="HelpWebSearchWidget.__handleEnginesMenuActionTriggered"></a>
+<h4>HelpWebSearchWidget.__handleEnginesMenuActionTriggered</h4>
+<b>__handleEnginesMenuActionTriggered</b>(<i>action</i>)
+<p>
+        Private slot to handle an action of the menu being triggered.
+</p><dl>
+<dt><i>action</i> (QAction)</dt>
+<dd>
+reference to the action that triggered
+</dd>
+</dl><a NAME="HelpWebSearchWidget.__loadSearches" ID="HelpWebSearchWidget.__loadSearches"></a>
 <h4>HelpWebSearchWidget.__loadSearches</h4>
 <b>__loadSearches</b>(<i></i>)
 <p>
--- a/Documentation/Source/eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html	Sun Mar 04 14:55:23 2018 +0100
+++ b/Documentation/Source/eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html	Mon Apr 02 12:04:18 2018 +0200
@@ -30,17 +30,349 @@
 <h3>Classes</h3>
 <table>
 <tr>
+<td><a href="#BugBearVisitor">BugBearVisitor</a></td>
+<td>Class implementing a node visitor to check for various topics.</td>
+</tr><tr>
+<td><a href="#LoggingVisitor">LoggingVisitor</a></td>
+<td>Class implementing a node visitor to check logging statements.</td>
+</tr><tr>
 <td><a href="#MiscellaneousChecker">MiscellaneousChecker</a></td>
 <td>Class implementing a checker for miscellaneous checks.</td>
 </tr><tr>
+<td><a href="#NameFinder">NameFinder</a></td>
+<td>Class to extract a name out of a tree of nodes.</td>
+</tr><tr>
 <td><a href="#TextVisitor">TextVisitor</a></td>
 <td>Class implementing a node visitor for bytes and str instances.</td>
 </tr>
 </table>
 <h3>Functions</h3>
 <table>
+<tr>
+<td><a href="#composeCallPath">composeCallPath</a></td>
+<td>Generator function to assemble the call path of a given node.</td>
+</tr>
+</table>
+<hr /><hr />
+<a NAME="BugBearVisitor" ID="BugBearVisitor"></a>
+<h2>BugBearVisitor</h2>
+<p>
+    Class implementing a node visitor to check for various topics.
+</p>
+<h3>Derived from</h3>
+ast.NodeVisitor
+<h3>Class Attributes</h3>
+<table>
+<tr><td>NodeWindowSize</td></tr>
+</table>
+<h3>Class Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Methods</h3>
+<table>
+<tr>
+<td><a href="#BugBearVisitor.__init__">BugBearVisitor</a></td>
+<td>Constructor</td>
+</tr><tr>
+<td><a href="#BugBearVisitor.__checkForM502">__checkForM502</a></td>
+<td>Private method to check the use of *strip().</td>
+</tr><tr>
+<td><a href="#BugBearVisitor.__checkForM507">__checkForM507</a></td>
+<td>Private method to check for unused loop variables.</td>
+</tr><tr>
+<td><a href="#BugBearVisitor.visit">visit</a></td>
+<td>Public method to traverse a given AST node.</td>
+</tr><tr>
+<td><a href="#BugBearVisitor.visit_Assign">visit_Assign</a></td>
+<td>Public method to handle assignments.</td>
+</tr><tr>
+<td><a href="#BugBearVisitor.visit_Attribute">visit_Attribute</a></td>
+<td>Public method to handle attributes.</td>
+</tr><tr>
+<td><a href="#BugBearVisitor.visit_Call">visit_Call</a></td>
+<td>Public method to handle a function call.</td>
+</tr><tr>
+<td><a href="#BugBearVisitor.visit_For">visit_For</a></td>
+<td>Public method to handle 'for' statements.</td>
+</tr><tr>
+<td><a href="#BugBearVisitor.visit_UAdd">visit_UAdd</a></td>
+<td>Public method to handle unary additions.</td>
+</tr>
+</table>
+<h3>Static Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<a NAME="BugBearVisitor.__init__" ID="BugBearVisitor.__init__"></a>
+<h4>BugBearVisitor (Constructor)</h4>
+<b>BugBearVisitor</b>(<i></i>)
+<p>
+        Constructor
+</p><a NAME="BugBearVisitor.__checkForM502" ID="BugBearVisitor.__checkForM502"></a>
+<h4>BugBearVisitor.__checkForM502</h4>
+<b>__checkForM502</b>(<i>node</i>)
+<p>
+        Private method to check the use of *strip().
+</p><dl>
+<dt><i>node</i> (ast.Call)</dt>
+<dd>
+reference to the node to be processed
+</dd>
+</dl><a NAME="BugBearVisitor.__checkForM507" ID="BugBearVisitor.__checkForM507"></a>
+<h4>BugBearVisitor.__checkForM507</h4>
+<b>__checkForM507</b>(<i>node</i>)
+<p>
+        Private method to check for unused loop variables.
+</p><dl>
+<dt><i>node</i> (ast.For)</dt>
+<dd>
+reference to the node to be processed
+</dd>
+</dl><a NAME="BugBearVisitor.visit" ID="BugBearVisitor.visit"></a>
+<h4>BugBearVisitor.visit</h4>
+<b>visit</b>(<i>node</i>)
+<p>
+        Public method to traverse a given AST node.
+</p><dl>
+<dt><i>node</i> (ast.Node)</dt>
+<dd>
+AST node to be traversed
+</dd>
+</dl><a NAME="BugBearVisitor.visit_Assign" ID="BugBearVisitor.visit_Assign"></a>
+<h4>BugBearVisitor.visit_Assign</h4>
+<b>visit_Assign</b>(<i>node</i>)
+<p>
+        Public method to handle assignments.
+</p><dl>
+<dt><i>node</i> (ast.Assign)</dt>
+<dd>
+reference to the node to be processed
+</dd>
+</dl><a NAME="BugBearVisitor.visit_Attribute" ID="BugBearVisitor.visit_Attribute"></a>
+<h4>BugBearVisitor.visit_Attribute</h4>
+<b>visit_Attribute</b>(<i>node</i>)
+<p>
+        Public method to handle attributes.
+</p><dl>
+<dt><i>node</i> (ast.Attribute)</dt>
+<dd>
+reference to the node to be processed
+</dd>
+</dl><a NAME="BugBearVisitor.visit_Call" ID="BugBearVisitor.visit_Call"></a>
+<h4>BugBearVisitor.visit_Call</h4>
+<b>visit_Call</b>(<i>node</i>)
+<p>
+        Public method to handle a function call.
+</p><dl>
+<dt><i>node</i> (ast.Call)</dt>
+<dd>
+reference to the node to be processed
+</dd>
+</dl><a NAME="BugBearVisitor.visit_For" ID="BugBearVisitor.visit_For"></a>
+<h4>BugBearVisitor.visit_For</h4>
+<b>visit_For</b>(<i>node</i>)
+<p>
+        Public method to handle 'for' statements.
+</p><dl>
+<dt><i>node</i> (ast.For)</dt>
+<dd>
+reference to the node to be processed
+</dd>
+</dl><a NAME="BugBearVisitor.visit_UAdd" ID="BugBearVisitor.visit_UAdd"></a>
+<h4>BugBearVisitor.visit_UAdd</h4>
+<b>visit_UAdd</b>(<i>node</i>)
+<p>
+        Public method to handle unary additions.
+</p><dl>
+<dt><i>node</i> (ast.UAdd)</dt>
+<dd>
+reference to the node to be processed
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="LoggingVisitor" ID="LoggingVisitor"></a>
+<h2>LoggingVisitor</h2>
+<p>
+    Class implementing a node visitor to check logging statements.
+</p>
+<h3>Derived from</h3>
+ast.NodeVisitor
+<h3>Class Attributes</h3>
+<table>
+<tr><td>LoggingLevels</td></tr>
+</table>
+<h3>Class Methods</h3>
+<table>
 <tr><td>None</td></tr>
 </table>
+<h3>Methods</h3>
+<table>
+<tr>
+<td><a href="#LoggingVisitor.__init__">LoggingVisitor</a></td>
+<td>Constructor</td>
+</tr><tr>
+<td><a href="#LoggingVisitor.__detectLoggingLevel">__detectLoggingLevel</a></td>
+<td>Private method to decide whether an AST Call is a logging call.</td>
+</tr><tr>
+<td><a href="#LoggingVisitor.__isFormatCall">__isFormatCall</a></td>
+<td>Private method to check if a function call uses format.</td>
+</tr><tr>
+<td><a href="#LoggingVisitor.__withinExtraKeyword">__withinExtraKeyword</a></td>
+<td>Private method to check, if we are inside the extra keyword.</td>
+</tr><tr>
+<td><a href="#LoggingVisitor.__withinLoggingArgument">__withinLoggingArgument</a></td>
+<td>Private method to check, if we are inside a logging argument.</td>
+</tr><tr>
+<td><a href="#LoggingVisitor.__withinLoggingStatement">__withinLoggingStatement</a></td>
+<td>Private method to check, if we are inside a logging statement.</td>
+</tr><tr>
+<td><a href="#LoggingVisitor.visit_BinOp">visit_BinOp</a></td>
+<td>Public method to handle binary operations while processing the first logging argument.</td>
+</tr><tr>
+<td><a href="#LoggingVisitor.visit_Call">visit_Call</a></td>
+<td>Public method to handle a function call.</td>
+</tr><tr>
+<td><a href="#LoggingVisitor.visit_JoinedStr">visit_JoinedStr</a></td>
+<td>Public method to handle f-string arguments.</td>
+</tr>
+</table>
+<h3>Static Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<a NAME="LoggingVisitor.__init__" ID="LoggingVisitor.__init__"></a>
+<h4>LoggingVisitor (Constructor)</h4>
+<b>LoggingVisitor</b>(<i></i>)
+<p>
+        Constructor
+</p><a NAME="LoggingVisitor.__detectLoggingLevel" ID="LoggingVisitor.__detectLoggingLevel"></a>
+<h4>LoggingVisitor.__detectLoggingLevel</h4>
+<b>__detectLoggingLevel</b>(<i>node</i>)
+<p>
+        Private method to decide whether an AST Call is a logging call.
+</p><dl>
+<dt><i>node</i> (ast.Call)</dt>
+<dd>
+reference to the node to be processed
+</dd>
+</dl><dl>
+<dt>Returns:</dt>
+<dd>
+logging level
+</dd>
+</dl><dl>
+<dt>Return Type:</dt>
+<dd>
+str or None
+</dd>
+</dl><a NAME="LoggingVisitor.__isFormatCall" ID="LoggingVisitor.__isFormatCall"></a>
+<h4>LoggingVisitor.__isFormatCall</h4>
+<b>__isFormatCall</b>(<i>node</i>)
+<p>
+        Private method to check if a function call uses format.
+</p><dl>
+<dt><i>node</i> (ast.Call)</dt>
+<dd>
+reference to the node to be processed
+</dd>
+</dl><dl>
+<dt>Returns:</dt>
+<dd>
+flag indicating the function call uses format
+</dd>
+</dl><dl>
+<dt>Return Type:</dt>
+<dd>
+bool
+</dd>
+</dl><a NAME="LoggingVisitor.__withinExtraKeyword" ID="LoggingVisitor.__withinExtraKeyword"></a>
+<h4>LoggingVisitor.__withinExtraKeyword</h4>
+<b>__withinExtraKeyword</b>(<i>node</i>)
+<p>
+        Private method to check, if we are inside the extra keyword.
+</p><dl>
+<dt><i>node</i> (ast.keyword)</dt>
+<dd>
+reference to the node to be checked
+</dd>
+</dl><dl>
+<dt>Returns:</dt>
+<dd>
+flag indicating we are inside the extra keyword
+</dd>
+</dl><dl>
+<dt>Return Type:</dt>
+<dd>
+bool
+</dd>
+</dl><a NAME="LoggingVisitor.__withinLoggingArgument" ID="LoggingVisitor.__withinLoggingArgument"></a>
+<h4>LoggingVisitor.__withinLoggingArgument</h4>
+<b>__withinLoggingArgument</b>(<i></i>)
+<p>
+        Private method to check, if we are inside a logging argument.
+</p><dl>
+<dt>Returns:</dt>
+<dd>
+flag indicating we are inside a logging argument
+</dd>
+</dl><dl>
+<dt>Return Type:</dt>
+<dd>
+bool
+</dd>
+</dl><a NAME="LoggingVisitor.__withinLoggingStatement" ID="LoggingVisitor.__withinLoggingStatement"></a>
+<h4>LoggingVisitor.__withinLoggingStatement</h4>
+<b>__withinLoggingStatement</b>(<i></i>)
+<p>
+        Private method to check, if we are inside a logging statement.
+</p><dl>
+<dt>Returns:</dt>
+<dd>
+flag indicating we are inside a logging statement
+</dd>
+</dl><dl>
+<dt>Return Type:</dt>
+<dd>
+bool
+</dd>
+</dl><a NAME="LoggingVisitor.visit_BinOp" ID="LoggingVisitor.visit_BinOp"></a>
+<h4>LoggingVisitor.visit_BinOp</h4>
+<b>visit_BinOp</b>(<i>node</i>)
+<p>
+        Public method to handle binary operations while processing the first
+        logging argument.
+</p><dl>
+<dt><i>node</i> (ast.BinOp)</dt>
+<dd>
+reference to the node to be processed
+</dd>
+</dl><a NAME="LoggingVisitor.visit_Call" ID="LoggingVisitor.visit_Call"></a>
+<h4>LoggingVisitor.visit_Call</h4>
+<b>visit_Call</b>(<i>node</i>)
+<p>
+        Public method to handle a function call.
+</p><p>
+        Every logging statement and string format is expected to be a function
+        call.
+</p><dl>
+<dt><i>node</i> (ast.Call)</dt>
+<dd>
+reference to the node to be processed
+</dd>
+</dl><a NAME="LoggingVisitor.visit_JoinedStr" ID="LoggingVisitor.visit_JoinedStr"></a>
+<h4>LoggingVisitor.visit_JoinedStr</h4>
+<b>visit_JoinedStr</b>(<i>node</i>)
+<p>
+        Public method to handle f-string arguments.
+</p><dl>
+<dt><i>node</i> (ast.JoinedStr)</dt>
+<dd>
+reference to the node to be processed
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
 <hr /><hr />
 <a NAME="MiscellaneousChecker" ID="MiscellaneousChecker"></a>
 <h2>MiscellaneousChecker</h2>
@@ -63,6 +395,9 @@
 <td><a href="#MiscellaneousChecker.__init__">MiscellaneousChecker</a></td>
 <td>Constructor</td>
 </tr><tr>
+<td><a href="#MiscellaneousChecker.__checkBugBear">__checkBugBear</a></td>
+<td>Private method to bugbear checks.</td>
+</tr><tr>
 <td><a href="#MiscellaneousChecker.__checkBuiltins">__checkBuiltins</a></td>
 <td>Private method to check, if built-ins are shadowed.</td>
 </tr><tr>
@@ -75,12 +410,21 @@
 <td><a href="#MiscellaneousChecker.__checkCopyright">__checkCopyright</a></td>
 <td>Private method to check the presence of a copyright statement.</td>
 </tr><tr>
+<td><a href="#MiscellaneousChecker.__checkDictWithSortedKeys">__checkDictWithSortedKeys</a></td>
+<td>Private method to check, if dictionary keys appear in sorted order.</td>
+</tr><tr>
 <td><a href="#MiscellaneousChecker.__checkFormatString">__checkFormatString</a></td>
 <td>Private method to check string format strings.</td>
 </tr><tr>
 <td><a href="#MiscellaneousChecker.__checkFuture">__checkFuture</a></td>
 <td>Private method to check the __future__ imports.</td>
 </tr><tr>
+<td><a href="#MiscellaneousChecker.__checkGettext">__checkGettext</a></td>
+<td>Private method to check the 'gettext' import statement.</td>
+</tr><tr>
+<td><a href="#MiscellaneousChecker.__checkLogging">__checkLogging</a></td>
+<td>Private method to check logging statements.</td>
+</tr><tr>
 <td><a href="#MiscellaneousChecker.__checkMutableDefault">__checkMutableDefault</a></td>
 <td>Private method to check for use of mutable types as default arguments.</td>
 </tr><tr>
@@ -93,6 +437,9 @@
 <td><a href="#MiscellaneousChecker.__checkTuple">__checkTuple</a></td>
 <td>Private method to check for one element tuples.</td>
 </tr><tr>
+<td><a href="#MiscellaneousChecker.__dictShouldBeChecked">__dictShouldBeChecked</a></td>
+<td>Private function to test, if the node should be checked.</td>
+</tr><tr>
 <td><a href="#MiscellaneousChecker.__error">__error</a></td>
 <td>Private method to record an issue.</td>
 </tr><tr>
@@ -144,7 +491,12 @@
 <dd>
 dictionary of arguments for the miscellaneous checks
 </dd>
-</dl><a NAME="MiscellaneousChecker.__checkBuiltins" ID="MiscellaneousChecker.__checkBuiltins"></a>
+</dl><a NAME="MiscellaneousChecker.__checkBugBear" ID="MiscellaneousChecker.__checkBugBear"></a>
+<h4>MiscellaneousChecker.__checkBugBear</h4>
+<b>__checkBugBear</b>(<i></i>)
+<p>
+        Private method to bugbear checks.
+</p><a NAME="MiscellaneousChecker.__checkBuiltins" ID="MiscellaneousChecker.__checkBuiltins"></a>
 <h4>MiscellaneousChecker.__checkBuiltins</h4>
 <b>__checkBuiltins</b>(<i></i>)
 <p>
@@ -165,6 +517,11 @@
 <b>__checkCopyright</b>(<i></i>)
 <p>
         Private method to check the presence of a copyright statement.
+</p><a NAME="MiscellaneousChecker.__checkDictWithSortedKeys" ID="MiscellaneousChecker.__checkDictWithSortedKeys"></a>
+<h4>MiscellaneousChecker.__checkDictWithSortedKeys</h4>
+<b>__checkDictWithSortedKeys</b>(<i></i>)
+<p>
+        Private method to check, if dictionary keys appear in sorted order.
 </p><a NAME="MiscellaneousChecker.__checkFormatString" ID="MiscellaneousChecker.__checkFormatString"></a>
 <h4>MiscellaneousChecker.__checkFormatString</h4>
 <b>__checkFormatString</b>(<i></i>)
@@ -175,6 +532,16 @@
 <b>__checkFuture</b>(<i></i>)
 <p>
         Private method to check the __future__ imports.
+</p><a NAME="MiscellaneousChecker.__checkGettext" ID="MiscellaneousChecker.__checkGettext"></a>
+<h4>MiscellaneousChecker.__checkGettext</h4>
+<b>__checkGettext</b>(<i></i>)
+<p>
+        Private method to check the 'gettext' import statement.
+</p><a NAME="MiscellaneousChecker.__checkLogging" ID="MiscellaneousChecker.__checkLogging"></a>
+<h4>MiscellaneousChecker.__checkLogging</h4>
+<b>__checkLogging</b>(<i></i>)
+<p>
+        Private method to check logging statements.
 </p><a NAME="MiscellaneousChecker.__checkMutableDefault" ID="MiscellaneousChecker.__checkMutableDefault"></a>
 <h4>MiscellaneousChecker.__checkMutableDefault</h4>
 <b>__checkMutableDefault</b>(<i></i>)
@@ -195,7 +562,27 @@
 <b>__checkTuple</b>(<i></i>)
 <p>
         Private method to check for one element tuples.
-</p><a NAME="MiscellaneousChecker.__error" ID="MiscellaneousChecker.__error"></a>
+</p><a NAME="MiscellaneousChecker.__dictShouldBeChecked" ID="MiscellaneousChecker.__dictShouldBeChecked"></a>
+<h4>MiscellaneousChecker.__dictShouldBeChecked</h4>
+<b>__dictShouldBeChecked</b>(<i>node</i>)
+<p>
+        Private function to test, if the node should be checked.
+</p><dl>
+<dt><i>node</i></dt>
+<dd>
+reference to the AST node
+</dd>
+</dl><dl>
+<dt>Returns:</dt>
+<dd>
+flag indicating to check the node
+</dd>
+</dl><dl>
+<dt>Return Type:</dt>
+<dd>
+bool
+</dd>
+</dl><a NAME="MiscellaneousChecker.__error" ID="MiscellaneousChecker.__error"></a>
 <h4>MiscellaneousChecker.__error</h4>
 <b>__error</b>(<i>lineNumber, offset, code, *args</i>)
 <p>
@@ -284,6 +671,84 @@
 </p>
 <div align="right"><a href="#top">Up</a></div>
 <hr /><hr />
+<a NAME="NameFinder" ID="NameFinder"></a>
+<h2>NameFinder</h2>
+<p>
+    Class to extract a name out of a tree of nodes.
+</p>
+<h3>Derived from</h3>
+ast.NodeVisitor
+<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="#NameFinder.__init__">NameFinder</a></td>
+<td>Constructor</td>
+</tr><tr>
+<td><a href="#NameFinder.getNames">getNames</a></td>
+<td>Public method to return the extracted names and Name nodes.</td>
+</tr><tr>
+<td><a href="#NameFinder.visit">visit</a></td>
+<td>Public method to traverse a given AST node.</td>
+</tr><tr>
+<td><a href="#NameFinder.visit_Name">visit_Name</a></td>
+<td>Public method to handle 'Name' nodes.</td>
+</tr>
+</table>
+<h3>Static Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<a NAME="NameFinder.__init__" ID="NameFinder.__init__"></a>
+<h4>NameFinder (Constructor)</h4>
+<b>NameFinder</b>(<i></i>)
+<p>
+        Constructor
+</p><a NAME="NameFinder.getNames" ID="NameFinder.getNames"></a>
+<h4>NameFinder.getNames</h4>
+<b>getNames</b>(<i></i>)
+<p>
+        Public method to return the extracted names and Name nodes.
+</p><dl>
+<dt>Returns:</dt>
+<dd>
+dictionary containing the names as keys and the list of nodes
+</dd>
+</dl><dl>
+<dt>Return Type:</dt>
+<dd>
+dict
+</dd>
+</dl><a NAME="NameFinder.visit" ID="NameFinder.visit"></a>
+<h4>NameFinder.visit</h4>
+<b>visit</b>(<i>node</i>)
+<p>
+        Public method to traverse a given AST node.
+</p><dl>
+<dt><i>node</i> (ast.Node)</dt>
+<dd>
+AST node to be traversed
+</dd>
+</dl><a NAME="NameFinder.visit_Name" ID="NameFinder.visit_Name"></a>
+<h4>NameFinder.visit_Name</h4>
+<b>visit_Name</b>(<i>node</i>)
+<p>
+        Public method to handle 'Name' nodes.
+</p><dl>
+<dt><i>node</i> (ast.Name)</dt>
+<dd>
+reference to the node to be processed
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
 <a NAME="TextVisitor" ID="TextVisitor"></a>
 <h2>TextVisitor</h2>
 <p>
@@ -320,6 +785,9 @@
 <td><a href="#TextVisitor.__visitDefinition">__visitDefinition</a></td>
 <td>Private method handling class and function definitions.</td>
 </tr><tr>
+<td><a href="#TextVisitor.visit_AsyncFunctionDef">visit_AsyncFunctionDef</a></td>
+<td>Public method to handle an asynchronous function definition.</td>
+</tr><tr>
 <td><a href="#TextVisitor.visit_Bytes">visit_Bytes</a></td>
 <td>Public method to record a bytes node.</td>
 </tr><tr>
@@ -397,7 +865,17 @@
 <p>
         Private method handling class and function definitions.
 </p><dl>
-<dt><i>node</i> (ast.FunctionDef or ast.ClassDef)</dt>
+<dt><i>node</i> (ast.FunctionDef, ast.AsyncFunctionDef or ast.ClassDef)</dt>
+<dd>
+reference to the node to handle
+</dd>
+</dl><a NAME="TextVisitor.visit_AsyncFunctionDef" ID="TextVisitor.visit_AsyncFunctionDef"></a>
+<h4>TextVisitor.visit_AsyncFunctionDef</h4>
+<b>visit_AsyncFunctionDef</b>(<i>node</i>)
+<p>
+        Public method to handle an asynchronous function definition.
+</p><dl>
+<dt><i>node</i> (ast.AsyncFunctionDef)</dt>
 <dd>
 reference to the node to handle
 </dd>
@@ -463,5 +941,28 @@
 </dd>
 </dl>
 <div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="composeCallPath" ID="composeCallPath"></a>
+<h2>composeCallPath</h2>
+<b>composeCallPath</b>(<i>node</i>)
+<p>
+    Generator function to assemble the call path of a given node.
+</p><dl>
+<dt><i>node</i> (ast.Node)</dt>
+<dd>
+node to assemble call path for
+</dd>
+</dl><dl>
+<dt>Returns:</dt>
+<dd>
+call path components
+</dd>
+</dl><dl>
+<dt>Return Type:</dt>
+<dd>
+str
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
 <hr />
 </body></html>
\ No newline at end of file
--- a/Documentation/Source/eric6.QScintilla.Editor.html	Sun Mar 04 14:55:23 2018 +0100
+++ b/Documentation/Source/eric6.QScintilla.Editor.html	Mon Apr 02 12:04:18 2018 +0200
@@ -2956,7 +2956,7 @@
 </p><dl>
 <dt><i>line</i></dt>
 <dd>
-linenumber of the breakpoint (integer)
+line number of the breakpoint (integer)
 </dd>
 </dl><a NAME="Editor.clearFlakesWarnings" ID="Editor.clearFlakesWarnings"></a>
 <h4>Editor.clearFlakesWarnings</h4>
--- a/Documentation/Source/eric6.QScintilla.MiniEditor.html	Sun Mar 04 14:55:23 2018 +0100
+++ b/Documentation/Source/eric6.QScintilla.MiniEditor.html	Mon Apr 02 12:04:18 2018 +0200
@@ -288,6 +288,9 @@
 <td><a href="#MiniEditor.setText">setText</a></td>
 <td>Public method to set the text programatically.</td>
 </tr><tr>
+<td><a href="#MiniEditor.setWindowModified">setWindowModified</a></td>
+<td>Public method to set the window modification status.</td>
+</tr><tr>
 <td><a href="#MiniEditor.showReplaceWidget">showReplaceWidget</a></td>
 <td>Public method to show the replace widget.</td>
 </tr><tr>
@@ -979,6 +982,16 @@
 <dd>
 type of the source file (string)
 </dd>
+</dl><a NAME="MiniEditor.setWindowModified" ID="MiniEditor.setWindowModified"></a>
+<h4>MiniEditor.setWindowModified</h4>
+<b>setWindowModified</b>(<i>modified</i>)
+<p>
+        Public method to set the window modification status.
+</p><dl>
+<dt><i>modified</i> (bool)</dt>
+<dd>
+flag indicating the modification status
+</dd>
 </dl><a NAME="MiniEditor.showReplaceWidget" ID="MiniEditor.showReplaceWidget"></a>
 <h4>MiniEditor.showReplaceWidget</h4>
 <b>showReplaceWidget</b>(<i></i>)
--- a/Documentation/Source/eric6.WebBrowser.WebBrowserPage.html	Sun Mar 04 14:55:23 2018 +0100
+++ b/Documentation/Source/eric6.WebBrowser.WebBrowserPage.html	Mon Apr 02 12:04:18 2018 +0200
@@ -94,9 +94,6 @@
 <td><a href="#WebBrowserPage.__fullScreenRequested">__fullScreenRequested</a></td>
 <td>Private slot handling a full screen request.</td>
 </tr><tr>
-<td><a href="#WebBrowserPage.__loadProgressSlot">__loadProgressSlot</a></td>
-<td>Private slot to implement a workaround for the loadFinished signal not working properly in Qt 5.10.0.</td>
-</tr><tr>
 <td><a href="#WebBrowserPage.__setupChannelTimeout">__setupChannelTimeout</a></td>
 <td>Private slot to initiate the setup of the web channel.</td>
 </tr><tr>
@@ -233,17 +230,6 @@
 <dd>
 reference to the full screen request
 </dd>
-</dl><a NAME="WebBrowserPage.__loadProgressSlot" ID="WebBrowserPage.__loadProgressSlot"></a>
-<h4>WebBrowserPage.__loadProgressSlot</h4>
-<b>__loadProgressSlot</b>(<i>progress</i>)
-<p>
-        Private slot to implement a workaround for the loadFinished signal
-        not working properly in Qt 5.10.0.
-</p><dl>
-<dt><i>progress</i> (int)</dt>
-<dd>
-load progress in percent
-</dd>
 </dl><a NAME="WebBrowserPage.__setupChannelTimeout" ID="WebBrowserPage.__setupChannelTimeout"></a>
 <h4>WebBrowserPage.__setupChannelTimeout</h4>
 <b>__setupChannelTimeout</b>(<i></i>)
--- a/Documentation/Source/eric6.WebBrowser.WebBrowserWebSearchWidget.html	Sun Mar 04 14:55:23 2018 +0100
+++ b/Documentation/Source/eric6.WebBrowser.WebBrowserWebSearchWidget.html	Mon Apr 02 12:04:18 2018 +0200
@@ -66,12 +66,6 @@
 <td><a href="#WebBrowserWebSearchWidget.__init__">WebBrowserWebSearchWidget</a></td>
 <td>Constructor</td>
 </tr><tr>
-<td><a href="#WebBrowserWebSearchWidget.__addEngineFromUrl">__addEngineFromUrl</a></td>
-<td>Private slot to add a search engine given its URL.</td>
-</tr><tr>
-<td><a href="#WebBrowserWebSearchWidget.__changeCurrentEngine">__changeCurrentEngine</a></td>
-<td>Private slot to handle the selection of a search engine.</td>
-</tr><tr>
 <td><a href="#WebBrowserWebSearchWidget.__completerActivated">__completerActivated</a></td>
 <td>Private slot handling the selection of an entry from the completer.</td>
 </tr><tr>
@@ -87,6 +81,9 @@
 <td><a href="#WebBrowserWebSearchWidget.__getSuggestions">__getSuggestions</a></td>
 <td>Private slot to get search suggestions from the configured search engine.</td>
 </tr><tr>
+<td><a href="#WebBrowserWebSearchWidget.__handleEnginesMenuActionTriggered">__handleEnginesMenuActionTriggered</a></td>
+<td>Private slot to handle an action of the menu being triggered.</td>
+</tr><tr>
 <td><a href="#WebBrowserWebSearchWidget.__loadSearches">__loadSearches</a></td>
 <td>Private method to load the recently performed web searches.</td>
 </tr><tr>
@@ -144,26 +141,6 @@
 <dd>
 reference to the parent widget
 </dd>
-</dl><a NAME="WebBrowserWebSearchWidget.__addEngineFromUrl" ID="WebBrowserWebSearchWidget.__addEngineFromUrl"></a>
-<h4>WebBrowserWebSearchWidget.__addEngineFromUrl</h4>
-<b>__addEngineFromUrl</b>(<i>action</i>)
-<p>
-        Private slot to add a search engine given its URL.
-</p><dl>
-<dt><i>action</i> (QAction)</dt>
-<dd>
-reference to the action that triggered
-</dd>
-</dl><a NAME="WebBrowserWebSearchWidget.__changeCurrentEngine" ID="WebBrowserWebSearchWidget.__changeCurrentEngine"></a>
-<h4>WebBrowserWebSearchWidget.__changeCurrentEngine</h4>
-<b>__changeCurrentEngine</b>(<i>action</i>)
-<p>
-        Private slot to handle the selection of a search engine.
-</p><dl>
-<dt><i>action</i> (QAction)</dt>
-<dd>
-reference to the action that triggered
-</dd>
 </dl><a NAME="WebBrowserWebSearchWidget.__completerActivated" ID="WebBrowserWebSearchWidget.__completerActivated"></a>
 <h4>WebBrowserWebSearchWidget.__completerActivated</h4>
 <b>__completerActivated</b>(<i>index</i>)
@@ -205,7 +182,17 @@
 <p>
         Private slot to get search suggestions from the configured search
         engine.
-</p><a NAME="WebBrowserWebSearchWidget.__loadSearches" ID="WebBrowserWebSearchWidget.__loadSearches"></a>
+</p><a NAME="WebBrowserWebSearchWidget.__handleEnginesMenuActionTriggered" ID="WebBrowserWebSearchWidget.__handleEnginesMenuActionTriggered"></a>
+<h4>WebBrowserWebSearchWidget.__handleEnginesMenuActionTriggered</h4>
+<b>__handleEnginesMenuActionTriggered</b>(<i>action</i>)
+<p>
+        Private slot to handle an action of the menu being triggered.
+</p><dl>
+<dt><i>action</i> (QAction)</dt>
+<dd>
+reference to the action that triggered
+</dd>
+</dl><a NAME="WebBrowserWebSearchWidget.__loadSearches" ID="WebBrowserWebSearchWidget.__loadSearches"></a>
 <h4>WebBrowserWebSearchWidget.__loadSearches</h4>
 <b>__loadSearches</b>(<i></i>)
 <p>
--- a/E5Gui/E5Application.py	Sun Mar 04 14:55:23 2018 +0100
+++ b/E5Gui/E5Application.py	Mon Apr 02 12:04:18 2018 +0200
@@ -28,6 +28,11 @@
             # __IGNORE_EXCEPTION__
         except AttributeError:
             pass
+        try:
+            QCoreApplication.setAttribute(Qt.AA_ShareOpenGLContexts)
+            # __IGNORE_EXCEPTION__
+        except AttributeError:
+            pass
         
         super(E5Application, self).__init__(argv)
         
--- a/E5Gui/E5GenericDiffHighlighter.py	Sun Mar 04 14:55:23 2018 +0100
+++ b/E5Gui/E5GenericDiffHighlighter.py	Mon Apr 02 12:04:18 2018 +0200
@@ -62,7 +62,7 @@
         @param rules set of highlighting rules (list of tuples of rule
             pattern (string) and highlighting format (QTextCharFormat))
         """
-        for idx, ruleFormat in enumerate(rules):
+        for _idx, ruleFormat in enumerate(rules):
             rule, formats = ruleFormat
             terminal = rule.startswith(TERMINAL(''))
             if terminal:
--- a/E5Gui/E5SideBar.py	Sun Mar 04 14:55:23 2018 +0100
+++ b/E5Gui/E5SideBar.py	Mon Apr 02 12:04:18 2018 +0200
@@ -617,7 +617,7 @@
         self.__maxSize = max(stream.readUInt16(), maxSize)
         count = stream.readUInt16()
         self.splitterSizes = []
-        for i in range(count):
+        for _ in range(count):
             self.splitterSizes.append(stream.readUInt16())
         
         self.__autoHide = stream.readBool()
--- a/E5Gui/E5ToolBarManager.py	Sun Mar 04 14:55:23 2018 +0100
+++ b/E5Gui/E5ToolBarManager.py	Mon Apr 02 12:04:18 2018 +0200
@@ -549,11 +549,11 @@
             return False
         
         toolBarCount = stream.readUInt16()
-        for i in range(toolBarCount):
+        for _i in range(toolBarCount):
             objectName = Utilities.readStringFromStream(stream)
             actionCount = stream.readUInt16()
             actions = []
-            for j in range(actionCount):
+            for _j in range(actionCount):
                 actionName = Utilities.readStringFromStream(stream)
                 if actionName:
                     action = self.__findAction(actionName)
@@ -572,12 +572,12 @@
         oldCustomToolBars = self.__customToolBars[:]
         
         toolBarCount = stream.readUInt16()
-        for i in range(toolBarCount):
+        for _i in range(toolBarCount):
             objectName = Utilities.readStringFromStream(stream)
             toolBarTitle = Utilities.readStringFromStream(stream)
             actionCount = stream.readUInt16()
             actions = []
-            for j in range(actionCount):
+            for _j in range(actionCount):
                 actionName = Utilities.readStringFromStream(stream)
                 if actionName:
                     action = self.__findAction(actionName)
--- a/HexEdit/HexEditUndoStack.py	Sun Mar 04 14:55:23 2018 +0100
+++ b/HexEdit/HexEditUndoStack.py	Mon Apr 02 12:04:18 2018 +0200
@@ -181,7 +181,7 @@
             else:
                 txt = self.tr("Deleting %n byte(s)", "", length)
                 self.beginMacro(txt)
-                for cnt in range(length):
+                for _cnt in range(length):
                     uc = HexEditUndoCommand(
                         self.__chunks, HexEditCommand.RemoveAt, pos, 0)
                     self.push(uc)
--- a/Network/IRC/IrcWidget.py	Sun Mar 04 14:55:23 2018 +0100
+++ b/Network/IRC/IrcWidget.py	Mon Apr 02 12:04:18 2018 +0200
@@ -526,7 +526,7 @@
                 for line in self.__buffer.splitlines():
                     line = line.strip()
                     if line:
-                        logging.debug("<IRC> " + line)
+                        logging.debug("<IRC> %s", line)
                         handled = False
                         # step 1: give channels a chance to handle the message
                         for channel in self.__channelList:
--- a/PluginManager/PluginInfoDialog.ui	Sun Mar 04 14:55:23 2018 +0100
+++ b/PluginManager/PluginInfoDialog.ui	Mon Apr 02 12:04:18 2018 +0200
@@ -1,7 +1,8 @@
-<ui version="4.0" >
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
  <class>PluginInfoDialog</class>
- <widget class="QDialog" name="PluginInfoDialog" >
-  <property name="geometry" >
+ <widget class="QDialog" name="PluginInfoDialog">
+  <property name="geometry">
    <rect>
     <x>0</x>
     <y>0</y>
@@ -9,78 +10,81 @@
     <height>600</height>
    </rect>
   </property>
-  <property name="windowTitle" >
+  <property name="windowTitle">
    <string>Loaded Plugins</string>
   </property>
-  <property name="sizeGripEnabled" >
+  <property name="sizeGripEnabled">
    <bool>true</bool>
   </property>
-  <layout class="QVBoxLayout" >
+  <layout class="QVBoxLayout">
    <item>
-    <widget class="QLabel" name="label" >
-     <property name="text" >
+    <widget class="QLabel" name="label">
+     <property name="text">
       <string>Double-Click an entry to show detailed info. Plugins with an error are shown in red.</string>
      </property>
-     <property name="wordWrap" >
+     <property name="wordWrap">
       <bool>true</bool>
      </property>
     </widget>
    </item>
    <item>
-    <widget class="QTreeWidget" name="pluginList" >
-     <property name="whatsThis" >
-      <string>&lt;b>Plugin List&lt;/b>&lt;p>This lists all loaded plugins. Double-clicking an entry shows more detailed information in a separate dialog.&lt;/p></string>
+    <widget class="QTreeWidget" name="pluginList">
+     <property name="whatsThis">
+      <string>&lt;b&gt;Plugin List&lt;/b&gt;&lt;p&gt;This lists all loaded plugins. Double-clicking an entry shows more detailed information in a separate dialog.&lt;/p&gt;</string>
      </property>
-     <property name="rootIsDecorated" >
+     <property name="alternatingRowColors">
+      <bool>true</bool>
+     </property>
+     <property name="rootIsDecorated">
       <bool>false</bool>
      </property>
-     <property name="itemsExpandable" >
+     <property name="itemsExpandable">
       <bool>false</bool>
      </property>
-     <property name="sortingEnabled" >
+     <property name="sortingEnabled">
       <bool>true</bool>
      </property>
-     <property name="allColumnsShowFocus" >
+     <property name="allColumnsShowFocus">
       <bool>true</bool>
      </property>
      <column>
-      <property name="text" >
+      <property name="text">
        <string>Module</string>
       </property>
      </column>
      <column>
-      <property name="text" >
+      <property name="text">
        <string>Name</string>
       </property>
      </column>
      <column>
-      <property name="text" >
+      <property name="text">
        <string>Version</string>
       </property>
      </column>
      <column>
-      <property name="text" >
+      <property name="text">
        <string>Autoactivate</string>
       </property>
      </column>
      <column>
-      <property name="text" >
+      <property name="text">
        <string>Active</string>
       </property>
      </column>
      <column>
-      <property name="text" >
+      <property name="text">
        <string>Description</string>
       </property>
      </column>
     </widget>
    </item>
    <item>
-    <widget class="QDialogButtonBox" name="buttonBox" >
-     <property name="orientation" >
+    <widget class="QDialogButtonBox" name="buttonBox">
+     <property name="orientation">
       <enum>Qt::Horizontal</enum>
      </property>
-     <property name="standardButtons" >
+     <property name="standardButtons">
       <set>QDialogButtonBox::Close</set>
      </property>
     </widget>
@@ -99,11 +103,11 @@
    <receiver>PluginInfoDialog</receiver>
    <slot>accept()</slot>
    <hints>
-    <hint type="sourcelabel" >
+    <hint type="sourcelabel">
      <x>308</x>
      <y>454</y>
     </hint>
-    <hint type="destinationlabel" >
+    <hint type="destinationlabel">
      <x>157</x>
      <y>274</y>
     </hint>
@@ -115,11 +119,11 @@
    <receiver>PluginInfoDialog</receiver>
    <slot>reject()</slot>
    <hints>
-    <hint type="sourcelabel" >
+    <hint type="sourcelabel">
      <x>376</x>
      <y>460</y>
     </hint>
-    <hint type="destinationlabel" >
+    <hint type="destinationlabel">
      <x>286</x>
      <y>274</y>
     </hint>
--- a/PluginManager/PluginManager.py	Sun Mar 04 14:55:23 2018 +0100
+++ b/PluginManager/PluginManager.py	Mon Apr 02 12:04:18 2018 +0200
@@ -883,9 +883,8 @@
         """
         pluginDict = {}
         
-        for name, module in \
-            list(self.__onDemandActiveModules.items()) + \
-                list(self.__onDemandInactiveModules.items()):
+        for module in list(self.__onDemandActiveModules.values()) + \
+                list(self.__onDemandInactiveModules.values()):
             if getattr(module, "pluginType") == type_ and \
                getattr(module, "error", "") == "":
                 plugin_name = getattr(module, "pluginTypename")
@@ -909,9 +908,8 @@
         @param name name of the plugin type (string)
         @return preview pixmap (QPixmap)
         """
-        for modname, module in \
-            list(self.__onDemandActiveModules.items()) + \
-                list(self.__onDemandInactiveModules.items()):
+        for module in list(self.__onDemandActiveModules.values()) + \
+                list(self.__onDemandInactiveModules.values()):
             if getattr(module, "pluginType") == type_ and \
                getattr(module, "pluginTypename") == name:
                 if hasattr(module, "previewPix"):
@@ -1089,9 +1087,8 @@
         """
         vcsDict = {}
         
-        for name, module in \
-            list(self.__onDemandActiveModules.items()) + \
-                list(self.__onDemandInactiveModules.items()):
+        for module in list(self.__onDemandActiveModules.values()) + \
+                list(self.__onDemandInactiveModules.values()):
             if getattr(module, "pluginType") == "version_control":
                 if hasattr(module, "getVcsSystemIndicator"):
                     res = module.getVcsSystemIndicator()
@@ -1350,11 +1347,11 @@
         
         @param type_ type of the plugin to clear private data for (string)
         """
-        for name, module in \
-            list(self.__onDemandActiveModules.items()) + \
-            list(self.__onDemandInactiveModules.items()) + \
-            list(self.__activeModules.items()) + \
-                list(self.__inactiveModules.items()):
+        for module in \
+            list(self.__onDemandActiveModules.values()) + \
+            list(self.__onDemandInactiveModules.values()) + \
+            list(self.__activeModules.values()) + \
+                list(self.__inactiveModules.values()):
             if getattr(module, "pluginType", "") == type_:
                 if hasattr(module, "clearPrivateData"):
                     module.clearPrivateData()
--- a/PluginManager/PluginRepositoryDialog.ui	Sun Mar 04 14:55:23 2018 +0100
+++ b/PluginManager/PluginRepositoryDialog.ui	Mon Apr 02 12:04:18 2018 +0200
@@ -30,6 +30,9 @@
        <property name="contextMenuPolicy">
         <enum>Qt::CustomContextMenu</enum>
        </property>
+       <property name="alternatingRowColors">
+        <bool>true</bool>
+       </property>
        <property name="selectionMode">
         <enum>QAbstractItemView::ExtendedSelection</enum>
        </property>
--- a/Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleChecker.py	Sun Mar 04 14:55:23 2018 +0100
+++ b/Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleChecker.py	Mon Apr 02 12:04:18 2018 +0200
@@ -187,7 +187,7 @@
         taskQueue.put(task)
 
     # Start worker processes
-    for i in range(NumberOfProcesses):
+    for _ in range(NumberOfProcesses):
         multiprocessing.Process(target=worker, args=(taskQueue, doneQueue))\
             .start()
 
@@ -217,7 +217,7 @@
             taskQueue.put(argumentsList[i + initialTasks])
 
     # Tell child processes to stop
-    for i in range(NumberOfProcesses):
+    for _ in range(NumberOfProcesses):
         taskQueue.put('STOP')
 
 
@@ -322,7 +322,7 @@
         errors += complexityChecker.errors
     
     errorsDict = {}
-    for fname, lineno, position, text in errors:
+    for _fname, lineno, position, text in errors:
         if lineno > len(source):
             lineno = len(source)
         # inverse processing of messages and fixes
--- a/Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py	Sun Mar 04 14:55:23 2018 +0100
+++ b/Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py	Mon Apr 02 12:04:18 2018 +0200
@@ -668,8 +668,8 @@
         fixed = None
         ignoredErrors = 0
         if self.__itms:
-            for itm, (lineno, position, text, ignored, fixed, autofixing) in \
-                    zip(self.__itms, results):
+            for itm, (_lineno, _position, text, _ignored, fixed,
+                      _autofixing) in zip(self.__itms, results):
                 self.__modifyFixedResultItem(itm, text, fixed)
             self.__updateFixerStatistics(fixes)
         else:
--- a/Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleFixer.py	Sun Mar 04 14:55:23 2018 +0100
+++ b/Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleFixer.py	Mon Apr 02 12:04:18 2018 +0200
@@ -1238,7 +1238,7 @@
         tokens = '<>*/=^&|%!+-'
         pos2 = pos
         token_delimiter = len(tokens)
-        for i in range(3):
+        for _ in range(3):
             if pos2 < len(text) and text[pos2] in tokens[:token_delimiter]:
                 pos2 += 1
                 # only the first five could be repeated
--- a/Plugins/CheckerPlugins/CodeStyleChecker/DocStyleChecker.py	Sun Mar 04 14:55:23 2018 +0100
+++ b/Plugins/CheckerPlugins/CodeStyleChecker/DocStyleChecker.py	Mon Apr 02 12:04:18 2018 +0200
@@ -508,7 +508,7 @@
         @param source source to parse (list of string)
         @return context of extracted docstring (DocStyleContext)
         """
-        for kind, value, (line, char), _, _ in tokenize.generate_tokens(
+        for kind, value, (line, _char), _, _ in tokenize.generate_tokens(
                 StringIO("".join(source)).readline):
             if kind in [tokenize.COMMENT, tokenize.NEWLINE, tokenize.NL]:
                 continue
@@ -698,6 +698,11 @@
         if (not docstring or not docstring.strip() or
                 not docstring.strip('\'"')):
             self.__error(context.start(), 0, "D101")
+        
+        if self.__docType == "eric" and \
+           docstring.strip('\'"').strip() == "Module documentation goes here.":
+            self.__error(docstringContext.end(), 0, "D201")
+            return
     
     def __checkFunctionDocstring(self, docstringContext, context):
         """
@@ -724,6 +729,12 @@
         if (not docstring or not docstring.strip() or
                 not docstring.strip('\'"')):
             self.__error(context.start(), 0, code)
+        
+        if self.__docType == "eric" and \
+           docstring.strip('\'"').strip() == \
+                "Function documentation goes here.":
+            self.__error(docstringContext.end(), 0, "D202")
+            return
     
     def __checkClassDocstring(self, docstringContext, context):
         """
@@ -754,7 +765,7 @@
         
         if self.__docType == "eric" and \
            docstring.strip('\'"').strip() == "Class documentation goes here.":
-            self.__error(context.start(), 0, "D206")
+            self.__error(docstringContext.end(), 0, "D206")
             return
     
     def __checkTripleDoubleQuotes(self, docstringContext, context):
--- a/Plugins/CheckerPlugins/CodeStyleChecker/MiscellaneousChecker.py	Sun Mar 04 14:55:23 2018 +0100
+++ b/Plugins/CheckerPlugins/CodeStyleChecker/MiscellaneousChecker.py	Mon Apr 02 12:04:18 2018 +0200
@@ -14,6 +14,23 @@
 from string import Formatter
 
 
+def composeCallPath(node):
+    """
+    Generator function to assemble the call path of a given node.
+    
+    @param node node to assemble call path for
+    @type ast.Node
+    @return call path components
+    @rtype str
+    """
+    if isinstance(node, ast.Attribute):
+        for v in composeCallPath(node.value):
+            yield v
+        yield node.attr
+    elif isinstance(node, ast.Name):
+        yield node.id
+
+
 class MiscellaneousChecker(object):
     """
     Class implementing a checker for miscellaneous checks.
@@ -26,12 +43,19 @@
         "M191", "M192", "M193", "M194",
         "M195", "M196", "M197", "M198",
         
+        "M201",
+        
+        "M501", "M502", "M503", "M504", "M505", "M506", "M507",
+        "M511", "M512", "M513", "M514",
+        
         "M601",
         "M611", "M612", "M613",
         "M621", "M622", "M623", "M624", "M625",
         "M631", "M632",
+        "M651", "M652", "M653", "M654", "M655",
         
         "M701", "M702",
+        "M711",
         
         "M801",
         "M811",
@@ -101,26 +125,32 @@
             (self.__checkBuiltins, ("M131", "M132")),
             (self.__checkComprehensions, ("M191", "M192", "M193", "M194",
                                           "M195", "M196", "M197", "M198")),
+            (self.__checkDictWithSortedKeys, ("M201",)),
             (self.__checkPep3101, ("M601",)),
             (self.__checkFormatString, ("M611", "M612", "M613",
                                         "M621", "M622", "M623", "M624", "M625",
                                         "M631", "M632")),
+            (self.__checkBugBear, ("M501", "M502", "M503", "M504", "M505",
+                                   "M506", "M507",
+                                   "M511", "M512", "M513", "M514")),
+            (self.__checkLogging, ("M651", "M652", "M653", "M654", "M655")),
             (self.__checkFuture, ("M701", "M702")),
+            (self.__checkGettext, ("M711",)),
             (self.__checkPrintStatements, ("M801",)),
             (self.__checkTuple, ("M811", )),
             (self.__checkMutableDefault, ("M821", "M822")),
         ]
         
         self.__defaultArgs = {
+            "BuiltinsChecker": {
+                "chr": ["unichr", ],
+                "str": ["unicode", ],
+            },
             "CodingChecker": 'latin-1, utf-8',
             "CopyrightChecker": {
+                "Author": "",
                 "MinFilesize": 0,
-                "Author": "",
             },
-            "BuiltinsChecker": {
-                "str": ["unicode", ],
-                "chr": ["unichr", ],
-            }
         }
         
         self.__checkers = []
@@ -477,7 +507,7 @@
         implicit = False
         explicit = False
         try:
-            for literal, field, spec, conv in self.Formatter.parse(string):
+            for _literal, field, spec, conv in self.Formatter.parse(string):
                 if field is not None and (conv is None or conv in 'rsa'):
                     if not field:
                         field = str(next(cnt))
@@ -497,6 +527,12 @@
         """
         Private method to check, if built-ins are shadowed.
         """
+        functionDefs = [ast.FunctionDef]
+        try:
+            functionDefs.append(ast.AsyncFunctionDef)
+        except AttributeError:
+            pass
+        
         ignoreBuiltinAssignments = self.__args.get(
             "BuiltinsChecker", self.__defaultArgs["BuiltinsChecker"])
         
@@ -535,8 +571,9 @@
                             self.__error(element.lineno - 1,
                                          element.col_offset,
                                          "M131", element.id)
-            elif isinstance(node, ast.FunctionDef):
-                # function definition
+            elif any(isinstance(node, functionDef)
+                     for functionDef in functionDefs):
+                # (asynchronous) function definition
                 if sys.version_info >= (3, 0):
                     for arg in node.args.args:
                         if isinstance(arg, ast.arg) and \
@@ -561,25 +598,25 @@
                 if (isinstance(node.args[0], ast.GeneratorExp) and
                         node.func.id in ('list', 'set', 'dict')):
                     errorCode = {
+                        "dict": "M193",
                         "list": "M191",
                         "set": "M192",
-                        "dict": "M193",
                     }[node.func.id]
                     self.__error(node.lineno - 1, node.col_offset, errorCode)
 
                 elif (isinstance(node.args[0], ast.ListComp) and
                       node.func.id in ('set', 'dict')):
                     errorCode = {
+                        'dict': 'M195',
                         'set': 'M194',
-                        'dict': 'M195',
                     }[node.func.id]
                     self.__error(node.lineno - 1, node.col_offset, errorCode)
 
                 elif (isinstance(node.args[0], ast.List) and
                       node.func.id in ('set', 'dict')):
                     errorCode = {
+                        'dict': 'M197',
                         'set': 'M196',
-                        'dict': 'M197',
                     }[node.func.id]
                     self.__error(node.lineno - 1, node.col_offset, errorCode)
 
@@ -593,25 +630,112 @@
         """
         Private method to check for use of mutable types as default arguments.
         """
-        mutableTypes = [
+        mutableTypes = (
             ast.Call,
             ast.Dict,
             ast.List,
             ast.Set,
-        ]
+        )
+        mutableCalls = (
+            "Counter",
+            "OrderedDict",
+            "collections.Counter",
+            "collections.OrderedDict",
+            "collections.defaultdict",
+            "collections.deque",
+            "defaultdict",
+            "deque",
+            "dict",
+            "list",
+            "set",
+        )
+        functionDefs = [ast.FunctionDef]
+        try:
+            functionDefs.append(ast.AsyncFunctionDef)
+        except AttributeError:
+            pass
         
         for node in ast.walk(self.__tree):
-            if isinstance(node, ast.FunctionDef):
+            if any(isinstance(node, functionDef)
+                   for functionDef in functionDefs):
                 for default in node.args.defaults:
                     if any(isinstance(default, mutableType)
                            for mutableType in mutableTypes):
                         typeName = type(default).__name__
                         if isinstance(default, ast.Call):
-                            errorCode = "M822"
+                            callPath = '.'.join(composeCallPath(default.func))
+                            if callPath in mutableCalls:
+                                self.__error(default.lineno - 1,
+                                             default.col_offset,
+                                             "M823", callPath + "()")
+                            else:
+                                self.__error(default.lineno - 1,
+                                             default.col_offset,
+                                             "M822", typeName)
                         else:
-                            errorCode = "M821"
-                        self.__error(default.lineno - 1, default.col_offset,
-                                     errorCode, typeName)
+                            self.__error(default.lineno - 1,
+                                         default.col_offset,
+                                         "M821", typeName)
+    
+    def __dictShouldBeChecked(self, node):
+        """
+        Private function to test, if the node should be checked.
+        
+        @param node reference to the AST node
+        @return flag indicating to check the node
+        @rtype bool
+        """
+        if not all(isinstance(key, ast.Str) for key in node.keys):
+            return False
+        
+        if "__IGNORE_WARNING__" in self.__source[node.lineno - 1] or \
+           "__IGNORE_WARNING_M201__" in self.__source[node.lineno - 1]:
+            return False
+        
+        lineNumbers = [key.lineno for key in node.keys]
+        return len(lineNumbers) == len(set(lineNumbers))
+    
+    def __checkDictWithSortedKeys(self):
+        """
+        Private method to check, if dictionary keys appear in sorted order.
+        """
+        for node in ast.walk(self.__tree):
+            if isinstance(node, ast.Dict) and self.__dictShouldBeChecked(node):
+                for key1, key2 in zip(node.keys, node.keys[1:]):
+                    if key2.s < key1.s:
+                        self.__error(key2.lineno - 1, key2.col_offset,
+                                     "M201", key2.s, key1.s)
+    
+    def __checkLogging(self):
+        """
+        Private method to check logging statements.
+        """
+        visitor = LoggingVisitor()
+        visitor.visit(self.__tree)
+        for node, reason in visitor.violations:
+            self.__error(node.lineno - 1, node.col_offset, reason)
+    
+    def __checkGettext(self):
+        """
+        Private method to check the 'gettext' import statement.
+        """
+        for node in ast.walk(self.__tree):
+            if isinstance(node, ast.ImportFrom) and \
+               any(name.asname == '_' for name in node.names):
+                self.__error(node.lineno - 1, node.col_offset, "M711",
+                             node.names[0].name)
+    
+    def __checkBugBear(self):
+        """
+        Private method to bugbear checks.
+        """
+        visitor = BugBearVisitor()
+        visitor.visit(self.__tree)
+        for violation in visitor.violations:
+            node = violation[0]
+            reason = violation[1]
+            params = violation[2:]
+            self.__error(node.lineno - 1, node.col_offset, reason, *params)
 
 
 class TextVisitor(ast.NodeVisitor):
@@ -679,7 +803,7 @@
         Private method handling class and function definitions.
         
         @param node reference to the node to handle
-        @type ast.FunctionDef or ast.ClassDef
+        @type ast.FunctionDef, ast.AsyncFunctionDef or ast.ClassDef
         """
         # Manually traverse class or function definition
         # * Handle decorators normally
@@ -735,6 +859,16 @@
         # Skipped nodes: ('name', 'args', 'returns')
         self.__visitDefinition(node)
 
+    def visit_AsyncFunctionDef(self, node):
+        """
+        Public method to handle an asynchronous function definition.
+        
+        @param node reference to the node to handle
+        @type ast.AsyncFunctionDef
+        """
+        # Skipped nodes: ('name', 'args', 'returns')
+        self.__visitDefinition(node)
+
     def visit_Call(self, node):
         """
         Public method to handle a function call.
@@ -752,5 +886,407 @@
                 self.calls[node.args[0]] = (node, True)
         super(TextVisitor, self).generic_visit(node)
 
+
+class LoggingVisitor(ast.NodeVisitor):
+    """
+    Class implementing a node visitor to check logging statements.
+    """
+    LoggingLevels = {
+        "debug",
+        "critical",
+        "error",
+        "info",
+        "warn",
+        "warning",
+    }
+    
+    def __init__(self):
+        """
+        Constructor
+        """
+        super(LoggingVisitor, self).__init__()
+        
+        self.__currentLoggingCall = None
+        self.__currentLoggingArgument = None
+        self.__currentLoggingLevel = None
+        self.__currentExtraKeyword = None
+        self.violations = []
+
+    def __withinLoggingStatement(self):
+        """
+        Private method to check, if we are inside a logging statement.
+        
+        @return flag indicating we are inside a logging statement
+        @rtype bool
+        """
+        return self.__currentLoggingCall is not None
+
+    def __withinLoggingArgument(self):
+        """
+        Private method to check, if we are inside a logging argument.
+        
+        @return flag indicating we are inside a logging argument
+        @rtype bool
+        """
+        return self.__currentLoggingArgument is not None
+
+    def __withinExtraKeyword(self, node):
+        """
+        Private method to check, if we are inside the extra keyword.
+        
+        @param node reference to the node to be checked
+        @type ast.keyword
+        @return flag indicating we are inside the extra keyword
+        @rtype bool
+        """
+        return self.__currentExtraKeyword is not None and \
+            self.__currentExtraKeyword != node
+    
+    def __detectLoggingLevel(self, node):
+        """
+        Private method to decide whether an AST Call is a logging call.
+        
+        @param node reference to the node to be processed
+        @type ast.Call
+        @return logging level
+        @rtype str or None
+        """
+        try:
+            if node.func.value.id == "warnings":
+                return None
+            
+            if node.func.attr in LoggingVisitor.LoggingLevels:
+                return node.func.attr
+        except AttributeError:
+            pass
+        
+        return None
+
+    def __isFormatCall(self, node):
+        """
+        Private method to check if a function call uses format.
+
+        @param node reference to the node to be processed
+        @type ast.Call
+        @return flag indicating the function call uses format
+        @rtype bool
+        """
+        try:
+            return node.func.attr == "format"
+        except AttributeError:
+            return False
+    
+    def visit_Call(self, node):
+        """
+        Public method to handle a function call.
+
+        Every logging statement and string format is expected to be a function
+        call.
+        
+        @param node reference to the node to be processed
+        @type ast.Call
+        """
+        # we are in a logging statement
+        if self.__withinLoggingStatement():
+            if self.__withinLoggingArgument() and self.__isFormatCall(node):
+                self.violations.append((node, "M651"))
+                super(LoggingVisitor, self).generic_visit(node)
+                return
+        
+        loggingLevel = self.__detectLoggingLevel(node)
+        
+        if loggingLevel and self.__currentLoggingLevel is None:
+            self.__currentLoggingLevel = loggingLevel
+        
+        # we are in some other statement
+        if loggingLevel is None:
+            super(LoggingVisitor, self).generic_visit(node)
+            return
+        
+        # we are entering a new logging statement
+        self.__currentLoggingCall = node
+        
+        if loggingLevel == "warn":
+            self.violations.append((node, "M655"))
+        
+        for index, child in enumerate(ast.iter_child_nodes(node)):
+            if index == 1:
+                self.__currentLoggingArgument = child
+            if index > 1 and isinstance(child, ast.keyword) and \
+               child.arg == "extra":
+                self.__currentExtraKeyword = child
+            
+            super(LoggingVisitor, self).visit(child)
+            
+            self.__currentLoggingArgument = None
+            self.__currentExtraKeyword = None
+        
+        self.__currentLoggingCall = None
+        self.__currentLoggingLevel = None
+    
+    def visit_BinOp(self, node):
+        """
+        Public method to handle binary operations while processing the first
+        logging argument.
+        
+        @param node reference to the node to be processed
+        @type ast.BinOp
+        """
+        if self.__withinLoggingStatement() and self.__withinLoggingArgument():
+            # handle percent format
+            if isinstance(node.op, ast.Mod):
+                self.violations.append((node, "M652"))
+            
+            # handle string concat
+            if isinstance(node.op, ast.Add):
+                self.violations.append((node, "M653"))
+        
+        super(LoggingVisitor, self).generic_visit(node)
+    
+    def visit_JoinedStr(self, node):
+        """
+        Public method to handle f-string arguments.
+        
+        @param node reference to the node to be processed
+        @type ast.JoinedStr
+        """
+        if sys.version_info >= (3, 6):
+            if self.__withinLoggingStatement():
+                if any(isinstance(i, ast.FormattedValue) for i in node.values):
+                    if self.__withinLoggingArgument():
+                        self.violations.append((node, "M654"))
+                        
+                        super(LoggingVisitor, self).generic_visit(node)
+
+
+class BugBearVisitor(ast.NodeVisitor):
+    """
+    Class implementing a node visitor to check for various topics.
+    """
+    #
+    # This class was implemented along the BugBear flake8 extension (v 18.2.0).
+    # Original: Copyright (c) 2016 Łukasz Langa
+    #
+    
+    NodeWindowSize = 4
+    
+    def __init__(self):
+        """
+        Constructor
+        """
+        super(BugBearVisitor, self).__init__()
+        
+        self.__nodeStack = []
+        self.__nodeWindow = []
+        self.violations = []
+    
+    def visit(self, node):
+        """
+        Public method to traverse a given AST node.
+        
+        @param node AST node to be traversed
+        @type ast.Node
+        """
+        self.__nodeStack.append(node)
+        self.__nodeWindow.append(node)
+        self.__nodeWindow = \
+            self.__nodeWindow[-BugBearVisitor.NodeWindowSize:]
+        
+        super(BugBearVisitor, self).visit(node)
+        
+        self.__nodeStack.pop()
+    
+    def visit_UAdd(self, node):
+        """
+        Public method to handle unary additions.
+        
+        @param node reference to the node to be processed
+        @type ast.UAdd
+        """
+        trailingNodes = list(map(type, self.__nodeWindow[-4:]))
+        if trailingNodes == [ast.UnaryOp, ast.UAdd, ast.UnaryOp, ast.UAdd]:
+            originator = self.__nodeWindow[-4]
+            self.violations.append((originator, "M501"))
+        
+        self.generic_visit(node)
+    
+    def visit_Call(self, node):
+        """
+        Public method to handle a function call.
+        
+        @param node reference to the node to be processed
+        @type ast.Call
+        """
+        if sys.version_info >= (3, 0):
+            validPaths = ("six", "future.utils", "builtins")
+            methodsDict = {
+                "M511": ("iterkeys", "itervalues", "iteritems", "iterlists"),
+                "M512": ("viewkeys", "viewvalues", "viewitems", "viewlists"),
+                "M513": ("next",),
+            }
+        else:
+            validPaths = ()
+            methodsDict = {}
+        
+        if isinstance(node.func, ast.Attribute):
+            for code, methods in methodsDict.items():
+                if node.func.attr in methods:
+                    callPath = ".".join(composeCallPath(node.func.value))
+                    if callPath not in validPaths:
+                        self.violations.append((node, code))
+                    break
+            else:
+                self.__checkForM502(node)
+        else:
+            try:
+                if (
+                    node.func.id in ("getattr", "hasattr") and
+                    node.args[1].s == "__call__"
+                ):
+                    self.violations.append((node, "M503"))
+            except (AttributeError, IndexError):
+                pass
+
+            self.generic_visit(node)
+    
+    def visit_Attribute(self, node):
+        """
+        Public method to handle attributes.
+        
+        @param node reference to the node to be processed
+        @type ast.Attribute
+        """
+        callPath = list(composeCallPath(node))
+        
+        if '.'.join(callPath) == 'sys.maxint' and sys.version_info >= (3, 0):
+            self.violations.append((node, "M504"))
+        
+        elif len(callPath) == 2 and callPath[1] == 'message' and \
+                sys.version_info >= (2, 6):
+            name = callPath[0]
+            for elem in reversed(self.__nodeStack[:-1]):
+                if isinstance(elem, ast.ExceptHandler) and elem.name == name:
+                    self.violations.append((node, "M505"))
+                    break
+    
+    def visit_Assign(self, node):
+        """
+        Public method to handle assignments.
+        
+        @param node reference to the node to be processed
+        @type ast.Assign
+        """
+        if isinstance(self.__nodeStack[-2], ast.ClassDef):
+            # By using 'hasattr' below we're ignoring starred arguments, slices
+            # and tuples for simplicity.
+            assignTargets = {t.id for t in node.targets if hasattr(t, 'id')}
+            if '__metaclass__' in assignTargets and sys.version_info >= (3, 0):
+                self.violations.append((node, "M514"))
+        
+        elif len(node.targets) == 1:
+            target = node.targets[0]
+            if isinstance(target, ast.Attribute) and \
+               isinstance(target.value, ast.Name):
+                if (target.value.id, target.attr) == ('os', 'environ'):
+                    self.violations.append((node, "M506"))
+        
+        self.generic_visit(node)
+    
+    def visit_For(self, node):
+        """
+        Public method to handle 'for' statements.
+        
+        @param node reference to the node to be processed
+        @type ast.For
+        """
+        self.__checkForM507(node)
+        
+        self.generic_visit(node)
+    
+    def __checkForM502(self, node):
+        """
+        Private method to check the use of *strip().
+        
+        @param node reference to the node to be processed
+        @type ast.Call
+        """
+        if node.func.attr not in ("lstrip", "rstrip", "strip"):
+            return          # method name doesn't match
+        
+        if len(node.args) != 1 or not isinstance(node.args[0], ast.Str):
+            return          # used arguments don't match the builtin strip
+        
+        s = node.args[0].s
+        if len(s) == 1:
+            return          # stripping just one character
+        
+        if len(s) == len(set(s)):
+            return          # no characters appear more than once
+
+        self.violations.append((node, "M502"))
+    
+    def __checkForM507(self, node):
+        """
+        Private method to check for unused loop variables.
+        
+        @param node reference to the node to be processed
+        @type ast.For
+        """
+        targets = NameFinder()
+        targets.visit(node.target)
+        ctrlNames = set(filter(lambda s: not s.startswith('_'),
+                               targets.getNames()))
+        body = NameFinder()
+        for expr in node.body:
+            body.visit(expr)
+        usedNames = set(body.getNames())
+        for name in sorted(ctrlNames - usedNames):
+            n = targets.getNames()[name][0]
+            self.violations.append((n, "M507", name))
+
+
+class NameFinder(ast.NodeVisitor):
+    """
+    Class to extract a name out of a tree of nodes.
+    """
+    def __init__(self):
+        """
+        Constructor
+        """
+        super(NameFinder, self).__init__()
+        
+        self.__names = {}
+
+    def visit_Name(self, node):
+        """
+        Public method to handle 'Name' nodes.
+        
+        @param node reference to the node to be processed
+        @type ast.Name
+        """
+        self.__names.setdefault(node.id, []).append(node)
+
+    def visit(self, node):
+        """
+        Public method to traverse a given AST node.
+        
+        @param node AST node to be traversed
+        @type ast.Node
+        """
+        if isinstance(node, list):
+            for elem in node:
+                super(NameFinder, self).visit(elem)
+        else:
+            super(NameFinder, self).visit(node)
+    
+    def getNames(self):
+        """
+        Public method to return the extracted names and Name nodes.
+        
+        @return dictionary containing the names as keys and the list of nodes
+        @rtype dict
+        """
+        return self.__names
+
 #
 # eflag: noqa = M702
--- a/Plugins/CheckerPlugins/CodeStyleChecker/translations.py	Sun Mar 04 14:55:23 2018 +0100
+++ b/Plugins/CheckerPlugins/CodeStyleChecker/translations.py	Mon Apr 02 12:04:18 2018 +0200
@@ -311,6 +311,10 @@
         "DocStyleChecker",
         "last paragraph of docstring is not followed by a blank line"),
     
+    "D201": QCoreApplication.translate(
+        "DocStyleChecker", "module docstring is still a default string"),
+    "D202": QCoreApplication.translate(
+        "DocStyleChecker", "function docstring is still a default string"),
     "D203": QCoreApplication.translate(
         "DocStyleChecker",
         "private function/method is missing a docstring"),
@@ -495,6 +499,48 @@
     "M198": QCoreApplication.translate(
         "MiscellaneousChecker",
         'unnecessary list comprehension - "{0}" can take a generator'),
+    "M201": QCoreApplication.translate(
+        "MiscellaneousChecker",
+        "sort keys - '{0}' should be before '{1}'"),
+    "M501": QCoreApplication.translate(
+        "MiscellaneousChecker",
+        "Python does not support the unary prefix increment"),
+    "M502": QCoreApplication.translate(
+        "MiscellaneousChecker",
+        "using .strip() with multi-character strings is misleading"),
+    "M503": QCoreApplication.translate(
+        "MiscellaneousChecker",
+        """using 'hasattr(x, "__call__")' to test if 'x' is callable is"""
+        """ unreliable"""),
+    "M504": QCoreApplication.translate(
+        "MiscellaneousChecker",
+        "'sys.maxint' is not defined in Python 3 - use 'sys.maxsize'"),
+    "M505": QCoreApplication.translate(
+        "MiscellaneousChecker",
+        "'BaseException.message' has been deprecated as of Python 2.6 and is"
+        " removed in Python 3 - use 'str(e)'"),
+    "M506": QCoreApplication.translate(
+        "MiscellaneousChecker",
+        "assigning to 'os.environ' does not clear the environment -"
+        " use 'os.environ.clear()'"),
+    "M507": QCoreApplication.translate(
+        "MiscellaneousChecker",
+        "loop control variable {0} not used within the loop body -"
+        " start the name with an underscore"),
+    "M511": QCoreApplication.translate(
+        "MiscellaneousChecker",
+        "Python 3 does not include '.iter*' methods on dictionaries"),
+    "M512": QCoreApplication.translate(
+        "MiscellaneousChecker",
+        "Python 3 does not include '.view*' methods on dictionaries"),
+    "M513": QCoreApplication.translate(
+        "MiscellaneousChecker",
+        "'.next()' does not exist in Python 3"),
+    "M514": QCoreApplication.translate(
+        "MiscellaneousChecker",
+        "'__metaclass__' does nothing on Python 3 -"
+        " use 'class MyClass(BaseClass, metaclass=...)'"),
+    
     "M601": QCoreApplication.translate(
         "MiscellaneousChecker",
         "found {0} formatter"),
@@ -528,12 +574,30 @@
     "M632": QCoreApplication.translate(
         "MiscellaneousChecker",
         "format call provides unused keyword ({0})"),
+    "M651": QCoreApplication.translate(
+        "MiscellaneousChecker",
+        "logging statement uses string.format()"),
+    "M652": QCoreApplication.translate(
+        "MiscellaneousChecker",
+        "logging statement uses '%'"),          # __IGNORE_WARNING_M601__
+    "M653": QCoreApplication.translate(
+        "MiscellaneousChecker",
+        "logging statement uses '+'"),
+    "M654": QCoreApplication.translate(
+        "MiscellaneousChecker",
+        "logging statement uses f-string"),
+    "M655": QCoreApplication.translate(
+        "MiscellaneousChecker",
+        "logging statement uses 'warn' instead of 'warning'"),
     "M701": QCoreApplication.translate(
         "MiscellaneousChecker",
         "expected these __future__ imports: {0}; but only got: {1}"),
     "M702": QCoreApplication.translate(
         "MiscellaneousChecker",
         "expected these __future__ imports: {0}; but got none"),
+    "M711": QCoreApplication.translate(
+        "MiscellaneousChecker",
+        "gettext import with alias _ found: {0}"),
     "M801": QCoreApplication.translate(
         "MiscellaneousChecker",
         "print statement found"),
@@ -546,6 +610,9 @@
     "M822": QCoreApplication.translate(
         "MiscellaneousChecker",
         "mutable default argument of type {0}"),
+    "M823": QCoreApplication.translate(
+        "MiscellaneousChecker",
+        "mutable default argument of function call '{0}'"),
     "M901": QCoreApplication.translate(
         "MiscellaneousChecker",
         "{0}: {1}"),
@@ -736,6 +803,8 @@
     "M131": ["list"],
     "M132": ["list"],
     "M198": ["sorted"],
+    "M201": ["bar", "foo"],
+    "M507": ["x"],
     "M601": ["%s"],
     "M621": [5],
     "M622": ["foo"],
@@ -743,8 +812,10 @@
     "M632": ["foo"],
     "M701": ["print_function, unicode_literals", "print_function"],
     "M702": ["print_function, unicode_literals"],
+    "M711": ["lgettext"],
     "M821": ["Dict"],
     "M822": ["Call"],
+    "M823": ["dict"],
     "M901": ["SyntaxError", "Invalid Syntax"],
     "FWRITE_ERROR": ["IOError"],
 }
--- a/Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheck.py	Sun Mar 04 14:55:23 2018 +0100
+++ b/Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheck.py	Mon Apr 02 12:04:18 2018 +0200
@@ -163,7 +163,7 @@
         taskQueue.put(task)
 
     # Start worker processes
-    for i in range(NumberOfProcesses):
+    for _ in range(NumberOfProcesses):
         multiprocessing.Process(target=worker, args=(taskQueue, doneQueue))\
             .start()
 
@@ -193,7 +193,7 @@
             taskQueue.put(argumentsList[i + initialTasks])
 
     # Tell child processes to stop
-    for i in range(NumberOfProcesses):
+    for _ in range(NumberOfProcesses):
         taskQueue.put('STOP')
 
 
--- a/Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckService.py	Sun Mar 04 14:55:23 2018 +0100
+++ b/Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckService.py	Mon Apr 02 12:04:18 2018 +0200
@@ -57,7 +57,8 @@
         if pyVer:
             return 'Python{0}'.format(pyVer)
         
-        for lang, (env, getArgs, getExt) in self.__supportedLanguages.items():
+        for lang, (_env, _getArgs, getExt) in \
+                self.__supportedLanguages.items():
             if filename.endswith(tuple(getExt())):
                 return lang
         
@@ -112,7 +113,7 @@
         @return set of all supported file extensions (set of str)
         """
         extensions = set()
-        for env, getArgs, getExt in self.__supportedLanguages.values():
+        for _env, _getArgs, getExt in self.__supportedLanguages.values():
             for ext in getExt():
                 extensions.add(ext)
         return extensions
--- a/Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py	Sun Mar 04 14:55:23 2018 +0100
+++ b/Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py	Mon Apr 02 12:04:18 2018 +0200
@@ -357,7 +357,7 @@
                     source = ""
             else:
                 source = self.source.splitlines()
-            for _fn, lineno, col, code, msg in warnings:
+            for filename, lineno, col, _code, msg in warnings:
                 self.noResults = False
                 if source:
                     try:
@@ -366,7 +366,8 @@
                         scr_line = ""
                 else:
                     scr_line = ""
-                self.__createResultItem(_fn, lineno, col, msg, scr_line, True)
+                self.__createResultItem(filename, lineno, col, msg, scr_line,
+                                        True)
 
         self.progress += 1
         self.checkProgress.setValue(self.progress)
--- a/Plugins/CheckerPlugins/SyntaxChecker/jsCheckSyntax.py	Sun Mar 04 14:55:23 2018 +0100
+++ b/Plugins/CheckerPlugins/SyntaxChecker/jsCheckSyntax.py	Mon Apr 02 12:04:18 2018 +0200
@@ -27,7 +27,7 @@
     @return the entry point for the background client (function)
     """
     path = __file__
-    for i in range(4):
+    for _ in range(4):
         path = os.path.dirname(path)
     sys.path.insert(2, os.path.join(path, "ThirdParty", "Jasy"))
     return jsSyntaxCheck
@@ -114,7 +114,7 @@
         taskQueue.put(task)
 
     # Start worker processes
-    for i in range(NumberOfProcesses):
+    for _ in range(NumberOfProcesses):
         multiprocessing.Process(target=worker, args=(taskQueue, doneQueue))\
             .start()
 
@@ -144,7 +144,7 @@
             taskQueue.put(argumentsList[i + initialTasks])
 
     # Tell child processes to stop
-    for i in range(NumberOfProcesses):
+    for _ in range(NumberOfProcesses):
         taskQueue.put('STOP')
 
 
--- a/Plugins/CheckerPlugins/Tabnanny/Tabnanny.py	Sun Mar 04 14:55:23 2018 +0100
+++ b/Plugins/CheckerPlugins/Tabnanny/Tabnanny.py	Mon Apr 02 12:04:18 2018 +0200
@@ -171,7 +171,7 @@
         taskQueue.put(task)
 
     # Start worker processes
-    for i in range(NumberOfProcesses):
+    for _ in range(NumberOfProcesses):
         multiprocessing.Process(target=worker, args=(taskQueue, doneQueue))\
             .start()
 
@@ -201,7 +201,7 @@
             taskQueue.put(argumentsList[i + initialTasks])
 
     # Tell child processes to stop
-    for i in range(NumberOfProcesses):
+    for _ in range(NumberOfProcesses):
         taskQueue.put('STOP')
 
 
@@ -475,7 +475,7 @@
     indents = [Whitespace("")]
     check_equal = 0
     
-    for (tokenType, token, start, end, line) in tokens:
+    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
--- a/Plugins/DocumentationPlugins/Ericapi/EricapiConfigDialog.py	Sun Mar 04 14:55:23 2018 +0100
+++ b/Plugins/DocumentationPlugins/Ericapi/EricapiConfigDialog.py	Mon Apr 02 12:04:18 2018 +0200
@@ -63,8 +63,7 @@
         
         # combine it with the values of parms
         if parms is not None:
-            for key, value in list(parms.items()):
-                self.parameters[key] = parms[key]
+            self.parameters.update(parms)
         self.parameters['outputFile'] = \
             Utilities.toNativeSeparators(self.parameters['outputFile'])
         
--- a/Plugins/DocumentationPlugins/Ericdoc/EricdocConfigDialog.py	Sun Mar 04 14:55:23 2018 +0100
+++ b/Plugins/DocumentationPlugins/Ericdoc/EricdocConfigDialog.py	Mon Apr 02 12:04:18 2018 +0200
@@ -88,7 +88,7 @@
         
         # combine it with the values of parms
         if parms is not None:
-            for key, value in list(parms.items()):
+            for key in parms:
                 if key.endswith("Color"):
                     self.colors[key] = parms[key]
                 else:
@@ -240,7 +240,7 @@
             else:
                 args.append(
                     os.path.join(self.ppath, self.parameters['cssFile']))
-        for key, value in list(self.colors.items()):
+        for key in self.colors:
             if self.colors[key] != eric6docDefaultColors[key]:
                 parms[key] = self.colors[key]
                 args.append("--{0}={1}".format(
--- a/Plugins/VcsPlugins/vcsGit/GitDiffHighlighter.py	Sun Mar 04 14:55:23 2018 +0100
+++ b/Plugins/VcsPlugins/vcsGit/GitDiffHighlighter.py	Mon Apr 02 12:04:18 2018 +0200
@@ -71,7 +71,7 @@
             @param rules set of highlighting rules (list of tuples of rule
                 pattern (string) and highlighting format (QTextCharFormat))
             """
-            for idx, ruleFormat in enumerate(rules):
+            for ruleFormat in rules:
                 rule, formats = ruleFormat
                 terminal = rule.startswith(TERMINAL(''))
                 if terminal:
--- a/Plugins/VcsPlugins/vcsPySvn/SvnRepoBrowserDialog.py	Sun Mar 04 14:55:23 2018 +0100
+++ b/Plugins/VcsPlugins/vcsPySvn/SvnRepoBrowserDialog.py	Mon Apr 02 12:04:18 2018 +0200
@@ -164,7 +164,7 @@
                 entries = self.client.list(url, recurse=False)
                 firstTime = parent == self.repoTree
                 # dirent elements are all unicode in Python 2
-                for dirent, lock in entries:
+                for dirent, _lock in entries:
                     if (firstTime and dirent["path"] != url) or \
                        (parent != self.repoTree and dirent["path"] == url):
                         continue
--- a/Plugins/VcsPlugins/vcsPySvn/SvnTagBranchListDialog.py	Sun Mar 04 14:55:23 2018 +0100
+++ b/Plugins/VcsPlugins/vcsPySvn/SvnTagBranchListDialog.py	Mon Apr 02 12:04:18 2018 +0200
@@ -137,7 +137,7 @@
         try:
             entries = self.client.list(path, recurse=False)
             # dirent, lock already unicode in Python 2
-            for dirent, lock in entries:
+            for dirent, _lock in entries:
                 if dirent["path"] != path:
                     name = dirent["path"].replace(path + '/', "")
                     self.__generateItem(dirent["created_rev"].number,
--- a/Plugins/VcsPlugins/vcsSubversion/SvnStatusDialog.py	Sun Mar 04 14:55:23 2018 +0100
+++ b/Plugins/VcsPlugins/vcsSubversion/SvnStatusDialog.py	Mon Apr 02 12:04:18 2018 +0200
@@ -160,12 +160,12 @@
         self.status = {
             ' ': self.tr('normal'),
             'A': self.tr('added'),
+            'C': self.tr('conflict'),
             'D': self.tr('deleted'),
+            'I': self.tr('ignored'),
             'M': self.tr('modified'),
             'R': self.tr('replaced'),
-            'C': self.tr('conflict'),
             'X': self.tr('external'),
-            'I': self.tr('ignored'),
             '?': self.tr('unversioned'),
             '!': self.tr('missing'),
             '~': self.tr('type error'),
@@ -186,6 +186,7 @@
         self.switched = {
             ' ': self.tr('no'),
             'S': self.tr('yes'),
+            'X': self.tr('external')
         }
         self.lockinfo = {
             ' ': self.tr('not locked'),
@@ -511,9 +512,10 @@
                     flags = self.rx_status2.cap(1)
                     path = self.rx_status2.cap(2).strip()
                     
-                    self.__generateItem(flags[0], flags[1], flags[2], flags[3],
-                                        flags[4], flags[5], flags[-1], "", "",
-                                        "", path)
+                    if flags[-1] in self.uptodate:
+                        self.__generateItem(flags[0], flags[1], flags[2],
+                                            flags[3], flags[4], flags[5],
+                                            flags[-1], "", "", "", path)
                 elif self.rx_changelist.exactMatch(s):
                     self.currentChangelist = self.rx_changelist.cap(1)
                     self.changelistFound = True
--- a/Plugins/WizardPlugins/PyRegExpWizard/PyRegExpWizardDialog.py	Sun Mar 04 14:55:23 2018 +0100
+++ b/Plugins/WizardPlugins/PyRegExpWizard/PyRegExpWizardDialog.py	Mon Apr 02 12:04:18 2018 +0200
@@ -127,7 +127,7 @@
                 steps = abs(steps)
             else:
                 act = QTextCursor.Right
-            for i in range(steps):
+            for _ in range(steps):
                 tc.movePosition(act)
         self.regexpTextEdit.setTextCursor(tc)
         
--- a/Plugins/WizardPlugins/QRegularExpressionWizard/QRegularExpressionWizardDialog.py	Sun Mar 04 14:55:23 2018 +0100
+++ b/Plugins/WizardPlugins/QRegularExpressionWizard/QRegularExpressionWizardDialog.py	Mon Apr 02 12:04:18 2018 +0200
@@ -199,7 +199,7 @@
                 steps = abs(steps)
             else:
                 act = QTextCursor.Right
-            for i in range(steps):
+            for _ in range(steps):
                 tc.movePosition(act)
         self.regexpTextEdit.setTextCursor(tc)
     
--- a/Plugins/WizardPlugins/SetupWizard/SetupWizardDialog.py	Sun Mar 04 14:55:23 2018 +0100
+++ b/Plugins/WizardPlugins/SetupWizard/SetupWizardDialog.py	Mon Apr 02 12:04:18 2018 +0200
@@ -509,7 +509,7 @@
         startDir = self.packageRootEdit.text() or self.__getStartDir()
         if startDir:
             self.packagesList.clear()
-            for dirpath, dirnames, filenames in os.walk(startDir):
+            for dirpath, _dirnames, filenames in os.walk(startDir):
                 if "__init__.py" in filenames:
                     self.__addPackage(dirpath)
         self.autodiscoverPackagesButton.setEnabled(True)
--- a/Preferences/ConfigurationDialog.py	Sun Mar 04 14:55:23 2018 +0100
+++ b/Preferences/ConfigurationDialog.py	Mon Apr 02 12:04:18 2018 +0200
@@ -855,7 +855,7 @@
         Public method called to store the selected values into the preferences
         storage.
         """
-        for key, pageData in list(self.configItems.items()):
+        for pageData in self.configItems.values():
             if pageData[-1]:
                 pageData[-1].save()
                 # page was loaded (and possibly modified)
--- a/Preferences/ConfigurationPages/ApplicationPage.py	Sun Mar 04 14:55:23 2018 +0100
+++ b/Preferences/ConfigurationPages/ApplicationPage.py	Mon Apr 02 12:04:18 2018 +0200
@@ -13,6 +13,7 @@
 from .Ui_ApplicationPage import Ui_ApplicationPage
 
 import Preferences
+import Globals
 
 
 class ApplicationPage(ConfigurationPageBase, Ui_ApplicationPage):
@@ -42,6 +43,10 @@
             Preferences.getUI("ShowSplash"))
         self.crashSessionEnabledCheckBox.setChecked(
             Preferences.getUI("CrashSessionEnabled"))
+        self.globalMenuCheckBox.setChecked(
+            Preferences.getUI("UseNativeMenuBar"))
+        if not Globals.isLinuxPlatform():
+            self.globalMenuCheckBox.hide()
         
         openOnStartup = Preferences.getUI("OpenOnStartup")
         if openOnStartup == 0:
@@ -94,6 +99,10 @@
         Preferences.setUI(
             "CrashSessionEnabled",
             self.crashSessionEnabledCheckBox.isChecked())
+        if Globals.isLinuxPlatform():
+            Preferences.setUI(
+                "UseNativeMenuBar",
+                self.globalMenuCheckBox.isChecked())
         
         if self.noOpenRadioButton.isChecked():
             openOnStartup = 0
--- a/Preferences/ConfigurationPages/ApplicationPage.ui	Sun Mar 04 14:55:23 2018 +0100
+++ b/Preferences/ConfigurationPages/ApplicationPage.ui	Mon Apr 02 12:04:18 2018 +0200
@@ -62,6 +62,16 @@
     </widget>
    </item>
    <item>
+    <widget class="QCheckBox" name="globalMenuCheckBox">
+     <property name="toolTip">
+      <string>Select to use the global application menu bar</string>
+     </property>
+     <property name="text">
+      <string>Use Global Menu Bar</string>
+     </property>
+    </widget>
+   </item>
+   <item>
     <widget class="QGroupBox" name="groupBox_3">
      <property name="title">
       <string>Open at startup</string>
@@ -346,6 +356,7 @@
   <tabstop>singleApplicationCheckBox</tabstop>
   <tabstop>splashScreenCheckBox</tabstop>
   <tabstop>crashSessionEnabledCheckBox</tabstop>
+  <tabstop>globalMenuCheckBox</tabstop>
   <tabstop>noOpenRadioButton</tabstop>
   <tabstop>lastFileRadioButton</tabstop>
   <tabstop>lastProjectRadioButton</tabstop>
@@ -360,6 +371,7 @@
   <tabstop>systemEmailClientCheckBox</tabstop>
   <tabstop>errorlogCheckBox</tabstop>
   <tabstop>intervalSpinBox</tabstop>
+  <tabstop>backgroundServicesSpinBox</tabstop>
  </tabstops>
  <resources/>
  <connections>
--- a/Preferences/__init__.py	Sun Mar 04 14:55:23 2018 +0100
+++ b/Preferences/__init__.py	Mon Apr 02 12:04:18 2018 +0200
@@ -200,6 +200,7 @@
         "ShowSplash": True,
         "SingleCloseButton": False,
         "SplitOrientationVertical": False,
+        "UseNativeMenuBar": True,
         
         "PerformVersionCheck": 4,
         # 0 = off
@@ -1953,7 +1954,8 @@
                "RequestDownloadFilename",
                "LayoutShellEmbedded", "LayoutFileBrowserEmbedded",
                "CheckErrorLog", "NotificationsEnabled", "DynamicOnlineCheck",
-               "OpenCrashSessionOnStartup", "CrashSessionEnabled"]:
+               "OpenCrashSessionOnStartup", "CrashSessionEnabled",
+               "UseNativeMenuBar"]:
         return toBool(prefClass.settings.value(
             "UI/" + key, prefClass.uiDefaults[key]))
     elif key in ["TabViewManagerFilenameLength", "CaptionFilenameLength",
--- a/Project/Project.py	Sun Mar 04 14:55:23 2018 +0100
+++ b/Project/Project.py	Mon Apr 02 12:04:18 2018 +0200
@@ -2337,7 +2337,7 @@
                     if os.path.exists(os.path.join(self.ppath, indicator)):
                         if len(vcsData) > 1:
                             vcsList = []
-                            for vcsSystemStr, vcsSystemDisplay in vcsData:
+                            for _vcsSystemStr, vcsSystemDisplay in vcsData:
                                 vcsList.append(vcsSystemDisplay)
                             res, vcs_ok = QInputDialog.getItem(
                                 None,
@@ -2412,10 +2412,10 @@
                 if ok and vcsSelected != self.tr("None"):
                     for vcsSystem, vcsSystemDisplay in vcsSystemsDict.items():
                         if vcsSystemDisplay == vcsSelected:
+                            self.pdata["VCS"] = vcsSystem
                             break
                     else:
-                        vcsSystem = "None"
-                    self.pdata["VCS"] = vcsSystem
+                        self.pdata["VCS"] = 'None'
                 else:
                     self.pdata["VCS"] = 'None'
                 self.vcs = self.initVCS()
@@ -2757,7 +2757,7 @@
                                     os.path.join(self.ppath, indicator)):
                                 if len(vcsData) > 1:
                                     vcsList = []
-                                    for vcsSystemStr, vcsSystemDisplay in \
+                                    for _vcsSystemStr, vcsSystemDisplay in \
                                             vcsData:
                                         vcsList.append(vcsSystemDisplay)
                                     QApplication.restoreOverrideCursor()
--- a/Project/QuickFindFileDialog.py	Sun Mar 04 14:55:23 2018 +0100
+++ b/Project/QuickFindFileDialog.py	Mon Apr 02 12:04:18 2018 +0200
@@ -215,7 +215,7 @@
         self.fileList.clear()
         locations = {}
 
-        for in_order, age, name in ordered:
+        for _in_order, _age, name in ordered:
             found = True
             QTreeWidgetItem(self.fileList, [os.path.basename(name),
                                             os.path.dirname(name)])
--- a/Project/UserPropertiesDialog.py	Sun Mar 04 14:55:23 2018 +0100
+++ b/Project/UserPropertiesDialog.py	Mon Apr 02 12:04:18 2018 +0200
@@ -47,10 +47,10 @@
         enableVcsGroup = False
         if self.project.pdata["VCS"]:
             found = False
-            for indicator, vcsData in \
+            for _indicator, vcsData in \
                     e5App().getObject("PluginManager")\
                     .getVcsSystemIndicators().items():
-                for vcsSystem, vcsSystemDisplay in vcsData:
+                for vcsSystem, _vcsSystemDisplay in vcsData:
                     if vcsSystem == self.project.pdata["VCS"]:
                         found = True
                         break
--- a/QScintilla/Editor.py	Sun Mar 04 14:55:23 2018 +0100
+++ b/QScintilla/Editor.py	Mon Apr 02 12:04:18 2018 +0200
@@ -2174,12 +2174,12 @@
         Note: This doesn't clear the breakpoint in the debugger,
         it just deletes it from the editor internal list of breakpoints.
         
-        @param line linenumber of the breakpoint (integer)
+        @param line line number of the breakpoint (integer)
         """
         if self.inLinesChanged:
             return
         
-        for handle, (ln, _, _, _, _) in list(self.breaks.items()):
+        for handle in self.breaks:
             if self.markerLine(handle) == line - 1:
                 break
         else:
@@ -2218,7 +2218,7 @@
         @param line line number of the breakpoint (integer)
         @param temporary flag indicating a temporary breakpoint (boolean)
         """
-        for handle, (ln, _, _, _, _) in list(self.breaks.items()):
+        for handle in self.breaks:
             if self.markerLine(handle) == line - 1:
                 # delete breakpoint or toggle it to the next state
                 index = self.breakpointModel.getBreakPointIndex(
@@ -2253,16 +2253,13 @@
         
         @param line line number of the breakpoint (integer)
         """
-        for handle, (ln, cond, temp, enabled, ignorecount) in \
-                self.breaks.items():
+        for handle in self.breaks:
             if self.markerLine(handle) == line - 1:
+                index = self.breakpointModel.getBreakPointIndex(
+                    self.fileName, line)
+                self.breakpointModel.setBreakPointEnabledByIndex(
+                    index, not self.breaks[handle][3])
                 break
-        else:
-            # no breakpoint found on that line
-            return
-        
-        index = self.breakpointModel.getBreakPointIndex(self.fileName, line)
-        self.breakpointModel.setBreakPointEnabledByIndex(index, not enabled)
         
     def curLineHasBreakpoint(self):
         """
@@ -2340,28 +2337,25 @@
             self.line = line - 1
         if self.line < 0:
             self.line, index = self.getCursorPosition()
-        found = False
-        for handle, (ln, cond, temp, enabled, ignorecount) in \
-                self.breaks.items():
+        
+        for handle in self.breaks:
             if self.markerLine(handle) == self.line:
-                found = True
-                break
-        
-        if found:
-            index = self.breakpointModel.getBreakPointIndex(self.fileName, ln)
-            if not index.isValid():
-                return
-            
-            from Debugger.EditBreakpointDialog import EditBreakpointDialog
-            dlg = EditBreakpointDialog(
-                (self.fileName, ln),
-                (cond, temp, enabled, ignorecount),
-                self.condHistory, self, modal=True)
-            if dlg.exec_() == QDialog.Accepted:
-                cond, temp, enabled, ignorecount = dlg.getData()
-                self.breakpointModel.setBreakPointByIndex(
-                    index, self.fileName, ln,
-                    (cond, temp, enabled, ignorecount))
+                ln, cond, temp, enabled, ignorecount = self.breaks[handle]
+                index = self.breakpointModel.getBreakPointIndex(self.fileName,
+                                                                ln)
+                if not index.isValid():
+                    return
+                
+                from Debugger.EditBreakpointDialog import EditBreakpointDialog
+                dlg = EditBreakpointDialog(
+                    (self.fileName, ln),
+                    (cond, temp, enabled, ignorecount),
+                    self.condHistory, self, modal=True)
+                if dlg.exec_() == QDialog.Accepted:
+                    cond, temp, enabled, ignorecount = dlg.getData()
+                    self.breakpointModel.setBreakPointByIndex(
+                        index, self.fileName, ln,
+                        (cond, temp, enabled, ignorecount))
         
         self.line = -1
         
@@ -2413,7 +2407,7 @@
         @param fileName name of the file (string)
         """
         idxList = []
-        for handle, (ln, _, _, _, _) in list(self.breaks.items()):
+        for (ln, _, _, _, _) in self.breaks.values():
             index = self.breakpointModel.getBreakPointIndex(fileName, ln)
             if index.isValid():
                 idxList.append(index)
@@ -2771,7 +2765,7 @@
         newL = self.__lastSavedText.splitlines()
         matcher = difflib.SequenceMatcher(None, oldL, newL)
         
-        for token, i1, i2, j1, j2 in matcher.get_opcodes():
+        for token, _, _, j1, j2 in matcher.get_opcodes():
             if token in ["insert", "replace"]:
                 for lineNo in range(j1, j2):
                     self.markerAdd(lineNo, self.__changeMarkerSaved)
@@ -2782,7 +2776,7 @@
         newL = self.text().splitlines()
         matcher = difflib.SequenceMatcher(None, oldL, newL)
         
-        for token, i1, i2, j1, j2 in matcher.get_opcodes():
+        for token, _, _, j1, j2 in matcher.get_opcodes():
             if token in ["insert", "replace"]:
                 for lineNo in range(j1, j2):
                     self.markerAdd(lineNo, self.__changeMarkerUnsaved)
@@ -2804,7 +2798,7 @@
         newL = self.__lastSavedText.splitlines()
         matcher = difflib.SequenceMatcher(None, oldL, newL)
         
-        for token, i1, i2, j1, j2 in matcher.get_opcodes():
+        for token, _, _, j1, j2 in matcher.get_opcodes():
             if token in ["insert", "replace"]:
                 for lineNo in range(j1, j2):
                     self.markerAdd(lineNo, self.__changeMarkerSaved)
@@ -5698,7 +5692,7 @@
             self.toggleSyntaxError(lineno, col, True, msg)
         
         warnings = problems.get('warnings', [])
-        for _fn, lineno, col, code, msg in warnings:
+        for _fn, lineno, col, _code, msg in warnings:
             self.toggleWarning(lineno, col, True, msg)
         
         self.updateVerticalScrollBar()
--- a/QScintilla/EditorAssembly.py	Sun Mar 04 14:55:23 2018 +0100
+++ b/QScintilla/EditorAssembly.py	Mon Apr 02 12:04:18 2018 +0200
@@ -316,23 +316,23 @@
         lineno += 1     # cursor position is zero based, code info one based
         
         # step 1: search in the globals
+        indexFound = 0
         for (lower, upper), index in self.__globalsBoundaries.items():
             if upper == -1:
                 upper = 1000000     # it is the last line
             if lower <= lineno <= upper:
+                indexFound = index
                 break
-        else:
-            index = 0
-        self.__globalsCombo.setCurrentIndex(index)
-        self.__globalsActivated(index, moveCursor=False)
+        self.__globalsCombo.setCurrentIndex(indexFound)
+        self.__globalsActivated(indexFound, moveCursor=False)
         
         # step 2: search in members
+        indexFound = 0
         for (lower, upper), index in self.__membersBoundaries.items():
             if upper == -1:
                 upper = 1000000     # it is the last line
             if lower <= lineno <= upper:
+                indexFound = index
                 break
-        else:
-            index = 0
-        self.__membersCombo.setCurrentIndex(index)
-        self.__membersActivated(index, moveCursor=False)
+        self.__membersCombo.setCurrentIndex(indexFound)
+        self.__membersActivated(indexFound, moveCursor=False)
--- a/QScintilla/MiniEditor.py	Sun Mar 04 14:55:23 2018 +0100
+++ b/QScintilla/MiniEditor.py	Mon Apr 02 12:04:18 2018 +0200
@@ -2342,9 +2342,6 @@
         self.__textEdit.setText(txt)
         QApplication.restoreOverrideCursor()
         
-        self.__textEdit.setModified(modified)
-        self.setWindowModified(modified)
-        
         if filetype is None:
             self.filetype = ""
         else:
@@ -2434,6 +2431,18 @@
         
         return True
     
+    def setWindowModified(self, modified):
+        """
+        Public method to set the window modification status.
+        
+        @param modified flag indicating the modification status
+        @type bool
+        """
+        if "[*]" not in self.windowTitle():
+            self.setWindowTitle(self.tr("[*] - {0}")
+                                .format(self.tr("Mini Editor")))
+        super(MiniEditor, self).setWindowModified(modified)
+        
     def __setCurrentFile(self, fileName):
         """
         Private method to register the file name of the current file.
--- a/QScintilla/QsciScintillaCompat.py	Sun Mar 04 14:55:23 2018 +0100
+++ b/QScintilla/QsciScintillaCompat.py	Mon Apr 02 12:04:18 2018 +0200
@@ -1539,7 +1539,7 @@
             pos = self.SendScintilla(QsciScintilla.SCI_POSITIONFROMLINE, line)
             
             # Allow for multi-byte characters
-            for i in range(index):
+            for _ in range(index):
                 pos = self.positionAfter(pos)
             
             return pos
--- a/Toolbox/Startup.py	Sun Mar 04 14:55:23 2018 +0100
+++ b/Toolbox/Startup.py	Mon Apr 02 12:04:18 2018 +0200
@@ -12,8 +12,7 @@
 import os
 import sys
 
-from PyQt5.QtCore import Qt, QTranslator, QLocale, QLibraryInfo, QDir, \
-    QTextCodec, QCoreApplication
+from PyQt5.QtCore import QTranslator, QLocale, QLibraryInfo, QDir, QTextCodec
 from PyQt5.QtWidgets import QApplication
 
 from E5Gui.E5Application import E5Application
@@ -223,10 +222,6 @@
     """
     handleArgs(argv, appinfo)
     if app is None:
-        try:
-            QCoreApplication.setAttribute(Qt.AA_ShareOpenGLContexts, True)
-        except AttributeError:
-            pass
         # set the library paths for plugins
         setLibraryPaths()
         app = E5Application(argv)
--- a/UI/NumbersWidget.py	Sun Mar 04 14:55:23 2018 +0100
+++ b/UI/NumbersWidget.py	Mon Apr 02 12:04:18 2018 +0200
@@ -226,7 +226,7 @@
         # determine byte count
         byteCount = 8
         tmp = self.__input
-        for i in range(8):
+        for _ in range(8):
             c = (tmp & 0xff00000000000000) >> 7 * 8
             if c != 0 and self.__input >= 0:
                 break
@@ -301,7 +301,7 @@
         
         tmp1 = self.__input
         tmp2 = 0
-        for i in range(bytesIn):
+        for _ in range(bytesIn):
             tmp2 <<= 8
             tmp2 |= tmp1 & 0xff
             tmp1 >>= 8
--- a/UI/UserInterface.py	Sun Mar 04 14:55:23 2018 +0100
+++ b/UI/UserInterface.py	Mon Apr 02 12:04:18 2018 +0200
@@ -2566,7 +2566,9 @@
         """
         self.__menus = {}
         mb = self.menuBar()
-        if Utilities.isLinuxPlatform():
+        # TODO: make this configurable (True default)
+        if Utilities.isLinuxPlatform() and \
+           not Preferences.getUI("UseNativeMenuBar"):
             mb.setNativeMenuBar(False)
         
         self.__menus["file"] = self.viewmanager.initFileMenu()
@@ -3720,12 +3722,12 @@
         name = act.data()
         if name:
             if name == "__SHOW__":
-                for text, tb in list(self.__toolbars.values()):
+                for _text, tb in self.__toolbars.values():
                     tb.show()
                 if self.__menus["toolbars"].isTearOffMenuVisible():
                     self.__menus["toolbars"].hideTearOffMenu()
             elif name == "__HIDE__":
-                for text, tb in list(self.__toolbars.values()):
+                for _text, tb in self.__toolbars.values():
                     tb.hide()
                 if self.__menus["toolbars"].isTearOffMenuVisible():
                     self.__menus["toolbars"].hideTearOffMenu()
@@ -3746,10 +3748,10 @@
         name = act.data()
         if name:
             if name == "__SHOW__":
-                for text, tb in list(self.__toolbars.values()):
+                for _text, tb in self.__toolbars.values():
                     tb.show()
             elif name == "__HIDE__":
-                for text, tb in list(self.__toolbars.values()):
+                for _text, tb in self.__toolbars.values():
                     tb.hide()
             else:
                 tb = self.__toolbars[name][1]
@@ -4948,7 +4950,7 @@
         ioEncoding = Preferences.getSystem("IOEncoding")
         
         # loop through all running tool processes
-        for program, toolProc, toolProcData in self.toolProcs:
+        for program, toolProc, _toolProcData in self.toolProcs:
             toolProc.setReadChannel(QProcess.StandardError)
             
             while toolProc.canReadLine():
--- a/Utilities/BackgroundService.py	Sun Mar 04 14:55:23 2018 +0100
+++ b/Utilities/BackgroundService.py	Mon Apr 02 12:04:18 2018 +0200
@@ -445,6 +445,6 @@
             connection.blockSignals(True)
             connection.close()
         
-        for process, interpreter in self.processes.values():
+        for process, _interpreter in self.processes.values():
             process.close()
             process = None
--- a/Utilities/binplistlib.py	Sun Mar 04 14:55:23 2018 +0100
+++ b/Utilities/binplistlib.py	Mon Apr 02 12:04:18 2018 +0200
@@ -997,7 +997,7 @@
         all_positions = []
         writtenReferences = list(self.writtenReferences.items())
         writtenReferences.sort(key=lambda x: x[1])
-        for obj, order in writtenReferences:
+        for obj, _order in writtenReferences:
             position = self.referencePositions.get(obj)
             if position is None:
                 raise InvalidPlistException(
--- a/Utilities/crypto/py3AES.py	Sun Mar 04 14:55:23 2018 +0100
+++ b/Utilities/crypto/py3AES.py	Mon Apr 02 12:04:18 2018 +0200
@@ -289,7 +289,7 @@
         @return result (byte)
         """
         p = 0
-        for counter in range(8):
+        for _counter in range(8):
             if b & 1:
                 p ^= a
             hi_bit_set = a & 0x80
@@ -344,7 +344,7 @@
         @return modified state (bytearray)
         """
         state = state[:]
-        for i in range(nbr):
+        for _ in range(nbr):
             if isInv:
                 state[statePointer:statePointer + 4] = \
                     state[statePointer + 3:statePointer + 4] + \
--- a/Utilities/crypto/py3PBKDF2.py	Sun Mar 04 14:55:23 2018 +0100
+++ b/Utilities/crypto/py3PBKDF2.py	Mon Apr 02 12:04:18 2018 +0200
@@ -37,7 +37,7 @@
     @return hashed password (bytes)
     """
     pwHash = password
-    for i in range(iterations):
+    for _ in range(iterations):
         pwHash = hmac.new(salt, pwHash, digestMod).digest()
     return pwHash
 
--- a/VCS/ProjectHelper.py	Sun Mar 04 14:55:23 2018 +0100
+++ b/VCS/ProjectHelper.py	Mon Apr 02 12:04:18 2018 +0200
@@ -211,14 +211,17 @@
             0, False)
         if not ok:
             return
+        
+        selectedVcsSystem = None
         for vcsSystem, vcsSystemDisplay in list(vcsSystemsDict.items()):
             if vcsSystemDisplay == vcsSelected:
+                selectedVcsSystem = vcsSystem
                 break
         
         if not self.project.closeProject():
             return
         
-        vcs = self.project.initVCS(vcsSystem)
+        vcs = self.project.initVCS(selectedVcsSystem)
         if vcs is not None:
             vcsdlg = vcs.vcsNewProjectOptionsDialog()
             if vcsdlg.exec_() == QDialog.Accepted:
@@ -313,7 +316,7 @@
                             if dlg.exec_() == QDialog.Accepted:
                                 dlg.storeData()
                                 self.project.initFileTypes()
-                                self.project.pdata["VCS"] = vcsSystem
+                                self.project.pdata["VCS"] = selectedVcsSystem
                                 self.project.setDirty(True)
                                 if self.project.pdata["MAINSCRIPT"]:
                                     ms = os.path.join(
@@ -405,49 +408,54 @@
             0, False)
         if not ok:
             return
+        
+        selectedVcsSystem = None
         for vcsSystem, vcsSystemDisplay in list(vcsSystemsDict.items()):
             if vcsSystemDisplay == vcsSelected:
+                selectedVcsSystem = vcsSystem
                 break
         
-        self.project.pdata["VCS"] = vcsSystem
-        self.project.vcs = self.project.initVCS(vcsSystem)
-        if self.project.vcs is not None:
-            vcsdlg = self.project.vcs.vcsOptionsDialog(self.project,
-                                                       self.project.name, 1)
-            if vcsdlg.exec_() == QDialog.Accepted:
-                vcsDataDict = vcsdlg.getData()
-                # edit VCS command options
-                if self.project.vcs.vcsSupportCommandOptions():
-                    vcores = E5MessageBox.yesNo(
-                        self.parent(),
-                        QCoreApplication.translate(
-                            "VcsProjectHelper", "Import Project"),
-                        QCoreApplication.translate(
-                            "VcsProjectHelper",
-                            """Would you like to edit the VCS command"""
-                            """ options?"""))
+        if selectedVcsSystem is not None:
+            self.project.pdata["VCS"] = selectedVcsSystem
+            self.project.vcs = self.project.initVCS(selectedVcsSystem)
+            if self.project.vcs is not None:
+                vcsdlg = self.project.vcs.vcsOptionsDialog(
+                    self.project, self.project.name, 1)
+                if vcsdlg.exec_() == QDialog.Accepted:
+                    vcsDataDict = vcsdlg.getData()
+                    # edit VCS command options
+                    if self.project.vcs.vcsSupportCommandOptions():
+                        vcores = E5MessageBox.yesNo(
+                            self.parent(),
+                            QCoreApplication.translate(
+                                "VcsProjectHelper", "Import Project"),
+                            QCoreApplication.translate(
+                                "VcsProjectHelper",
+                                """Would you like to edit the VCS command"""
+                                """ options?"""))
+                    else:
+                        vcores = False
+                    if vcores:
+                        from .CommandOptionsDialog import \
+                            VcsCommandOptionsDialog
+                        codlg = VcsCommandOptionsDialog(self.project.vcs)
+                        if codlg.exec_() == QDialog.Accepted:
+                            self.project.vcs.vcsSetOptions(codlg.getOptions())
+                    self.project.setDirty(True)
+                    self.project.vcs.vcsSetDataFromDict(vcsDataDict)
+                    self.project.saveProject()
+                    isVcsControlled = self.project.vcs.vcsImport(
+                        vcsDataDict, self.project.ppath)[0]
+                    if isVcsControlled:
+                        # reopen the project
+                        self.project.openProject(self.project.pfile)
+                    else:
+                        # revert the changes to the local project
+                        # because the project dir is not a VCS directory
+                        revertChanges()
                 else:
-                    vcores = False
-                if vcores:
-                    from .CommandOptionsDialog import VcsCommandOptionsDialog
-                    codlg = VcsCommandOptionsDialog(self.project.vcs)
-                    if codlg.exec_() == QDialog.Accepted:
-                        self.project.vcs.vcsSetOptions(codlg.getOptions())
-                self.project.setDirty(True)
-                self.project.vcs.vcsSetDataFromDict(vcsDataDict)
-                self.project.saveProject()
-                isVcsControlled = self.project.vcs.vcsImport(
-                    vcsDataDict, self.project.ppath)[0]
-                if isVcsControlled:
-                    # reopen the project
-                    self.project.openProject(self.project.pfile)
-                else:
-                    # revert the changes to the local project
-                    # because the project dir is not a VCS directory
+                    # revert the changes because user cancelled
                     revertChanges()
-            else:
-                # revert the changes because user cancelled
-                revertChanges()
 
     def _vcsUpdate(self):
         """
--- a/VCS/__init__.py	Sun Mar 04 14:55:23 2018 +0100
+++ b/VCS/__init__.py	Mon Apr 02 12:04:18 2018 +0200
@@ -40,23 +40,16 @@
     if vc is None:
         # try alternative vcs interfaces assuming, that there is a common
         # indicator for the alternatives
-        found = False
-        for indicator, vcsData in \
-                pluginManager.getVcsSystemIndicators().items():
-            for vcsSystem, vcsSystemDisplay in vcsData:
-                if vcsSystem == vcs:
-                    found = True
-                    break
-            
-            if found:
-                if len(vcsData) > 1:
-                    for vcsSystem, vcsSystemDisplay in vcsData:
+        for vcsData in pluginManager.getVcsSystemIndicators().values():
+            for vcsSystem, _vcsSystemDisplay in vcsData:
+                if vcsSystem == vcs and len(vcsData) > 1:
+                    for vcsSystem, _vcsSystemDisplay in vcsData:
                         if vcsSystem != vcs:
                             vc = pluginManager.getPluginObject(
                                 "version_control", vcsSystem, maybeActive=True)
                             if vc is not None:
-                                break
-                break
+                                return vc
+    
     return vc
 
 
--- a/WebBrowser/SafeBrowsing/SafeBrowsingCache.py	Sun Mar 04 14:55:23 2018 +0100
+++ b/WebBrowser/SafeBrowsing/SafeBrowsingCache.py	Mon Apr 02 12:04:18 2018 +0200
@@ -293,7 +293,7 @@
                 
                 query.exec_()
                 
-                while query.next():
+                while query.next():             # __IGNORE_WARNING_M513__
                     threatType = query.value(0)
                     platformType = query.value(1)
                     threatEntryType = query.value(2)
@@ -338,7 +338,7 @@
                 
                 query.exec_()
                 
-                while query.next():
+                while query.next():             # __IGNORE_WARNING_M513__
                     fullHash = bytes(query.value(0))
                     threatType = query.value(1)
                     platformType = query.value(2)
@@ -518,7 +518,7 @@
                 
                 query.exec_()
                 
-                while query.next():
+                while query.next():             # __IGNORE_WARNING_M513__
                     threatType = query.value(0)
                     platformType = query.value(1)
                     threatEntryType = query.value(2)
@@ -646,7 +646,7 @@
                 
                 query.exec_()
                 
-                while query.next():
+                while query.next():             # __IGNORE_WARNING_M513__
                     sha256Hash.addData(query.value(0))
                     QCoreApplication.processEvents(QEventLoop.AllEvents,
                                                    self.maxProcessEventsTime)
@@ -727,7 +727,7 @@
                 query.exec_()
                 
                 index = 0
-                while query.next():
+                while query.next():         # __IGNORE_WARNING_M513__
                     if index in indexes:
                         prefix = bytes(query.value(0))
                         output.append(prefix)
--- a/WebBrowser/SafeBrowsing/SafeBrowsingManager.py	Sun Mar 04 14:55:23 2018 +0100
+++ b/WebBrowser/SafeBrowsing/SafeBrowsingManager.py	Mon Apr 02 12:04:18 2018 +0200
@@ -246,7 +246,7 @@
         
         # step 2: update threat lists
         threatListsForRemove = {}
-        for threatList, clientState in self.__cache.getThreatLists():
+        for threatList, _clientState in self.__cache.getThreatLists():
             threatListsForRemove[repr(threatList)] = threatList
         threatLists = self.__apiClient.getThreatLists()
         maximum = len(threatLists)
@@ -404,7 +404,7 @@
         matchingFullHashes = set()
         isPotentialThreat = False
         # Lookup hash prefixes which match full URL hash
-        for threatList, hashPrefix, negativeCacheExpired in \
+        for _threatList, hashPrefix, negativeCacheExpired in \
                 self.__cache.lookupHashPrefix(cues):
             for fullHash in fullHashes:
                 if fullHash.startswith(hashPrefix):
@@ -486,7 +486,7 @@
         negativeCacheDuration = int(
             fullHashResponses["negativeCacheDuration"].rstrip("s"))
         for prefixValue in hashPrefixes:
-            for threatList, clientState in threatLists:
+            for threatList, _clientState in threatLists:
                 self.__cache.updateHashPrefixExpiration(
                     threatList, prefixValue, negativeCacheDuration)
     
--- a/WebBrowser/WebBrowserPage.py	Sun Mar 04 14:55:23 2018 +0100
+++ b/WebBrowser/WebBrowserPage.py	Mon Apr 02 12:04:18 2018 +0200
@@ -86,9 +86,6 @@
         self.__printer = None
         self.__badSite = False
         
-        if qVersionTuple()[0:2] == (5, 10):
-            self.loadProgress.connect(self.__loadProgressSlot)
-        
         # Workaround for changing webchannel world inside
         # acceptNavigationRequest not working
         self.__channelUrl = QUrl()
@@ -105,18 +102,6 @@
         """
         self.__setupWebChannelForUrl(self.__channelUrl)
     
-    @pyqtSlot(int)
-    def __loadProgressSlot(self, progress):
-        """
-        Private slot to implement a workaround for the loadFinished signal
-        not working properly in Qt 5.10.0.
-        
-        @param progress load progress in percent
-        @type int
-        """
-        if progress == 100:
-            self.loadFinished.emit(True)
-    
     def acceptNavigationRequest(self, url, type_, isMainFrame):
         """
         Public method to determine, if a request may be accepted.
--- a/WebBrowser/WebBrowserWindow.py	Sun Mar 04 14:55:23 2018 +0100
+++ b/WebBrowser/WebBrowserWindow.py	Mon Apr 02 12:04:18 2018 +0200
@@ -4289,11 +4289,11 @@
                 self.__setStatusBarVisible(act.isChecked())
             
             elif name == "__SHOW__":
-                for text, tb in list(self.__toolbars.values()):
+                for _text, tb in list(self.__toolbars.values()):
                     tb.show()
             
             elif name == "__HIDE__":
-                for text, tb in list(self.__toolbars.values()):
+                for _text, tb in list(self.__toolbars.values()):
                     tb.hide()
             
             else:
@@ -4558,7 +4558,7 @@
                 self.__searchWidget.hide()
                 self.__tabWidget.tabBar().hide()
                 if Preferences.getWebBrowser("ShowToolbars"):
-                    for title, toolbar in self.__toolbars.values():
+                    for _title, toolbar in self.__toolbars.values():
                         if toolbar is not self.__bookmarksToolBar:
                             toolbar.hide()
                 self.__navigationBar.exitFullScreenButton().setVisible(True)
--- a/changelog	Sun Mar 04 14:55:23 2018 +0100
+++ b/changelog	Mon Apr 02 12:04:18 2018 +0200
@@ -1,5 +1,16 @@
 Change Log
 ----------
+Version 18.04:
+- bug fixes
+- General
+  -- added config option to disable the use of the global menu bar on Linux
+- Code Style Checker
+  -- added checks for default docstring in functions and modules
+  -- added check for dictionaries with sorted keys
+  -- added checks for logging statements
+  -- added check for the 'gettext' import statement
+  -- added some checks of the bugbear checker
+
 Version 18.03:
 - bug fixes
 - Editor
--- a/eric6.e4p	Sun Mar 04 14:55:23 2018 +0100
+++ b/eric6.e4p	Mon Apr 02 12:04:18 2018 +0200
@@ -2200,14 +2200,14 @@
   </Resources>
   <Others>
     <Other>.hgignore</Other>
+    <Other>APIs/Python/zope-2.10.7.api</Other>
+    <Other>APIs/Python/zope-2.11.2.api</Other>
+    <Other>APIs/Python/zope-3.3.1.api</Other>
     <Other>APIs/Python3/PyQt4.bas</Other>
     <Other>APIs/Python3/PyQt5.bas</Other>
     <Other>APIs/Python3/QScintilla2.bas</Other>
     <Other>APIs/Python3/eric6.api</Other>
     <Other>APIs/Python3/eric6.bas</Other>
-    <Other>APIs/Python/zope-2.10.7.api</Other>
-    <Other>APIs/Python/zope-2.11.2.api</Other>
-    <Other>APIs/Python/zope-3.3.1.api</Other>
     <Other>APIs/QSS/qss.api</Other>
     <Other>APIs/Ruby/Ruby-1.8.7.api</Other>
     <Other>APIs/Ruby/Ruby-1.8.7.bas</Other>
@@ -2832,7 +2832,7 @@
               <string>ExcludeMessages</string>
             </key>
             <value>
-              <string>C101, E265, E266, E305, E402, M811, N802, N803, N807, N808, N821, W293</string>
+              <string>C101, E265, E266, E305, E402, M811, N802, N803, N807, N808, N821, W293, M201</string>
             </value>
             <key>
               <string>FixCodes</string>
--- a/eric6.py	Sun Mar 04 14:55:23 2018 +0100
+++ b/eric6.py	Mon Apr 02 12:04:18 2018 +0200
@@ -372,7 +372,7 @@
     # start the event loop
     inMainLoop = True
     res = app.exec_()
-    logging.debug("Shutting down, result {0:d}".format(res))
+    logging.debug("Shutting down, result %d", res)
     logging.shutdown()
     sys.exit(res)
 
--- a/i18n/eric6_cs.ts	Sun Mar 04 14:55:23 2018 +0100
+++ b/i18n/eric6_cs.ts	Mon Apr 02 12:04:18 2018 +0200
@@ -1267,162 +1267,162 @@
         <translation>Zobrazit Splash Screen při spuštění</translation>
     </message>
     <message>
-        <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="145"/>
+        <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="155"/>
         <source>Select to disable update checking</source>
         <translation>Vybrat pro vypnutí zjišťování updatů</translation>
     </message>
     <message>
-        <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="148"/>
-        <source>None</source>
-        <translation>Nic</translation>
-    </message>
-    <message>
-        <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="155"/>
-        <source>Select to check for updates at every startup</source>
-        <translation>Vybrat pro zjišťování updatů při každém spuštění</translation>
-    </message>
-    <message>
         <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="158"/>
-        <source>Always</source>
-        <translation>Vždy</translation>
+        <source>None</source>
+        <translation>Nic</translation>
     </message>
     <message>
         <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="165"/>
-        <source>Select to check for updates once a day</source>
-        <translation>Vybrat pro zjišťování updatů jednou denně</translation>
+        <source>Select to check for updates at every startup</source>
+        <translation>Vybrat pro zjišťování updatů při každém spuštění</translation>
     </message>
     <message>
         <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="168"/>
-        <source>Daily</source>
-        <translation>Denně</translation>
+        <source>Always</source>
+        <translation>Vždy</translation>
     </message>
     <message>
         <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="175"/>
-        <source>Select to check for updates once a week</source>
-        <translation>Vybrat pro zjišťování updatů jednou týdně</translation>
+        <source>Select to check for updates once a day</source>
+        <translation>Vybrat pro zjišťování updatů jednou denně</translation>
     </message>
     <message>
         <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="178"/>
-        <source>Weekly</source>
-        <translation>Týdně</translation>
+        <source>Daily</source>
+        <translation>Denně</translation>
     </message>
     <message>
         <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="185"/>
-        <source>Select to check for updates once a month</source>
-        <translation>Vybrat pro zjišťování updatů jednou měsíčně</translation>
+        <source>Select to check for updates once a week</source>
+        <translation>Vybrat pro zjišťování updatů jednou týdně</translation>
     </message>
     <message>
         <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="188"/>
+        <source>Weekly</source>
+        <translation>Týdně</translation>
+    </message>
+    <message>
+        <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="195"/>
+        <source>Select to check for updates once a month</source>
+        <translation>Vybrat pro zjišťování updatů jednou měsíčně</translation>
+    </message>
+    <message>
+        <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="198"/>
         <source>Monthly</source>
         <translation>Měsíčně</translation>
     </message>
     <message>
-        <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="67"/>
+        <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="77"/>
         <source>Open at startup</source>
         <translation>Otevřít při startu</translation>
     </message>
     <message>
-        <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="73"/>
-        <source>Select to not open anything</source>
-        <translation>Neotvírat nic</translation>
-    </message>
-    <message>
         <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="83"/>
-        <source>Select to open the most recently opened file</source>
-        <translation>Otevřít naposled otevřený soubor</translation>
-    </message>
-    <message>
-        <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="86"/>
-        <source>Last File</source>
-        <translation>Poslední soubor</translation>
+        <source>Select to not open anything</source>
+        <translation>Neotvírat nic</translation>
     </message>
     <message>
         <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="93"/>
-        <source>Select to open the most recently opened project</source>
-        <translation>Vybrat pro otevření naposled otevřeného projektu</translation>
+        <source>Select to open the most recently opened file</source>
+        <translation>Otevřít naposled otevřený soubor</translation>
     </message>
     <message>
         <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="96"/>
-        <source>Last Project</source>
-        <translation>Poslední projekt</translation>
+        <source>Last File</source>
+        <translation>Poslední soubor</translation>
     </message>
     <message>
         <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="103"/>
-        <source>Select to open the most recently opened multiproject</source>
-        <translation>Vybrat pro otevření naposled otevřeného multiprojektu</translation>
+        <source>Select to open the most recently opened project</source>
+        <translation>Vybrat pro otevření naposled otevřeného projektu</translation>
     </message>
     <message>
         <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="106"/>
-        <source>Last Multiproject</source>
-        <translation>Poslední multiprojekt</translation>
+        <source>Last Project</source>
+        <translation>Poslední projekt</translation>
     </message>
     <message>
         <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="113"/>
-        <source>Select to restore the global session</source>
-        <translation>Vybrat pro obnovení globální session</translation>
+        <source>Select to open the most recently opened multiproject</source>
+        <translation>Vybrat pro otevření naposled otevřeného multiprojektu</translation>
     </message>
     <message>
         <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="116"/>
+        <source>Last Multiproject</source>
+        <translation>Poslední multiprojekt</translation>
+    </message>
+    <message>
+        <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="123"/>
+        <source>Select to restore the global session</source>
+        <translation>Vybrat pro obnovení globální session</translation>
+    </message>
+    <message>
+        <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="126"/>
         <source>Global Session</source>
         <translation>Globální session</translation>
     </message>
     <message>
-        <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="139"/>
+        <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="149"/>
         <source>Check for updates</source>
         <translation>Zjistit aktualizace</translation>
     </message>
     <message>
+        <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="227"/>
+        <source>Error Log</source>
+        <translation>Protokol chyb</translation>
+    </message>
+    <message>
+        <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="233"/>
+        <source>Select to check the existence of an error log upon startup</source>
+        <translation>Vyberte pro ověření existence protokolu chyb při spouštění</translation>
+    </message>
+    <message>
+        <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="208"/>
+        <source>Reporting</source>
+        <translation>Zasílání zpráv</translation>
+    </message>
+    <message>
+        <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="214"/>
+        <source>Select to use the system email client to send reports</source>
+        <translation>Vybrat pro použití systémového email klienta pro zasílání zpráv</translation>
+    </message>
+    <message>
         <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="217"/>
-        <source>Error Log</source>
-        <translation>Protokol chyb</translation>
-    </message>
-    <message>
-        <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="223"/>
-        <source>Select to check the existence of an error log upon startup</source>
-        <translation>Vyberte pro ověření existence protokolu chyb při spouštění</translation>
-    </message>
-    <message>
-        <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="198"/>
-        <source>Reporting</source>
-        <translation>Zasílání zpráv</translation>
-    </message>
-    <message>
-        <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="204"/>
-        <source>Select to use the system email client to send reports</source>
-        <translation>Vybrat pro použití systémového email klienta pro zasílání zpráv</translation>
-    </message>
-    <message>
-        <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="207"/>
         <source>Use System Email Client</source>
         <translation>Použít systémového email klienta</translation>
     </message>
     <message>
-        <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="226"/>
-        <source>Check for Error Log at Startup</source>
-        <translation>Ověřit protokol chyb při spuštění</translation>
-    </message>
-    <message>
         <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="236"/>
+        <source>Check for Error Log at Startup</source>
+        <translation>Ověřit protokol chyb při spuštění</translation>
+    </message>
+    <message>
+        <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="246"/>
         <source>Keyboard Input Interval</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="242"/>
+        <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="252"/>
         <source>Enter the keyboard input interval, &apos;0&apos; for default</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="251"/>
+        <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="261"/>
         <source> ms</source>
         <translation type="unfinished"> ms</translation>
     </message>
     <message>
-        <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="126"/>
+        <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="136"/>
         <source>Select to look for a crash session file first</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="129"/>
+        <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="139"/>
         <source>Load Crash Session</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1437,30 +1437,40 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="248"/>
+        <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="258"/>
         <source>System Default</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="280"/>
+        <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="290"/>
         <source>Background Services</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="298"/>
-        <source>max. Processes:</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="308"/>
+        <source>max. Processes:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="318"/>
         <source>Automatic</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Preferences/ConfigurationPages/ApplicationPage.py" line="30"/>
+        <location filename="../Preferences/ConfigurationPages/ApplicationPage.py" line="31"/>
         <source>eric is using background services for certain things like syntax checks or code style checks. Per default the number of processes to use for these checks is determined automatically based on the number of CPUs. Please note, that this is an advanced setting.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="67"/>
+        <source>Select to use the global application menu bar</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="70"/>
+        <source>Use Global Menu Bar</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>AuthenticationDialog</name>
@@ -3807,147 +3817,147 @@
 <context>
     <name>CodeStyleFixer</name>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="554"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="621"/>
         <source>Triple single quotes converted to triple double quotes.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="557"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="624"/>
         <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="560"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="627"/>
         <source>Single line docstring put on one line.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="563"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="630"/>
         <source>Period added to summary line.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="590"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="657"/>
         <source>Blank line before function/method docstring removed.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="569"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="636"/>
         <source>Blank line inserted before class docstring.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="572"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="639"/>
         <source>Blank line inserted after class docstring.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="575"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="642"/>
         <source>Blank line inserted after docstring summary.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="578"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="645"/>
         <source>Blank line inserted after last paragraph of docstring.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="581"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="648"/>
         <source>Leading quotes put on separate line.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="584"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="651"/>
         <source>Trailing quotes put on separate line.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="587"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="654"/>
         <source>Blank line before class docstring removed.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="593"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="660"/>
         <source>Blank line after class docstring removed.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="596"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="663"/>
         <source>Blank line after function/method docstring removed.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="599"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="666"/>
         <source>Blank line after last paragraph removed.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="602"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="669"/>
         <source>Tab converted to 4 spaces.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="605"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="672"/>
         <source>Indentation adjusted to be a multiple of four.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="608"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="675"/>
         <source>Indentation of continuation line corrected.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="611"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="678"/>
         <source>Indentation of closing bracket corrected.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="614"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="681"/>
         <source>Missing indentation of continuation line corrected.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="617"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="684"/>
         <source>Closing bracket aligned to opening bracket.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="620"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="687"/>
         <source>Indentation level changed.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="623"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="690"/>
         <source>Indentation level of hanging indentation changed.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="626"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="693"/>
         <source>Visual indentation corrected.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="641"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="708"/>
         <source>Extraneous whitespace removed.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="638"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="705"/>
         <source>Missing whitespace added.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="644"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="711"/>
         <source>Whitespace around comment sign corrected.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="647"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="714"/>
         <source>One blank line inserted.</source>
         <translation type="unfinished"></translation>
     </message>
     <message numerus="yes">
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="651"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="718"/>
         <source>%n blank line(s) inserted.</source>
         <translation type="unfinished">
             <numerusform></numerusform>
@@ -3956,7 +3966,7 @@
         </translation>
     </message>
     <message numerus="yes">
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="654"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="721"/>
         <source>%n superfluous lines removed</source>
         <translation type="unfinished">
             <numerusform></numerusform>
@@ -3965,77 +3975,77 @@
         </translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="658"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="725"/>
         <source>Superfluous blank lines removed.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="661"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="728"/>
         <source>Superfluous blank lines after function decorator removed.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="664"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="731"/>
         <source>Imports were put on separate lines.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="667"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="734"/>
         <source>Long lines have been shortened.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="670"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="737"/>
         <source>Redundant backslash in brackets removed.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="676"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="743"/>
         <source>Compound statement corrected.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="679"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="746"/>
         <source>Comparison to None/True/False corrected.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="682"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="749"/>
         <source>&apos;{0}&apos; argument added.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="685"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="752"/>
         <source>&apos;{0}&apos; argument removed.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="688"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="755"/>
         <source>Whitespace stripped from end of line.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="691"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="758"/>
         <source>newline added to end of file.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="694"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="761"/>
         <source>Superfluous trailing blank lines removed from end of file.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="697"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="764"/>
         <source>&apos;&lt;&gt;&apos; replaced by &apos;!=&apos;.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="701"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="768"/>
         <source>Could not save the file! Skipping it. Reason: {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="781"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="852"/>
         <source> no message defined for code &apos;{0}&apos;</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4529,22 +4539,22 @@
 <context>
     <name>ComplexityChecker</name>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="443"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="447"/>
         <source>&apos;{0}&apos; is too complex ({1})</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="445"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="449"/>
         <source>source code line is too complex ({0})</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="447"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="451"/>
         <source>overall source code line complexity is too high ({0})</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="450"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="454"/>
         <source>{0}: {1}</source>
         <translation type="unfinished"></translation>
     </message>
@@ -7817,7 +7827,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="327"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="331"/>
         <source>docstring summary does not end with a period</source>
         <translation type="unfinished"></translation>
     </message>
@@ -7852,7 +7862,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="361"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="365"/>
         <source>docstring summary is not followed by a blank line</source>
         <translation type="unfinished"></translation>
     </message>
@@ -7862,92 +7872,92 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="314"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="318"/>
         <source>private function/method is missing a docstring</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="317"/>
-        <source>private class is missing a docstring</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="321"/>
+        <source>private class is missing a docstring</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="325"/>
         <source>leading quotes of docstring not on separate line</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="324"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="328"/>
         <source>trailing quotes of docstring not on separate line</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="331"/>
-        <source>docstring does not contain a @return line but function/method returns something</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="335"/>
-        <source>docstring contains a @return line but function/method doesn&apos;t return anything</source>
+        <source>docstring does not contain a @return line but function/method returns something</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="339"/>
+        <source>docstring contains a @return line but function/method doesn&apos;t return anything</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="343"/>
         <source>docstring does not contain enough @param/@keyparam lines</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="342"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="346"/>
         <source>docstring contains too many @param/@keyparam lines</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="345"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="349"/>
         <source>keyword only arguments must be documented with @keyparam lines</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="348"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="352"/>
         <source>order of @param/@keyparam lines does not match the function/method signature</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="351"/>
-        <source>class docstring is preceded by a blank line</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="353"/>
-        <source>class docstring is followed by a blank line</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="355"/>
+        <source>class docstring is preceded by a blank line</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="357"/>
+        <source>class docstring is followed by a blank line</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="359"/>
         <source>function/method docstring is preceded by a blank line</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="358"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="362"/>
         <source>function/method docstring is followed by a blank line</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="364"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="368"/>
         <source>last paragraph of docstring is followed by a blank line</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="367"/>
-        <source>docstring does not contain a @exception line but function/method raises an exception</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="371"/>
+        <source>docstring does not contain a @exception line but function/method raises an exception</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="375"/>
         <source>docstring contains a @exception line but function/method doesn&apos;t raise an exception</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="394"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="398"/>
         <source>{0}: {1}</source>
         <translation type="unfinished"></translation>
     </message>
@@ -7957,45 +7967,55 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="329"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="333"/>
         <source>docstring summary does not start with &apos;{0}&apos;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="375"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="379"/>
         <source>raised exception &apos;{0}&apos; is not documented in docstring</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="378"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="382"/>
         <source>documented exception &apos;{0}&apos; is not raised</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="381"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="385"/>
         <source>docstring does not contain a @signal line but class defines signals</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="384"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="388"/>
         <source>docstring contains a @signal line but class doesn&apos;t define signals</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="387"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="391"/>
         <source>defined signal &apos;{0}&apos; is not documented in docstring</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="390"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="394"/>
         <source>documented signal &apos;{0}&apos; is not defined</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="319"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="323"/>
         <source>class docstring is still a default string</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="316"/>
+        <source>function docstring is still a default string</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="314"/>
+        <source>module docstring is still a default string</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>DotDesktopListSelectionDialog</name>
@@ -10203,7 +10223,7 @@
 <context>
     <name>Editor</name>
     <message>
-        <location filename="../QScintilla/Editor.py" line="3008"/>
+        <location filename="../QScintilla/Editor.py" line="3002"/>
         <source>Open File</source>
         <translation>Otevřít soubor</translation>
     </message>
@@ -10463,7 +10483,7 @@
         <translation>Editovat breakpoint...</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="5421"/>
+        <location filename="../QScintilla/Editor.py" line="5415"/>
         <source>Enable breakpoint</source>
         <translation>Aktivovat breakpoint</translation>
     </message>
@@ -10523,227 +10543,227 @@
         <translation>Pokoušíte se změnit soubor, který je otevřen jen pro čtení. Prosím, uložte jej nejdříve do jiného souboru.</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="2568"/>
+        <location filename="../QScintilla/Editor.py" line="2562"/>
         <source>Printing...</source>
         <translation>Tisk...</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="2585"/>
+        <location filename="../QScintilla/Editor.py" line="2579"/>
         <source>Printing completed</source>
         <translation>Tisk je hotov</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="2587"/>
+        <location filename="../QScintilla/Editor.py" line="2581"/>
         <source>Error while printing</source>
         <translation>Chyba během tisku</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="2590"/>
+        <location filename="../QScintilla/Editor.py" line="2584"/>
         <source>Printing aborted</source>
         <translation>Tisk byl zrušen</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="3181"/>
+        <location filename="../QScintilla/Editor.py" line="3175"/>
         <source>Save File</source>
         <translation>Uložit soubor</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="2948"/>
+        <location filename="../QScintilla/Editor.py" line="2942"/>
         <source>File Modified</source>
         <translation>Soubor je modifikován</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="4614"/>
+        <location filename="../QScintilla/Editor.py" line="4608"/>
         <source>Autocompletion</source>
         <translation>Autodoplňování</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="4614"/>
+        <location filename="../QScintilla/Editor.py" line="4608"/>
         <source>Autocompletion is not available because there is no autocompletion source set.</source>
         <translation>Autodoplňování není dostupné protože zdrojová část autodoplňování nebyla nalezena.</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="5424"/>
+        <location filename="../QScintilla/Editor.py" line="5418"/>
         <source>Disable breakpoint</source>
         <translation>Deaktivovat breakpoint</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="5801"/>
+        <location filename="../QScintilla/Editor.py" line="5795"/>
         <source>Code Coverage</source>
         <translation>Pokrytí kódu</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="5801"/>
+        <location filename="../QScintilla/Editor.py" line="5795"/>
         <source>Please select a coverage file</source>
         <translation>Prosím, vyberte soubor s pokrytím kódu</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="5864"/>
+        <location filename="../QScintilla/Editor.py" line="5858"/>
         <source>Show Code Coverage Annotations</source>
         <translation>Zobrazit poznámky pokrytí kódu</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="5857"/>
+        <location filename="../QScintilla/Editor.py" line="5851"/>
         <source>All lines have been covered.</source>
         <translation>Všechny řádky byly pokryty.</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="5864"/>
+        <location filename="../QScintilla/Editor.py" line="5858"/>
         <source>There is no coverage file available.</source>
         <translation>Soubor s pokrytím není dostupný.</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="5979"/>
+        <location filename="../QScintilla/Editor.py" line="5973"/>
         <source>Profile Data</source>
         <translation>Profilovat data</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="5979"/>
+        <location filename="../QScintilla/Editor.py" line="5973"/>
         <source>Please select a profile file</source>
         <translation>Prosím, vyberte soubor s profilem</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6139"/>
+        <location filename="../QScintilla/Editor.py" line="6133"/>
         <source>Syntax Error</source>
         <translation>Chyba syntaxe</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6139"/>
+        <location filename="../QScintilla/Editor.py" line="6133"/>
         <source>No syntax error message available.</source>
         <translation>Hlášení syntaktické chyby není dostupné.</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6478"/>
+        <location filename="../QScintilla/Editor.py" line="6472"/>
         <source>Macro Name</source>
         <translation>Název makra</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6478"/>
+        <location filename="../QScintilla/Editor.py" line="6472"/>
         <source>Select a macro name:</source>
         <translation>Vyberte název makra:</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6506"/>
+        <location filename="../QScintilla/Editor.py" line="6500"/>
         <source>Load macro file</source>
         <translation>Načíst soubor makra</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6549"/>
+        <location filename="../QScintilla/Editor.py" line="6543"/>
         <source>Macro files (*.macro)</source>
         <translation>Macro soubory (*.macro)</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6529"/>
+        <location filename="../QScintilla/Editor.py" line="6523"/>
         <source>Error loading macro</source>
         <translation>Chyba při načítání makra</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6549"/>
+        <location filename="../QScintilla/Editor.py" line="6543"/>
         <source>Save macro file</source>
         <translation>Uložit soubor s makrem</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6566"/>
+        <location filename="../QScintilla/Editor.py" line="6560"/>
         <source>Save macro</source>
         <translation>Uložit makro</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6582"/>
+        <location filename="../QScintilla/Editor.py" line="6576"/>
         <source>Error saving macro</source>
         <translation>Chyba při ukládání makra</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6595"/>
+        <location filename="../QScintilla/Editor.py" line="6589"/>
         <source>Start Macro Recording</source>
         <translation>Spustit záznam makra</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6595"/>
+        <location filename="../QScintilla/Editor.py" line="6589"/>
         <source>Macro recording is already active. Start new?</source>
         <translation>Nahrávání makra již probíhá. Spustit nové?</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6621"/>
+        <location filename="../QScintilla/Editor.py" line="6615"/>
         <source>Macro Recording</source>
         <translation>Záznam makra</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6621"/>
+        <location filename="../QScintilla/Editor.py" line="6615"/>
         <source>Enter name of the macro:</source>
         <translation>Vložte název makra:</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6759"/>
+        <location filename="../QScintilla/Editor.py" line="6753"/>
         <source>File changed</source>
         <translation>Soubor změněn</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="7063"/>
+        <location filename="../QScintilla/Editor.py" line="7057"/>
         <source>Drop Error</source>
         <translation>Zahodit chybu</translation>
     </message>
     <message>
+        <location filename="../QScintilla/Editor.py" line="7078"/>
+        <source>Resources</source>
+        <translation>Zdroje</translation>
+    </message>
+    <message>
+        <location filename="../QScintilla/Editor.py" line="7080"/>
+        <source>Add file...</source>
+        <translation>Přidat soubor...</translation>
+    </message>
+    <message>
+        <location filename="../QScintilla/Editor.py" line="7082"/>
+        <source>Add files...</source>
+        <translation>Přidat soubory...</translation>
+    </message>
+    <message>
         <location filename="../QScintilla/Editor.py" line="7084"/>
-        <source>Resources</source>
-        <translation>Zdroje</translation>
-    </message>
-    <message>
-        <location filename="../QScintilla/Editor.py" line="7086"/>
-        <source>Add file...</source>
-        <translation>Přidat soubor...</translation>
-    </message>
-    <message>
-        <location filename="../QScintilla/Editor.py" line="7088"/>
-        <source>Add files...</source>
-        <translation>Přidat soubory...</translation>
-    </message>
-    <message>
-        <location filename="../QScintilla/Editor.py" line="7090"/>
         <source>Add aliased file...</source>
         <translation>Přidat zástupce souboru...</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="7093"/>
+        <location filename="../QScintilla/Editor.py" line="7087"/>
         <source>Add localized resource...</source>
         <translation>Přidat lokalizované resource...</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="7097"/>
+        <location filename="../QScintilla/Editor.py" line="7091"/>
         <source>Add resource frame</source>
         <translation>Přidat resource frame</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="7116"/>
+        <location filename="../QScintilla/Editor.py" line="7110"/>
         <source>Add file resource</source>
         <translation>Přidat soubor resource</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="7132"/>
+        <location filename="../QScintilla/Editor.py" line="7126"/>
         <source>Add file resources</source>
         <translation>Přidat soubory resource</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="7160"/>
+        <location filename="../QScintilla/Editor.py" line="7154"/>
         <source>Add aliased file resource</source>
         <translation>Přidat zástupce souboru resource</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="7224"/>
+        <location filename="../QScintilla/Editor.py" line="7218"/>
         <source>Package Diagram</source>
         <translation>Diagram balíčku</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="7224"/>
+        <location filename="../QScintilla/Editor.py" line="7218"/>
         <source>Include class attributes?</source>
         <translation>Včetně atributů třídy?</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="7258"/>
+        <location filename="../QScintilla/Editor.py" line="7252"/>
         <source>Application Diagram</source>
         <translation>Diagram aplikace</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="7258"/>
+        <location filename="../QScintilla/Editor.py" line="7252"/>
         <source>Include module names?</source>
         <translation>Včetně jmen modulů?</translation>
     </message>
@@ -10763,12 +10783,12 @@
         <translation>Nebyl zadán forám exportu. Zrušeno....</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="7244"/>
+        <location filename="../QScintilla/Editor.py" line="7238"/>
         <source>Imports Diagram</source>
         <translation>Importovat diagram</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="7244"/>
+        <location filename="../QScintilla/Editor.py" line="7238"/>
         <source>Include imports from external modules?</source>
         <translation>Zahrnout importy z externích modulů?</translation>
     </message>
@@ -10843,7 +10863,7 @@
         <translation>Použít Pygments lexer.</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="7540"/>
+        <location filename="../QScintilla/Editor.py" line="7534"/>
         <source>Check spelling...</source>
         <translation>Zatrhnout kontrolu...</translation>
     </message>
@@ -10853,12 +10873,12 @@
         <translation>Zatrhnout výběr kontroly...</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="7543"/>
+        <location filename="../QScintilla/Editor.py" line="7537"/>
         <source>Add to dictionary</source>
         <translation>Přidat do slovníku</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="7545"/>
+        <location filename="../QScintilla/Editor.py" line="7539"/>
         <source>Ignore All</source>
         <translation>Ignorovat vše</translation>
     </message>
@@ -10883,47 +10903,47 @@
         <translation>Alternativy ({0})</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="2948"/>
+        <location filename="../QScintilla/Editor.py" line="2942"/>
         <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; has unsaved changes.&lt;/p&gt;</source>
         <translation>&lt;p&gt;Soubor &lt;b&gt;{0}&lt;/b&gt; obsahuje neuložené změny.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="3008"/>
+        <location filename="../QScintilla/Editor.py" line="3002"/>
         <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; could not be opened.&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
         <translation>&lt;p&gt;Soubor &lt;b&gt;{0}&lt;/b&gt; nemůže být přejmenován.&lt;br /&gt;Důvod: {1}&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="3122"/>
+        <location filename="../QScintilla/Editor.py" line="3116"/>
         <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; could not be saved.&lt;br/&gt;Reason: {1}&lt;/p&gt;</source>
         <translation>&lt;p&gt;Soubor &lt;b&gt;{0}&lt;/b&gt; nemůže být přejmenován.&lt;br /&gt;Důvod: {1}&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6520"/>
+        <location filename="../QScintilla/Editor.py" line="6514"/>
         <source>&lt;p&gt;The macro file &lt;b&gt;{0}&lt;/b&gt; could not be read.&lt;/p&gt;</source>
         <translation>&lt;p&gt;Soubor s makrem &lt;b&gt;{0}&lt;/b&gt; nelze načíst.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6529"/>
+        <location filename="../QScintilla/Editor.py" line="6523"/>
         <source>&lt;p&gt;The macro file &lt;b&gt;{0}&lt;/b&gt; is corrupt.&lt;/p&gt;</source>
         <translation>&lt;p&gt;Soubor s makrem &lt;b&gt;{0}&lt;/b&gt; je poškozen.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6582"/>
+        <location filename="../QScintilla/Editor.py" line="6576"/>
         <source>&lt;p&gt;The macro file &lt;b&gt;{0}&lt;/b&gt; could not be written.&lt;/p&gt;</source>
         <translation>&lt;p&gt;So souboru s makrem &lt;b&gt;{0}&lt;/b&gt; nelze zapisovat.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6923"/>
+        <location filename="../QScintilla/Editor.py" line="6917"/>
         <source>{0} (ro)</source>
         <translation>{0} (ro)</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="7063"/>
+        <location filename="../QScintilla/Editor.py" line="7057"/>
         <source>&lt;p&gt;&lt;b&gt;{0}&lt;/b&gt; is not a file.&lt;/p&gt;</source>
         <translation>&lt;p&gt;&lt;b&gt;{0}&lt;/b&gt; není soubor.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="7160"/>
+        <location filename="../QScintilla/Editor.py" line="7154"/>
         <source>Alias for file &lt;b&gt;{0}&lt;/b&gt;:</source>
         <translation>Zástupce pro soubor &lt;b&gt;{0}&lt;/b&gt;:</translation>
     </message>
@@ -10948,27 +10968,27 @@
         <translation>Vyčistit varování</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="3181"/>
+        <location filename="../QScintilla/Editor.py" line="3175"/>
         <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; already exists. Overwrite it?&lt;/p&gt;</source>
         <translation type="unfinished">&lt;p&gt;Soubor &lt;b&gt;{0}&lt;/b&gt; již existuje.&lt;/p&gt;&lt;p&gt;Má se přepsat?&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6566"/>
+        <location filename="../QScintilla/Editor.py" line="6560"/>
         <source>&lt;p&gt;The macro file &lt;b&gt;{0}&lt;/b&gt; already exists. Overwrite it?&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6417"/>
+        <location filename="../QScintilla/Editor.py" line="6411"/>
         <source>Warning: {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6424"/>
+        <location filename="../QScintilla/Editor.py" line="6418"/>
         <source>Error: {0}</source>
         <translation type="unfinished">Chyby: {0}</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6755"/>
+        <location filename="../QScintilla/Editor.py" line="6749"/>
         <source>&lt;br&gt;&lt;b&gt;Warning:&lt;/b&gt; You will lose your changes upon reopening it.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -10993,27 +11013,27 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="7957"/>
+        <location filename="../QScintilla/Editor.py" line="7951"/>
         <source>Sort Lines</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="7957"/>
+        <location filename="../QScintilla/Editor.py" line="7951"/>
         <source>The selection contains illegal data for a numerical sort.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6353"/>
+        <location filename="../QScintilla/Editor.py" line="6347"/>
         <source>Warning</source>
         <translation type="unfinished">Varování</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6353"/>
+        <location filename="../QScintilla/Editor.py" line="6347"/>
         <source>No warning messages available.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6414"/>
+        <location filename="../QScintilla/Editor.py" line="6408"/>
         <source>Style: {0}</source>
         <translation type="unfinished"></translation>
     </message>
@@ -11038,7 +11058,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6749"/>
+        <location filename="../QScintilla/Editor.py" line="6743"/>
         <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; has been changed while it was opened in eric6. Reread it?&lt;/p&gt;</source>
         <translation type="unfinished">&lt;p&gt;Soubor &lt;b&gt;{0}&lt;/b&gt; byl změněn po té co již byl načten do eric5. Znovu načíst?&lt;/p&gt; {0}?} {6.?}</translation>
     </message>
@@ -11053,32 +11073,32 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="4739"/>
+        <location filename="../QScintilla/Editor.py" line="4733"/>
         <source>Auto-Completion Provider</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="4739"/>
+        <location filename="../QScintilla/Editor.py" line="4733"/>
         <source>The completion list provider &apos;{0}&apos; was already registered. Ignoring duplicate request.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="5001"/>
+        <location filename="../QScintilla/Editor.py" line="4995"/>
         <source>Call-Tips Provider</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="5001"/>
+        <location filename="../QScintilla/Editor.py" line="4995"/>
         <source>The call-tips provider &apos;{0}&apos; was already registered. Ignoring duplicate request.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="8044"/>
+        <location filename="../QScintilla/Editor.py" line="8038"/>
         <source>Register Mouse Click Handler</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="8044"/>
+        <location filename="../QScintilla/Editor.py" line="8038"/>
         <source>A mouse click handler for &quot;{0}&quot; was already registered by &quot;{1}&quot;. Aborting request by &quot;{2}&quot;...</source>
         <translation type="unfinished"></translation>
     </message>
@@ -11108,12 +11128,12 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="8165"/>
+        <location filename="../QScintilla/Editor.py" line="8159"/>
         <source>EditorConfig Properties</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="8165"/>
+        <location filename="../QScintilla/Editor.py" line="8159"/>
         <source>&lt;p&gt;The EditorConfig properties for file &lt;b&gt;{0}&lt;/b&gt; could not be loaded.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
@@ -24983,7 +25003,7 @@
 <context>
     <name>HelpBrowser</name>
     <message>
-        <location filename="../Helpviewer/HelpBrowserWV.py" line="1222"/>
+        <location filename="../Helpviewer/HelpBrowserWV.py" line="1220"/>
         <source>Open Link in New Tab<byte value="x9"/>Ctrl+LMB</source>
         <translation>Otevřít odkaz v novém tab okně<byte value="x9"/>Ctrl+LMB</translation>
     </message>
@@ -24993,347 +25013,347 @@
         <translation>&lt;b&gt;Okno nápovědy&lt;/b&gt;&lt;p&gt;Toto okno zobrazí vybranou informaci nápovědy.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Helpviewer/HelpBrowserWV.py" line="1520"/>
+        <location filename="../Helpviewer/HelpBrowserWV.py" line="1518"/>
         <source>Web Inspector...</source>
         <translation>Web inspektor...</translation>
     </message>
     <message>
-        <location filename="../Helpviewer/HelpBrowserWV.py" line="2204"/>
+        <location filename="../Helpviewer/HelpBrowserWV.py" line="2202"/>
         <source>Check the address for errors such as &lt;b&gt;ww&lt;/b&gt;.example.org instead of &lt;b&gt;www&lt;/b&gt;.example.org</source>
         <translation>Zkontrolujte adresu na chyby jako je &lt;b&gt;ww&lt;/b&gt;.example.org místo &lt;b&gt;www&lt;/b&gt;.example.org</translation>
     </message>
     <message>
-        <location filename="../Helpviewer/HelpBrowserWV.py" line="2209"/>
+        <location filename="../Helpviewer/HelpBrowserWV.py" line="2207"/>
         <source>If the address is correct, try checking the network connection.</source>
         <translation>Je-li adresa vpořádku, prověřte síťové spojení.</translation>
     </message>
     <message>
-        <location filename="../Helpviewer/HelpBrowserWV.py" line="2213"/>
+        <location filename="../Helpviewer/HelpBrowserWV.py" line="2211"/>
         <source>If your computer or network is protected by a firewall or proxy, make sure that the browser is permitted to access the network.</source>
         <translation>Je-li vaše šíť chráněna firewallem nebo proxy, ujistěte se, že váš prohlížeč má na tuto síť povolen přístup.</translation>
     </message>
     <message>
-        <location filename="../Helpviewer/HelpBrowserWV.py" line="1426"/>
+        <location filename="../Helpviewer/HelpBrowserWV.py" line="1424"/>
         <source>Bookmark this Page</source>
         <translation>Záložka na tuto stranu</translation>
     </message>
     <message>
-        <location filename="../Helpviewer/HelpBrowserWV.py" line="1229"/>
+        <location filename="../Helpviewer/HelpBrowserWV.py" line="1227"/>
         <source>Save Lin&amp;k</source>
         <translation>Uložit lin&amp;k</translation>
     </message>
     <message>
-        <location filename="../Helpviewer/HelpBrowserWV.py" line="1232"/>
+        <location filename="../Helpviewer/HelpBrowserWV.py" line="1230"/>
         <source>Bookmark this Link</source>
         <translation>Záložka na tento link</translation>
     </message>
     <message>
-        <location filename="../Helpviewer/HelpBrowserWV.py" line="1239"/>
+        <location filename="../Helpviewer/HelpBrowserWV.py" line="1237"/>
         <source>Copy Link to Clipboard</source>
         <translation>Kopírovat link do schránky</translation>
     </message>
     <message>
-        <location filename="../Helpviewer/HelpBrowserWV.py" line="1260"/>
+        <location filename="../Helpviewer/HelpBrowserWV.py" line="1258"/>
         <source>Open Image in New Tab</source>
         <translation>Otevřít obrázek v novém tabu</translation>
     </message>
     <message>
-        <location filename="../Helpviewer/HelpBrowserWV.py" line="1267"/>
+        <location filename="../Helpviewer/HelpBrowserWV.py" line="1265"/>
         <source>Save Image</source>
         <translation>Uložit obrázek</translation>
     </message>
     <message>
+        <location filename="../Helpviewer/HelpBrowserWV.py" line="1268"/>
+        <source>Copy Image to Clipboard</source>
+        <translation>Kopíroavt obrázek do schránky</translation>
+    </message>
+    <message>
         <location filename="../Helpviewer/HelpBrowserWV.py" line="1270"/>
-        <source>Copy Image to Clipboard</source>
-        <translation>Kopíroavt obrázek do schránky</translation>
-    </message>
-    <message>
-        <location filename="../Helpviewer/HelpBrowserWV.py" line="1272"/>
         <source>Copy Image Location to Clipboard</source>
         <translation>Kopírovat cestu obrázku do schránky</translation>
     </message>
     <message>
-        <location filename="../Helpviewer/HelpBrowserWV.py" line="1285"/>
+        <location filename="../Helpviewer/HelpBrowserWV.py" line="1283"/>
         <source>Block Image</source>
         <translation>Blokovat obrázek</translation>
     </message>
     <message>
-        <location filename="../Helpviewer/HelpBrowserWV.py" line="1459"/>
+        <location filename="../Helpviewer/HelpBrowserWV.py" line="1457"/>
         <source>Search with...</source>
         <translation>Hledat s...</translation>
     </message>
     <message>
-        <location filename="../Helpviewer/HelpBrowserWV.py" line="933"/>
+        <location filename="../Helpviewer/HelpBrowserWV.py" line="931"/>
         <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; does not exist.&lt;/p&gt;</source>
         <translation>&lt;p&gt;Soubor &lt;b&gt;{}&lt;/b&gt; neexistuje.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Helpviewer/HelpBrowserWV.py" line="978"/>
+        <location filename="../Helpviewer/HelpBrowserWV.py" line="976"/>
         <source>&lt;p&gt;Could not start a viewer for file &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</source>
         <translation>&lt;p&gt;Nelze spustit prohlížeč se souborem &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Helpviewer/HelpBrowserWV.py" line="958"/>
+        <location filename="../Helpviewer/HelpBrowserWV.py" line="956"/>
         <source>&lt;p&gt;Could not start an application for URL &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</source>
         <translation>&lt;p&gt;Nelze spustit aplikaci pro URL &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Helpviewer/HelpBrowserWV.py" line="2183"/>
+        <location filename="../Helpviewer/HelpBrowserWV.py" line="2181"/>
         <source>Error loading page: {0}</source>
         <translation>Chyba při načítání strany: {0}</translation>
     </message>
     <message>
-        <location filename="../Helpviewer/HelpBrowserWV.py" line="2201"/>
+        <location filename="../Helpviewer/HelpBrowserWV.py" line="2199"/>
         <source>When connecting to: {0}.</source>
         <translation>Při připojení na: {0}.</translation>
     </message>
     <message>
-        <location filename="../Helpviewer/HelpBrowserWV.py" line="2264"/>
+        <location filename="../Helpviewer/HelpBrowserWV.py" line="2262"/>
         <source>Web Database Quota</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Helpviewer/HelpBrowserWV.py" line="2264"/>
+        <location filename="../Helpviewer/HelpBrowserWV.py" line="2262"/>
         <source>&lt;p&gt;The database quota of &lt;strong&gt;{0}&lt;/strong&gt; has been exceeded while accessing database &lt;strong&gt;{1}&lt;/strong&gt;.&lt;/p&gt;&lt;p&gt;Shall it be changed?&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Helpviewer/HelpBrowserWV.py" line="2275"/>
+        <location filename="../Helpviewer/HelpBrowserWV.py" line="2273"/>
         <source>New Web Database Quota</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Helpviewer/HelpBrowserWV.py" line="2275"/>
+        <location filename="../Helpviewer/HelpBrowserWV.py" line="2273"/>
         <source>Enter the new quota in MB (current = {0}, used = {1}; step size = 5 MB):</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Helpviewer/HelpBrowserWV.py" line="2299"/>
+        <location filename="../Helpviewer/HelpBrowserWV.py" line="2297"/>
         <source>bytes</source>
         <translation type="unfinished">bajty</translation>
     </message>
     <message>
-        <location filename="../Helpviewer/HelpBrowserWV.py" line="2302"/>
+        <location filename="../Helpviewer/HelpBrowserWV.py" line="2300"/>
         <source>kB</source>
         <translation type="unfinished">kB</translation>
     </message>
     <message>
-        <location filename="../Helpviewer/HelpBrowserWV.py" line="2305"/>
+        <location filename="../Helpviewer/HelpBrowserWV.py" line="2303"/>
         <source>MB</source>
         <translation type="unfinished">MB</translation>
     </message>
     <message>
-        <location filename="../Helpviewer/HelpBrowserWV.py" line="1513"/>
+        <location filename="../Helpviewer/HelpBrowserWV.py" line="1511"/>
         <source>Add to web search toolbar</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Helpviewer/HelpBrowserWV.py" line="1708"/>
+        <location filename="../Helpviewer/HelpBrowserWV.py" line="1706"/>
         <source>Method not supported</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Helpviewer/HelpBrowserWV.py" line="1708"/>
+        <location filename="../Helpviewer/HelpBrowserWV.py" line="1706"/>
         <source>{0} method is not supported.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Helpviewer/HelpBrowserWV.py" line="1766"/>
+        <location filename="../Helpviewer/HelpBrowserWV.py" line="1764"/>
         <source>Search engine</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Helpviewer/HelpBrowserWV.py" line="1766"/>
+        <location filename="../Helpviewer/HelpBrowserWV.py" line="1764"/>
         <source>Choose the desired search engine</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Helpviewer/HelpBrowserWV.py" line="1788"/>
+        <location filename="../Helpviewer/HelpBrowserWV.py" line="1786"/>
         <source>Engine name</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Helpviewer/HelpBrowserWV.py" line="1788"/>
+        <location filename="../Helpviewer/HelpBrowserWV.py" line="1786"/>
         <source>Enter a name for the engine</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Helpviewer/HelpBrowserWV.py" line="2219"/>
+        <location filename="../Helpviewer/HelpBrowserWV.py" line="2217"/>
         <source>If your cache policy is set to offline browsing,only pages in the local cache are available.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Helpviewer/HelpBrowserWV.py" line="1250"/>
+        <location filename="../Helpviewer/HelpBrowserWV.py" line="1248"/>
         <source>Scan Link with VirusTotal</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Helpviewer/HelpBrowserWV.py" line="1293"/>
+        <location filename="../Helpviewer/HelpBrowserWV.py" line="1291"/>
         <source>Scan Image with VirusTotal</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Helpviewer/HelpBrowserWV.py" line="1242"/>
+        <location filename="../Helpviewer/HelpBrowserWV.py" line="1240"/>
         <source>Send Link</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Helpviewer/HelpBrowserWV.py" line="1278"/>
+        <location filename="../Helpviewer/HelpBrowserWV.py" line="1276"/>
         <source>Send Image Link</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Helpviewer/HelpBrowserWV.py" line="1386"/>
+        <location filename="../Helpviewer/HelpBrowserWV.py" line="1384"/>
         <source>This Frame</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Helpviewer/HelpBrowserWV.py" line="1389"/>
+        <location filename="../Helpviewer/HelpBrowserWV.py" line="1387"/>
         <source>Show &amp;only this frame</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Helpviewer/HelpBrowserWV.py" line="1392"/>
+        <location filename="../Helpviewer/HelpBrowserWV.py" line="1390"/>
         <source>Show in new &amp;tab</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Helpviewer/HelpBrowserWV.py" line="1399"/>
+        <location filename="../Helpviewer/HelpBrowserWV.py" line="1397"/>
         <source>&amp;Print</source>
         <translation type="unfinished">&amp;Tisk</translation>
     </message>
     <message>
-        <location filename="../Helpviewer/HelpBrowserWV.py" line="1402"/>
+        <location filename="../Helpviewer/HelpBrowserWV.py" line="1400"/>
         <source>Print Preview</source>
         <translation type="unfinished">Náhled tisku</translation>
     </message>
     <message>
-        <location filename="../Helpviewer/HelpBrowserWV.py" line="1405"/>
+        <location filename="../Helpviewer/HelpBrowserWV.py" line="1403"/>
         <source>Print as PDF</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Helpviewer/HelpBrowserWV.py" line="1409"/>
+        <location filename="../Helpviewer/HelpBrowserWV.py" line="1407"/>
         <source>Zoom &amp;in</source>
         <translation type="unfinished">Př&amp;iblížit</translation>
     </message>
     <message>
-        <location filename="../Helpviewer/HelpBrowserWV.py" line="1412"/>
+        <location filename="../Helpviewer/HelpBrowserWV.py" line="1410"/>
         <source>Zoom &amp;reset</source>
         <translation type="unfinished">&amp;Resetovat lupu</translation>
     </message>
     <message>
-        <location filename="../Helpviewer/HelpBrowserWV.py" line="1415"/>
+        <location filename="../Helpviewer/HelpBrowserWV.py" line="1413"/>
         <source>Zoom &amp;out</source>
         <translation type="unfinished">&amp;Oddálit</translation>
     </message>
     <message>
-        <location filename="../Helpviewer/HelpBrowserWV.py" line="1419"/>
+        <location filename="../Helpviewer/HelpBrowserWV.py" line="1417"/>
         <source>Show frame so&amp;urce</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Helpviewer/HelpBrowserWV.py" line="1429"/>
+        <location filename="../Helpviewer/HelpBrowserWV.py" line="1427"/>
         <source>Send Page Link</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Helpviewer/HelpBrowserWV.py" line="1450"/>
+        <location filename="../Helpviewer/HelpBrowserWV.py" line="1448"/>
         <source>Send Text</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Helpviewer/HelpBrowserWV.py" line="1484"/>
+        <location filename="../Helpviewer/HelpBrowserWV.py" line="1482"/>
         <source>Google Translate</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Helpviewer/HelpBrowserWV.py" line="1493"/>
+        <location filename="../Helpviewer/HelpBrowserWV.py" line="1491"/>
         <source>Dictionary</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Helpviewer/HelpBrowserWV.py" line="1503"/>
+        <location filename="../Helpviewer/HelpBrowserWV.py" line="1501"/>
         <source>Go to web address</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Helpviewer/HelpBrowserWV.py" line="1436"/>
+        <location filename="../Helpviewer/HelpBrowserWV.py" line="1434"/>
         <source>User Agent</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Helpviewer/HelpBrowserWV.py" line="2224"/>
+        <location filename="../Helpviewer/HelpBrowserWV.py" line="2222"/>
         <source>Try Again</source>
         <translation type="unfinished">Zkusit znova</translation>
     </message>
     <message>
-        <location filename="../Helpviewer/HelpBrowserWV.py" line="1313"/>
+        <location filename="../Helpviewer/HelpBrowserWV.py" line="1311"/>
         <source>Play</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Helpviewer/HelpBrowserWV.py" line="1317"/>
+        <location filename="../Helpviewer/HelpBrowserWV.py" line="1315"/>
         <source>Pause</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Helpviewer/HelpBrowserWV.py" line="1321"/>
+        <location filename="../Helpviewer/HelpBrowserWV.py" line="1319"/>
         <source>Unmute</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Helpviewer/HelpBrowserWV.py" line="1325"/>
+        <location filename="../Helpviewer/HelpBrowserWV.py" line="1323"/>
         <source>Mute</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Helpviewer/HelpBrowserWV.py" line="1329"/>
+        <location filename="../Helpviewer/HelpBrowserWV.py" line="1327"/>
         <source>Copy Media Address to Clipboard</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Helpviewer/HelpBrowserWV.py" line="1335"/>
+        <location filename="../Helpviewer/HelpBrowserWV.py" line="1333"/>
         <source>Send Media Address</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Helpviewer/HelpBrowserWV.py" line="1341"/>
+        <location filename="../Helpviewer/HelpBrowserWV.py" line="1339"/>
         <source>Save Media</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Helpviewer/HelpBrowserWV.py" line="2660"/>
+        <location filename="../Helpviewer/HelpBrowserWV.py" line="2658"/>
         <source>eric6 Web Browser</source>
         <translation type="unfinished">eric5 web prohlížeč {6 ?}</translation>
     </message>
     <message>
-        <location filename="../Helpviewer/HelpBrowserWV.py" line="2660"/>
+        <location filename="../Helpviewer/HelpBrowserWV.py" line="2658"/>
         <source>&lt;p&gt;Printing is not available due to a bug in PyQt5. Please upgrade.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Helpviewer/HelpBrowserWV.py" line="2628"/>
+        <location filename="../Helpviewer/HelpBrowserWV.py" line="2626"/>
         <source>&lt;p&gt;Printing is not available due to a bug in PyQt5.Please upgrade.&lt;/p&gt;</source>
         <translation type="unfinished">&lt;p&gt;Tisk není dostupný kvůli bugu v PyQt4.Please upgrade.&lt;/p&gt; {5.?}</translation>
     </message>
     <message>
-        <location filename="../Helpviewer/HelpBrowserWV.py" line="1202"/>
+        <location filename="../Helpviewer/HelpBrowserWV.py" line="1200"/>
         <source>Add New Page</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Helpviewer/HelpBrowserWV.py" line="1205"/>
+        <location filename="../Helpviewer/HelpBrowserWV.py" line="1203"/>
         <source>Configure Speed Dial</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Helpviewer/HelpBrowserWV.py" line="1209"/>
+        <location filename="../Helpviewer/HelpBrowserWV.py" line="1207"/>
         <source>Reload All Dials</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Helpviewer/HelpBrowserWV.py" line="1213"/>
+        <location filename="../Helpviewer/HelpBrowserWV.py" line="1211"/>
         <source>Reset to Default Dials</source>
         <translation type="unfinished"></translation>
     </message>
@@ -25935,32 +25955,32 @@
         <translation type="unfinished">Vytvořit záložky pro všechny taby</translation>
     </message>
     <message>
-        <location filename="../Helpviewer/HelpTabWidget.py" line="367"/>
+        <location filename="../Helpviewer/HelpTabWidget.py" line="366"/>
         <source>...</source>
         <translation type="unfinished">...</translation>
     </message>
     <message>
-        <location filename="../Helpviewer/HelpTabWidget.py" line="776"/>
+        <location filename="../Helpviewer/HelpTabWidget.py" line="775"/>
         <source>Loading...</source>
         <translation type="unfinished">Načítám...</translation>
     </message>
     <message>
-        <location filename="../Helpviewer/HelpTabWidget.py" line="795"/>
+        <location filename="../Helpviewer/HelpTabWidget.py" line="796"/>
         <source>Finished loading</source>
         <translation type="unfinished">Načteno</translation>
     </message>
     <message>
-        <location filename="../Helpviewer/HelpTabWidget.py" line="797"/>
+        <location filename="../Helpviewer/HelpTabWidget.py" line="798"/>
         <source>Failed to load</source>
         <translation type="unfinished">Načtení selhalo</translation>
     </message>
     <message>
-        <location filename="../Helpviewer/HelpTabWidget.py" line="837"/>
+        <location filename="../Helpviewer/HelpTabWidget.py" line="838"/>
         <source>Are you sure you want to close the window?</source>
         <translation type="unfinished"></translation>
     </message>
     <message numerus="yes">
-        <location filename="../Helpviewer/HelpTabWidget.py" line="837"/>
+        <location filename="../Helpviewer/HelpTabWidget.py" line="838"/>
         <source>Are you sure you want to close the window?
 You have %n tab(s) open.</source>
         <translation type="unfinished">
@@ -25970,17 +25990,17 @@
         </translation>
     </message>
     <message>
-        <location filename="../Helpviewer/HelpTabWidget.py" line="845"/>
+        <location filename="../Helpviewer/HelpTabWidget.py" line="846"/>
         <source>&amp;Close</source>
         <translation type="unfinished">&amp;Zavřít</translation>
     </message>
     <message>
-        <location filename="../Helpviewer/HelpTabWidget.py" line="849"/>
+        <location filename="../Helpviewer/HelpTabWidget.py" line="850"/>
         <source>&amp;Quit</source>
         <translation type="unfinished">&amp;Konec</translation>
     </message>
     <message>
-        <location filename="../Helpviewer/HelpTabWidget.py" line="852"/>
+        <location filename="../Helpviewer/HelpTabWidget.py" line="853"/>
         <source>C&amp;lose Current Tab</source>
         <translation type="unfinished"></translation>
     </message>
@@ -26000,37 +26020,37 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Helpviewer/HelpTabWidget.py" line="1014"/>
+        <location filename="../Helpviewer/HelpTabWidget.py" line="1015"/>
         <source>Restore All Closed Tabs</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Helpviewer/HelpTabWidget.py" line="1016"/>
+        <location filename="../Helpviewer/HelpTabWidget.py" line="1017"/>
         <source>Clear List</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Helpviewer/HelpTabWidget.py" line="675"/>
+        <location filename="../Helpviewer/HelpTabWidget.py" line="674"/>
         <source>eric6 Web Browser</source>
         <translation type="unfinished">eric5 web prohlížeč {6 ?}</translation>
     </message>
     <message>
-        <location filename="../Helpviewer/HelpTabWidget.py" line="621"/>
+        <location filename="../Helpviewer/HelpTabWidget.py" line="620"/>
         <source>&lt;p&gt;Printing is not available due to a bug in PyQt5. Please upgrade.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Helpviewer/HelpTabWidget.py" line="675"/>
+        <location filename="../Helpviewer/HelpTabWidget.py" line="674"/>
         <source>&lt;p&gt;Printing is not available due to a bug in PyQt5.Please upgrade.&lt;/p&gt;</source>
         <translation type="unfinished">&lt;p&gt;Tisk není dostupný kvůli bugu v PyQt4.Please upgrade.&lt;/p&gt; {5.?}</translation>
     </message>
     <message>
-        <location filename="../Helpviewer/HelpTabWidget.py" line="476"/>
+        <location filename="../Helpviewer/HelpTabWidget.py" line="475"/>
         <source>Do you really want to close this page?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Helpviewer/HelpTabWidget.py" line="476"/>
+        <location filename="../Helpviewer/HelpTabWidget.py" line="475"/>
         <source>You have modified this page and when closing it you would lose the modification.
 Do you really want to close this page?</source>
         <translation type="unfinished"></translation>
@@ -26776,22 +26796,22 @@
 <context>
     <name>HelpWebSearchWidget</name>
     <message>
-        <location filename="../Helpviewer/HelpWebSearchWidget.py" line="134"/>
+        <location filename="../Helpviewer/HelpWebSearchWidget.py" line="136"/>
         <source>Suggestions</source>
         <translation>Návrhy</translation>
     </message>
     <message>
-        <location filename="../Helpviewer/HelpWebSearchWidget.py" line="143"/>
+        <location filename="../Helpviewer/HelpWebSearchWidget.py" line="145"/>
         <source>No Recent Searches</source>
         <translation>Žádné poslední hledání</translation>
     </message>
     <message>
-        <location filename="../Helpviewer/HelpWebSearchWidget.py" line="148"/>
+        <location filename="../Helpviewer/HelpWebSearchWidget.py" line="150"/>
         <source>Recent Searches</source>
         <translation>Poslení hledání</translation>
     </message>
     <message>
-        <location filename="../Helpviewer/HelpWebSearchWidget.py" line="289"/>
+        <location filename="../Helpviewer/HelpWebSearchWidget.py" line="287"/>
         <source>Clear Recent Searches</source>
         <translation>Smazat poslední vyhledávání</translation>
     </message>
@@ -45385,37 +45405,37 @@
         <translation>Hotovo</translation>
     </message>
     <message>
-        <location filename="../QScintilla/MiniEditor.py" line="2370"/>
+        <location filename="../QScintilla/MiniEditor.py" line="2367"/>
         <source>File loaded</source>
         <translation>Soubor načten</translation>
     </message>
     <message>
-        <location filename="../QScintilla/MiniEditor.py" line="2766"/>
+        <location filename="../QScintilla/MiniEditor.py" line="2775"/>
         <source>Untitled</source>
         <translation>Beze jména</translation>
     </message>
     <message>
-        <location filename="../QScintilla/MiniEditor.py" line="2456"/>
+        <location filename="../QScintilla/MiniEditor.py" line="2465"/>
         <source>Mini Editor</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../QScintilla/MiniEditor.py" line="2807"/>
+        <location filename="../QScintilla/MiniEditor.py" line="2816"/>
         <source>Select all</source>
         <translation>Vybrat vše</translation>
     </message>
     <message>
-        <location filename="../QScintilla/MiniEditor.py" line="2808"/>
+        <location filename="../QScintilla/MiniEditor.py" line="2817"/>
         <source>Deselect all</source>
         <translation>Zrušit celý výběr</translation>
     </message>
     <message>
-        <location filename="../QScintilla/MiniEditor.py" line="2822"/>
+        <location filename="../QScintilla/MiniEditor.py" line="2831"/>
         <source>Languages</source>
         <translation>Jazyky</translation>
     </message>
     <message>
-        <location filename="../QScintilla/MiniEditor.py" line="2825"/>
+        <location filename="../QScintilla/MiniEditor.py" line="2834"/>
         <source>No Language</source>
         <translation>Žádný jazyk</translation>
     </message>
@@ -45425,7 +45445,7 @@
         <translation>Otevřít soubor</translation>
     </message>
     <message>
-        <location filename="../QScintilla/MiniEditor.py" line="2439"/>
+        <location filename="../QScintilla/MiniEditor.py" line="2436"/>
         <source>File saved</source>
         <translation>Soubor uložen</translation>
     </message>
@@ -45502,22 +45522,22 @@
         <translation>Tisk aktuálního souboru</translation>
     </message>
     <message>
-        <location filename="../QScintilla/MiniEditor.py" line="2730"/>
+        <location filename="../QScintilla/MiniEditor.py" line="2739"/>
         <source>Printing...</source>
         <translation>Tisk...</translation>
     </message>
     <message>
-        <location filename="../QScintilla/MiniEditor.py" line="2747"/>
+        <location filename="../QScintilla/MiniEditor.py" line="2756"/>
         <source>Printing completed</source>
         <translation>Tisk je hotov</translation>
     </message>
     <message>
-        <location filename="../QScintilla/MiniEditor.py" line="2749"/>
+        <location filename="../QScintilla/MiniEditor.py" line="2758"/>
         <source>Error while printing</source>
         <translation>Chyba během tisku</translation>
     </message>
     <message>
-        <location filename="../QScintilla/MiniEditor.py" line="2752"/>
+        <location filename="../QScintilla/MiniEditor.py" line="2761"/>
         <source>Printing aborted</source>
         <translation>Tisk byl zrušen</translation>
     </message>
@@ -45542,22 +45562,22 @@
         <translation>&lt;b&gt;Náhkled tisku&lt;/b&gt;&lt;p&gt;Náhkled tisku aktuálního souboru.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../QScintilla/MiniEditor.py" line="2848"/>
+        <location filename="../QScintilla/MiniEditor.py" line="2857"/>
         <source>Guessed</source>
         <translation>Odhadem</translation>
     </message>
     <message>
-        <location filename="../QScintilla/MiniEditor.py" line="2869"/>
+        <location filename="../QScintilla/MiniEditor.py" line="2878"/>
         <source>Alternatives</source>
         <translation>Alternativy</translation>
     </message>
     <message>
-        <location filename="../QScintilla/MiniEditor.py" line="2883"/>
+        <location filename="../QScintilla/MiniEditor.py" line="2892"/>
         <source>Pygments Lexer</source>
         <translation>Pygments Lexer</translation>
     </message>
     <message>
-        <location filename="../QScintilla/MiniEditor.py" line="2883"/>
+        <location filename="../QScintilla/MiniEditor.py" line="2892"/>
         <source>Select the Pygments lexer to apply.</source>
         <translation>Použít Pygments lexer.</translation>
     </message>
@@ -45577,22 +45597,22 @@
         <translation>&lt;p&gt;Soubor &lt;b&gt;{0}&lt;/b&gt; nelze otevřít.&lt;br /&gt;Důvod: {1}&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../QScintilla/MiniEditor.py" line="2431"/>
+        <location filename="../QScintilla/MiniEditor.py" line="2428"/>
         <source>Save File</source>
         <translation>Uložit soubor</translation>
     </message>
     <message>
-        <location filename="../QScintilla/MiniEditor.py" line="2431"/>
+        <location filename="../QScintilla/MiniEditor.py" line="2428"/>
         <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; could not be saved.&lt;br/&gt;Reason: {1}&lt;/p&gt;</source>
         <translation>&lt;p&gt;Soubor &lt;b&gt;{0}&lt;/b&gt; nelze uložit.&lt;br /&gt;Důvod: {1}&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../QScintilla/MiniEditor.py" line="2456"/>
+        <location filename="../QScintilla/MiniEditor.py" line="2465"/>
         <source>{0}[*] - {1}</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../QScintilla/MiniEditor.py" line="2866"/>
+        <location filename="../QScintilla/MiniEditor.py" line="2875"/>
         <source>Alternatives ({0})</source>
         <translation>Alternativy ({0})</translation>
     </message>
@@ -45637,171 +45657,271 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../QScintilla/MiniEditor.py" line="3378"/>
+        <location filename="../QScintilla/MiniEditor.py" line="3387"/>
         <source>EditorConfig Properties</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../QScintilla/MiniEditor.py" line="3378"/>
+        <location filename="../QScintilla/MiniEditor.py" line="3387"/>
         <source>&lt;p&gt;The EditorConfig properties for file &lt;b&gt;{0}&lt;/b&gt; could not be loaded.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../QScintilla/MiniEditor.py" line="2448"/>
+        <source>[*] - {0}</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>MiscellaneousChecker</name>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="454"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="458"/>
         <source>coding magic comment not found</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="457"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="461"/>
         <source>unknown encoding ({0}) found in coding magic comment</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="460"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="464"/>
         <source>copyright notice not present</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="463"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="467"/>
         <source>copyright notice contains invalid author</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="498"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="544"/>
         <source>found {0} formatter</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="501"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="547"/>
         <source>format string does contain unindexed parameters</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="504"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="550"/>
         <source>docstring does contain unindexed parameters</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="507"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="553"/>
         <source>other string does contain unindexed parameters</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="510"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="556"/>
         <source>format call uses too large index ({0})</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="513"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="559"/>
         <source>format call uses missing keyword ({0})</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="516"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="562"/>
         <source>format call uses keyword arguments but no named entries</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="519"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="565"/>
         <source>format call uses variable arguments but no numbered entries</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="568"/>
+        <source>format call uses implicit and explicit indexes together</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="571"/>
+        <source>format call provides unused index ({0})</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="574"/>
+        <source>format call provides unused keyword ({0})</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="592"/>
+        <source>expected these __future__ imports: {0}; but only got: {1}</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="595"/>
+        <source>expected these __future__ imports: {0}; but got none</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="601"/>
+        <source>print statement found</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="604"/>
+        <source>one element tuple found</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="616"/>
+        <source>{0}: {1}</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="470"/>
+        <source>&quot;{0}&quot; is a Python builtin and is being shadowed; consider renaming the variable</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="474"/>
+        <source>&quot;{0}&quot; is used as an argument and thus shadows a Python builtin; consider renaming the argument</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="478"/>
+        <source>unnecessary generator - rewrite as a list comprehension</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="481"/>
+        <source>unnecessary generator - rewrite as a set comprehension</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="484"/>
+        <source>unnecessary generator - rewrite as a dict comprehension</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="487"/>
+        <source>unnecessary list comprehension - rewrite as a set comprehension</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="490"/>
+        <source>unnecessary list comprehension - rewrite as a dict comprehension</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="493"/>
+        <source>unnecessary list literal - rewrite as a set literal</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="496"/>
+        <source>unnecessary list literal - rewrite as a dict literal</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="499"/>
+        <source>unnecessary list comprehension - &quot;{0}&quot; can take a generator</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="610"/>
+        <source>mutable default argument of type {0}</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="502"/>
+        <source>sort keys - &apos;{0}&apos; should be before &apos;{1}&apos;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="580"/>
+        <source>logging statement uses &apos;%&apos;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="586"/>
+        <source>logging statement uses f-string</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="589"/>
+        <source>logging statement uses &apos;warn&apos; instead of &apos;warning&apos;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="577"/>
+        <source>logging statement uses string.format()</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="583"/>
+        <source>logging statement uses &apos;+&apos;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="598"/>
+        <source>gettext import with alias _ found: {0}</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="505"/>
+        <source>Python does not support the unary prefix increment</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="515"/>
+        <source>&apos;sys.maxint&apos; is not defined in Python 3 - use &apos;sys.maxsize&apos;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="518"/>
+        <source>&apos;BaseException.message&apos; has been deprecated as of Python 2.6 and is removed in Python 3 - use &apos;str(e)&apos;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
         <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="522"/>
-        <source>format call uses implicit and explicit indexes together</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="525"/>
-        <source>format call provides unused index ({0})</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="528"/>
-        <source>format call provides unused keyword ({0})</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="531"/>
-        <source>expected these __future__ imports: {0}; but only got: {1}</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="534"/>
-        <source>expected these __future__ imports: {0}; but got none</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="537"/>
-        <source>print statement found</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="540"/>
-        <source>one element tuple found</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="549"/>
-        <source>{0}: {1}</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="466"/>
-        <source>&quot;{0}&quot; is a Python builtin and is being shadowed; consider renaming the variable</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="470"/>
-        <source>&quot;{0}&quot; is used as an argument and thus shadows a Python builtin; consider renaming the argument</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="474"/>
-        <source>unnecessary generator - rewrite as a list comprehension</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="477"/>
-        <source>unnecessary generator - rewrite as a set comprehension</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="480"/>
-        <source>unnecessary generator - rewrite as a dict comprehension</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="483"/>
-        <source>unnecessary list comprehension - rewrite as a set comprehension</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="486"/>
-        <source>unnecessary list comprehension - rewrite as a dict comprehension</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="489"/>
-        <source>unnecessary list literal - rewrite as a set literal</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="492"/>
-        <source>unnecessary list literal - rewrite as a dict literal</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="495"/>
-        <source>unnecessary list comprehension - &quot;{0}&quot; can take a generator</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="546"/>
-        <source>mutable default argument of type {0}</source>
+        <source>assigning to &apos;os.environ&apos; does not clear the environment - use &apos;os.environ.clear()&apos;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="530"/>
+        <source>Python 3 does not include &apos;.iter*&apos; methods on dictionaries</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="533"/>
+        <source>Python 3 does not include &apos;.view*&apos; methods on dictionaries</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="536"/>
+        <source>&apos;.next()&apos; does not exist in Python 3</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="539"/>
+        <source>&apos;__metaclass__&apos; does nothing on Python 3 - use &apos;class MyClass(BaseClass, metaclass=...)&apos;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="613"/>
+        <source>mutable default argument of function call &apos;{0}&apos;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="508"/>
+        <source>using .strip() with multi-character strings is misleading</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="511"/>
+        <source>using &apos;hasattr(x, &quot;__call__&quot;)&apos; to test if &apos;x&apos; is callable is unreliable</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="526"/>
+        <source>loop control variable {0} not used within the loop body - start the name with an underscore</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
@@ -46206,72 +46326,72 @@
 <context>
     <name>NamingStyleChecker</name>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="398"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="402"/>
         <source>class names should use CapWords convention</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="401"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="405"/>
         <source>function name should be lowercase</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="404"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="408"/>
         <source>argument name should be lowercase</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="407"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="411"/>
         <source>first argument of a class method should be named &apos;cls&apos;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="410"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="414"/>
         <source>first argument of a method should be named &apos;self&apos;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="413"/>
-        <source>first argument of a static method should not be named &apos;self&apos; or &apos;cls</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="417"/>
+        <source>first argument of a static method should not be named &apos;self&apos; or &apos;cls</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="421"/>
         <source>module names should be lowercase</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="420"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="424"/>
         <source>package names should be lowercase</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="423"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="427"/>
         <source>constant imported as non constant</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="426"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="430"/>
         <source>lowercase imported as non lowercase</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="429"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="433"/>
         <source>camelcase imported as lowercase</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="432"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="436"/>
         <source>camelcase imported as constant</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="435"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="439"/>
         <source>variable in function should be lowercase</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="438"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="442"/>
         <source>names &apos;l&apos;, &apos;O&apos; and &apos;I&apos; should be avoided</source>
         <translation type="unfinished"></translation>
     </message>
@@ -49251,37 +49371,37 @@
 <context>
     <name>PluginInfoDialog</name>
     <message>
-        <location filename="../PluginManager/PluginInfoDialog.ui" line="13"/>
+        <location filename="../PluginManager/PluginInfoDialog.ui" line="14"/>
         <source>Loaded Plugins</source>
         <translation>Načtené pluginy</translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginInfoDialog.ui" line="32"/>
+        <location filename="../PluginManager/PluginInfoDialog.ui" line="33"/>
         <source>&lt;b&gt;Plugin List&lt;/b&gt;&lt;p&gt;This lists all loaded plugins. Double-clicking an entry shows more detailed information in a separate dialog.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Seznam pluginů&lt;/b&gt;&lt;p&gt;Seznam všech načtených modulů. Dvojitý klik na položku zobrazí v dialogovém okně více inforamcí o položce.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginInfoDialog.ui" line="48"/>
+        <location filename="../PluginManager/PluginInfoDialog.ui" line="52"/>
         <source>Module</source>
         <translation>Modul</translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginInfoDialog.ui" line="53"/>
+        <location filename="../PluginManager/PluginInfoDialog.ui" line="57"/>
         <source>Name</source>
         <translation>Jméno</translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginInfoDialog.ui" line="63"/>
+        <location filename="../PluginManager/PluginInfoDialog.ui" line="67"/>
         <source>Autoactivate</source>
         <translation>Autoaktivovat</translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginInfoDialog.ui" line="68"/>
+        <location filename="../PluginManager/PluginInfoDialog.ui" line="72"/>
         <source>Active</source>
         <translation>Aktivní</translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginInfoDialog.ui" line="73"/>
+        <location filename="../PluginManager/PluginInfoDialog.ui" line="77"/>
         <source>Description</source>
         <translation>Popisek</translation>
     </message>
@@ -49311,12 +49431,12 @@
         <translation>Deaktivovat</translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginInfoDialog.ui" line="22"/>
+        <location filename="../PluginManager/PluginInfoDialog.ui" line="23"/>
         <source>Double-Click an entry to show detailed info. Plugins with an error are shown in red.</source>
         <translation>Dvojitý klik na položku zobrazí detailní info. Pluginy s chybami jsou zobrazeny červeně.</translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginInfoDialog.ui" line="58"/>
+        <location filename="../PluginManager/PluginInfoDialog.ui" line="62"/>
         <source>Version</source>
         <translation>Verze</translation>
     </message>
@@ -49514,7 +49634,7 @@
         <translation>Modulu chybí atributy &apos;pluginType&apos; a/nebo &apos;pluginTypename&apos;.</translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginManager.py" line="1140"/>
+        <location filename="../PluginManager/PluginManager.py" line="1137"/>
         <source>Plugin Manager Error</source>
         <translation>Chyba plugin manažeru</translation>
     </message>
@@ -49534,27 +49654,27 @@
         <translation>Modul se nepodařilo načíst. Chyba: {0}</translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginManager.py" line="1140"/>
+        <location filename="../PluginManager/PluginManager.py" line="1137"/>
         <source>&lt;p&gt;The plugin download directory &lt;b&gt;{0}&lt;/b&gt; could not be created. Please configure it via the configuration dialog.&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
         <translation>&lt;p&gt;Download plugin adresář &lt;b&gt;{0}&lt;/b&gt; se nepodařilo vytvořit. Prosím, upravte nastavení přes konfigurační dialog.&lt;/p&gt;&lt;p&gt;Důvod: {1}&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginManager.py" line="1220"/>
+        <location filename="../PluginManager/PluginManager.py" line="1217"/>
         <source>Error downloading file</source>
         <translation type="unfinished">Chyba při stahování souboru</translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginManager.py" line="1220"/>
+        <location filename="../PluginManager/PluginManager.py" line="1217"/>
         <source>&lt;p&gt;Could not download the requested file from {0}.&lt;/p&gt;&lt;p&gt;Error: {1}&lt;/p&gt;</source>
         <translation type="unfinished">&lt;p&gt;Nelze stáhnout požadovaný soubor z {0}.&lt;/p&gt;&lt;p&gt;Chyba: {1}&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginManager.py" line="1257"/>
+        <location filename="../PluginManager/PluginManager.py" line="1254"/>
         <source>New plugin versions available</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginManager.py" line="1257"/>
+        <location filename="../PluginManager/PluginManager.py" line="1254"/>
         <source>&lt;p&gt;There are new plug-ins or plug-in updates available. Use the plug-in repository dialog to get them.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
@@ -49740,87 +49860,87 @@
         <translation>Plugin repozitář</translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.ui" line="50"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.ui" line="53"/>
         <source>Name</source>
         <translation>Jméno</translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.ui" line="60"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.ui" line="63"/>
         <source>Short Description</source>
         <translation>Krátký popis</translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.ui" line="182"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.ui" line="185"/>
         <source>URL:</source>
         <translation>URL:</translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.ui" line="192"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.ui" line="195"/>
         <source>Displays the download URL of the selected plugin</source>
         <translation>Zobrauje download URL vybraného pluginu</translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.ui" line="133"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.ui" line="136"/>
         <source>Description:</source>
         <translation>Popisek:</translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.ui" line="152"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.ui" line="155"/>
         <source>Displays the description of the selected plugin</source>
         <translation>Zobrazuje popis vybraného pluginu</translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.ui" line="211"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.ui" line="214"/>
         <source>Shows the progress of the current download</source>
         <translation>Zobrazit průběh aktuálního downloadu</translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.ui" line="162"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.ui" line="165"/>
         <source>Author:</source>
         <translation>Autor:</translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.ui" line="172"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.ui" line="175"/>
         <source>Displays the author of the selected plugin</source>
         <translation>Zobrazí jméno autora vybraného pluginu</translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.ui" line="55"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.ui" line="58"/>
         <source>Version</source>
         <translation>Verze</translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.ui" line="230"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.ui" line="233"/>
         <source>Repository URL:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.ui" line="237"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.ui" line="240"/>
         <source>Shows the repository URL</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.ui" line="247"/>
-        <source>Press to edit the plugin repository URL</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <location filename="../PluginManager/PluginRepositoryDialog.ui" line="250"/>
+        <source>Press to edit the plugin repository URL</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../PluginManager/PluginRepositoryDialog.ui" line="253"/>
         <source>Edit URL</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.ui" line="75"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.ui" line="78"/>
         <source>Shows the number of new plug-ins available</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.ui" line="98"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.ui" line="101"/>
         <source>Shows the number of locally updatable plug-ins available</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.ui" line="121"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.ui" line="124"/>
         <source>Shows the number of remotely updatable plug-ins available</source>
         <translation type="unfinished"></translation>
     </message>
@@ -49848,54 +49968,54 @@
         <translation>Zavřít &amp;&amp; Instalovat</translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="368"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="365"/>
         <source>Download Plugin Files</source>
         <translation>Download plugin soubory</translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="368"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="365"/>
         <source>The requested plugins were downloaded.</source>
         <translation>Požadované pluginy byly staženy.</translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="424"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="420"/>
         <source>Read plugins repository file</source>
         <translation>Číst soubor repozitáře pluginů</translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="432"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="428"/>
         <source>No plugin repository file available.
 Select Update.</source>
         <translation>Soubor repozitáře pluginů není k dispozici.
 Vyberte Obnovit.</translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="502"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="497"/>
         <source>Error downloading file</source>
         <translation>Chyba při stahování souboru</translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="587"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="582"/>
         <source>Stable</source>
         <translation>Stabilní</translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="594"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="589"/>
         <source>Unstable</source>
         <translation>Nestabilní</translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="608"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="603"/>
         <source>Unknown</source>
         <translation>Neznámý</translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="424"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="420"/>
         <source>&lt;p&gt;The plugins repository file &lt;b&gt;{0}&lt;/b&gt; could not be read. Select Update&lt;/p&gt;</source>
         <translation>&lt;p&gt;Soubor repozitáře pluginů &lt;b&gt;{0}&lt;/b&gt; nelze přečíst. Vyberte Obnovit&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="502"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="497"/>
         <source>&lt;p&gt;Could not download the requested file from {0}.&lt;/p&gt;&lt;p&gt;Error: {1}&lt;/p&gt;</source>
         <translation>&lt;p&gt;Nelze stáhnout požadovaný soubor z {0}.&lt;/p&gt;&lt;p&gt;Chyba: {1}&lt;/p&gt;</translation>
     </message>
@@ -49905,12 +50025,12 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="416"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="412"/>
         <source>Plugins Repository URL Changed</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="416"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="412"/>
         <source>The URL of the Plugins Repository has changed. Select the &quot;Update&quot; button to get the new repository file.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -49935,67 +50055,67 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="622"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="617"/>
         <source>up-to-date</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="625"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="620"/>
         <source>new download available</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="629"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="624"/>
         <source>update installable</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="633"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="628"/>
         <source>updated download available</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="929"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="924"/>
         <source>Cleanup of Plugin Downloads</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="929"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="924"/>
         <source>&lt;p&gt;The plugin download &lt;b&gt;{0}&lt;/b&gt; could not be deleted.&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="158"/>
+        <source>Network Status: online</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
         <location filename="../PluginManager/PluginRepositoryDialog.py" line="160"/>
-        <source>Network Status: online</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="162"/>
         <source>Network Status: offline</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="476"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="467"/>
         <source>Computer is offline.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="435"/>
+        <source>New: &lt;b&gt;{0}&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="437"/>
+        <source>Local Updates: &lt;b&gt;{0}&lt;/b&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
         <location filename="../PluginManager/PluginRepositoryDialog.py" line="439"/>
-        <source>New: &lt;b&gt;{0}&lt;/b&gt;</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="441"/>
-        <source>Local Updates: &lt;b&gt;{0}&lt;/b&gt;</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="443"/>
         <source>Remote Updates: &lt;b&gt;{0}&lt;/b&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="601"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="596"/>
         <source>Obsolete</source>
         <translation type="unfinished"></translation>
     </message>
@@ -50003,17 +50123,17 @@
 <context>
     <name>PluginRepositoryWindow</name>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="865"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="860"/>
         <source>Process Generation Error</source>
         <translation>Chyba v procesu generování</translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="865"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="860"/>
         <source>OK</source>
         <translation>OK</translation>
     </message>
     <message>
-        <location filename="../PluginManager/PluginRepositoryDialog.py" line="865"/>
+        <location filename="../PluginManager/PluginRepositoryDialog.py" line="860"/>
         <source>&lt;p&gt;Could not start the process.&lt;br&gt;Ensure that it is available as &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</source>
         <translation>&lt;p&gt;Nemohu spustit zveřejnění.&lt;br&gt;Ověřte jestli je dostupný jako &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</translation>
     </message>
@@ -50355,27 +50475,27 @@
 <context>
     <name>Preferences</name>
     <message>
-        <location filename="../Preferences/__init__.py" line="1653"/>
+        <location filename="../Preferences/__init__.py" line="1654"/>
         <source>Export Preferences</source>
         <translation>Předvolby exportu</translation>
     </message>
     <message>
-        <location filename="../Preferences/__init__.py" line="1681"/>
+        <location filename="../Preferences/__init__.py" line="1682"/>
         <source>Import Preferences</source>
         <translation>Předvolby importu</translation>
     </message>
     <message>
-        <location filename="../Preferences/__init__.py" line="1681"/>
+        <location filename="../Preferences/__init__.py" line="1682"/>
         <source>Properties File (*.ini);;All Files (*)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Preferences/__init__.py" line="1783"/>
+        <location filename="../Preferences/__init__.py" line="1784"/>
         <source>Select Python{0} Interpreter</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Preferences/__init__.py" line="1783"/>
+        <location filename="../Preferences/__init__.py" line="1784"/>
         <source>Select the Python{0} interpreter to be used:</source>
         <translation type="unfinished"></translation>
     </message>
@@ -51427,7 +51547,7 @@
         <translation>&lt;b&gt;Pokrytí kódu...&lt;/b&gt;&lt;p&gt;Zobrazí informace o pokrytí kódu ve všech python souborech projektu.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4742"/>
+        <location filename="../Project/Project.py" line="4743"/>
         <source>Profile Data</source>
         <translation>Profilovat data</translation>
     </message>
@@ -51447,7 +51567,7 @@
         <translation>&lt;b&gt;Profilovat data&lt;/b&gt;&lt;p&gt;Zobrazí se profilování dat projektu.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4796"/>
+        <location filename="../Project/Project.py" line="4797"/>
         <source>Application Diagram</source>
         <translation>Diagram aplikace</translation>
     </message>
@@ -51542,37 +51662,37 @@
         <translation>Version Control System</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4669"/>
+        <location filename="../Project/Project.py" line="4670"/>
         <source>Coverage Data</source>
         <translation>Datové pokrytí</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4719"/>
+        <location filename="../Project/Project.py" line="4720"/>
         <source>There is no main script defined for the current project. Aborting</source>
         <translation>V aktuálním projektu nebyl určen hlavní skript. Zrušeno</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4692"/>
+        <location filename="../Project/Project.py" line="4693"/>
         <source>Code Coverage</source>
         <translation>Pokrytí kódu</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4692"/>
+        <location filename="../Project/Project.py" line="4693"/>
         <source>Please select a coverage file</source>
         <translation>Prosím, vyberte soubor pokrytí</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4742"/>
+        <location filename="../Project/Project.py" line="4743"/>
         <source>Please select a profile file</source>
         <translation>Prosím, vyberte soubor s profilem</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4796"/>
+        <location filename="../Project/Project.py" line="4797"/>
         <source>Include module names?</source>
         <translation>Včetně jmen modulů?</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4990"/>
+        <location filename="../Project/Project.py" line="4991"/>
         <source>Create Package List</source>
         <translation>Vytvořit seznam balíčků</translation>
     </message>
@@ -51582,12 +51702,12 @@
         <translation type="unfinished">Vytvořit Plugin &amp;archiv</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="5266"/>
+        <location filename="../Project/Project.py" line="5267"/>
         <source>Create Plugin Archive</source>
         <translation>Vytvořit Plugin archiv</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4941"/>
+        <location filename="../Project/Project.py" line="4942"/>
         <source>&lt;p&gt;The file &lt;b&gt;PKGLIST&lt;/b&gt; already exists.&lt;/p&gt;&lt;p&gt;Overwrite it?&lt;/p&gt;</source>
         <translation>&lt;p&gt;Soubor &lt;b&gt;PKGLIST&lt;/b&gt; již existuje.&lt;/p&gt;&lt;p&gt;Přepsat jej?&lt;/p&gt;</translation>
     </message>
@@ -51597,7 +51717,7 @@
         <translation type="obsolete">&lt;p&gt;Soubor &lt;b&gt;PKGLIST&lt;/b&gt; neexistuje. Zrušeno...&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="5009"/>
+        <location filename="../Project/Project.py" line="5010"/>
         <source>The project does not have a main script defined. Aborting...</source>
         <translation>Projekt nemá definován hlavní skript. Zrušeno...</translation>
     </message>
@@ -51777,7 +51897,7 @@
         <translation>&lt;p&gt;Vybrané VCS &lt;b&gt;{0}&lt;/b&gt; nebylo nalezeno.&lt;br/&gt;Kontrola verzí vypnuta.&lt;/p&gt;&lt;p&gt;{1}&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4990"/>
+        <location filename="../Project/Project.py" line="4991"/>
         <source>&lt;p&gt;The file &lt;b&gt;PKGLIST&lt;/b&gt; could not be created.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
         <translation>&lt;p&gt;Soubor &lt;b&gt;PKGLIST&lt;/b&gt; nelze vytvořit.&lt;/p&gt;&lt;p&gt;Důvod: {0}&lt;/p&gt;</translation>
     </message>
@@ -51787,12 +51907,12 @@
         <translation type="obsolete">&lt;p&gt;Soubor &lt;b&gt;PKGLIST&lt;/b&gt; nelze načíst.&lt;/p&gt;&lt;p&gt;Důvod: {0}&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="5150"/>
+        <location filename="../Project/Project.py" line="5151"/>
         <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; could not be stored in the archive. Ignoring it.&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
         <translation>&lt;p&gt;Soubor &lt;b&gt;{0}&lt;/b&gt; nelze uložit do archivu. Ingorováno.&lt;/p&gt;&lt;p&gt;Důvod: {1}&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="5224"/>
+        <location filename="../Project/Project.py" line="5225"/>
         <source>&lt;p&gt;The plugin file &lt;b&gt;{0}&lt;/b&gt; could not be read.&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
         <translation>&lt;p&gt;Plugin soubor &lt;b&gt;{0}&lt;/b&gt; nelze přečíst.&lt;/p&gt;&lt;p&gt;Důvod: {1}&lt;/p&gt;</translation>
     </message>
@@ -51872,7 +51992,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="5266"/>
+        <location filename="../Project/Project.py" line="5267"/>
         <source>&lt;p&gt;The plugin file &lt;b&gt;{0}&lt;/b&gt; could not be read.&lt;/p&gt; &lt;p&gt;Reason: {1}&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
@@ -51897,7 +52017,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="5115"/>
+        <location filename="../Project/Project.py" line="5116"/>
         <source>&lt;p&gt;The eric6 plugin archive file &lt;b&gt;{0}&lt;/b&gt; could not be created.&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
         <translation type="unfinished">&lt;p&gt;Soubor s eric5 plugin archivem &lt;b&gt;{0}&lt;/b&gt; nelze vytvořit. Zrušeno...&lt;/p&gt;&lt;p&gt;Důvod: {1}&lt;/p&gt; {6 ?} {0}?} {1}?}</translation>
     </message>
@@ -51958,7 +52078,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="5044"/>
+        <location filename="../Project/Project.py" line="5045"/>
         <source>Create Plugin Archives</source>
         <translation type="unfinished"></translation>
     </message>
@@ -51983,22 +52103,22 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="5023"/>
+        <location filename="../Project/Project.py" line="5024"/>
         <source>Select package lists:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="5040"/>
+        <location filename="../Project/Project.py" line="5041"/>
         <source>Creating plugin archives...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="5040"/>
+        <location filename="../Project/Project.py" line="5041"/>
         <source>Abort</source>
         <translation type="unfinished">Přerušit</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="5040"/>
+        <location filename="../Project/Project.py" line="5041"/>
         <source>%v/%m Archives</source>
         <translation type="unfinished"></translation>
     </message>
@@ -52008,27 +52128,27 @@
         <translation type="obsolete">Pokrytí</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="5057"/>
+        <location filename="../Project/Project.py" line="5058"/>
         <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; could not be read.&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="5169"/>
+        <location filename="../Project/Project.py" line="5170"/>
         <source>&lt;p&gt;The eric6 plugin archive files were created with some errors.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="5172"/>
+        <location filename="../Project/Project.py" line="5173"/>
         <source>&lt;p&gt;The eric6 plugin archive files were created successfully.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="5033"/>
+        <location filename="../Project/Project.py" line="5034"/>
         <source>&lt;p&gt;No package list files (PKGLIST*) available or selected. Aborting...&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="5087"/>
+        <location filename="../Project/Project.py" line="5088"/>
         <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; is not ready yet.&lt;/p&gt;&lt;p&gt;Please rework it and delete the&apos;; initial_list&apos; line of the header.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
@@ -52051,27 +52171,27 @@
         <translation>Otevřít</translation>
     </message>
     <message>
-        <location filename="../Project/ProjectBaseBrowser.py" line="503"/>
+        <location filename="../Project/ProjectBaseBrowser.py" line="490"/>
         <source>local</source>
         <translation>lokální</translation>
     </message>
     <message>
-        <location filename="../Project/ProjectBaseBrowser.py" line="543"/>
+        <location filename="../Project/ProjectBaseBrowser.py" line="530"/>
         <source>Select entries</source>
         <translation>Vybrat vstupy</translation>
     </message>
     <message>
-        <location filename="../Project/ProjectBaseBrowser.py" line="543"/>
+        <location filename="../Project/ProjectBaseBrowser.py" line="530"/>
         <source>There were no matching entries found.</source>
         <translation>Hledané vstupy nebyly nalezeny.</translation>
     </message>
     <message>
-        <location filename="../Project/ProjectBaseBrowser.py" line="303"/>
+        <location filename="../Project/ProjectBaseBrowser.py" line="290"/>
         <source>Delete directories</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Project/ProjectBaseBrowser.py" line="303"/>
+        <location filename="../Project/ProjectBaseBrowser.py" line="290"/>
         <source>Do you really want to delete these directories from the project?</source>
         <translation type="unfinished"></translation>
     </message>
@@ -68102,7 +68222,7 @@
 <context>
     <name>SvnStatusDialog</name>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsSubversion/SvnStatusDialog.py" line="395"/>
+        <location filename="../Plugins/VcsPlugins/vcsSubversion/SvnStatusDialog.py" line="396"/>
         <source>Subversion Status</source>
         <translation></translation>
     </message>
@@ -68229,12 +68349,12 @@
         <translation>Komitnout změny do repozitáře...</translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsSubversion/SvnStatusDialog.py" line="860"/>
+        <location filename="../Plugins/VcsPlugins/vcsSubversion/SvnStatusDialog.py" line="862"/>
         <source>Lock</source>
         <translation>Zamknout</translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsSubversion/SvnStatusDialog.py" line="877"/>
+        <location filename="../Plugins/VcsPlugins/vcsSubversion/SvnStatusDialog.py" line="879"/>
         <source>Unlock</source>
         <translation>Odemknout</translation>
     </message>
@@ -68259,7 +68379,7 @@
         <translation>přidáno</translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsSubversion/SvnStatusDialog.py" line="163"/>
+        <location filename="../Plugins/VcsPlugins/vcsSubversion/SvnStatusDialog.py" line="164"/>
         <source>deleted</source>
         <translation>smazáno</translation>
     </message>
@@ -68269,27 +68389,27 @@
         <translation>změněno</translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsSubversion/SvnStatusDialog.py" line="192"/>
+        <location filename="../Plugins/VcsPlugins/vcsSubversion/SvnStatusDialog.py" line="193"/>
         <source>locked</source>
         <translation>zamčeno</translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsSubversion/SvnStatusDialog.py" line="193"/>
-        <source>other lock</source>
-        <translation>jiný zámek</translation>
-    </message>
-    <message>
         <location filename="../Plugins/VcsPlugins/vcsSubversion/SvnStatusDialog.py" line="194"/>
-        <source>stolen lock</source>
-        <translation>scizený zámek</translation>
+        <source>other lock</source>
+        <translation>jiný zámek</translation>
     </message>
     <message>
         <location filename="../Plugins/VcsPlugins/vcsSubversion/SvnStatusDialog.py" line="195"/>
+        <source>stolen lock</source>
+        <translation>scizený zámek</translation>
+    </message>
+    <message>
+        <location filename="../Plugins/VcsPlugins/vcsSubversion/SvnStatusDialog.py" line="196"/>
         <source>broken lock</source>
         <translation>prolomený zámek</translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsSubversion/SvnStatusDialog.py" line="191"/>
+        <location filename="../Plugins/VcsPlugins/vcsSubversion/SvnStatusDialog.py" line="192"/>
         <source>not locked</source>
         <translation>nezamčeno</translation>
     </message>
@@ -68299,7 +68419,7 @@
         <translation>normální</translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsSubversion/SvnStatusDialog.py" line="165"/>
+        <location filename="../Plugins/VcsPlugins/vcsSubversion/SvnStatusDialog.py" line="167"/>
         <source>replaced</source>
         <translation>nahrazeno</translation>
     </message>
@@ -68309,12 +68429,12 @@
         <translation>konflikt</translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsSubversion/SvnStatusDialog.py" line="167"/>
+        <location filename="../Plugins/VcsPlugins/vcsSubversion/SvnStatusDialog.py" line="189"/>
         <source>external</source>
         <translation>externí</translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsSubversion/SvnStatusDialog.py" line="168"/>
+        <location filename="../Plugins/VcsPlugins/vcsSubversion/SvnStatusDialog.py" line="165"/>
         <source>ignored</source>
         <translation>ignorováno</translation>
     </message>
@@ -68334,47 +68454,47 @@
         <translation>chyba typu</translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsSubversion/SvnStatusDialog.py" line="199"/>
+        <location filename="../Plugins/VcsPlugins/vcsSubversion/SvnStatusDialog.py" line="200"/>
         <source>no</source>
         <translation>ne</translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsSubversion/SvnStatusDialog.py" line="198"/>
+        <location filename="../Plugins/VcsPlugins/vcsSubversion/SvnStatusDialog.py" line="199"/>
         <source>yes</source>
         <translation>ano</translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsSubversion/SvnStatusDialog.py" line="402"/>
+        <location filename="../Plugins/VcsPlugins/vcsSubversion/SvnStatusDialog.py" line="403"/>
         <source>Process Generation Error</source>
         <translation>Chyba v procesu generování</translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsSubversion/SvnStatusDialog.py" line="712"/>
+        <location filename="../Plugins/VcsPlugins/vcsSubversion/SvnStatusDialog.py" line="714"/>
         <source>Commit</source>
         <translation>Commit</translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsSubversion/SvnStatusDialog.py" line="837"/>
+        <location filename="../Plugins/VcsPlugins/vcsSubversion/SvnStatusDialog.py" line="839"/>
         <source>There are no uncommitted changes available/selected.</source>
         <translation>Nezapsané změny nejsou dostupné/vybrané.</translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsSubversion/SvnStatusDialog.py" line="860"/>
+        <location filename="../Plugins/VcsPlugins/vcsSubversion/SvnStatusDialog.py" line="862"/>
         <source>There are no unlocked files available/selected.</source>
         <translation>Odemčené soubory nejsou dostupné/vybrané.</translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsSubversion/SvnStatusDialog.py" line="913"/>
+        <location filename="../Plugins/VcsPlugins/vcsSubversion/SvnStatusDialog.py" line="915"/>
         <source>There are no locked files available/selected.</source>
         <translation>Zamčené soubory nejsou dostupné/vybrané.</translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsSubversion/SvnStatusDialog.py" line="895"/>
+        <location filename="../Plugins/VcsPlugins/vcsSubversion/SvnStatusDialog.py" line="897"/>
         <source>Break Lock</source>
         <translation>Prolomit zámek</translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsSubversion/SvnStatusDialog.py" line="913"/>
+        <location filename="../Plugins/VcsPlugins/vcsSubversion/SvnStatusDialog.py" line="915"/>
         <source>Steal Lock</source>
         <translation>Scizit zámek</translation>
     </message>
@@ -68389,17 +68509,17 @@
         <translation>Vrátit změny</translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsSubversion/SvnStatusDialog.py" line="752"/>
+        <location filename="../Plugins/VcsPlugins/vcsSubversion/SvnStatusDialog.py" line="754"/>
         <source>Add</source>
         <translation>Přidat</translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsSubversion/SvnStatusDialog.py" line="752"/>
+        <location filename="../Plugins/VcsPlugins/vcsSubversion/SvnStatusDialog.py" line="754"/>
         <source>There are no unversioned entries available/selected.</source>
         <translation>Položky mimo verzi nejsou dostupné/vybrány.</translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsSubversion/SvnStatusDialog.py" line="798"/>
+        <location filename="../Plugins/VcsPlugins/vcsSubversion/SvnStatusDialog.py" line="800"/>
         <source>Revert</source>
         <translation>Vrátit</translation>
     </message>
@@ -68414,22 +68534,22 @@
         <translation>Přidat do seznamu změn</translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsSubversion/SvnStatusDialog.py" line="949"/>
+        <location filename="../Plugins/VcsPlugins/vcsSubversion/SvnStatusDialog.py" line="951"/>
         <source>Remove from Changelist</source>
         <translation>Odebrat ze seznamu změn</translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsSubversion/SvnStatusDialog.py" line="930"/>
+        <location filename="../Plugins/VcsPlugins/vcsSubversion/SvnStatusDialog.py" line="932"/>
         <source>There are no files available/selected not belonging to a changelist.</source>
         <translation>Nejsou dostupné/vybrány soubory, které nepatří do seznamu změn.</translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsSubversion/SvnStatusDialog.py" line="949"/>
+        <location filename="../Plugins/VcsPlugins/vcsSubversion/SvnStatusDialog.py" line="951"/>
         <source>There are no files available/selected belonging to a changelist.</source>
         <translation>Nejsou dostupné/vybrány soubory, které patří do seznamu změn.</translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsSubversion/SvnStatusDialog.py" line="402"/>
+        <location filename="../Plugins/VcsPlugins/vcsSubversion/SvnStatusDialog.py" line="403"/>
         <source>The process {0} could not be started. Ensure, that it is in the search path.</source>
         <translation>Proces {0} nelze spustit. Ověřte, že je umístěn v požadované cestě.</translation>
     </message>
@@ -68504,22 +68624,22 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsSubversion/SvnStatusDialog.py" line="624"/>
+        <location filename="../Plugins/VcsPlugins/vcsSubversion/SvnStatusDialog.py" line="626"/>
         <source>all</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsSubversion/SvnStatusDialog.py" line="816"/>
+        <location filename="../Plugins/VcsPlugins/vcsSubversion/SvnStatusDialog.py" line="818"/>
         <source>Differences</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsSubversion/SvnStatusDialog.py" line="712"/>
+        <location filename="../Plugins/VcsPlugins/vcsSubversion/SvnStatusDialog.py" line="714"/>
         <source>There are no entries selected to be committed.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsSubversion/SvnStatusDialog.py" line="798"/>
+        <location filename="../Plugins/VcsPlugins/vcsSubversion/SvnStatusDialog.py" line="800"/>
         <source>There are no missing entries available/selected.</source>
         <translation type="unfinished">Chybějící záznamy nejsou dostupné/vybrány.</translation>
     </message>
@@ -68549,12 +68669,12 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsSubversion/SvnStatusDialog.py" line="844"/>
+        <location filename="../Plugins/VcsPlugins/vcsSubversion/SvnStatusDialog.py" line="846"/>
         <source>Side-by-Side Diff</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsSubversion/SvnStatusDialog.py" line="844"/>
+        <location filename="../Plugins/VcsPlugins/vcsSubversion/SvnStatusDialog.py" line="846"/>
         <source>Only one file with uncommitted changes must be selected.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -70643,17 +70763,17 @@
 <context>
     <name>SyntaxCheckService</name>
     <message>
-        <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckService.py" line="203"/>
+        <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckService.py" line="204"/>
         <source>Python 2 batch check</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckService.py" line="219"/>
+        <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckService.py" line="220"/>
         <source>Python 3 batch check</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckService.py" line="235"/>
+        <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckService.py" line="236"/>
         <source>JavaScript batch check</source>
         <translation type="unfinished"></translation>
     </message>
@@ -70715,7 +70835,7 @@
         <translation>Stisknout pro zobrazení všech souborů, které obsahují problém</translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="397"/>
+        <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="398"/>
         <source>No issues found.</source>
         <translation>Žádné problémy nenalezeny.</translation>
     </message>
@@ -74933,7 +75053,7 @@
         <translation>Zjistit akt&amp;ualizace...</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="3217"/>
+        <location filename="../UI/UserInterface.py" line="3219"/>
         <source>Report Bug</source>
         <translation>Reportovat Bugy</translation>
     </message>
@@ -74953,7 +75073,7 @@
         <translation>&lt;b&gt;Reportovat bug...&lt;/b&gt;&lt;p&gt;Otevře se dialog pro reportování bugu.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2789"/>
+        <location filename="../UI/UserInterface.py" line="2791"/>
         <source>Unittest</source>
         <translation></translation>
     </message>
@@ -75013,7 +75133,7 @@
         <translation>&lt;b&gt;Unittest Script&lt;/b&gt;&lt;p&gt;Spustit unittest s aktuálním skriptem.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="4345"/>
+        <location filename="../UI/UserInterface.py" line="4347"/>
         <source>Unittest Project</source>
         <translation>Unittest Projekt</translation>
     </message>
@@ -75183,7 +75303,7 @@
         <translation>&lt;b&gt;Klávesové zkratky&lt;/b&gt;&lt;p&gt;Nastavení klávesových zkratek aplikace podle zvyklostí uživatele.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5711"/>
+        <location filename="../UI/UserInterface.py" line="5713"/>
         <source>Export Keyboard Shortcuts</source>
         <translation>Exportovat klávesové zkratky</translation>
     </message>
@@ -75203,7 +75323,7 @@
         <translation>&lt;b&gt;Export klávesových zkratek&lt;/b&gt;&lt;p&gt;Exportují se klávesové zkratky z aplikace.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5735"/>
+        <location filename="../UI/UserInterface.py" line="5737"/>
         <source>Import Keyboard Shortcuts</source>
         <translation>Import klávesových zkratek</translation>
     </message>
@@ -75283,12 +75403,12 @@
         <translation>Otevřít Eric API dokumentaci</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2602"/>
+        <location filename="../UI/UserInterface.py" line="2604"/>
         <source>&amp;Unittest</source>
         <translation>&amp;Unittest</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2619"/>
+        <location filename="../UI/UserInterface.py" line="2621"/>
         <source>E&amp;xtras</source>
         <translation>E&amp;xtra funkce</translation>
     </message>
@@ -75298,142 +75418,142 @@
         <translation type="obsolete">&amp;Nástroje</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2632"/>
+        <location filename="../UI/UserInterface.py" line="2634"/>
         <source>Select Tool Group</source>
         <translation>Vybrat skupinu nástrojů</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2640"/>
+        <location filename="../UI/UserInterface.py" line="2642"/>
         <source>Se&amp;ttings</source>
         <translation>Nas&amp;tavení</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2665"/>
+        <location filename="../UI/UserInterface.py" line="2667"/>
         <source>&amp;Window</source>
         <translation>O&amp;kno</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2690"/>
+        <location filename="../UI/UserInterface.py" line="2692"/>
         <source>&amp;Toolbars</source>
         <translation>&amp;Toolbary</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2715"/>
+        <location filename="../UI/UserInterface.py" line="2717"/>
         <source>&amp;Help</source>
         <translation>&amp;Nápověda</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2788"/>
-        <source>Tools</source>
-        <translation>Nástroje</translation>
-    </message>
-    <message>
         <location filename="../UI/UserInterface.py" line="2790"/>
-        <source>Settings</source>
-        <translation>Nastavení</translation>
-    </message>
-    <message>
-        <location filename="../UI/UserInterface.py" line="4597"/>
-        <source>Help</source>
-        <translation>Nápověda</translation>
+        <source>Tools</source>
+        <translation>Nástroje</translation>
     </message>
     <message>
         <location filename="../UI/UserInterface.py" line="2792"/>
+        <source>Settings</source>
+        <translation>Nastavení</translation>
+    </message>
+    <message>
+        <location filename="../UI/UserInterface.py" line="4599"/>
+        <source>Help</source>
+        <translation>Nápověda</translation>
+    </message>
+    <message>
+        <location filename="../UI/UserInterface.py" line="2794"/>
         <source>Profiles</source>
         <translation>Profily</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="3162"/>
+        <location filename="../UI/UserInterface.py" line="3164"/>
         <source>&lt;h3&gt;Version Numbers&lt;/h3&gt;&lt;table&gt;</source>
         <translation>&lt;h3&gt;Čísla verzí&lt;/h3&gt;&lt;table&gt;</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="6689"/>
+        <location filename="../UI/UserInterface.py" line="6691"/>
         <source>&lt;/table&gt;</source>
         <translation>&lt;/table&gt;</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="3217"/>
+        <location filename="../UI/UserInterface.py" line="3219"/>
         <source>Email address or mail server address is empty. Please configure your Email settings in the Preferences Dialog.</source>
         <translation>Emailová adresa nebo mail server adresa jsou prázdné. Prosím, nastavte váš email v dialogovém okně Nastavení.</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="3576"/>
+        <location filename="../UI/UserInterface.py" line="3578"/>
         <source>Configure Tool Groups ...</source>
         <translation>Konfigurace Skupin nástrojů...</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="3580"/>
+        <location filename="../UI/UserInterface.py" line="3582"/>
         <source>Configure current Tool Group ...</source>
         <translation>Konfigurace aktuální skupiny nástrojů...</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="3531"/>
+        <location filename="../UI/UserInterface.py" line="3533"/>
         <source>&amp;Builtin Tools</source>
         <translation>&amp;Vestavěné nástroje</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="4345"/>
+        <location filename="../UI/UserInterface.py" line="4347"/>
         <source>There is no main script defined for the current project. Aborting</source>
         <translation>V aktuálním projektu není definován hlavní skript. Zrušeno</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="4723"/>
+        <location filename="../UI/UserInterface.py" line="4725"/>
         <source>Problem</source>
         <translation>Problém</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="4912"/>
+        <location filename="../UI/UserInterface.py" line="4914"/>
         <source>Process Generation Error</source>
         <translation>Chyba v procesu generování</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="4597"/>
+        <location filename="../UI/UserInterface.py" line="4599"/>
         <source>Currently no custom viewer is selected. Please use the preferences dialog to specify one.</source>
         <translation>Aktuálně není vybrán žádný prohlížeč. Prosím otevřete Nastavení a nějaký vyberte.</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="4631"/>
+        <location filename="../UI/UserInterface.py" line="4633"/>
         <source>&lt;p&gt;Could not start the help viewer.&lt;br&gt;Ensure that it is available as &lt;b&gt;hh&lt;/b&gt;.&lt;/p&gt;</source>
         <translation>&lt;p&gt;Nemohu spustit prohlížeč nápovědy.&lt;br&gt;Ověřte jestli je dostupný jako &lt;b&gt;hh&lt;/b&gt;.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5386"/>
+        <location filename="../UI/UserInterface.py" line="5388"/>
         <source>Documentation Missing</source>
         <translation>Dokumentace chybí</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5371"/>
+        <location filename="../UI/UserInterface.py" line="5373"/>
         <source>Documentation</source>
         <translation>Dokumentace</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5197"/>
+        <location filename="../UI/UserInterface.py" line="5199"/>
         <source>&lt;p&gt;The PyQt4 documentation starting point has not been configured.&lt;/p&gt;</source>
         <translation>&lt;p&gt;Adresář PyQt4 dokumentace není nakonfigurován.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5904"/>
+        <location filename="../UI/UserInterface.py" line="5906"/>
         <source>Save tasks</source>
         <translation>Uložit úlohy</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5933"/>
+        <location filename="../UI/UserInterface.py" line="5935"/>
         <source>Read tasks</source>
         <translation>Načíst úlohy</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="6294"/>
+        <location filename="../UI/UserInterface.py" line="6296"/>
         <source>Drop Error</source>
         <translation>Zahodit chybu</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="6651"/>
+        <location filename="../UI/UserInterface.py" line="6653"/>
         <source>Error during updates check</source>
         <translation>Chyba během zjišťování aktualizací</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="6631"/>
+        <location filename="../UI/UserInterface.py" line="6633"/>
         <source>Update available</source>
         <translation>Byla nalezena aktualizace</translation>
     </message>
@@ -75448,17 +75568,17 @@
         <translation>Zobrazit externí nás&amp;troje</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="6651"/>
+        <location filename="../UI/UserInterface.py" line="6653"/>
         <source>Could not perform updates check.</source>
         <translation>Kontrolu updatů nelze provést.</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="6464"/>
+        <location filename="../UI/UserInterface.py" line="6466"/>
         <source>&amp;Cancel</source>
         <translation>&amp;Zrušit</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="6716"/>
+        <location filename="../UI/UserInterface.py" line="6718"/>
         <source>First time usage</source>
         <translation>Spuštěno poprvé</translation>
     </message>
@@ -75468,12 +75588,12 @@
         <translation>Inicializace Plugin manažera...</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2701"/>
+        <location filename="../UI/UserInterface.py" line="2703"/>
         <source>P&amp;lugins</source>
         <translation>P&amp;luginy</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2793"/>
+        <location filename="../UI/UserInterface.py" line="2795"/>
         <source>Plugins</source>
         <translation>Pluginy</translation>
     </message>
@@ -75498,7 +75618,7 @@
         <translation>&amp;Plugin Infa...</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="3548"/>
+        <location filename="../UI/UserInterface.py" line="3550"/>
         <source>&amp;Plugin Tools</source>
         <translation>&amp;Plugin nástroje</translation>
     </message>
@@ -75518,12 +75638,12 @@
         <translation>&lt;b&gt;Odinstalovat plugin...&lt;/b&gt;&lt;p&gt;Otevře dialog pro odinstalaci pluginu.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="3696"/>
+        <location filename="../UI/UserInterface.py" line="3698"/>
         <source>&amp;Show all</source>
         <translation>&amp;Zobrazit vše</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="3698"/>
+        <location filename="../UI/UserInterface.py" line="3700"/>
         <source>&amp;Hide all</source>
         <translation>&amp;Skrýt vše</translation>
     </message>
@@ -75533,7 +75653,7 @@
         <translation>Aktivace pluginů...</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2624"/>
+        <location filename="../UI/UserInterface.py" line="2626"/>
         <source>Wi&amp;zards</source>
         <translation>&amp;Průvodci</translation>
     </message>
@@ -75553,7 +75673,7 @@
         <translation>Zobrazit dostupné verze ke stažení</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="6675"/>
+        <location filename="../UI/UserInterface.py" line="6677"/>
         <source>&lt;h3&gt;Available versions&lt;/h3&gt;&lt;table&gt;</source>
         <translation>&lt;h3&gt;Dostupné verze&lt;/h3&gt;&lt;table&gt;</translation>
     </message>
@@ -75633,7 +75753,7 @@
         <translation>Obnovit manažer nástrojových lišt...</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="4857"/>
+        <location filename="../UI/UserInterface.py" line="4859"/>
         <source>External Tools</source>
         <translation>Externí nástroje</translation>
     </message>
@@ -75648,22 +75768,22 @@
         <translation>Prohlížeč &amp;multiprojektu</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="6030"/>
+        <location filename="../UI/UserInterface.py" line="6032"/>
         <source>Save session</source>
         <translation>Uložit relaci</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="6014"/>
+        <location filename="../UI/UserInterface.py" line="6016"/>
         <source>Read session</source>
         <translation>Načíst relaci</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2961"/>
+        <location filename="../UI/UserInterface.py" line="2963"/>
         <source>&lt;p&gt;This part of the status bar displays the current editors encoding.&lt;/p&gt;</source>
         <translation>&lt;p&gt;Tato část status baru zobrazuje aktuální kódování editorů.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2975"/>
+        <location filename="../UI/UserInterface.py" line="2977"/>
         <source>&lt;p&gt;This part of the status bar displays an indication of the current editors files writability.&lt;/p&gt;</source>
         <translation>&lt;p&gt;Tato část status baru zobrazuje indikátor práva zápisu editoru do souboru.&lt;/p&gt;</translation>
     </message>
@@ -75688,17 +75808,17 @@
         <translation>&lt;b&gt;Požadavek na vlastnost...&lt;/b&gt;&lt;p&gt;Otevře dialog pro odeslání požadavku.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2954"/>
+        <location filename="../UI/UserInterface.py" line="2956"/>
         <source>&lt;p&gt;This part of the status bar displays the current editors language.&lt;/p&gt;</source>
         <translation>&lt;p&gt;Tato část status baru zobrazuje aktuální jazyk editoru.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2982"/>
+        <location filename="../UI/UserInterface.py" line="2984"/>
         <source>&lt;p&gt;This part of the status bar displays the line number of the current editor.&lt;/p&gt;</source>
         <translation>&lt;p&gt;Tato část status baru zobrazuje číslo řádku v aktuálním editoru.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2989"/>
+        <location filename="../UI/UserInterface.py" line="2991"/>
         <source>&lt;p&gt;This part of the status bar displays the cursor position of the current editor.&lt;/p&gt;</source>
         <translation>&lt;p&gt;Tato část status baru zobrazuje pozici kurzoru v aktuálním editoru.&lt;/p&gt;</translation>
     </message>
@@ -75723,12 +75843,12 @@
         <translation>&lt;b&gt;Přepnout vodorovnou nástrojovou lištu&lt;/b&gt;&lt;p&gt;Pokud je vodorovná nástrojová lišta skryta, tak se zobrazí. Je-li zobrazena, skryje se.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="3497"/>
+        <location filename="../UI/UserInterface.py" line="3499"/>
         <source>Restart application</source>
         <translation>Restartovat aplikaci</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="3497"/>
+        <location filename="../UI/UserInterface.py" line="3499"/>
         <source>The application needs to be restarted. Do it now?</source>
         <translation>Aplikace potřebuje restartovat. Má se provést nyní?</translation>
     </message>
@@ -75738,12 +75858,12 @@
         <translation></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2710"/>
+        <location filename="../UI/UserInterface.py" line="2712"/>
         <source>Configure...</source>
         <translation>Konfigurovat...</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2968"/>
+        <location filename="../UI/UserInterface.py" line="2970"/>
         <source>&lt;p&gt;This part of the status bar displays the current editors eol setting.&lt;/p&gt;</source>
         <translation>&lt;p&gt;Tato část status baru zobrazuje eol nastavení v aktuálním editoru.&lt;/p&gt;</translation>
     </message>
@@ -75883,7 +76003,7 @@
         <translation>Editor &amp;ikon...</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="4544"/>
+        <location filename="../UI/UserInterface.py" line="4546"/>
         <source>Qt 3 support</source>
         <translation>Qt 3 podpora</translation>
     </message>
@@ -75903,7 +76023,7 @@
         <translation>Otevřít PySide dokumentaci</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5371"/>
+        <location filename="../UI/UserInterface.py" line="5373"/>
         <source>&lt;p&gt;The PySide documentation starting point has not been configured.&lt;/p&gt;</source>
         <translation>&lt;p&gt;Počátek dokumentace PySide nebyl nastaven.&lt;/p&gt;</translation>
     </message>
@@ -75923,111 +76043,111 @@
         <translation>{0} - {1} - {2} - pasivní mód</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="3064"/>
+        <location filename="../UI/UserInterface.py" line="3066"/>
         <source>External Tools/{0}</source>
         <translation>Externí nástroje/{0}</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="4723"/>
+        <location filename="../UI/UserInterface.py" line="4725"/>
         <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; does not exist or is zero length.&lt;/p&gt;</source>
         <translation>&lt;p&gt;Soubor &lt;b&gt;{0}&lt;/b&gt; neexistuje nebo má nulovou délku.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="4451"/>
+        <location filename="../UI/UserInterface.py" line="4453"/>
         <source>&lt;p&gt;Could not start Qt-Designer.&lt;br&gt;Ensure that it is available as &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</source>
         <translation>&lt;p&gt;Nemohu spustit Qt-Designer.&lt;br&gt;Ověřte jestli je dostupný jako &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="4518"/>
+        <location filename="../UI/UserInterface.py" line="4520"/>
         <source>&lt;p&gt;Could not start Qt-Linguist.&lt;br&gt;Ensure that it is available as &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</source>
         <translation>&lt;p&gt;Nemohu spustit Qt-Linguist.&lt;br&gt;Ověřte jestli je dostupný jako &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="4569"/>
+        <location filename="../UI/UserInterface.py" line="4571"/>
         <source>&lt;p&gt;Could not start Qt-Assistant.&lt;br&gt;Ensure that it is available as &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</source>
         <translation>&lt;p&gt;Nemohu spustit Qt-Assistant.&lt;br&gt;Ověřte jestli je dostupný jako &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="4611"/>
+        <location filename="../UI/UserInterface.py" line="4613"/>
         <source>&lt;p&gt;Could not start custom viewer.&lt;br&gt;Ensure that it is available as &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</source>
         <translation>&lt;p&gt;Nemohu spustit aktuální prohlížeč.&lt;br&gt;Ověřte jestli je dostupný jako &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="4679"/>
+        <location filename="../UI/UserInterface.py" line="4681"/>
         <source>&lt;p&gt;Could not start UI Previewer.&lt;br&gt;Ensure that it is available as &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</source>
         <translation>&lt;p&gt;Nemohu spustit UI Previewer.&lt;br&gt;Ověřte jestli je dostupný jako &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="4734"/>
+        <location filename="../UI/UserInterface.py" line="4736"/>
         <source>&lt;p&gt;Could not start Translation Previewer.&lt;br&gt;Ensure that it is available as &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</source>
         <translation>&lt;p&gt;Nemohu spustit Previewer překladů.&lt;br&gt;Ověřte jestli je dostupný jako &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="4755"/>
+        <location filename="../UI/UserInterface.py" line="4757"/>
         <source>&lt;p&gt;Could not start SQL Browser.&lt;br&gt;Ensure that it is available as &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</source>
         <translation>&lt;p&gt;Nelze spustit SQL Browser.&lt;br&gt;Ujistěte se, že je dostupný jako &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="4848"/>
+        <location filename="../UI/UserInterface.py" line="4850"/>
         <source>No tool entry found for external tool &apos;{0}&apos; in tool group &apos;{1}&apos;.</source>
         <translation>V externím nástroji  &apos;{0}&apos; ve skupině &apos;{1}&apos; nebyl záznam nástroje nalezen.</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="4857"/>
+        <location filename="../UI/UserInterface.py" line="4859"/>
         <source>No toolgroup entry &apos;{0}&apos; found.</source>
         <translation>Skupina nástrojů &apos;{0}&apos; nenalezena. </translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="4896"/>
+        <location filename="../UI/UserInterface.py" line="4898"/>
         <source>Starting process &apos;{0} {1}&apos;.
 </source>
         <translation>Spouštím proces &apos;{0} {1}&apos;.
 </translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="4912"/>
+        <location filename="../UI/UserInterface.py" line="4914"/>
         <source>&lt;p&gt;Could not start the tool entry &lt;b&gt;{0}&lt;/b&gt;.&lt;br&gt;Ensure that it is available as &lt;b&gt;{1}&lt;/b&gt;.&lt;/p&gt;</source>
         <translation>&lt;p&gt;Nemohu spustit příkaz &lt;b&gt;{0}&lt;/b&gt;&lt;br&gt;Ověřte jestli je dostupný jako &lt;b&gt;{1}&lt;/b&gt;. &lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="4988"/>
+        <location filename="../UI/UserInterface.py" line="4990"/>
         <source>Process &apos;{0}&apos; has exited.
 </source>
         <translation>Proces &apos;{0}&apos; byl ukončen.
 </translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5386"/>
+        <location filename="../UI/UserInterface.py" line="5388"/>
         <source>&lt;p&gt;The documentation starting point &quot;&lt;b&gt;{0}&lt;/b&gt;&quot; could not be found.&lt;/p&gt;</source>
         <translation>&lt;p&gt;Adresář dokumentace &quot;&lt;b&gt;{0}&lt;/b&gt;&quot; nebyl nalezen.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5904"/>
+        <location filename="../UI/UserInterface.py" line="5906"/>
         <source>&lt;p&gt;The tasks file &lt;b&gt;{0}&lt;/b&gt; could not be written.&lt;/p&gt;</source>
         <translation>&lt;p&gt;Do souboru s úlohami &lt;b&gt;{0}&lt;/b&gt; nelze zapisovat.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5933"/>
+        <location filename="../UI/UserInterface.py" line="5935"/>
         <source>&lt;p&gt;The tasks file &lt;b&gt;{0}&lt;/b&gt; could not be read.&lt;/p&gt;</source>
         <translation>&lt;p&gt;Soubor s úlohami &lt;b&gt;{0}&lt;/b&gt; nelze načíst.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5967"/>
+        <location filename="../UI/UserInterface.py" line="5969"/>
         <source>&lt;p&gt;The session file &lt;b&gt;{0}&lt;/b&gt; could not be written.&lt;/p&gt;</source>
         <translation>&lt;p&gt;Zápis do souboru relace session &lt;b&gt;{0}&lt;/b&gt; se nezdařil.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="6014"/>
+        <location filename="../UI/UserInterface.py" line="6016"/>
         <source>&lt;p&gt;The session file &lt;b&gt;{0}&lt;/b&gt; could not be read.&lt;/p&gt;</source>
         <translation>&lt;p&gt;Soubor relace session &lt;b&gt;{0}&lt;/b&gt; nelze přečíst.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="6294"/>
+        <location filename="../UI/UserInterface.py" line="6296"/>
         <source>&lt;p&gt;&lt;b&gt;{0}&lt;/b&gt; is not a file.&lt;/p&gt;</source>
         <translation>&lt;p&gt;&lt;b&gt;{0}&lt;/b&gt; není soubor.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="6473"/>
+        <location filename="../UI/UserInterface.py" line="6475"/>
         <source>Trying host {0}</source>
         <translation>Zkouším host {0}</translation>
     </message>
@@ -76062,7 +76182,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5735"/>
+        <location filename="../UI/UserInterface.py" line="5737"/>
         <source>Keyboard shortcut file (*.e4k)</source>
         <translation type="unfinished"></translation>
     </message>
@@ -76102,27 +76222,27 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="6537"/>
+        <location filename="../UI/UserInterface.py" line="6539"/>
         <source>Error getting versions information</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="6530"/>
+        <location filename="../UI/UserInterface.py" line="6532"/>
         <source>The versions information could not be downloaded. Please go online and try again.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5507"/>
+        <location filename="../UI/UserInterface.py" line="5509"/>
         <source>Open Browser</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5507"/>
+        <location filename="../UI/UserInterface.py" line="5509"/>
         <source>Could not start a web browser</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="6537"/>
+        <location filename="../UI/UserInterface.py" line="6539"/>
         <source>The versions information could not be downloaded for the last 7 days. Please go online and try again.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -76208,12 +76328,12 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="4825"/>
+        <location filename="../UI/UserInterface.py" line="4827"/>
         <source>&lt;p&gt;Could not start Snapshot tool.&lt;br&gt;Ensure that it is available as &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="6735"/>
+        <location filename="../UI/UserInterface.py" line="6737"/>
         <source>Select Workspace Directory</source>
         <translation type="unfinished"></translation>
     </message>
@@ -76433,7 +76553,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2670"/>
+        <location filename="../UI/UserInterface.py" line="2672"/>
         <source>&amp;Windows</source>
         <translation type="unfinished">&amp;Windows</translation>
     </message>
@@ -76523,7 +76643,7 @@
         <translation type="unfinished">Otevřít Qt4 dokumentaci {5 ?}</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="3000"/>
+        <location filename="../UI/UserInterface.py" line="3002"/>
         <source>&lt;p&gt;This part of the status bar allows zooming the current editor, shell or terminal.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
@@ -76588,7 +76708,7 @@
         <translation type="unfinished">Otevřít PyQt4 dokumentaci {5 ?}</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5263"/>
+        <location filename="../UI/UserInterface.py" line="5265"/>
         <source>&lt;p&gt;The PyQt5 documentation starting point has not been configured.&lt;/p&gt;</source>
         <translation type="unfinished">&lt;p&gt;Adresář PyQt4 dokumentace není nakonfigurován.&lt;/p&gt; {5 ?}</translation>
     </message>
@@ -76623,7 +76743,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="6464"/>
+        <location filename="../UI/UserInterface.py" line="6466"/>
         <source>%v/%m</source>
         <translation type="unfinished"></translation>
     </message>
@@ -76643,7 +76763,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="6468"/>
+        <location filename="../UI/UserInterface.py" line="6470"/>
         <source>Version Check</source>
         <translation type="unfinished"></translation>
     </message>
@@ -76713,27 +76833,27 @@
         <translation type="unfinished">&lt;b&gt;Eric API dokumentace&lt;/b&gt;&lt;p&gt;Zobrazit Eric API dokumentaci. Umístění dokumentace je v podadresáři Documentation/Source v instalačním adresáři eric5.&lt;/p&gt; {6 ?}</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="4544"/>
+        <location filename="../UI/UserInterface.py" line="4546"/>
         <source>Qt v.3 is not supported by eric6.</source>
         <translation type="unfinished">Qt v.3 není podporováno v eric5. {3 ?} {6.?}</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="6631"/>
+        <location filename="../UI/UserInterface.py" line="6633"/>
         <source>The update to &lt;b&gt;{0}&lt;/b&gt; of eric6 is available at &lt;b&gt;{1}&lt;/b&gt;. Would you like to get it?</source>
         <translation type="unfinished">Aktualizace &lt;b&gt;{0}&lt;/b&gt; eric5 je připravena na &lt;b&gt;{1}&lt;/b&gt;. Chcete ji stáhnout a nainstalovat? {0}?} {6 ?} {1}?}</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="6644"/>
+        <location filename="../UI/UserInterface.py" line="6646"/>
         <source>Eric6 is up to date</source>
         <translation type="unfinished">Eric5 je aktuální {6 ?}</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="6644"/>
+        <location filename="../UI/UserInterface.py" line="6646"/>
         <source>You are using the latest version of eric6</source>
         <translation type="unfinished">Používáte poslední verzi eric6</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="6716"/>
+        <location filename="../UI/UserInterface.py" line="6718"/>
         <source>eric6 has not been configured yet. The configuration dialog will be started.</source>
         <translation type="unfinished">eric5 nebyl ještě nakonfigurován. Bude spuštěn konfigurační dialog. {6 ?}</translation>
     </message>
@@ -76743,17 +76863,17 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="3551"/>
+        <location filename="../UI/UserInterface.py" line="3553"/>
         <source>&amp;User Tools</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="3623"/>
+        <location filename="../UI/UserInterface.py" line="3625"/>
         <source>No User Tools Configured</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="6484"/>
+        <location filename="../UI/UserInterface.py" line="6486"/>
         <source>The versions information cannot not be downloaded because you are &lt;b&gt;offline&lt;/b&gt;. Please go online and try again.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -76798,7 +76918,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="6052"/>
+        <location filename="../UI/UserInterface.py" line="6054"/>
         <source>Load session</source>
         <translation type="unfinished">Načíst relaci</translation>
     </message>
@@ -76813,17 +76933,17 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="6052"/>
+        <location filename="../UI/UserInterface.py" line="6054"/>
         <source>eric6 Session Files (*.e5s)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="6099"/>
+        <location filename="../UI/UserInterface.py" line="6101"/>
         <source>Crash Session found!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="6099"/>
+        <location filename="../UI/UserInterface.py" line="6101"/>
         <source>A session file of a crashed session was found. Shall this session be restored?</source>
         <translation type="unfinished"></translation>
     </message>
@@ -76838,17 +76958,17 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="6619"/>
+        <location filename="../UI/UserInterface.py" line="6621"/>
         <source>Update Check</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="6619"/>
+        <location filename="../UI/UserInterface.py" line="6621"/>
         <source>You installed eric directly from the source code. There is no possibility to check for the availability of an update.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="6609"/>
+        <location filename="../UI/UserInterface.py" line="6611"/>
         <source>You are using a snapshot release of eric6. A more up-to-date stable release might be available.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -77696,82 +77816,82 @@
         <translation>&lt;b&gt;Přidat do repozitáře&lt;/b&gt;&lt;p&gt;Přidá (importuje) lokální projekt do VCS repozitáře.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../VCS/ProjectHelper.py" line="229"/>
+        <location filename="../VCS/ProjectHelper.py" line="231"/>
         <source>New Project</source>
         <translation>Nový projekt</translation>
     </message>
     <message>
-        <location filename="../VCS/ProjectHelper.py" line="409"/>
+        <location filename="../VCS/ProjectHelper.py" line="402"/>
         <source>Select version control system for the project</source>
         <translation>Výběr verzovacího systému projektu</translation>
     </message>
     <message>
-        <location filename="../VCS/ProjectHelper.py" line="432"/>
+        <location filename="../VCS/ProjectHelper.py" line="429"/>
         <source>Would you like to edit the VCS command options?</source>
         <translation>Chcete editovat parametry VCS příkazu?</translation>
     </message>
     <message>
-        <location filename="../VCS/ProjectHelper.py" line="250"/>
+        <location filename="../VCS/ProjectHelper.py" line="252"/>
         <source>Create project directory</source>
         <translation>Vytvořit adresář projektu</translation>
     </message>
     <message>
-        <location filename="../VCS/ProjectHelper.py" line="351"/>
+        <location filename="../VCS/ProjectHelper.py" line="349"/>
         <source>New project from repository</source>
         <translation>Nový projekt z repozitáře</translation>
     </message>
     <message>
-        <location filename="../VCS/ProjectHelper.py" line="282"/>
+        <location filename="../VCS/ProjectHelper.py" line="280"/>
         <source>Select a project file to open.</source>
         <translation>Výběr souboru s projektem pro otevření.</translation>
     </message>
     <message>
-        <location filename="../VCS/ProjectHelper.py" line="337"/>
+        <location filename="../VCS/ProjectHelper.py" line="335"/>
         <source>Shall the project file be added to the repository?</source>
         <translation>Může být soubor projektu přidán do repozitáře?</translation>
     </message>
     <message>
-        <location filename="../VCS/ProjectHelper.py" line="351"/>
+        <location filename="../VCS/ProjectHelper.py" line="349"/>
         <source>The project could not be retrieved from the repository.</source>
         <translation>Z repozitáře není možné získat soubor s projektem.</translation>
     </message>
     <message>
-        <location filename="../VCS/ProjectHelper.py" line="432"/>
+        <location filename="../VCS/ProjectHelper.py" line="429"/>
         <source>Import Project</source>
         <translation>Importovat projekt</translation>
     </message>
     <message>
-        <location filename="../VCS/ProjectHelper.py" line="497"/>
+        <location filename="../VCS/ProjectHelper.py" line="495"/>
         <source>Remove project from repository</source>
         <translation>Odebrat projekt z repozitáře</translation>
     </message>
     <message>
-        <location filename="../VCS/ProjectHelper.py" line="497"/>
+        <location filename="../VCS/ProjectHelper.py" line="495"/>
         <source>Dou you really want to remove this project from the repository (and disk)?</source>
         <translation>Opravdu chcete odebrat tento projekt z repozitáře (a z disku)?</translation>
     </message>
     <message>
-        <location filename="../VCS/ProjectHelper.py" line="469"/>
+        <location filename="../VCS/ProjectHelper.py" line="467"/>
         <source>Update</source>
         <translation>Obnovit</translation>
     </message>
     <message>
-        <location filename="../VCS/ProjectHelper.py" line="571"/>
+        <location filename="../VCS/ProjectHelper.py" line="569"/>
         <source>The project should be reread. Do this now?</source>
         <translation>Projekt bude znovu načten. Má se provést?</translation>
     </message>
     <message>
-        <location filename="../VCS/ProjectHelper.py" line="250"/>
+        <location filename="../VCS/ProjectHelper.py" line="252"/>
         <source>&lt;p&gt;The project directory &lt;b&gt;{0}&lt;/b&gt; could not be created.&lt;/p&gt;</source>
         <translation>&lt;p&gt;Adresář projektu &lt;b&gt;{0}&lt;/b&gt; nelze vytvořit.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../VCS/ProjectHelper.py" line="301"/>
+        <location filename="../VCS/ProjectHelper.py" line="298"/>
         <source>The project retrieved from the repository does not contain an eric project file (*.e4p). Create it?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../VCS/ProjectHelper.py" line="571"/>
+        <location filename="../VCS/ProjectHelper.py" line="569"/>
         <source>Switch</source>
         <translation type="unfinished">Přepnout</translation>
     </message>
@@ -83066,12 +83186,12 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../WebBrowser/WebBrowserPage.py" line="166"/>
+        <location filename="../WebBrowser/WebBrowserPage.py" line="156"/>
         <source>Suspicuous URL detected</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../WebBrowser/WebBrowserPage.py" line="166"/>
+        <location filename="../WebBrowser/WebBrowserPage.py" line="156"/>
         <source>&lt;p&gt;The URL &lt;b&gt;{0}&lt;/b&gt; was found in the Safe Browsing database.&lt;/p&gt;{1}</source>
         <translation type="unfinished"></translation>
     </message>
@@ -83634,17 +83754,17 @@
 <context>
     <name>WebBrowserWebSearchWidget</name>
     <message>
-        <location filename="../WebBrowser/WebBrowserWebSearchWidget.py" line="141"/>
+        <location filename="../WebBrowser/WebBrowserWebSearchWidget.py" line="143"/>
         <source>Suggestions</source>
         <translation type="unfinished">Návrhy</translation>
     </message>
     <message>
-        <location filename="../WebBrowser/WebBrowserWebSearchWidget.py" line="150"/>
+        <location filename="../WebBrowser/WebBrowserWebSearchWidget.py" line="152"/>
         <source>No Recent Searches</source>
         <translation type="unfinished">Žádné poslední hledání</translation>
     </message>
     <message>
-        <location filename="../WebBrowser/WebBrowserWebSearchWidget.py" line="155"/>
+        <location filename="../WebBrowser/WebBrowserWebSearchWidget.py" line="157"/>
         <source>Recent Searches</source>
         <translation type="unfinished">Poslení hledání</translation>
     </message>
@@ -83654,7 +83774,7 @@
         <translation type="unfinished">Přidat &apos;{0}&apos;</translation>
     </message>
     <message>
-        <location filename="../WebBrowser/WebBrowserWebSearchWidget.py" line="295"/>
+        <location filename="../WebBrowser/WebBrowserWebSearchWidget.py" line="293"/>
         <source>Clear Recent Searches</source>
         <translation type="unfinished">Smazat poslední vyhledávání</translation>
     </message>
Binary file i18n/eric6_de.qm has changed
--- a/i18n/eric6_de.ts	Sun Mar 04 14:55:23 2018 +0100
+++ b/i18n/eric6_de.ts	Mon Apr 02 12:04:18 2018 +0200
@@ -1205,52 +1205,52 @@
         <translation>Startbild anzeigen</translation>
     </message>
     <message>
-        <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="145"/>
+        <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="155"/>
         <source>Select to disable update checking</source>
         <translation>Auswählen, um die Prüfung auf Aktualisierungen abzuschalten</translation>
     </message>
     <message>
-        <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="148"/>
-        <source>None</source>
-        <translation>Keine</translation>
-    </message>
-    <message>
-        <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="155"/>
-        <source>Select to check for updates at every startup</source>
-        <translation>Auswählen, um bei jedem Start auf Aktualisierungen zu prüfen</translation>
-    </message>
-    <message>
         <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="158"/>
-        <source>Always</source>
-        <translation>Immer</translation>
+        <source>None</source>
+        <translation>Keine</translation>
     </message>
     <message>
         <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="165"/>
-        <source>Select to check for updates once a day</source>
-        <translation>Auswählen, um täglich auf Aktualisierungen zu prüfen</translation>
+        <source>Select to check for updates at every startup</source>
+        <translation>Auswählen, um bei jedem Start auf Aktualisierungen zu prüfen</translation>
     </message>
     <message>
         <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="168"/>
-        <source>Daily</source>
-        <translation>Täglich</translation>
+        <source>Always</source>
+        <translation>Immer</translation>
     </message>
     <message>
         <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="175"/>
-        <source>Select to check for updates once a week</source>
-        <translation>Auswählen, um wöchentlich auf Aktualisierungen zu prüfen</translation>
+        <source>Select to check for updates once a day</source>
+        <translation>Auswählen, um täglich auf Aktualisierungen zu prüfen</translation>
     </message>
     <message>
         <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="178"/>
-        <source>Weekly</source>
-        <translation>Wöchentlich</translation>
+        <source>Daily</source>
+        <translation>Täglich</translation>
     </message>
     <message>
         <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="185"/>
-        <source>Select to check for updates once a month</source>
-        <translation>Auswählen, um monatlich auf Aktualisierungen zu prüfen</translation>
+        <source>Select to check for updates once a week</source>
+        <translation>Auswählen, um wöchentlich auf Aktualisierungen zu prüfen</translation>
     </message>
     <message>
         <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="188"/>
+        <source>Weekly</source>
+        <translation>Wöchentlich</translation>
+    </message>
+    <message>
+        <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="195"/>
+        <source>Select to check for updates once a month</source>
+        <translation>Auswählen, um monatlich auf Aktualisierungen zu prüfen</translation>
+    </message>
+    <message>
+        <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="198"/>
         <source>Monthly</source>
         <translation>Monatlich</translation>
     </message>
@@ -1260,112 +1260,112 @@
         <translation>&lt;b&gt;Applikation einstellen&lt;/b&lt;</translation>
     </message>
     <message>
-        <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="67"/>
+        <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="77"/>
         <source>Open at startup</source>
         <translation>Beim Start öffnen</translation>
     </message>
     <message>
-        <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="73"/>
-        <source>Select to not open anything</source>
-        <translation>Auswählen, um nichts zu öffnen</translation>
-    </message>
-    <message>
         <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="83"/>
-        <source>Select to open the most recently opened file</source>
-        <translation>Auswählen, um die zuletzt geöffnete Datei zu öffnen</translation>
-    </message>
-    <message>
-        <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="86"/>
-        <source>Last File</source>
-        <translation>Letzte Datei</translation>
+        <source>Select to not open anything</source>
+        <translation>Auswählen, um nichts zu öffnen</translation>
     </message>
     <message>
         <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="93"/>
-        <source>Select to open the most recently opened project</source>
-        <translation>Auswählen, um das zuletzt geöffnete Projekt zu öffnen</translation>
+        <source>Select to open the most recently opened file</source>
+        <translation>Auswählen, um die zuletzt geöffnete Datei zu öffnen</translation>
     </message>
     <message>
         <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="96"/>
-        <source>Last Project</source>
-        <translation>Letztes Projekt</translation>
+        <source>Last File</source>
+        <translation>Letzte Datei</translation>
     </message>
     <message>
         <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="103"/>
-        <source>Select to open the most recently opened multiproject</source>
-        <translation>Auswählen, um das zuletzt geöffnete Mehrfachprojekt zu öffnen</translation>
+        <source>Select to open the most recently opened project</source>
+        <translation>Auswählen, um das zuletzt geöffnete Projekt zu öffnen</translation>
     </message>
     <message>
         <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="106"/>
-        <source>Last Multiproject</source>
-        <translation>Letztes Mehrfachprojekt</translation>
+        <source>Last Project</source>
+        <translation>Letztes Projekt</translation>
     </message>
     <message>
         <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="113"/>
-        <source>Select to restore the global session</source>
-        <translation>Auswählen, um die globale Sitzung wiederherzustellen</translation>
+        <source>Select to open the most recently opened multiproject</source>
+        <translation>Auswählen, um das zuletzt geöffnete Mehrfachprojekt zu öffnen</translation>
     </message>
     <message>
         <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="116"/>
+        <source>Last Multiproject</source>
+        <translation>Letztes Mehrfachprojekt</translation>
+    </message>
+    <message>
+        <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="123"/>
+        <source>Select to restore the global session</source>
+        <translation>Auswählen, um die globale Sitzung wiederherzustellen</translation>
+    </message>
+    <message>
+        <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="126"/>
         <source>Global Session</source>
         <translation>Globale Sitzung</translation>
     </message>
     <message>
+        <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="149"/>
+        <source>Check for updates</source>
+        <translation>Aktualisierungen prüfen</translation>
+    </message>
+    <message>
+        <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="227"/>
+        <source>Error Log</source>
+        <translation>Fehlerdatei</translation>
+    </message>
+    <message>
+        <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="233"/>
+        <source>Select to check the existence of an error log upon startup</source>
+        <translation>Auswählen, um beim Start das Vorhandensein einer Fehlerdatei zu überprüfen</translation>
+    </message>
+    <message>
+        <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="208"/>
+        <source>Reporting</source>
+        <translation>Berichte</translation>
+    </message>
+    <message>
+        <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="214"/>
+        <source>Select to use the system email client to send reports</source>
+        <translation>Auswählen, um Berichte mit dem Standardemailclient zu senden</translation>
+    </message>
+    <message>
+        <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="217"/>
+        <source>Use System Email Client</source>
+        <translation>Standardemailclient verwenden</translation>
+    </message>
+    <message>
+        <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="236"/>
+        <source>Check for Error Log at Startup</source>
+        <translation>Überprüfe beim Starten die Existenz einer Fehlerdatei</translation>
+    </message>
+    <message>
+        <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="246"/>
+        <source>Keyboard Input Interval</source>
+        <translation>Tastatureingabeintervall</translation>
+    </message>
+    <message>
+        <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="252"/>
+        <source>Enter the keyboard input interval, &apos;0&apos; for default</source>
+        <translation>Gib das Tastatureingabeintervall ein, &apos;0&apos; für Standardwert</translation>
+    </message>
+    <message>
+        <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="261"/>
+        <source> ms</source>
+        <translation> ms</translation>
+    </message>
+    <message>
+        <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="136"/>
+        <source>Select to look for a crash session file first</source>
+        <translation>Auswählen, um beim Start nach einer Absturzsitzung zu suchen</translation>
+    </message>
+    <message>
         <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="139"/>
-        <source>Check for updates</source>
-        <translation>Aktualisierungen prüfen</translation>
-    </message>
-    <message>
-        <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="217"/>
-        <source>Error Log</source>
-        <translation>Fehlerdatei</translation>
-    </message>
-    <message>
-        <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="223"/>
-        <source>Select to check the existence of an error log upon startup</source>
-        <translation>Auswählen, um beim Start das Vorhandensein einer Fehlerdatei zu überprüfen</translation>
-    </message>
-    <message>
-        <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="198"/>
-        <source>Reporting</source>
-        <translation>Berichte</translation>
-    </message>
-    <message>
-        <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="204"/>
-        <source>Select to use the system email client to send reports</source>
-        <translation>Auswählen, um Berichte mit dem Standardemailclient zu senden</translation>
-    </message>
-    <message>
-        <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="207"/>
-        <source>Use System Email Client</source>
-        <translation>Standardemailclient verwenden</translation>
-    </message>
-    <message>
-        <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="226"/>
-        <source>Check for Error Log at Startup</source>
-        <translation>Überprüfe beim Starten die Existenz einer Fehlerdatei</translation>
-    </message>
-    <message>
-        <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="236"/>
-        <source>Keyboard Input Interval</source>
-        <translation>Tastatureingabeintervall</translation>
-    </message>
-    <message>
-        <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="242"/>
-        <source>Enter the keyboard input interval, &apos;0&apos; for default</source>
-        <translation>Gib das Tastatureingabeintervall ein, &apos;0&apos; für Standardwert</translation>
-    </message>
-    <message>
-        <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="251"/>
-        <source> ms</source>
-        <translation> ms</translation>
-    </message>
-    <message>
-        <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="126"/>
-        <source>Select to look for a crash session file first</source>
-        <translation>Auswählen, um beim Start nach einer Absturzsitzung zu suchen</translation>
-    </message>
-    <message>
-        <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="129"/>
         <source>Load Crash Session</source>
         <translation>Lade Absturzsicherung</translation>
     </message>
@@ -1380,30 +1380,40 @@
         <translation>Absturzsitzung aktivieren</translation>
     </message>
     <message>
-        <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="248"/>
+        <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="258"/>
         <source>System Default</source>
         <translation>Standardwert</translation>
     </message>
     <message>
-        <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="280"/>
+        <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="290"/>
         <source>Background Services</source>
         <translation>Hintergrunddienste</translation>
     </message>
     <message>
-        <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="298"/>
-        <source>max. Processes:</source>
-        <translation>max. Prozesse:</translation>
-    </message>
-    <message>
         <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="308"/>
+        <source>max. Processes:</source>
+        <translation>max. Prozesse:</translation>
+    </message>
+    <message>
+        <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="318"/>
         <source>Automatic</source>
         <translation>Automatisch</translation>
     </message>
     <message>
-        <location filename="../Preferences/ConfigurationPages/ApplicationPage.py" line="30"/>
+        <location filename="../Preferences/ConfigurationPages/ApplicationPage.py" line="31"/>
         <source>eric is using background services for certain things like syntax checks or code style checks. Per default the number of processes to use for these checks is determined automatically based on the number of CPUs. Please note, that this is an advanced setting.</source>
         <translation>eric verwendet Hintergrunddienste für verschiedene Dinge wie z.B. Syntaxprüfungen oder Codestilprüfungen. Standardmäßig wird die Anzahl der für diese Prüfungen zu startenden Prozesse automatisch basierend auf der Anzahl verfügbarer Prozessorkernen ermittelt. Bitte beachten, dass dies ein Einstellung für Fortgeschrittene ist.</translation>
     </message>
+    <message>
+        <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="67"/>
+        <source>Select to use the global application menu bar</source>
+        <translation>Auswählen, um die globale Anwendunsmenüleiste zu verwenden</translation>
+    </message>
+    <message>
+        <location filename="../Preferences/ConfigurationPages/ApplicationPage.ui" line="70"/>
+        <source>Use Global Menu Bar</source>
+        <translation>Verwende Globale Menüleiste</translation>
+    </message>
 </context>
 <context>
     <name>AuthenticationDialog</name>
@@ -3714,147 +3724,147 @@
 <context>
     <name>CodeStyleFixer</name>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="554"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="621"/>
         <source>Triple single quotes converted to triple double quotes.</source>
         <translation>Dreifache Einfachanführungszeichen in dreifache Doppelanführungszeichen umgewandelt.</translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="557"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="624"/>
         <source>Introductory quotes corrected to be {0}&quot;&quot;&quot;</source>
         <translation>Einleitende Anführungszeichen in {0}&quot;&quot;&quot; korrigiert</translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="560"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="627"/>
         <source>Single line docstring put on one line.</source>
         <translation>Einzeiligen Docstring auf eine Zeile gebracht.</translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="563"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="630"/>
         <source>Period added to summary line.</source>
         <translation>Punkt an die Zusammenfassungszeile angefügt.</translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="590"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="657"/>
         <source>Blank line before function/method docstring removed.</source>
         <translation>Leerzeile vor Funktions-/Methodendocstring entfernt.</translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="569"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="636"/>
         <source>Blank line inserted before class docstring.</source>
         <translation>Leerzeile vor Klassendocstring eingefügt.</translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="572"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="639"/>
         <source>Blank line inserted after class docstring.</source>
         <translation>Leerzeile nach Klassendocstring eingefügt.</translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="575"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="642"/>
         <source>Blank line inserted after docstring summary.</source>
         <translation>Leerzeile nach Docstring Zusammenfassung eingefügt.</translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="578"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="645"/>
         <source>Blank line inserted after last paragraph of docstring.</source>
         <translation>Leerzeile nach letztem Abschnitt des Docstring eingefügt.</translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="581"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="648"/>
         <source>Leading quotes put on separate line.</source>
         <translation>Einleitende Anführungszeichen auf separate Zeile gesetzt.</translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="584"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="651"/>
         <source>Trailing quotes put on separate line.</source>
         <translation>Schließende Anführungszeichen auf separate Zeile gesetzt.</translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="587"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="654"/>
         <source>Blank line before class docstring removed.</source>
         <translation>Leerzeile vor Klassendocstring entfernt.</translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="593"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="660"/>
         <source>Blank line after class docstring removed.</source>
         <translation>Leerzeile nach Klassendocstring entfernt.</translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="596"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="663"/>
         <source>Blank line after function/method docstring removed.</source>
         <translation>Leerzeile nach Funktions-/Methodendocstring entfernt.</translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="599"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="666"/>
         <source>Blank line after last paragraph removed.</source>
         <translation>Leerzeile nach letzten Abschnitt entfernt.</translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="602"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="669"/>
         <source>Tab converted to 4 spaces.</source>
         <translation>Tabulator in 4 Leerzeichen gewandelt.</translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="605"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="672"/>
         <source>Indentation adjusted to be a multiple of four.</source>
         <translation>Einrückung auf ein Vielfaches von vier korrigiert.</translation>
     </message>
     <message>
-        <location filename="