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

Sat, 05 Dec 2020 12:29:26 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Sat, 05 Dec 2020 12:29:26 +0100
branch
maintenance
changeset 7850
e64b178499da
parent 7825
3e7d767119a9 (current diff)
parent 7849
70e464748aaa (diff)
child 7851
f7e34fa76163

Merged with default branch to prepare a new release.

docs/changelog file | annotate | diff | comparison | revisions
eric6.e4p file | annotate | diff | comparison | revisions
eric6/APIs/Python3/eric6.api file | annotate | diff | comparison | revisions
eric6/Documentation/Help/source.qch file | annotate | diff | comparison | revisions
eric6/Documentation/Help/source.qhp file | annotate | diff | comparison | revisions
eric6/Documentation/Source/eric6.QScintilla.Editor.html file | annotate | diff | comparison | revisions
eric6/PipInterface/PipFreezeDialog.py file | annotate | diff | comparison | revisions
eric6/Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py file | annotate | diff | comparison | revisions
eric6/QScintilla/Editor.py file | annotate | diff | comparison | revisions
eric6/UI/Previewers/PreviewerHTML.py file | annotate | diff | comparison | revisions
eric6/UI/UserInterface.py file | annotate | diff | comparison | revisions
eric6/ViewManager/ViewManager.py file | annotate | diff | comparison | revisions
eric6/i18n/eric6_cs.ts file | annotate | diff | comparison | revisions
eric6/i18n/eric6_de.qm file | annotate | diff | comparison | revisions
eric6/i18n/eric6_de.ts file | annotate | diff | comparison | revisions
eric6/i18n/eric6_empty.ts file | annotate | diff | comparison | revisions
eric6/i18n/eric6_en.ts file | annotate | diff | comparison | revisions
eric6/i18n/eric6_es.qm file | annotate | diff | comparison | revisions
eric6/i18n/eric6_es.ts file | annotate | diff | comparison | revisions
eric6/i18n/eric6_fr.ts file | annotate | diff | comparison | revisions
eric6/i18n/eric6_it.ts file | annotate | diff | comparison | revisions
eric6/i18n/eric6_pt.ts file | annotate | diff | comparison | revisions
eric6/i18n/eric6_ru.qm file | annotate | diff | comparison | revisions
eric6/i18n/eric6_ru.ts file | annotate | diff | comparison | revisions
eric6/i18n/eric6_tr.ts file | annotate | diff | comparison | revisions
eric6/i18n/eric6_zh_CN.ts file | annotate | diff | comparison | revisions
scripts/install.py file | annotate | diff | comparison | revisions
--- a/docs/changelog	Sun Nov 01 11:17:06 2020 +0100
+++ b/docs/changelog	Sat Dec 05 12:29:26 2020 +0100
@@ -1,5 +1,8 @@
 Change Log
 ----------
+Version 20.12:
+- bug fixes
+
 Version 20.11:
 - bug fixes
 - Editor
--- a/eric6.e4p	Sun Nov 01 11:17:06 2020 +0100
+++ b/eric6.e4p	Sat Dec 05 12:29:26 2020 +0100
@@ -2817,7 +2817,7 @@
               <string>LineComplexity</string>
             </key>
             <value>
-              <int>20</int>
+              <int>25</int>
             </value>
             <key>
               <string>LineComplexityScore</string>
--- a/eric6/APIs/Python3/eric6.api	Sun Nov 01 11:17:06 2020 +0100
+++ b/eric6/APIs/Python3/eric6.api	Sat Dec 05 12:29:26 2020 +0100
@@ -9403,7 +9403,6 @@
 eric6.Utilities.joinext?4(prefix, ext)
 eric6.Utilities.linesep?4()
 eric6.Utilities.normabsjoinpath?4(a, *p)
-eric6.Utilities.normabspath?4(path)
 eric6.Utilities.normcaseabspath?4(path)
 eric6.Utilities.normcasepath?4(path)
 eric6.Utilities.normjoinpath?4(a, *p)
@@ -9415,9 +9414,7 @@
 eric6.Utilities.readEncodedFileWithEncoding?4(filename, encoding)
 eric6.Utilities.readEncodedFileWithHash?4(filename)
 eric6.Utilities.readStringFromStream?4(stream)
-eric6.Utilities.relativePath?4(path, start)
 eric6.Utilities.relativeUniversalPath?4(path, start)
-eric6.Utilities.relpath?4(path, start=os.path.curdir)
 eric6.Utilities.rxIndex?4(rx, txt)
 eric6.Utilities.samefilepath?4(f1, f2)
 eric6.Utilities.samepath?4(f1, f2)
@@ -9737,6 +9734,7 @@
 eric6.VirtualEnv.VirtualenvConfigurationDialog.VirtualenvConfigurationDialog.on_condaRequirementsFilePicker_textChanged?4(txt)
 eric6.VirtualEnv.VirtualenvConfigurationDialog.VirtualenvConfigurationDialog.on_condaSpecialsGroup_clicked?4()
 eric6.VirtualEnv.VirtualenvConfigurationDialog.VirtualenvConfigurationDialog.on_condaTargetDirectoryPicker_textChanged?4(txt)
+eric6.VirtualEnv.VirtualenvConfigurationDialog.VirtualenvConfigurationDialog.on_nameEdit_textChanged?4(txt)
 eric6.VirtualEnv.VirtualenvConfigurationDialog.VirtualenvConfigurationDialog.on_pythonExecPicker_textChanged?4(txt)
 eric6.VirtualEnv.VirtualenvConfigurationDialog.VirtualenvConfigurationDialog.on_pyvenvButton_toggled?4(checked)
 eric6.VirtualEnv.VirtualenvConfigurationDialog.VirtualenvConfigurationDialog.on_targetDirectoryPicker_textChanged?4(txt)
--- a/eric6/CondaInterface/CondaExportDialog.py	Sun Nov 01 11:17:06 2020 +0100
+++ b/eric6/CondaInterface/CondaExportDialog.py	Sat Dec 05 12:29:26 2020 +0100
@@ -185,7 +185,7 @@
         try:
             with open(fileName, "w") as f:
                 f.write(self.requirementsEdit.toPlainText())
-        except (OSError, IOError) as err:
+        except OSError as err:
             E5MessageBox.critical(
                 self,
                 self.tr("Generate Requirements"),
--- a/eric6/Cooperation/ChatWidget.py	Sun Nov 01 11:17:06 2020 +0100
+++ b/eric6/Cooperation/ChatWidget.py	Sat Dec 05 12:29:26 2020 +0100
@@ -575,7 +575,7 @@
                 try:
                     with open(fname, "w", encoding="utf-8") as f:
                         f.write(txt)
-                except IOError as err:
+                except OSError as err:
                     E5MessageBox.critical(
                         self,
                         self.tr("Error saving Chat"),
--- a/eric6/DataViews/CodeMetrics.py	Sun Nov 01 11:17:06 2020 +0100
+++ b/eric6/DataViews/CodeMetrics.py	Sat Dec 05 12:29:26 2020 +0100
@@ -204,7 +204,7 @@
     """
     try:
         text = Utilities.readEncodedFile(filename)[0]
-    except (UnicodeError, IOError):
+    except (UnicodeError, OSError):
         return SourceStat()
 
     parser = Parser()
--- a/eric6/DataViews/PyCoverageDialog.py	Sun Nov 01 11:17:06 2020 +0100
+++ b/eric6/DataViews/PyCoverageDialog.py	Sat Dec 05 12:29:26 2020 +0100
@@ -384,7 +384,7 @@
         for file in files:
             try:
                 os.remove(file)
-            except EnvironmentError:
+            except OSError:
                 pass
 
     @pyqtSlot()
--- a/eric6/DataViews/PyProfileDialog.py	Sun Nov 01 11:17:06 2020 +0100
+++ b/eric6/DataViews/PyProfileDialog.py	Sat Dec 05 12:29:26 2020 +0100
@@ -242,7 +242,7 @@
         try:
             with open(fname, 'rb') as f:
                 self.stats = pickle.load(f)     # secok
-        except (EnvironmentError, pickle.PickleError, EOFError):
+        except (OSError, pickle.PickleError, EOFError):
             E5MessageBox.critical(
                 self,
                 self.tr("Loading Profiling Data"),
--- a/eric6/DebugClients/Python/AsyncFile.py	Sun Nov 01 11:17:06 2020 +0100
+++ b/eric6/DebugClients/Python/AsyncFile.py	Sat Dec 05 12:29:26 2020 +0100
@@ -65,14 +65,14 @@
         Private method to check the mode.
         
         This method checks, if an operation is permitted according to
-        the mode of the file. If it is not, an IOError is raised.
+        the mode of the file. If it is not, an OSError is raised.
         
         @param mode the mode to be checked
         @type string
-        @exception IOError raised to indicate a bad file descriptor
+        @exception OSError raised to indicate a bad file descriptor
         """
         if mode != self.mode:
-            raise IOError((9, '[Errno 9] Bad file descriptor'))
+            raise OSError((9, '[Errno 9] Bad file descriptor'))
 
     def pendingWrite(self):
         """
@@ -112,7 +112,7 @@
                     pass
                 self.sock.sendall(buf)
                 self.nWriteErrors = 0
-            except socket.error:
+            except OSError:
                 self.nWriteErrors += 1
                 if self.nWriteErrors > self.maxtries:
                     self.wpending = []    # delete all output
@@ -135,7 +135,7 @@
         """
         try:
             return self.sock.fileno()
-        except socket.error:
+        except OSError:
             return -1
 
     def readable(self):
@@ -294,19 +294,19 @@
         @type int
         @param whence position the offset relates to
         @type int
-        @exception IOError This method is not supported and always raises an
-        IOError.
+        @exception OSError This method is not supported and always raises an
+        OSError.
         """
-        raise IOError((29, '[Errno 29] Illegal seek'))
+        raise OSError((29, '[Errno 29] Illegal seek'))
 
     def tell(self):
         """
         Public method to get the filepointer position.
         
-        @exception IOError This method is not supported and always raises an
-        IOError.
+        @exception OSError This method is not supported and always raises an
+        OSError.
         """
-        raise IOError((29, '[Errno 29] Illegal seek'))
+        raise OSError((29, '[Errno 29] Illegal seek'))
 
     def truncate(self, size=-1):
         """
@@ -314,10 +314,10 @@
         
         @param size size to truncate to
         @type int
-        @exception IOError This method is not supported and always raises an
-        IOError.
+        @exception OSError This method is not supported and always raises an
+        OSError.
         """
-        raise IOError((29, '[Errno 29] Illegal seek'))
+        raise OSError((29, '[Errno 29] Illegal seek'))
 
     def writable(self):
         """
--- a/eric6/DebugClients/Python/DebugClientBase.py	Sun Nov 01 11:17:06 2020 +0100
+++ b/eric6/DebugClients/Python/DebugClientBase.py	Sat Dec 05 12:29:26 2020 +0100
@@ -224,7 +224,7 @@
                     # read the first and second line
                     text = f.readline()
                     text = "{0}{1}".format(text, f.readline())
-            except IOError:
+            except OSError:
                 self.__coding = default
                 return
             
@@ -1169,7 +1169,7 @@
             
             try:
                 rrdy, wrdy, xrdy = select.select([self.readstream], wrdy, [])
-            except (select.error, KeyboardInterrupt, socket.error):
+            except (KeyboardInterrupt, OSError):
                 selectErrors += 1
                 if selectErrors <= 10:      # arbitrarily selected
                     # just carry on
@@ -1212,7 +1212,7 @@
         # immediate return if nothing is ready.
         try:
             rrdy, wrdy, xrdy = select.select([self.readstream], wrdy, [], 0)
-        except (select.error, KeyboardInterrupt, socket.error):
+        except (KeyboardInterrupt, OSError):
             return
 
         if self.readstream in rrdy:
--- a/eric6/DebugClients/Python/PyProfile.py	Sun Nov 01 11:17:06 2020 +0100
+++ b/eric6/DebugClients/Python/PyProfile.py	Sat Dec 05 12:29:26 2020 +0100
@@ -56,7 +56,7 @@
                 timings = marshal.load(cache)       # secok
                 if isinstance(timings, dict):
                     self.timings = timings
-        except (EnvironmentError, EOFError, ValueError, TypeError):
+        except (OSError, EOFError, ValueError, TypeError):
             pass
     
     def save(self):
@@ -67,7 +67,7 @@
         try:
             with open(self.timingCache, 'wb') as cache:
                 marshal.dump(self.timings, cache)
-        except EnvironmentError:
+        except OSError:
             pass
         
         # dump the profile data
@@ -83,7 +83,7 @@
         try:
             with open(file, 'wb') as f:
                 pickle.dump(self.stats, f, 4)
-        except (EnvironmentError, pickle.PickleError):
+        except (OSError, pickle.PickleError):
             pass
 
     def erase(self):
--- a/eric6/Debugger/CallStackViewer.py	Sun Nov 01 11:17:06 2020 +0100
+++ b/eric6/Debugger/CallStackViewer.py	Sat Dec 05 12:29:26 2020 +0100
@@ -184,7 +184,7 @@
                             f.write("{0}\n".format(itm.text(0)))
                             f.write(78 * "=" + "\n")
                             itm = self.itemBelow(itm)
-                except IOError as err:
+                except OSError as err:
                     E5MessageBox.critical(
                         self,
                         self.tr("Error saving Call Stack Info"),
--- a/eric6/Debugger/CallTraceViewer.py	Sun Nov 01 11:17:06 2020 +0100
+++ b/eric6/Debugger/CallTraceViewer.py	Sat Dec 05 12:29:26 2020 +0100
@@ -178,7 +178,7 @@
                                 call,
                                 itm.text(1), itm.text(2)))
                             itm = self.callTrace.itemBelow(itm)
-                except IOError as err:
+                except OSError as err:
                     E5MessageBox.critical(
                         self,
                         self.tr("Error saving Call Trace Info"),
--- a/eric6/Debugger/DebugUI.py	Sun Nov 01 11:17:06 2020 +0100
+++ b/eric6/Debugger/DebugUI.py	Sat Dec 05 12:29:26 2020 +0100
@@ -1046,7 +1046,7 @@
                         self.ui, Program,
                         self.tr('<p><b>{0}</b> has terminated with an exit'
                                 ' status of {1}.</p>{2}')
-                            .format(Utilities.normabspath(self.ui.currentProg),
+                            .format(os.path.abspath(self.ui.currentProg),
                                     status, info))
             else:
                 if message:
@@ -1077,7 +1077,7 @@
                         self.appendStdout.emit(self.tr(
                             '"{0}" has terminated with an exit status of'
                             ' {1}.\n{2}\n').format(
-                            Utilities.normabspath(self.ui.currentProg), status,
+                            os.path.abspath(self.ui.currentProg), status,
                             info))
 
     def __clientSyntaxError(self, message, filename, lineNo, characterNo):
@@ -1163,7 +1163,7 @@
                             pass
                         if "__IGNORE_EXCEPTION__" in lineFlags:
                             res = E5MessageBox.No
-                except (UnicodeError, IOError):
+                except (UnicodeError, OSError):
                     pass
                 if res != E5MessageBox.No:
                     self.viewmanager.setFileLine(
--- a/eric6/Debugger/DebuggerInterfacePython.py	Sun Nov 01 11:17:06 2020 +0100
+++ b/eric6/Debugger/DebuggerInterfacePython.py	Sat Dec 05 12:29:26 2020 +0100
@@ -12,7 +12,7 @@
 import logging
 
 from PyQt5.QtCore import (
-    QObject, QTextCodec, QProcess, QProcessEnvironment, QTimer
+    QObject, QProcess, QProcessEnvironment, QTimer
 )
 from PyQt5.QtWidgets import QInputDialog
 
@@ -63,9 +63,6 @@
         # set translation function
         self.translate = self.__identityTranslation
         
-        self.codec = QTextCodec.codecForName(
-            str(Preferences.getSystem("StringEncoding")))
-        
         if passive:
             # set translation function
             if Preferences.getDebugger("PathTranslation"):
@@ -1038,10 +1035,8 @@
         """
         while self.qsock and self.qsock.canReadLine():
             qs = self.qsock.readLine()
-            if self.codec is not None:
-                line = self.codec.toUnicode(qs)
-            else:
-                line = bytes(qs).decode()
+            line = bytes(qs).decode(
+                encoding=Preferences.getSystem("StringEncoding"))
             
             logging.debug("<Debug-Server> %s", line)
 ##            print("Server: ", line)          ##debug
Binary file eric6/Documentation/Help/source.qch has changed
--- a/eric6/Documentation/Help/source.qhp	Sun Nov 01 11:17:06 2020 +0100
+++ b/eric6/Documentation/Help/source.qhp	Sat Dec 05 12:29:26 2020 +0100
@@ -10693,6 +10693,7 @@
       <keyword name="PipDialog (Constructor)" id="PipDialog (Constructor)" ref="eric6.PipInterface.PipDialog.html#PipDialog.__init__" />
       <keyword name="PipDialog (Module)" id="PipDialog (Module)" ref="eric6.PipInterface.PipDialog.html" />
       <keyword name="PipDialog.__addOutput" id="PipDialog.__addOutput" ref="eric6.PipInterface.PipDialog.html#PipDialog.__addOutput" />
+      <keyword name="PipDialog.__cancel" id="PipDialog.__cancel" ref="eric6.PipInterface.PipDialog.html#PipDialog.__cancel" />
       <keyword name="PipDialog.__finish" id="PipDialog.__finish" ref="eric6.PipInterface.PipDialog.html#PipDialog.__finish" />
       <keyword name="PipDialog.__procFinished" id="PipDialog.__procFinished" ref="eric6.PipInterface.PipDialog.html#PipDialog.__procFinished" />
       <keyword name="PipDialog.__readStderr" id="PipDialog.__readStderr" ref="eric6.PipInterface.PipDialog.html#PipDialog.__readStderr" />
@@ -16064,6 +16065,7 @@
       <keyword name="VirtualenvConfigurationDialog.on_condaRequirementsFilePicker_textChanged" id="VirtualenvConfigurationDialog.on_condaRequirementsFilePicker_textChanged" ref="eric6.VirtualEnv.VirtualenvConfigurationDialog.html#VirtualenvConfigurationDialog.on_condaRequirementsFilePicker_textChanged" />
       <keyword name="VirtualenvConfigurationDialog.on_condaSpecialsGroup_clicked" id="VirtualenvConfigurationDialog.on_condaSpecialsGroup_clicked" ref="eric6.VirtualEnv.VirtualenvConfigurationDialog.html#VirtualenvConfigurationDialog.on_condaSpecialsGroup_clicked" />
       <keyword name="VirtualenvConfigurationDialog.on_condaTargetDirectoryPicker_textChanged" id="VirtualenvConfigurationDialog.on_condaTargetDirectoryPicker_textChanged" ref="eric6.VirtualEnv.VirtualenvConfigurationDialog.html#VirtualenvConfigurationDialog.on_condaTargetDirectoryPicker_textChanged" />
+      <keyword name="VirtualenvConfigurationDialog.on_nameEdit_textChanged" id="VirtualenvConfigurationDialog.on_nameEdit_textChanged" ref="eric6.VirtualEnv.VirtualenvConfigurationDialog.html#VirtualenvConfigurationDialog.on_nameEdit_textChanged" />
       <keyword name="VirtualenvConfigurationDialog.on_pythonExecPicker_textChanged" id="VirtualenvConfigurationDialog.on_pythonExecPicker_textChanged" ref="eric6.VirtualEnv.VirtualenvConfigurationDialog.html#VirtualenvConfigurationDialog.on_pythonExecPicker_textChanged" />
       <keyword name="VirtualenvConfigurationDialog.on_pyvenvButton_toggled" id="VirtualenvConfigurationDialog.on_pyvenvButton_toggled" ref="eric6.VirtualEnv.VirtualenvConfigurationDialog.html#VirtualenvConfigurationDialog.on_pyvenvButton_toggled" />
       <keyword name="VirtualenvConfigurationDialog.on_targetDirectoryPicker_textChanged" id="VirtualenvConfigurationDialog.on_targetDirectoryPicker_textChanged" ref="eric6.VirtualEnv.VirtualenvConfigurationDialog.html#VirtualenvConfigurationDialog.on_targetDirectoryPicker_textChanged" />
@@ -17712,7 +17714,6 @@
       <keyword name="namespacePathJoin" id="namespacePathJoin" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.Security.SecurityUtils.html#namespacePathJoin" />
       <keyword name="namespacePathSplit" id="namespacePathSplit" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.Security.SecurityUtils.html#namespacePathSplit" />
       <keyword name="normabsjoinpath" id="normabsjoinpath" ref="eric6.Utilities.__init__.html#normabsjoinpath" />
-      <keyword name="normabspath" id="normabspath" ref="eric6.Utilities.__init__.html#normabspath" />
       <keyword name="normalizeCode" id="normalizeCode" ref="eric6.Plugins.CheckerPlugins.SyntaxChecker.SyntaxCheck.html#normalizeCode" />
       <keyword name="normalizeCode" id="normalizeCode" ref="eric6.Plugins.CheckerPlugins.SyntaxChecker.jsCheckSyntax.html#normalizeCode" />
       <keyword name="normalizeCode" id="normalizeCode" ref="eric6.Plugins.CheckerPlugins.SyntaxChecker.jsonCheckSyntax.html#normalizeCode" />
@@ -17809,9 +17810,7 @@
       <keyword name="registerView" id="registerView" ref="eric6.WebBrowser.WebInspector.html#registerView" />
       <keyword name="register_check" id="register_check" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#register_check" />
       <keyword name="rehashPassword" id="rehashPassword" ref="eric6.Utilities.crypto.py3PBKDF2.html#rehashPassword" />
-      <keyword name="relativePath" id="relativePath" ref="eric6.Utilities.__init__.html#relativePath" />
       <keyword name="relativeUniversalPath" id="relativeUniversalPath" ref="eric6.Utilities.__init__.html#relativeUniversalPath" />
-      <keyword name="relpath" id="relpath" ref="eric6.Utilities.__init__.html#relpath" />
       <keyword name="removeConfigurationData" id="removeConfigurationData" ref="uninstall.html#removeConfigurationData" />
       <keyword name="removeDataDirectory" id="removeDataDirectory" ref="uninstall.html#removeDataDirectory" />
       <keyword name="removeMarkers" id="removeMarkers" ref="eric6.UI.CompareDialog.html#removeMarkers" />
--- a/eric6/Documentation/Source/eric6.DebugClients.Python.AsyncFile.html	Sun Nov 01 11:17:06 2020 +0100
+++ b/eric6/Documentation/Source/eric6.DebugClients.Python.AsyncFile.html	Sat Dec 05 12:29:26 2020 +0100
@@ -199,7 +199,7 @@
 </p>
 <p>
         This method checks, if an operation is permitted according to
-        the mode of the file. If it is not, an IOError is raised.
+        the mode of the file. If it is not, an OSError is raised.
 </p>
 <dl>
 
@@ -210,7 +210,7 @@
 </dl>
 <dl>
 
-<dt>Raises <b>IOError</b>:</dt>
+<dt>Raises <b>OSError</b>:</dt>
 <dd>
 raised to indicate a bad file descriptor
 </dd>
@@ -485,10 +485,10 @@
 </dl>
 <dl>
 
-<dt>Raises <b>IOError</b>:</dt>
+<dt>Raises <b>OSError</b>:</dt>
 <dd>
 This method is not supported and always raises an
-        IOError.
+        OSError.
 </dd>
 </dl>
 <a NAME="AsyncFile.seekable" ID="AsyncFile.seekable"></a>
@@ -519,10 +519,10 @@
 </p>
 <dl>
 
-<dt>Raises <b>IOError</b>:</dt>
+<dt>Raises <b>OSError</b>:</dt>
 <dd>
 This method is not supported and always raises an
-        IOError.
+        OSError.
 </dd>
 </dl>
 <a NAME="AsyncFile.truncate" ID="AsyncFile.truncate"></a>
@@ -541,10 +541,10 @@
 </dl>
 <dl>
 
-<dt>Raises <b>IOError</b>:</dt>
+<dt>Raises <b>OSError</b>:</dt>
 <dd>
 This method is not supported and always raises an
-        IOError.
+        OSError.
 </dd>
 </dl>
 <a NAME="AsyncFile.writable" ID="AsyncFile.writable"></a>
--- a/eric6/Documentation/Source/eric6.MicroPython.MicroPythonCommandsInterface.html	Sun Nov 01 11:17:06 2020 +0100
+++ b/eric6/Documentation/Source/eric6.MicroPython.MicroPythonCommandsInterface.html	Sat Dec 05 12:29:26 2020 +0100
@@ -314,7 +314,7 @@
 </dl>
 <dl>
 
-<dt>Raises <b>IOError</b>:</dt>
+<dt>Raises <b>OSError</b>:</dt>
 <dd>
 raised to indicate an issue with the device
 </dd>
@@ -420,7 +420,7 @@
 </dl>
 <dl>
 
-<dt>Raises <b>IOError</b>:</dt>
+<dt>Raises <b>OSError</b>:</dt>
 <dd>
 raised to indicate an issue with the device
 </dd>
@@ -457,7 +457,7 @@
 </dl>
 <dl>
 
-<dt>Raises <b>IOError</b>:</dt>
+<dt>Raises <b>OSError</b>:</dt>
 <dd>
 raised to indicate an issue with the device
 </dd>
@@ -484,7 +484,7 @@
 </dl>
 <dl>
 
-<dt>Raises <b>IOError</b>:</dt>
+<dt>Raises <b>OSError</b>:</dt>
 <dd>
 raised to indicate an issue with the device
 </dd>
@@ -510,7 +510,7 @@
 </dl>
 <dl>
 
-<dt>Raises <b>IOError</b>:</dt>
+<dt>Raises <b>OSError</b>:</dt>
 <dd>
 raised to indicate an issue with the device
 </dd>
@@ -581,7 +581,7 @@
 </dl>
 <dl>
 
-<dt>Raises <b>IOError</b>:</dt>
+<dt>Raises <b>OSError</b>:</dt>
 <dd>
 raised to indicate an issue with the device
 </dd>
@@ -614,7 +614,7 @@
 </dl>
 <dl>
 
-<dt>Raises <b>IOError</b>:</dt>
+<dt>Raises <b>OSError</b>:</dt>
 <dd>
 raised to indicate an issue with the device
 </dd>
@@ -635,7 +635,7 @@
 </dl>
 <dl>
 
-<dt>Raises <b>IOError</b>:</dt>
+<dt>Raises <b>OSError</b>:</dt>
 <dd>
 raised to indicate an issue with the device
 </dd>
@@ -672,7 +672,7 @@
 </dl>
 <dl>
 
-<dt>Raises <b>IOError</b>:</dt>
+<dt>Raises <b>OSError</b>:</dt>
 <dd>
 raised to indicate an issue with the device
 </dd>
@@ -698,7 +698,7 @@
 </dl>
 <dl>
 
-<dt>Raises <b>IOError</b>:</dt>
+<dt>Raises <b>OSError</b>:</dt>
 <dd>
 raised to indicate an issue with the device
 </dd>
@@ -723,7 +723,7 @@
 </dl>
 <dl>
 
-<dt>Raises <b>IOError</b>:</dt>
+<dt>Raises <b>OSError</b>:</dt>
 <dd>
 raised to indicate an issue with the device
 </dd>
@@ -744,7 +744,7 @@
 </dl>
 <dl>
 
-<dt>Raises <b>IOError</b>:</dt>
+<dt>Raises <b>OSError</b>:</dt>
 <dd>
 raised to indicate an issue with the device
 </dd>
@@ -785,7 +785,7 @@
 </dl>
 <dl>
 
-<dt>Raises <b>IOError</b>:</dt>
+<dt>Raises <b>OSError</b>:</dt>
 <dd>
 raised to indicate an issue with the device
 </dd>
@@ -800,7 +800,7 @@
 </p>
 <dl>
 
-<dt>Raises <b>IOError</b>:</dt>
+<dt>Raises <b>OSError</b>:</dt>
 <dd>
 raised to indicate an issue with the device
 </dd>
@@ -827,7 +827,7 @@
 </dl>
 <dl>
 
-<dt>Raises <b>IOError</b>:</dt>
+<dt>Raises <b>OSError</b>:</dt>
 <dd>
 raised to indicate an issue with the device
 </dd>
--- a/eric6/Documentation/Source/eric6.PipInterface.PipDialog.html	Sun Nov 01 11:17:06 2020 +0100
+++ b/eric6/Documentation/Source/eric6.PipInterface.PipDialog.html	Sat Dec 05 12:29:26 2020 +0100
@@ -78,6 +78,10 @@
 <td>Private method to add some text to the output pane.</td>
 </tr>
 <tr>
+<td><a href="#PipDialog.__cancel">__cancel</a></td>
+<td>Private slot to cancel the current action.</td>
+</tr>
+<tr>
 <td><a href="#PipDialog.__finish">__finish</a></td>
 <td>Private slot called when the process finished or the user pressed the button.</td>
 </tr>
@@ -148,6 +152,13 @@
 text to be added
 </dd>
 </dl>
+<a NAME="PipDialog.__cancel" ID="PipDialog.__cancel"></a>
+<h4>PipDialog.__cancel</h4>
+<b>__cancel</b>(<i></i>)
+
+<p>
+        Private slot to cancel the current action.
+</p>
 <a NAME="PipDialog.__finish" ID="PipDialog.__finish"></a>
 <h4>PipDialog.__finish</h4>
 <b>__finish</b>(<i></i>)
--- a/eric6/Documentation/Source/eric6.QScintilla.Editor.html	Sun Nov 01 11:17:06 2020 +0100
+++ b/eric6/Documentation/Source/eric6.QScintilla.Editor.html	Sat Dec 05 12:29:26 2020 +0100
@@ -1753,7 +1753,7 @@
 </dl>
 <dl>
 
-<dt>Raises <b>IOError</b>:</dt>
+<dt>Raises <b>OSError</b>:</dt>
 <dd>
 raised to indicate an issue accessing the file
 </dd>
--- a/eric6/Documentation/Source/eric6.Utilities.__init__.html	Sun Nov 01 11:17:06 2020 +0100
+++ b/eric6/Documentation/Source/eric6.Utilities.__init__.html	Sat Dec 05 12:29:26 2020 +0100
@@ -264,10 +264,6 @@
 <td>Function returning a normalized, absolute path of the joined parts passed into it.</td>
 </tr>
 <tr>
-<td><a href="#normabspath">normabspath</a></td>
-<td>Function returning a normalized, absolute path.</td>
-</tr>
-<tr>
 <td><a href="#normcaseabspath">normcaseabspath</a></td>
 <td>Function returning an absolute path, that is normalized with respect to its case and references.</td>
 </tr>
@@ -312,18 +308,10 @@
 <td>Module function to read a string from the given stream.</td>
 </tr>
 <tr>
-<td><a href="#relativePath">relativePath</a></td>
-<td>Function to convert a file path to a path relative to a start path.</td>
-</tr>
-<tr>
 <td><a href="#relativeUniversalPath">relativeUniversalPath</a></td>
 <td>Function to convert a file path to a path relative to a start path with universal separators.</td>
 </tr>
 <tr>
-<td><a href="#relpath">relpath</a></td>
-<td>Return a relative version of a path.</td>
-</tr>
-<tr>
 <td><a href="#rxIndex">rxIndex</a></td>
 <td>Function to get the index (start position) of a regular expression match within some text.</td>
 </tr>
@@ -1918,29 +1906,6 @@
 <div align="right"><a href="#top">Up</a></div>
 <hr />
 <hr />
-<a NAME="normabspath" ID="normabspath"></a>
-<h2>normabspath</h2>
-<b>normabspath</b>(<i>path</i>)
-
-<p>
-    Function returning a normalized, absolute path.
-</p>
-<dl>
-
-<dt><i>path</i></dt>
-<dd>
-file path (string)
-</dd>
-</dl>
-<dl>
-<dt>Returns:</dt>
-<dd>
-absolute, normalized path (string)
-</dd>
-</dl>
-<div align="right"><a href="#top">Up</a></div>
-<hr />
-<hr />
 <a NAME="normcaseabspath" ID="normcaseabspath"></a>
 <h2>normcaseabspath</h2>
 <b>normcaseabspath</b>(<i>path</i>)
@@ -2004,7 +1969,7 @@
 </dd>
 <dt><i>p</i></dt>
 <dd>
-variable number of path parts to be joind (string)
+variable number of path parts to be joined (string)
 </dd>
 </dl>
 <dl>
@@ -2227,34 +2192,6 @@
 <div align="right"><a href="#top">Up</a></div>
 <hr />
 <hr />
-<a NAME="relativePath" ID="relativePath"></a>
-<h2>relativePath</h2>
-<b>relativePath</b>(<i>path, start</i>)
-
-<p>
-    Function to convert a file path to a path relative to a start path.
-</p>
-<dl>
-
-<dt><i>path</i></dt>
-<dd>
-file or directory name to convert (string)
-</dd>
-<dt><i>start</i></dt>
-<dd>
-start path (string)
-</dd>
-</dl>
-<dl>
-<dt>Returns:</dt>
-<dd>
-relative path or unchanged path, if path does not start with
-        the start path (string)
-</dd>
-</dl>
-<div align="right"><a href="#top">Up</a></div>
-<hr />
-<hr />
 <a NAME="relativeUniversalPath" ID="relativeUniversalPath"></a>
 <h2>relativeUniversalPath</h2>
 <b>relativeUniversalPath</b>(<i>path, start</i>)
@@ -2284,40 +2221,6 @@
 <div align="right"><a href="#top">Up</a></div>
 <hr />
 <hr />
-<a NAME="relpath" ID="relpath"></a>
-<h2>relpath</h2>
-<b>relpath</b>(<i>path, start=os.path.curdir</i>)
-
-<p>
-    Return a relative version of a path.
-</p>
-<dl>
-
-<dt><i>path</i></dt>
-<dd>
-path to make relative (string)
-</dd>
-<dt><i>start</i></dt>
-<dd>
-path to make relative from (string)
-</dd>
-</dl>
-<dl>
-<dt>Returns:</dt>
-<dd>
-relative path (string)
-</dd>
-</dl>
-<dl>
-
-<dt>Raises <b>ValueError</b>:</dt>
-<dd>
-raised to indicate an invalid path
-</dd>
-</dl>
-<div align="right"><a href="#top">Up</a></div>
-<hr />
-<hr />
 <a NAME="rxIndex" ID="rxIndex"></a>
 <h2>rxIndex</h2>
 <b>rxIndex</b>(<i>rx, txt</i>)
--- a/eric6/Documentation/Source/eric6.VirtualEnv.VirtualenvConfigurationDialog.html	Sun Nov 01 11:17:06 2020 +0100
+++ b/eric6/Documentation/Source/eric6.VirtualEnv.VirtualenvConfigurationDialog.html	Sat Dec 05 12:29:26 2020 +0100
@@ -143,6 +143,10 @@
 <td>Private slot handling a change of the conda target directory.</td>
 </tr>
 <tr>
+<td><a href="#VirtualenvConfigurationDialog.on_nameEdit_textChanged">on_nameEdit_textChanged</a></td>
+<td>Private slot handling a change of the virtual environment name.</td>
+</tr>
+<tr>
 <td><a href="#VirtualenvConfigurationDialog.on_pythonExecPicker_textChanged">on_pythonExecPicker_textChanged</a></td>
 <td>Private slot to react to a change of the Python executable.</td>
 </tr>
@@ -391,6 +395,20 @@
 target directory
 </dd>
 </dl>
+<a NAME="VirtualenvConfigurationDialog.on_nameEdit_textChanged" ID="VirtualenvConfigurationDialog.on_nameEdit_textChanged"></a>
+<h4>VirtualenvConfigurationDialog.on_nameEdit_textChanged</h4>
+<b>on_nameEdit_textChanged</b>(<i>txt</i>)
+
+<p>
+        Private slot handling a change of the virtual environment name.
+</p>
+<dl>
+
+<dt><i>txt</i> (str)</dt>
+<dd>
+name of the virtual environment
+</dd>
+</dl>
 <a NAME="VirtualenvConfigurationDialog.on_pythonExecPicker_textChanged" ID="VirtualenvConfigurationDialog.on_pythonExecPicker_textChanged"></a>
 <h4>VirtualenvConfigurationDialog.on_pythonExecPicker_textChanged</h4>
 <b>on_pythonExecPicker_textChanged</b>(<i>txt</i>)
--- a/eric6/Documentation/Source/eric6.WebBrowser.WebBrowserWindow.html	Sun Nov 01 11:17:06 2020 +0100
+++ b/eric6/Documentation/Source/eric6.WebBrowser.WebBrowserWindow.html	Sat Dec 05 12:29:26 2020 +0100
@@ -1703,7 +1703,7 @@
 </p>
 <a NAME="WebBrowserWindow.__createTextEncodingAction" ID="WebBrowserWindow.__createTextEncodingAction"></a>
 <h4>WebBrowserWindow.__createTextEncodingAction</h4>
-<b>__createTextEncodingAction</b>(<i>codec, defaultCodec, parentMenu</i>)
+<b>__createTextEncodingAction</b>(<i>codec, defaultCodec, parentMenu, name=None</i>)
 
 <p>
         Private method to create an action for the text encoding menu.
@@ -1722,6 +1722,10 @@
 <dd>
 reference to the parent menu
 </dd>
+<dt><i>name</i> (str)</dt>
+<dd>
+name for the action
+</dd>
 </dl>
 <a NAME="WebBrowserWindow.__createTextEncodingSubmenu" ID="WebBrowserWindow.__createTextEncodingSubmenu"></a>
 <h4>WebBrowserWindow.__createTextEncodingSubmenu</h4>
--- a/eric6/DocumentationTools/IndexGenerator.py	Sun Nov 01 11:17:06 2020 +0100
+++ b/eric6/DocumentationTools/IndexGenerator.py	Sat Dec 05 12:29:26 2020 +0100
@@ -207,7 +207,7 @@
                 if basename:
                     package = package.replace(basename, "")
                 out = self.__writeIndex(package, element, newline)
-            except IOError as v:
+            except OSError as v:
                 sys.stderr.write("{0} error: {1}\n".format(package, v[1]))
             else:
                 if out:
--- a/eric6/E5Gui/E5MainWindow.py	Sun Nov 01 11:17:06 2020 +0100
+++ b/eric6/E5Gui/E5MainWindow.py	Sat Dec 05 12:29:26 2020 +0100
@@ -50,7 +50,7 @@
             try:
                 with open(styleSheetFile, "r", encoding="utf-8") as f:
                     styleSheet = f.read()
-            except (IOError, OSError) as msg:
+            except OSError as msg:
                 E5MessageBox.warning(
                     self,
                     QCoreApplication.translate(
--- a/eric6/E5Gui/E5SingleApplication.py	Sun Nov 01 11:17:06 2020 +0100
+++ b/eric6/E5Gui/E5SingleApplication.py	Sat Dec 05 12:29:26 2020 +0100
@@ -162,7 +162,7 @@
         
         @param fname name of file to be opened (string)
         """
-        self.sendCommand(SAOpenFile, [Utilities.normabspath(fname)])
+        self.sendCommand(SAOpenFile, [os.path.abspath(fname)])
         
     def __openProject(self, pfname):
         """
@@ -170,7 +170,7 @@
         
         @param pfname name of the projectfile to be opened (string)
         """
-        self.sendCommand(SAOpenProject, [Utilities.normabspath(pfname)])
+        self.sendCommand(SAOpenProject, [os.path.abspath(pfname)])
         
     def __openMultiProject(self, pfname):
         """
@@ -178,7 +178,7 @@
         
         @param pfname name of the projectfile to be opened (string)
         """
-        self.sendCommand(SAOpenMultiProject, [Utilities.normabspath(pfname)])
+        self.sendCommand(SAOpenMultiProject, [os.path.abspath(pfname)])
         
     def __sendArguments(self, argsStr):
         """
--- a/eric6/Globals/__init__.py	Sun Nov 01 11:17:06 2020 +0100
+++ b/eric6/Globals/__init__.py	Sat Dec 05 12:29:26 2020 +0100
@@ -316,7 +316,13 @@
     # step 1: check, if the user has configured a tools path
     path = Preferences.getQt("QtToolsDir")
     
-    # step 2: determine from used Python interpreter (designer is test object)
+    # step 2: try the qt5_applications package
+    if not path:
+        import qt5_applications
+        path = os.path.join(os.path.dirname(qt5_applications.__file__),
+                            "Qt", "bin")
+    
+    # step 3: determine from used Python interpreter (designer is test object)
     if not path:
         program = "designer"
         if isWindowsPlatform():
--- a/eric6/Graphics/ImportsDiagramBuilder.py	Sun Nov 01 11:17:06 2020 +0100
+++ b/eric6/Graphics/ImportsDiagramBuilder.py	Sat Dec 05 12:29:26 2020 +0100
@@ -44,7 +44,7 @@
         self.setObjectName("ImportsDiagram")
         
         self.showExternalImports = showExternalImports
-        self.packagePath = Utilities.normabspath(package)
+        self.packagePath = os.path.abspath(package)
     
     def initialize(self):
         """
--- a/eric6/Graphics/PackageDiagramBuilder.py	Sun Nov 01 11:17:06 2020 +0100
+++ b/eric6/Graphics/PackageDiagramBuilder.py	Sat Dec 05 12:29:26 2020 +0100
@@ -39,7 +39,7 @@
         super(PackageDiagramBuilder, self).__init__(dialog, view, project)
         self.setObjectName("PackageDiagram")
         
-        self.package = Utilities.normabspath(package)
+        self.package = os.path.abspath(package)
         self.noAttrs = noAttrs
     
     def initialize(self):
--- a/eric6/Graphics/UMLDialog.py	Sun Nov 01 11:17:06 2020 +0100
+++ b/eric6/Graphics/UMLDialog.py	Sat Dec 05 12:29:26 2020 +0100
@@ -256,7 +256,7 @@
         try:
             with open(filename, "w", encoding="utf-8") as f:
                 f.write("\n".join(lines))
-        except (IOError, OSError) as err:
+        except OSError as err:
             E5MessageBox.critical(
                 self,
                 self.tr("Save Diagram"),
@@ -285,7 +285,7 @@
         try:
             with open(filename, "r", encoding="utf-8") as f:
                 data = f.read()
-        except (IOError, OSError) as err:
+        except OSError as err:
             E5MessageBox.critical(
                 self,
                 self.tr("Load Diagram"),
--- a/eric6/IconEditor/IconEditorGrid.py	Sun Nov 01 11:17:06 2020 +0100
+++ b/eric6/IconEditor/IconEditorGrid.py	Sat Dec 05 12:29:26 2020 +0100
@@ -19,8 +19,6 @@
 
 from E5Gui import E5MessageBox
 
-from .cursors import cursors_rc     # __IGNORE_WARNING__
-
 
 class IconEditCommand(QUndoCommand):
     """
--- a/eric6/MicroPython/MicroPythonCommandsInterface.py	Sun Nov 01 11:17:06 2020 +0100
+++ b/eric6/MicroPython/MicroPythonCommandsInterface.py	Sat Dec 05 12:29:26 2020 +0100
@@ -289,7 +289,7 @@
         @type str
         @return tuple containg the directory listing
         @rtype tuple of str
-        @exception IOError raised to indicate an issue with the device
+        @exception OSError raised to indicate an issue with the device
         """
         if self.__repl.isMicrobit():
             # BBC micro:bit does not support directories
@@ -306,7 +306,7 @@
             ]
         out, err = self.execute(commands)
         if err:
-            raise IOError(self.__shortError(err))
+            raise OSError(self.__shortError(err))
         return ast.literal_eval(out.decode("utf-8"))
     
     def lls(self, dirname="", fullstat=False, showHidden=False):
@@ -325,7 +325,7 @@
             false) or the complete stat() tuple. 'None' is returned in case the
             directory doesn't exist.
         @rtype tuple of (str, tuple)
-        @exception IOError raised to indicate an issue with the device
+        @exception OSError raised to indicate an issue with the device
         """
         if self.__repl.isMicrobit():
             # BBC micro:bit does not support directories
@@ -383,7 +383,7 @@
             ]
         out, err = self.execute(commands)
         if err:
-            raise IOError(self.__shortError(err))
+            raise OSError(self.__shortError(err))
         fileslist = ast.literal_eval(out.decode("utf-8"))
         if fileslist is None:
             return None
@@ -399,7 +399,7 @@
         
         @param dirname directory to change to
         @type str
-        @exception IOError raised to indicate an issue with the device
+        @exception OSError raised to indicate an issue with the device
         """
         if dirname:
             commands = [
@@ -409,7 +409,7 @@
             ]
             out, err = self.execute(commands)
             if err:
-                raise IOError(self.__shortError(err))
+                raise OSError(self.__shortError(err))
     
     def pwd(self):
         """
@@ -417,7 +417,7 @@
         
         @return current directory
         @rtype str
-        @exception IOError raised to indicate an issue with the device
+        @exception OSError raised to indicate an issue with the device
         """
         if self.__repl.isMicrobit():
             # BBC micro:bit does not support directories
@@ -430,7 +430,7 @@
         ]
         out, err = self.execute(commands)
         if err:
-            raise IOError(self.__shortError(err))
+            raise OSError(self.__shortError(err))
         return out.decode("utf-8").strip()
     
     def rm(self, filename):
@@ -439,7 +439,7 @@
         
         @param filename name of the file to be removed
         @type str
-        @exception IOError raised to indicate an issue with the device
+        @exception OSError raised to indicate an issue with the device
         """
         if filename:
             commands = [
@@ -449,7 +449,7 @@
             ]
             out, err = self.execute(commands)
             if err:
-                raise IOError(self.__shortError(err))
+                raise OSError(self.__shortError(err))
     
     def rmrf(self, name, recursive=False, force=False):
         """
@@ -463,7 +463,7 @@
         @type bool
         @return flag indicating success
         @rtype bool
-        @exception IOError raised to indicate an issue with the device
+        @exception OSError raised to indicate an issue with the device
         """
         if name:
             commands = [
@@ -496,7 +496,7 @@
             ]
             out, err = self.execute(commands)
             if err:
-                raise IOError(self.__shortError(err))
+                raise OSError(self.__shortError(err))
             return ast.literal_eval(out.decode("utf-8"))
         
         return False
@@ -507,7 +507,7 @@
         
         @param dirname name of the directory to create
         @type str
-        @exception IOError raised to indicate an issue with the device
+        @exception OSError raised to indicate an issue with the device
         """
         if dirname:
             commands = [
@@ -517,7 +517,7 @@
             ]
             out, err = self.execute(commands)
             if err:
-                raise IOError(self.__shortError(err))
+                raise OSError(self.__shortError(err))
     
     def rmdir(self, dirname):
         """
@@ -525,7 +525,7 @@
         
         @param dirname name of the directory to be removed
         @type str
-        @exception IOError raised to indicate an issue with the device
+        @exception OSError raised to indicate an issue with the device
         """
         if dirname:
             commands = [
@@ -535,7 +535,7 @@
             ]
             out, err = self.execute(commands)
             if err:
-                raise IOError(self.__shortError(err))
+                raise OSError(self.__shortError(err))
     
     def put(self, hostFileName, deviceFileName=None):
         """
@@ -547,10 +547,10 @@
         @type str
         @return flag indicating success
         @rtype bool
-        @exception IOError raised to indicate an issue with the device
+        @exception OSError raised to indicate an issue with the device
         """
         if not os.path.isfile(hostFileName):
-            raise IOError("No such file: {0}".format(hostFileName))
+            raise OSError("No such file: {0}".format(hostFileName))
         
         with open(hostFileName, "rb") as hostFile:
             content = hostFile.read()
@@ -576,7 +576,7 @@
         
         out, err = self.execute(commands)
         if err:
-            raise IOError(self.__shortError(err))
+            raise OSError(self.__shortError(err))
         return True
     
     def get(self, deviceFileName, hostFileName=None):
@@ -589,7 +589,7 @@
         @type str
         @return flag indicating success
         @rtype bool
-        @exception IOError raised to indicate an issue with the device
+        @exception OSError raised to indicate an issue with the device
         """
         if not hostFileName:
             hostFileName = deviceFileName
@@ -622,7 +622,7 @@
         ]
         out, err = self.execute(commands)
         if err:
-            raise IOError(self.__shortError(err))
+            raise OSError(self.__shortError(err))
         
         # write the received bytes to the local file
         # convert eol to "\n"
@@ -640,7 +640,7 @@
         @return tuple of tuples containing the file system name, the total
             size, the used size and the free size
         @rtype tuple of tuples of (str, int, int, int)
-        @exception IOError raised to indicate an issue with the device
+        @exception OSError raised to indicate an issue with the device
         """
         commands = [
             "import os as __os_",
@@ -663,7 +663,7 @@
         ]
         out, err = self.execute(commands)
         if err:
-            raise IOError(self.__shortError(err))
+            raise OSError(self.__shortError(err))
         infolist = ast.literal_eval(out.decode("utf-8"))
         if infolist is None:
             return None
@@ -688,7 +688,7 @@
         
         @return dictionary containing the version information
         @rtype dict
-        @exception IOError raised to indicate an issue with the device
+        @exception OSError raised to indicate an issue with the device
         """
         commands = [
             "import os as __os_",
@@ -697,7 +697,7 @@
         ]
         out, err = self.execute(commands)
         if err:
-            raise IOError(self.__shortError(err))
+            raise OSError(self.__shortError(err))
         
         rawOutput = out.decode("utf-8").strip()
         rawOutput = rawOutput[1:-1]
@@ -715,7 +715,7 @@
         
         @return dictionary containing the implementation information
         @rtype dict
-        @exception IOError raised to indicate an issue with the device
+        @exception OSError raised to indicate an issue with the device
         """
         commands = [
             "import sys as __sys_",
@@ -738,7 +738,7 @@
         ]
         out, err = self.execute(commands)
         if err:
-            raise IOError(self.__shortError(err))
+            raise OSError(self.__shortError(err))
         return ast.literal_eval(out.decode("utf-8"))
     
     def syncTime(self):
@@ -746,7 +746,7 @@
         Public method to set the time of the connected device to the local
         computer's time.
         
-        @exception IOError raised to indicate an issue with the device
+        @exception OSError raised to indicate an issue with the device
         """
         now = time.localtime(time.time())
         commands = [
@@ -795,7 +795,7 @@
         ]
         out, err = self.execute(commands)
         if err:
-            raise IOError(self.__shortError(err))
+            raise OSError(self.__shortError(err))
     
     def getTime(self):
         """
@@ -803,7 +803,7 @@
         
         @return time of the device
         @rtype str
-        @exception IOError raised to indicate an issue with the device
+        @exception OSError raised to indicate an issue with the device
         """
         commands = [
             "import time as __time_",
@@ -822,5 +822,5 @@
         ]
         out, err = self.execute(commands)
         if err:
-            raise IOError(self.__shortError(err))
+            raise OSError(self.__shortError(err))
         return out.decode("utf-8").strip()
--- a/eric6/MicroPython/MicroPythonFileManagerWidget.py	Sun Nov 01 11:17:06 2020 +0100
+++ b/eric6/MicroPython/MicroPythonFileManagerWidget.py	Sat Dec 05 12:29:26 2020 +0100
@@ -661,7 +661,7 @@
                 os.mkdir(dirPath)
                 self.__listLocalFiles(cwdWidget.text(),
                                       localDevice=localDevice)
-            except (OSError, IOError) as exc:
+            except OSError as exc:
                 E5MessageBox.critical(
                     self,
                     self.tr("Create Directory"),
@@ -737,7 +737,7 @@
                     os.remove(filename)
                     self.__listLocalFiles(cwdWidget.text(),
                                           localDevice=localDevice)
-                except (OSError, IOError) as exc:
+                except OSError as exc:
                     E5MessageBox.critical(
                         self,
                         self.tr("Delete File"),
--- a/eric6/MicroPython/MicroPythonGraphWidget.py	Sun Nov 01 11:17:06 2020 +0100
+++ b/eric6/MicroPython/MicroPythonGraphWidget.py	Sat Dec 05 12:29:26 2020 +0100
@@ -323,7 +323,7 @@
             
             self.__dirty = False
             return True
-        except (IOError, OSError) as err:
+        except OSError as err:
             E5MessageBox.critical(
                 self,
                 self.tr("Save Chart Data"),
--- a/eric6/Network/IRC/IrcChannelWidget.py	Sun Nov 01 11:17:06 2020 +0100
+++ b/eric6/Network/IRC/IrcChannelWidget.py	Sat Dec 05 12:29:26 2020 +0100
@@ -1400,7 +1400,7 @@
                         txt = self.messages.toPlainText()
                     with open(fname, "w", encoding="utf-8") as f:
                         f.write(txt)
-                except IOError as err:
+                except OSError as err:
                     E5MessageBox.critical(
                         self,
                         self.tr("Error saving Messages"),
--- a/eric6/Network/IRC/IrcNetworkWidget.py	Sun Nov 01 11:17:06 2020 +0100
+++ b/eric6/Network/IRC/IrcNetworkWidget.py	Sat Dec 05 12:29:26 2020 +0100
@@ -454,7 +454,7 @@
                         txt = self.messages.toPlainText()
                     with open(fname, "w", encoding="utf-8") as f:
                         f.write(txt)
-                except IOError as err:
+                except OSError as err:
                     E5MessageBox.critical(
                         self,
                         self.tr("Error saving Messages"),
--- a/eric6/PipInterface/Pip.py	Sun Nov 01 11:17:06 2020 +0100
+++ b/eric6/PipInterface/Pip.py	Sat Dec 05 12:29:26 2020 +0100
@@ -460,7 +460,7 @@
                     try:
                         with open(requirements, "r") as f:
                             reqs = f.read().splitlines()
-                    except (OSError, IOError):
+                    except OSError:
                         return
                     
                     from UI.DeleteFilesConfirmationDialog import (
--- a/eric6/PipInterface/PipDialog.py	Sun Nov 01 11:17:06 2020 +0100
+++ b/eric6/PipInterface/PipDialog.py	Sat Dec 05 12:29:26 2020 +0100
@@ -36,6 +36,9 @@
         super(PipDialog, self).__init__(parent)
         self.setupUi(self)
         
+        self.buttonBox.button(QDialogButtonBox.Close).setEnabled(False)
+        self.buttonBox.button(QDialogButtonBox.Cancel).setDefault(True)
+        
         self.proc = None
         self.__processQueue = []
         self.__ioEncoding = Preferences.getSystem("IOEncoding")
@@ -52,18 +55,7 @@
         @param e close event
         @type QCloseEvent
         """
-        self.__processQueue = []
-        
-        if (
-            self.proc is not None and
-            self.proc.state() != QProcess.NotRunning
-        ):
-            self.proc.terminate()
-            QTimer.singleShot(2000, self.proc.kill)
-            self.proc.waitForFinished(3000)
-        
-        self.proc = None
-        
+        self.__cancel()
         e.accept()
     
     def __finish(self):
@@ -81,14 +73,23 @@
         
         self.proc = None
         
-        self.buttonBox.button(QDialogButtonBox.Close).setEnabled(True)
-        self.buttonBox.button(QDialogButtonBox.Close).setFocus(
-            Qt.OtherFocusReason)
-        
         if self.__processQueue:
             cmd, args = self.__processQueue.pop(0)
             self.__addOutput("\n\n")
             self.startProcess(cmd, args)
+        else:
+            self.buttonBox.button(QDialogButtonBox.Close).setEnabled(True)
+            self.buttonBox.button(QDialogButtonBox.Cancel).setEnabled(False)
+            self.buttonBox.button(QDialogButtonBox.Close).setDefault(True)
+            self.buttonBox.button(QDialogButtonBox.Close).setFocus(
+                Qt.OtherFocusReason)
+    
+    def __cancel(self):
+        """
+        Private slot to cancel the current action.
+        """
+        self.__processQueue = []
+        self.__finish()
     
     @pyqtSlot(QAbstractButton)
     def on_buttonBox_clicked(self, button):
@@ -100,6 +101,8 @@
         """
         if button == self.buttonBox.button(QDialogButtonBox.Close):
             self.close()
+        elif button == self.buttonBox.button(QDialogButtonBox.Cancel):
+            self.__cancel()
     
     def __procFinished(self, exitCode, exitStatus):
         """
--- a/eric6/PipInterface/PipDialog.ui	Sun Nov 01 11:17:06 2020 +0100
+++ b/eric6/PipInterface/PipDialog.ui	Sat Dec 05 12:29:26 2020 +0100
@@ -73,7 +73,7 @@
       <enum>Qt::Horizontal</enum>
      </property>
      <property name="standardButtons">
-      <set>QDialogButtonBox::Close</set>
+      <set>QDialogButtonBox::Cancel|QDialogButtonBox::Close</set>
      </property>
     </widget>
    </item>
--- a/eric6/PipInterface/PipFreezeDialog.py	Sun Nov 01 11:17:06 2020 +0100
+++ b/eric6/PipInterface/PipFreezeDialog.py	Sat Dec 05 12:29:26 2020 +0100
@@ -44,6 +44,8 @@
         self.__refreshButton = self.buttonBox.addButton(
             self.tr("&Refresh"), QDialogButtonBox.ActionRole)
         
+        self.__environmentName = ""
+        
         self.requirementsFilePicker.setMode(E5PathPickerModes.SaveFileMode)
         self.requirementsFilePicker.setFilters(
             self.tr("Text Files (*.txt);;All Files (*)"))
@@ -117,7 +119,7 @@
         else:
             ok = True
         if ok:
-            self.start()
+            self.start(self.__environmentName)
     
     def start(self, venvName):
         """
@@ -128,6 +130,7 @@
         """
         self.requirementsEdit.clear()
         self.__requirementsAvailable = False
+        self.__environmentName = venvName
         
         interpreter = self.__pip.getVirtualenvInterpreter(venvName)
         if not interpreter:
@@ -198,7 +201,7 @@
         try:
             with open(fileName, "w") as f:
                 f.write(self.requirementsEdit.toPlainText())
-        except (OSError, IOError) as err:
+        except OSError as err:
             E5MessageBox.critical(
                 self,
                 self.tr("Generate Requirements"),
--- a/eric6/PipInterface/PipPackagesWidget.py	Sun Nov 01 11:17:06 2020 +0100
+++ b/eric6/PipInterface/PipPackagesWidget.py	Sat Dec 05 12:29:26 2020 +0100
@@ -831,6 +831,7 @@
             if packages:
                 self.__pip.installPackages(packages, venvName=venvName,
                                            userSite=userSite)
+                self.on_refreshButton_clicked()
     
     @pyqtSlot()
     def on_showDetailsButton_clicked(self):
@@ -1014,6 +1015,7 @@
         venvName = self.environmentsComboBox.currentText()
         if venvName:
             self.__pip.installPip(venvName)
+            self.on_refreshButton_clicked()
     
     @pyqtSlot()
     def __installPipUser(self):
@@ -1024,6 +1026,7 @@
         venvName = self.environmentsComboBox.currentText()
         if venvName:
             self.__pip.installPip(venvName, userSite=True)
+            self.on_refreshButton_clicked()
     
     @pyqtSlot()
     def __repairPip(self):
@@ -1034,6 +1037,7 @@
         venvName = self.environmentsComboBox.currentText()
         if venvName:
             self.__pip.repairPip(venvName)
+            self.on_refreshButton_clicked()
     
     @pyqtSlot()
     def __installPackages(self):
@@ -1049,6 +1053,7 @@
                 if packages:
                     self.__pip.installPackages(packages, venvName=venvName,
                                                userSite=user)
+                    self.on_refreshButton_clicked()
     
     @pyqtSlot()
     def __installLocalPackage(self):
@@ -1064,6 +1069,7 @@
                 if package and os.path.exists(package):
                     self.__pip.installPackages([package], venvName=venvName,
                                                userSite=user)
+                    self.on_refreshButton_clicked()
     
     @pyqtSlot()
     def __installRequirements(self):
@@ -1073,6 +1079,7 @@
         venvName = self.environmentsComboBox.currentText()
         if venvName:
             self.__pip.installRequirements(venvName)
+            self.on_refreshButton_clicked()
     
     @pyqtSlot()
     def __uninstallRequirements(self):
@@ -1082,6 +1089,7 @@
         venvName = self.environmentsComboBox.currentText()
         if venvName:
             self.__pip.uninstallRequirements(venvName)
+            self.on_refreshButton_clicked()
     
     @pyqtSlot()
     def __generateRequirements(self):
@@ -1149,7 +1157,7 @@
             try:
                 with open(cfgFile, "w") as f:
                     f.write("[global]\n")
-            except (IOError, OSError):
+            except OSError:
                 # ignore these
                 pass
         
--- a/eric6/PluginManager/PluginInstallDialog.py	Sun Nov 01 11:17:06 2020 +0100
+++ b/eric6/PluginManager/PluginInstallDialog.py	Sat Dec 05 12:29:26 2020 +0100
@@ -483,7 +483,7 @@
                     "Error installing plugin. Reason: {0}").format(str(why)),
                 False
             )
-        except IOError as why:
+        except OSError as why:
             self.__rollback()
             return (
                 False,
@@ -600,7 +600,7 @@
                     os.remove(fnamec)
             
             os.remove(pluginFile)
-        except (IOError, OSError, os.error):
+        except (OSError, os.error):
             # ignore some exceptions
             pass
 
--- a/eric6/PluginManager/PluginManager.py	Sun Nov 01 11:17:06 2020 +0100
+++ b/eric6/PluginManager/PluginManager.py	Sat Dec 05 12:29:26 2020 +0100
@@ -208,7 +208,7 @@
                 try:
                     with open(fname, "w"):
                         pass
-                except IOError:
+                except OSError:
                     return (
                         False,
                         self.tr("Could not create a package for {0}.")
@@ -221,7 +221,7 @@
             try:
                 with open(fname, "w"):
                     pass
-            except IOError:
+            except OSError:
                 del self.pluginDirs["user"]
         
         if (
@@ -1203,13 +1203,13 @@
         if not os.path.exists(downloadDir):
             try:
                 os.mkdir(downloadDir, 0o755)
-            except (OSError, IOError):
+            except OSError:
                 # try again with (possibly) new default
                 downloadDir = self.__defaultDownloadDir
                 if not os.path.exists(downloadDir):
                     try:
                         os.mkdir(downloadDir, 0o755)
-                    except (OSError, IOError) as err:
+                    except OSError as err:
                         E5MessageBox.critical(
                             self.__ui,
                             self.tr("Plugin Manager Error"),
--- a/eric6/PluginManager/PluginRepositoryDialog.py	Sun Nov 01 11:17:06 2020 +0100
+++ b/eric6/PluginManager/PluginRepositoryDialog.py	Sat Dec 05 12:29:26 2020 +0100
@@ -998,7 +998,7 @@
         for removeFile in removeFiles:
             try:
                 os.remove(os.path.join(downloadPath, removeFile))
-            except (IOError, OSError) as err:
+            except OSError as err:
                 if not quiet:
                     E5MessageBox.critical(
                         None,
@@ -1027,7 +1027,7 @@
                     for removeFile in removeFiles:
                         try:
                             os.remove(os.path.join(downloadPath, removeFile))
-                        except (IOError, OSError) as err:
+                        except OSError as err:
                             if not quiet:
                                 E5MessageBox.critical(
                                     None,
--- a/eric6/Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py	Sun Nov 01 11:17:06 2020 +0100
+++ b/eric6/Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py	Sat Dec 05 12:29:26 2020 +0100
@@ -795,7 +795,7 @@
                 source, encoding = Utilities.readEncodedFile(
                     self.filename)
                 source = source.splitlines(True)
-            except (UnicodeError, IOError) as msg:
+            except (UnicodeError, OSError) as msg:
                 self.results = CodeStyleCheckerDialog.hasResults
                 self.__createFileErrorItem(self.filename, str(msg))
                 self.progress += 1
@@ -843,7 +843,7 @@
                 source, encoding = Utilities.readEncodedFile(
                     filename)
                 source = source.splitlines(True)
-            except (UnicodeError, IOError) as msg:
+            except (UnicodeError, OSError) as msg:
                 self.results = CodeStyleCheckerDialog.hasResults
                 self.__createFileErrorItem(filename, str(msg))
                 continue
@@ -1206,7 +1206,7 @@
             return
         
         if item.parent():
-            fn = Utilities.normabspath(item.data(0, self.filenameRole))
+            fn = os.path.abspath(item.data(0, self.filenameRole))
             lineno = item.data(0, self.lineRole)
             position = item.data(0, self.positionRole)
             message = item.data(0, self.messageRole)
@@ -1246,7 +1246,7 @@
             selectedIndexes = list(range(self.resultList.topLevelItemCount()))
         for index in selectedIndexes:
             itm = self.resultList.topLevelItem(index)
-            fn = Utilities.normabspath(itm.data(0, self.filenameRole))
+            fn = os.path.abspath(itm.data(0, self.filenameRole))
             vm.openSourceFile(fn, 1)
             editor = vm.getOpenEditor(fn)
             editor.clearStyleWarnings()
@@ -1264,7 +1264,7 @@
         for index in range(self.resultList.topLevelItemCount()):
             itm = self.resultList.topLevelItem(index)
             errorFiles.append(
-                Utilities.normabspath(itm.data(0, self.filenameRole)))
+                os.path.abspath(itm.data(0, self.filenameRole)))
         for file in openFiles:
             if file not in errorFiles:
                 editor = vm.getOpenEditor(file)
--- a/eric6/Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleFixer.py	Sun Nov 01 11:17:06 2020 +0100
+++ b/eric6/Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleFixer.py	Sat Dec 05 12:29:26 2020 +0100
@@ -211,12 +211,12 @@
                 bfn = '{0}~'.format(self.__filename)
             try:
                 os.remove(bfn)
-            except EnvironmentError:
+            except OSError:
                 # if there was an error, ignore it
                 pass
             try:
                 os.rename(self.__filename, bfn)
-            except EnvironmentError:
+            except OSError:
                 # if there was an error, ignore it
                 pass
         
@@ -229,7 +229,7 @@
             
             with open(self.__filename, "wb") as fp:
                 fp.write(txt)
-        except (IOError, UnicodeError) as err:
+        except (OSError, UnicodeError) as err:
             # Could not save the file! Skipping it. Reason: {0}
             return ("FIXWRITE_ERROR", [str(err)])
         
--- a/eric6/Plugins/CheckerPlugins/CodeStyleChecker/eradicate.py	Sun Nov 01 11:17:06 2020 +0100
+++ b/eric6/Plugins/CheckerPlugins/CodeStyleChecker/eradicate.py	Sat Dec 05 12:29:26 2020 +0100
@@ -227,5 +227,5 @@
         else:
             try:
                 fix_file(name, args=args, standard_out=standard_out)
-            except IOError as exception:
+            except OSError as exception:
                 print('{}'.format(exception), file=standard_error)
--- a/eric6/Plugins/CheckerPlugins/CodeStyleChecker/pycodestyle.py	Sun Nov 01 11:17:06 2020 +0100
+++ b/eric6/Plugins/CheckerPlugins/CodeStyleChecker/pycodestyle.py	Sat Dec 05 12:29:26 2020 +0100
@@ -1998,7 +1998,7 @@
         elif lines is None:
             try:
                 self.lines = readlines(filename)
-            except IOError:
+            except OSError:
                 (exc_type, exc) = sys.exc_info()[:2]
                 self._io_error = '%s: %s' % (exc_type.__name__, exc)
                 self.lines = []
--- a/eric6/Plugins/CheckerPlugins/CodeStyleChecker/translations.py	Sun Nov 01 11:17:06 2020 +0100
+++ b/eric6/Plugins/CheckerPlugins/CodeStyleChecker/translations.py	Sat Dec 05 12:29:26 2020 +0100
@@ -471,9 +471,9 @@
     "E742": ["l"],
     "E743": ["l"],
     "E901": ["SyntaxError", "Invalid Syntax"],
-    "E902": ["IOError"],
+    "E902": ["OSError"],
     
-    "FIXWRITE_ERROR": ["IOError"],
+    "FIXWRITE_ERROR": ["OSError"],
 }
 
 messageCatalogs = (
--- a/eric6/Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py	Sun Nov 01 11:17:06 2020 +0100
+++ b/eric6/Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py	Sat Dec 05 12:29:26 2020 +0100
@@ -248,7 +248,7 @@
             try:
                 self.source = Utilities.readEncodedFile(self.filename)[0]
                 self.source = Utilities.normalizeCode(self.source)
-            except (UnicodeError, IOError) as msg:
+            except (UnicodeError, OSError) as msg:
                 self.noResults = False
                 self.__createResultItem(
                     self.filename, 1, 0,
@@ -282,7 +282,7 @@
             try:
                 source = Utilities.readEncodedFile(filename)[0]
                 source = Utilities.normalizeCode(source)
-            except (UnicodeError, IOError) as msg:
+            except (UnicodeError, OSError) as msg:
                 self.noResults = False
                 self.__createResultItem(
                     self.filename, 1, 0,
@@ -354,7 +354,7 @@
                     source = Utilities.readEncodedFile(fn)[0]
                     source = Utilities.normalizeCode(source)
                     source = source.splitlines()
-                except (UnicodeError, IOError):
+                except (UnicodeError, OSError):
                     source = ""
             else:
                 source = self.source.splitlines()
@@ -463,7 +463,7 @@
         vm = e5App().getObject("ViewManager")
         
         if itm.parent():
-            fn = Utilities.normabspath(itm.data(0, self.filenameRole))
+            fn = os.path.abspath(itm.data(0, self.filenameRole))
             lineno = itm.data(0, self.lineRole)
             index = itm.data(0, self.indexRole)
             error = itm.data(0, self.errorRole)
@@ -476,7 +476,7 @@
             else:
                 editor.toggleSyntaxError(lineno, index, True, error, show=True)
         else:
-            fn = Utilities.normabspath(itm.data(0, self.filenameRole))
+            fn = os.path.abspath(itm.data(0, self.filenameRole))
             vm.openSourceFile(fn)
             editor = vm.getOpenEditor(fn)
             for index in range(itm.childCount()):
@@ -508,7 +508,7 @@
             selectedIndexes = list(range(self.resultList.topLevelItemCount()))
         for index in selectedIndexes:
             itm = self.resultList.topLevelItem(index)
-            fn = Utilities.normabspath(itm.data(0, self.filenameRole))
+            fn = os.path.abspath(itm.data(0, self.filenameRole))
             vm.openSourceFile(fn, 1)
             editor = vm.getOpenEditor(fn)
             editor.clearSyntaxError()
@@ -531,7 +531,7 @@
         for index in range(self.resultList.topLevelItemCount()):
             itm = self.resultList.topLevelItem(index)
             errorFiles.append(
-                Utilities.normabspath(itm.data(0, self.filenameRole)))
+                os.path.abspath(itm.data(0, self.filenameRole)))
         for file in openFiles:
             if file not in errorFiles:
                 editor = vm.getOpenEditor(file)
--- a/eric6/Plugins/PluginWizardEricPlugin.py	Sun Nov 01 11:17:06 2020 +0100
+++ b/eric6/Plugins/PluginWizardEricPlugin.py	Sat Dec 05 12:29:26 2020 +0100
@@ -168,7 +168,7 @@
                         try:
                             with open(packageFile, "w", encoding="utf-8"):
                                 pass
-                        except IOError as err:
+                        except OSError as err:
                             E5MessageBox.critical(
                                 self,
                                 self.tr("Create Package"),
--- a/eric6/Plugins/VcsPlugins/vcsGit/ConfigurationPage/GitPage.py	Sun Nov 01 11:17:06 2020 +0100
+++ b/eric6/Plugins/VcsPlugins/vcsGit/ConfigurationPage/GitPage.py	Sat Dec 05 12:29:26 2020 +0100
@@ -98,7 +98,7 @@
                     f.write("[user]\n")
                     f.write("    name = {0} {1}\n".format(firstName, lastName))
                     f.write("    email = {0}\n".format(email))
-            except (IOError, OSError):
+            except OSError:
                 # ignore these
                 pass
         editor = MiniEditor(cfgFile, "Properties", self)
--- a/eric6/Plugins/VcsPlugins/vcsGit/GitDiffDialog.py	Sun Nov 01 11:17:06 2020 +0100
+++ b/eric6/Plugins/VcsPlugins/vcsGit/GitDiffDialog.py	Sat Dec 05 12:29:26 2020 +0100
@@ -343,7 +343,7 @@
             with open(fname, "w", encoding="utf-8", newline="") as f:
                 f.write(eol.join(self.contents2.toPlainText().splitlines()))
                 f.write(eol)
-        except IOError as why:
+        except OSError as why:
             E5MessageBox.critical(
                 self, self.tr('Save Diff'),
                 self.tr(
--- a/eric6/Plugins/VcsPlugins/vcsGit/GitLogBrowserDialog.py	Sun Nov 01 11:17:06 2020 +0100
+++ b/eric6/Plugins/VcsPlugins/vcsGit/GitLogBrowserDialog.py	Sat Dec 05 12:29:26 2020 +0100
@@ -2308,7 +2308,7 @@
             with open(fname, "w", encoding="utf-8", newline="") as f:
                 f.write(eol.join(self.diffEdit.toPlainText().splitlines()))
                 f.write(eol)
-        except IOError as why:
+        except OSError as why:
             E5MessageBox.critical(
                 self, self.tr('Save Diff'),
                 self.tr(
--- a/eric6/Plugins/VcsPlugins/vcsGit/ProjectBrowserHelper.py	Sun Nov 01 11:17:06 2020 +0100
+++ b/eric6/Plugins/VcsPlugins/vcsGit/ProjectBrowserHelper.py	Sat Dec 05 12:29:26 2020 +0100
@@ -249,8 +249,6 @@
             self.tr('Revert changes'), self.__GitRevert)
         self.vcsMenuActions.append(act)
         menu.addSeparator()
-        
-        menu.addSeparator()
         menu.addAction(self.tr('Select all local file entries'),
                        self.browser.selectLocalEntries)
         menu.addAction(self.tr('Select all versioned file entries'),
--- a/eric6/Plugins/VcsPlugins/vcsGit/git.py	Sun Nov 01 11:17:06 2020 +0100
+++ b/eric6/Plugins/VcsPlugins/vcsGit/git.py	Sat Dec 05 12:29:26 2020 +0100
@@ -1404,7 +1404,7 @@
                     ignore.write("\n".join(ignorePatterns))
                     ignore.write("\n")
                 status = True
-            except IOError:
+            except OSError:
                 status = False
             
             if status and autoAdd:
@@ -1630,7 +1630,7 @@
                     output2 = f1.read()
                     f1.close()
                 name2 = "{0} (Work)".format(name)
-            except IOError:
+            except OSError:
                 E5MessageBox.critical(
                     self.__ui,
                     self.tr("Git Side-by-Side Difference"),
@@ -2664,7 +2664,7 @@
             try:
                 with open(fname, "w") as f:
                     f.write(output)
-            except (OSError, IOError) as err:
+            except OSError as err:
                 E5MessageBox.critical(
                     self.__ui,
                     self.tr("Create Bisect Replay File"),
@@ -3579,7 +3579,7 @@
             try:
                 with open(cfgFile, "w"):
                     pass
-            except IOError:
+            except OSError:
                 pass
         self.repoEditor = MiniEditor(cfgFile, "Properties")
         self.repoEditor.show()
@@ -3603,7 +3603,7 @@
                     f.write("[user]\n")
                     f.write("    name = {0} {1}\n".format(firstName, lastName))
                     f.write("    email = {0}\n".format(email))
-            except (IOError, OSError):
+            except OSError:
                 # ignore these
                 pass
         self.userEditor = MiniEditor(cfgFile, "Properties")
--- a/eric6/Plugins/VcsPlugins/vcsMercurial/HgDiffDialog.py	Sun Nov 01 11:17:06 2020 +0100
+++ b/eric6/Plugins/VcsPlugins/vcsMercurial/HgDiffDialog.py	Sat Dec 05 12:29:26 2020 +0100
@@ -241,7 +241,7 @@
         try:
             with open(fname, "w", encoding="utf-8", newline="") as f:
                 f.write(eol.join(self.contents.toPlainText().splitlines()))
-        except IOError as why:
+        except OSError as why:
             E5MessageBox.critical(
                 self, self.tr('Save Diff'),
                 self.tr(
--- a/eric6/Plugins/VcsPlugins/vcsMercurial/HgLogBrowserDialog.py	Sun Nov 01 11:17:06 2020 +0100
+++ b/eric6/Plugins/VcsPlugins/vcsMercurial/HgLogBrowserDialog.py	Sat Dec 05 12:29:26 2020 +0100
@@ -2669,7 +2669,7 @@
         try:
             with open(fname, "w", encoding="utf-8", newline="") as f:
                 f.write(eol.join(self.diffEdit.toPlainText().splitlines()))
-        except IOError as why:
+        except OSError as why:
             E5MessageBox.critical(
                 self, self.tr('Save Diff'),
                 self.tr(
--- a/eric6/Plugins/VcsPlugins/vcsMercurial/HisteditExtension/HgHisteditCommitEditor.py	Sun Nov 01 11:17:06 2020 +0100
+++ b/eric6/Plugins/VcsPlugins/vcsMercurial/HisteditExtension/HgHisteditCommitEditor.py	Sat Dec 05 12:29:26 2020 +0100
@@ -51,7 +51,7 @@
         try:
             with open(self.__fileName, "r") as f:
                 txt = f.read()
-        except (IOError, OSError) as err:
+        except OSError as err:
             E5MessageBox.critical(
                 self,
                 self.tr("Edit Commit Message"),
@@ -90,7 +90,7 @@
         try:
             with open(self.__fileName, "w") as f:
                 f.write(msg)
-        except (IOError, OSError) as err:
+        except OSError as err:
             E5MessageBox.critical(
                 self,
                 self.tr("Edit Commit Message"),
--- a/eric6/Plugins/VcsPlugins/vcsMercurial/HisteditExtension/HgHisteditPlanEditor.py	Sun Nov 01 11:17:06 2020 +0100
+++ b/eric6/Plugins/VcsPlugins/vcsMercurial/HisteditExtension/HgHisteditPlanEditor.py	Sat Dec 05 12:29:26 2020 +0100
@@ -105,7 +105,7 @@
         try:
             with open(self.__fileName, "r") as f:
                 txt = f.read()
-        except (IOError, OSError) as err:
+        except OSError as err:
             E5MessageBox.critical(
                 self,
                 self.tr("Edit Plan"),
@@ -240,7 +240,7 @@
         try:
             with open(self.__fileName, "w") as f:
                 f.write(text)
-        except (IOError, OSError) as err:
+        except OSError as err:
             E5MessageBox.critical(
                 self,
                 self.tr("Edit Plan"),
--- a/eric6/Plugins/VcsPlugins/vcsMercurial/hg.py	Sun Nov 01 11:17:06 2020 +0100
+++ b/eric6/Plugins/VcsPlugins/vcsMercurial/hg.py	Sat Dec 05 12:29:26 2020 +0100
@@ -1713,7 +1713,7 @@
                 with open(name, "r", encoding="utf-8") as f1:
                     output2 = f1.read()
                 name2 = "{0} (Work)".format(name)
-            except IOError:
+            except OSError:
                 E5MessageBox.critical(
                     self.__ui,
                     self.tr("Mercurial Side-by-Side Difference"),
@@ -2163,7 +2163,7 @@
                                     "\n  ".join(lfPattern)))
                 self.__monitorRepoIniFile(repodir)
                 self.__iniFileChanged(cfgFile)
-            except IOError:
+            except OSError:
                 pass
         self.repoEditor = MiniEditor(cfgFile, "Properties")
         self.repoEditor.show()
@@ -2329,7 +2329,7 @@
                     ignore.write("\n".join(ignorePatterns))
                     ignore.write("\n")
                 status = True
-            except IOError:
+            except OSError:
                 status = False
             
             if status and autoAdd:
@@ -3063,7 +3063,7 @@
                 try:
                     with open(hgsub, "r") as f:
                         contents = f.readlines()
-                except IOError as err:
+                except OSError as err:
                     E5MessageBox.critical(
                         self.__ui,
                         self.tr("Add Sub-repository"),
@@ -3091,7 +3091,7 @@
             try:
                 with open(hgsub, "w") as f:
                     f.writelines(contents)
-            except IOError as err:
+            except OSError as err:
                 E5MessageBox.critical(
                     self.__ui,
                     self.tr("Add Sub-repository"),
@@ -3123,7 +3123,7 @@
         try:
             with open(hgsub, "r") as f:
                 subrepositories = [line.strip() for line in f.readlines()]
-        except IOError as err:
+        except OSError as err:
             E5MessageBox.critical(
                 self.__ui,
                 self.tr("Remove Sub-repositories"),
@@ -3142,7 +3142,7 @@
             try:
                 with open(hgsub, "w") as f:
                     f.write(contents)
-            except IOError as err:
+            except OSError as err:
                 E5MessageBox.critical(
                     self.__ui,
                     self.tr("Remove Sub-repositories"),
--- a/eric6/Plugins/VcsPlugins/vcsPySvn/SvnDiffDialog.py	Sun Nov 01 11:17:06 2020 +0100
+++ b/eric6/Plugins/VcsPlugins/vcsPySvn/SvnDiffDialog.py	Sat Dec 05 12:29:26 2020 +0100
@@ -435,7 +435,7 @@
         try:
             with open(fname, "w", encoding="utf-8", newline="") as f:
                 f.write(eol.join(self.contents.toPlainText().splitlines()))
-        except IOError as why:
+        except OSError as why:
             E5MessageBox.critical(
                 self, self.tr('Save Diff'),
                 self.tr(
--- a/eric6/Plugins/VcsPlugins/vcsPySvn/SvnUtilities.py	Sun Nov 01 11:17:06 2020 +0100
+++ b/eric6/Plugins/VcsPlugins/vcsPySvn/SvnUtilities.py	Sat Dec 05 12:29:26 2020 +0100
@@ -80,7 +80,7 @@
     try:
         with open(config, "w") as f:
             f.write(DefaultConfig)
-    except IOError:
+    except OSError:
         pass
 
 
@@ -92,7 +92,7 @@
     try:
         with open(config, "r") as f:
             configList = f.read().splitlines()
-    except IOError:
+    except OSError:
         return
     
     newConfig = []
@@ -129,5 +129,5 @@
         try:
             with open(config, "w") as f:
                 f.write("\n".join(newConfig))
-        except IOError:
+        except OSError:
             pass
--- a/eric6/Plugins/VcsPlugins/vcsPySvn/subversion.py	Sun Nov 01 11:17:06 2020 +0100
+++ b/eric6/Plugins/VcsPlugins/vcsPySvn/subversion.py	Sat Dec 05 12:29:26 2020 +0100
@@ -2199,7 +2199,7 @@
                 with open(name, "r", encoding="utf-8") as f1:
                     output2 = f1.read()
                 name2 = name
-            except IOError:
+            except OSError:
                 E5MessageBox.critical(
                     self.__ui,
                     self.tr("Subversion Side-by-Side Difference"),
--- a/eric6/Plugins/VcsPlugins/vcsSubversion/SvnDiffDialog.py	Sun Nov 01 11:17:06 2020 +0100
+++ b/eric6/Plugins/VcsPlugins/vcsSubversion/SvnDiffDialog.py	Sat Dec 05 12:29:26 2020 +0100
@@ -395,7 +395,7 @@
         try:
             with open(fname, "w", encoding="utf-8", newline="") as f:
                 f.write(eol.join(self.contents.toPlainText().splitlines()))
-        except IOError as why:
+        except OSError as why:
             E5MessageBox.critical(
                 self, self.tr('Save Diff'),
                 self.tr(
--- a/eric6/Plugins/VcsPlugins/vcsSubversion/SvnUtilities.py	Sun Nov 01 11:17:06 2020 +0100
+++ b/eric6/Plugins/VcsPlugins/vcsSubversion/SvnUtilities.py	Sat Dec 05 12:29:26 2020 +0100
@@ -54,7 +54,7 @@
     try:
         with open(config, "w") as f:
             f.write(DefaultConfig)
-    except IOError:
+    except OSError:
         pass
 
 
@@ -66,7 +66,7 @@
     try:
         with open(config, "r") as f:
             configList = f.read().splitlines()
-    except IOError:
+    except OSError:
         return
     
     newConfig = []
@@ -103,5 +103,5 @@
         try:
             with open(config, "w") as f:
                 f.write("\n".join(newConfig))
-        except IOError:
+        except OSError:
             pass
--- a/eric6/Plugins/VcsPlugins/vcsSubversion/subversion.py	Sun Nov 01 11:17:06 2020 +0100
+++ b/eric6/Plugins/VcsPlugins/vcsSubversion/subversion.py	Sat Dec 05 12:29:26 2020 +0100
@@ -2051,7 +2051,7 @@
                 with open(name, "r", encoding="utf-8") as f1:
                     output2 = f1.read()
                 name2 = name
-            except IOError:
+            except OSError:
                 E5MessageBox.critical(
                     self.__ui,
                     self.tr("Subversion Side-by-Side Difference"),
--- a/eric6/Plugins/WizardPlugins/PyRegExpWizard/PyRegExpWizardDialog.py	Sun Nov 01 11:17:06 2020 +0100
+++ b/eric6/Plugins/WizardPlugins/PyRegExpWizard/PyRegExpWizardDialog.py	Sat Dec 05 12:29:26 2020 +0100
@@ -344,7 +344,7 @@
             try:
                 with open(fname, "w", encoding="utf-8") as f:
                     f.write(self.regexpTextEdit.toPlainText())
-            except IOError as err:
+            except OSError as err:
                 E5MessageBox.information(
                     self,
                     self.tr("Save regular expression"),
@@ -368,7 +368,7 @@
                 with open(fname, "r", encoding="utf-8") as f:
                     regexp = f.read()
                 self.regexpTextEdit.setPlainText(regexp)
-            except IOError as err:
+            except OSError as err:
                 E5MessageBox.information(
                     self,
                     self.tr("Save regular expression"),
--- a/eric6/Plugins/WizardPlugins/QRegularExpressionWizard/QRegularExpressionWizardDialog.py	Sun Nov 01 11:17:06 2020 +0100
+++ b/eric6/Plugins/WizardPlugins/QRegularExpressionWizard/QRegularExpressionWizardDialog.py	Sat Dec 05 12:29:26 2020 +0100
@@ -426,7 +426,7 @@
             try:
                 with open(fname, "w", encoding="utf-8") as f:
                     f.write(self.regexpTextEdit.toPlainText())
-            except IOError as err:
+            except OSError as err:
                 E5MessageBox.information(
                     self,
                     self.tr("Save regular expression"),
@@ -450,7 +450,7 @@
                 with open(fname, "r", encoding="utf-8") as f:
                     regexp = f.read()
                 self.regexpTextEdit.setPlainText(regexp)
-            except IOError as err:
+            except OSError as err:
                 E5MessageBox.information(
                     self,
                     self.tr("Save regular expression"),
--- a/eric6/Plugins/WizardPlugins/SetupWizard/SetupWizardDialog.py	Sun Nov 01 11:17:06 2020 +0100
+++ b/eric6/Plugins/WizardPlugins/SetupWizard/SetupWizardDialog.py	Sat Dec 05 12:29:26 2020 +0100
@@ -149,7 +149,7 @@
         try:
             with open(filename, "r") as f:
                 lines = f.readlines()
-        except (IOError, OSError) as err:
+        except OSError as err:
             E5MessageBox.warning(
                 self,
                 self.tr("Reading Trove Classifiers"),
--- a/eric6/Preferences/ConfigurationPages/EmailPage.py	Sun Nov 01 11:17:06 2020 +0100
+++ b/eric6/Preferences/ConfigurationPages/EmailPage.py	Sat Dec 05 12:29:26 2020 +0100
@@ -217,12 +217,12 @@
                 self,
                 self.tr("Login Test"),
                 self.tr("""The login test succeeded."""))
-        except (smtplib.SMTPException, socket.error) as e:
+        except (smtplib.SMTPException, OSError) as e:
             if isinstance(e, smtplib.SMTPResponseException):
                 errorStr = e.smtp_error.decode()
             elif isinstance(e, socket.timeout):
                 errorStr = str(e)
-            elif isinstance(e, socket.error):
+            elif isinstance(e, OSError):
                 try:
                     errorStr = e[1]
                 except TypeError:
--- a/eric6/Project/CreateDialogCodeDialog.py	Sun Nov 01 11:17:06 2020 +0100
+++ b/eric6/Project/CreateDialogCodeDialog.py	Sat Dec 05 12:29:26 2020 +0100
@@ -423,7 +423,7 @@
                     return
                 with open(tmplName, 'r', encoding="utf-8") as tmplFile:
                     template = tmplFile.read()
-            except IOError as why:
+            except OSError as why:
                 E5MessageBox.critical(
                     self,
                     self.tr("Code Generation"),
@@ -460,7 +460,7 @@
                     sourceImpl = srcFile.readlines()
                 if not sourceImpl[-1].endswith("\n"):
                     sourceImpl[-1] = "{0}{1}".format(sourceImpl[-1], "\n")
-            except IOError as why:
+            except OSError as why:
                 E5MessageBox.critical(
                     self,
                     self.tr("Code Generation"),
@@ -553,7 +553,7 @@
         try:
             with open(fn, 'w', encoding="utf-8", newline=newline) as srcFile:
                 srcFile.write("".join(sourceImpl))
-        except IOError as why:
+        except OSError as why:
             E5MessageBox.critical(
                 self,
                 self.tr("Code Generation"),
--- a/eric6/Project/Project.py	Sun Nov 01 11:17:06 2020 +0100
+++ b/eric6/Project/Project.py	Sat Dec 05 12:29:26 2020 +0100
@@ -1468,7 +1468,7 @@
             fn = os.path.join(self.ppath, langFile)
             if os.path.exists(fn):
                 s2t(fn)
-        except EnvironmentError as err:
+        except OSError as err:
             E5MessageBox.critical(
                 self.ui,
                 self.tr("Delete translation"),
@@ -1490,7 +1490,7 @@
                 fn = os.path.join(self.ppath, qmFile)
                 if os.path.exists(fn):
                     s2t(fn)
-            except EnvironmentError as err:
+            except OSError as err:
                 E5MessageBox.critical(
                     self.ui,
                     self.tr("Delete translation"),
@@ -1642,7 +1642,7 @@
                                     return  # don't overwrite
                                     
                             shutil.copy(fn, target)
-                        except IOError as why:
+                        except OSError as why:
                             E5MessageBox.critical(
                                 self.ui,
                                 self.tr("Add file"),
@@ -1701,7 +1701,7 @@
         ):
             try:
                 os.makedirs(target)
-            except IOError as why:
+            except OSError as why:
                 E5MessageBox.critical(
                     self.ui,
                     self.tr("Add directory"),
@@ -1733,7 +1733,7 @@
                             # don't overwrite, carry on with next file
                             
                     shutil.copy(file, target)
-                except EnvironmentError:
+                except OSError:
                     continue
             self.appendFile(targetfile)
         
@@ -2209,7 +2209,7 @@
                     "__pycache__", "{0}.*{1}".format(tail, ext))
                 for f in glob.glob(pat):
                     s2t(f)
-        except EnvironmentError as err:
+        except OSError as err:
             E5MessageBox.critical(
                 self.ui,
                 self.tr("Delete file"),
@@ -2239,7 +2239,7 @@
                 send2trash(dn)
             except ImportError:
                 shutil.rmtree(dn, True)
-        except EnvironmentError as err:
+        except OSError as err:
             E5MessageBox.critical(
                 self.ui,
                 self.tr("Delete directory"),
@@ -2334,7 +2334,7 @@
             if not os.path.isdir(self.ppath):
                 try:
                     os.makedirs(self.ppath)
-                except EnvironmentError:
+                except OSError:
                     E5MessageBox.critical(
                         self.ui,
                         self.tr("Create project directory"),
@@ -2362,6 +2362,7 @@
                             self.ppath, self.pdata["MAINSCRIPT"])
                     else:
                         ms = self.pdata["MAINSCRIPT"]
+                    os.makedirs(os.path.dirname(ms))
                     with open(ms, "w"):
                         pass
                     self.appendFile(ms, True)
@@ -2373,6 +2374,7 @@
                             mf = os.path.join(self.ppath, mf)
                     else:
                         mf = os.path.join(self.ppath, Project.DefaultMakefile)
+                    os.makedirs(os.path.dirname(mf))
                     with open(mf, "w"):
                         pass
                     self.appendFile(mf)
@@ -2397,7 +2399,7 @@
                 try:
                     # create management directory if not present
                     self.createProjectManagementDir()
-                except EnvironmentError:
+                except OSError:
                     E5MessageBox.critical(
                         self.ui,
                         self.tr("Create project management directory"),
@@ -2415,9 +2417,10 @@
                         ms = self.pdata["MAINSCRIPT"]
                     if not os.path.exists(ms):
                         try:
+                            os.makedirs(os.path.dirname(ms))
                             with open(ms, "w"):
                                 pass
-                        except EnvironmentError as err:
+                        except OSError as err:
                             E5MessageBox.critical(
                                 self.ui,
                                 self.tr("Create main script"),
@@ -2438,9 +2441,10 @@
                         mf = os.path.join(self.ppath, Project.DefaultMakefile)
                     if not os.path.exists(mf):
                         try:
+                            os.makedirs(os.path.dirname(mf))
                             with open(mf, "w"):
                                 pass
-                        except EnvironmentError as err:
+                        except OSError as err:
                             E5MessageBox.critical(
                                 self.ui,
                                 self.tr("Create Makefile"),
@@ -2731,7 +2735,7 @@
                     try:
                         with open(mf, "w"):
                             pass
-                    except EnvironmentError as err:
+                    except OSError as err:
                         E5MessageBox.critical(
                             self.ui,
                             self.tr("Create Makefile"),
@@ -2905,7 +2909,7 @@
                     try:
                         # create management directory if not present
                         self.createProjectManagementDir()
-                    except EnvironmentError:
+                    except OSError:
                         E5MessageBox.critical(
                             self.ui,
                             self.tr("Create project management directory"),
@@ -5277,7 +5281,7 @@
                                for f in lst]))
                 pkglistFile.write("\n")
                 # ensure the file ends with an empty line
-        except IOError as why:
+        except OSError as why:
             E5MessageBox.critical(
                 self.ui,
                 self.tr("Create Package List"),
@@ -5344,7 +5348,7 @@
             try:
                 with open(pkglist, "r", encoding="utf-8") as pkglistFile:
                     names = pkglistFile.read()
-            except IOError as why:
+            except OSError as why:
                 E5MessageBox.critical(
                     self.ui,
                     self.tr("Create Plugin Archive"),
@@ -5400,7 +5404,7 @@
                     self.pdata["MAINSCRIPT"].replace(".py", ".zip"))
             try:
                 archiveFile = zipfile.ZipFile(archive, "w")
-            except IOError as why:
+            except OSError as why:
                 E5MessageBox.critical(
                     self.ui,
                     self.tr("Create Plugin Archive"),
@@ -5509,7 +5513,7 @@
         try:
             sourcelines, encoding = Utilities.readEncodedFile(filename)
             sourcelines = sourcelines.splitlines(True)
-        except (IOError, UnicodeError) as why:
+        except (OSError, UnicodeError) as why:
             E5MessageBox.critical(
                 self.ui,
                 self.tr("Create Plugin Archive"),
@@ -5550,7 +5554,7 @@
         try:
             sourcelines = Utilities.readEncodedFile(filename)[0]
             sourcelines = sourcelines.splitlines(True)
-        except (IOError, UnicodeError) as why:
+        except (OSError, UnicodeError) as why:
             E5MessageBox.critical(
                 self.ui,
                 self.tr("Create Plugin Archive"),
--- a/eric6/Project/ProjectFormsBrowser.py	Sun Nov 01 11:17:06 2020 +0100
+++ b/eric6/Project/ProjectFormsBrowser.py	Sat Dec 05 12:29:26 2020 +0100
@@ -620,7 +620,7 @@
         
         try:
             shutil.copy(templateFile, fname)
-        except IOError as e:
+        except OSError as e:
             E5MessageBox.critical(
                 self,
                 self.tr("New Form"),
@@ -766,7 +766,7 @@
                         self.tr("The compilation of the form file"
                                 " was successful."))
                 self.project.projectFormCompiled.emit(self.compiledFile)
-            except IOError as msg:
+            except OSError as msg:
                 if not self.noDialog:
                     E5MessageBox.information(
                         self,
--- a/eric6/Project/ProjectResourcesBrowser.py	Sun Nov 01 11:17:06 2020 +0100
+++ b/eric6/Project/ProjectResourcesBrowser.py	Sat Dec 05 12:29:26 2020 +0100
@@ -499,7 +499,7 @@
                     rcfile.write('<qresource>\n')
                     rcfile.write('</qresource>\n')
                     rcfile.write('</RCC>\n')
-            except IOError as e:
+            except OSError as e:
                 E5MessageBox.critical(
                     self,
                     self.tr("New Resource"),
@@ -612,7 +612,7 @@
                         self.tr("Resource Compilation"),
                         self.tr("The compilation of the resource file"
                                 " was successful."))
-            except IOError as msg:
+            except OSError as msg:
                 if not self.noDialog:
                     E5MessageBox.information(
                         self,
@@ -816,7 +816,7 @@
         try:
             with open(filename, "r", encoding="utf-8") as f:
                 buf = f.read()
-        except IOError:
+        except OSError:
             return False
         
         qrcDirName = os.path.dirname(filename)
--- a/eric6/Project/ProjectSourcesBrowser.py	Sun Nov 01 11:17:06 2020 +0100
+++ b/eric6/Project/ProjectSourcesBrowser.py	Sat Dec 05 12:29:26 2020 +0100
@@ -839,7 +839,7 @@
                     try:
                         with open(packageFile, "w", encoding="utf-8"):
                             pass
-                    except IOError as err:
+                    except OSError as err:
                         E5MessageBox.critical(
                             self,
                             self.tr("Add new Python package"),
--- a/eric6/Project/ProjectTranslationsBrowser.py	Sun Nov 01 11:17:06 2020 +0100
+++ b/eric6/Project/ProjectTranslationsBrowser.py	Sat Dec 05 12:29:26 2020 +0100
@@ -818,7 +818,7 @@
                             pf.write('\n\n')
                 
                 self.__tmpProjects.append(outFile)
-            except IOError:
+            except OSError:
                 E5MessageBox.critical(
                     self,
                     self.tr("Write temporary project file"),
@@ -959,7 +959,7 @@
                     self.__tmpProjects.remove(
                         self.__pylupdateProcesses[index][1])
                     os.remove(self.__pylupdateProcesses[index][1])
-                except EnvironmentError:
+                except OSError:
                     pass
                 del self.__pylupdateProcesses[index]
                 break
@@ -1065,7 +1065,7 @@
                 try:
                     self.__tmpProjects.remove(tempProjectFile)
                     os.remove(tempProjectFile)
-                except EnvironmentError:
+                except OSError:
                     pass
         
     def __generateAll(self):
--- a/eric6/Project/QuickFindFileDialog.py	Sun Nov 01 11:17:06 2020 +0100
+++ b/eric6/Project/QuickFindFileDialog.py	Sat Dec 05 12:29:26 2020 +0100
@@ -188,7 +188,7 @@
         for (_, in_order, name) in possible:
             try:
                 age = os.stat(os.path.join(self.project.ppath, name)).st_mtime
-            except (IOError, OSError):
+            except OSError:
                 # skipping, because it doesn't appear to exist...
                 continue
             ordered.append((
--- a/eric6/Project/UicLoadUi.py	Sun Nov 01 11:17:06 2020 +0100
+++ b/eric6/Project/UicLoadUi.py	Sat Dec 05 12:29:26 2020 +0100
@@ -7,6 +7,7 @@
 Module to get the object name, class name or signatures of a Qt form (*.ui).
 """
 
+import os
 import sys
 import json
 import xml.etree.ElementTree            # secok
@@ -24,6 +25,9 @@
 except ImportError:
     pass
 
+sys.path.append(os.path.dirname(os.path.dirname(__file__)))
+# add the eric package directory
+
 
 def objectName(formFile, projectPath):
     """
--- a/eric6/QScintilla/Editor.py	Sun Nov 01 11:17:06 2020 +0100
+++ b/eric6/QScintilla/Editor.py	Sat Dec 05 12:29:26 2020 +0100
@@ -170,7 +170,7 @@
         @param filetype type of the source file (string)
         @param editor reference to an Editor object, if this is a cloned view
         @param tv reference to the task viewer object
-        @exception IOError raised to indicate an issue accessing the file
+        @exception OSError raised to indicate an issue accessing the file
         """
         super(Editor, self).__init__()
         self.setAttribute(Qt.WA_KeyCompression)
@@ -373,7 +373,7 @@
                                 QFileInfo(self.fileName).size() // 1024),
                         icon=E5MessageBox.Warning)
                     if not res:
-                        raise IOError()
+                        raise OSError()
                 self.readFile(self.fileName, True)
                 self.__bindLexer(self.fileName)
                 self.__bindCompleter(self.fileName)
@@ -3093,7 +3093,7 @@
                         fn, encoding)
                 else:
                     txt, self.encoding = Utilities.readEncodedFile(fn)
-        except (UnicodeDecodeError, IOError) as why:
+        except (UnicodeDecodeError, OSError) as why:
             E5MessageBox.critical(
                 self.vm,
                 self.tr('Open File'),
@@ -3194,17 +3194,17 @@
             try:
                 permissions = os.stat(fn).st_mode
                 perms_valid = True
-            except EnvironmentError:
+            except OSError:
                 # if there was an error, ignore it
                 perms_valid = False
             try:
                 os.remove(bfn)
-            except EnvironmentError:
+            except OSError:
                 # if there was an error, ignore it
                 pass
             try:
                 os.rename(fn, bfn)
-            except EnvironmentError:
+            except OSError:
                 # if there was an error, ignore it
                 pass
         
@@ -3217,7 +3217,7 @@
             if createBackup and perms_valid:
                 os.chmod(fn, permissions)
             return True
-        except (IOError, Utilities.CodingError, UnicodeError) as why:
+        except (OSError, Utilities.CodingError, UnicodeError) as why:
             E5MessageBox.critical(
                 self,
                 self.tr('Save File'),
@@ -6746,7 +6746,7 @@
         try:
             with open(fname, "r", encoding="utf-8") as f:
                 lines = f.readlines()
-        except IOError:
+        except OSError:
             E5MessageBox.critical(
                 self,
                 self.tr("Error loading macro"),
@@ -6807,7 +6807,7 @@
             with open(fname, "w", encoding="utf-8") as f:
                 f.write("{0}{1}".format(name, "\n"))
                 f.write(self.macros[name].save())
-        except IOError:
+        except OSError:
             E5MessageBox.critical(
                 self,
                 self.tr("Error saving macro"),
@@ -7192,7 +7192,7 @@
         # reread the file
         try:
             self.readFile(self.fileName)
-        except IOError:
+        except OSError:
             # do not prompt for this change again...
             self.lastModified = QDateTime.currentDateTime()
         self.setModified(False)
--- a/eric6/QScintilla/Exporters/ExporterHTML.py	Sun Nov 01 11:17:06 2020 +0100
+++ b/eric6/QScintilla/Exporters/ExporterHTML.py	Sat Dec 05 12:29:26 2020 +0100
@@ -456,7 +456,7 @@
                 with E5OverrideCursor():
                     with open(filename, "w", encoding="utf-8") as f:
                         f.write(html)
-            except IOError as err:
+            except OSError as err:
                 E5MessageBox.critical(
                     self.editor,
                     self.tr("Export source"),
--- a/eric6/QScintilla/Exporters/ExporterPDF.py	Sun Nov 01 11:17:06 2020 +0100
+++ b/eric6/QScintilla/Exporters/ExporterPDF.py	Sat Dec 05 12:29:26 2020 +0100
@@ -610,7 +610,7 @@
                     
                     # write required stuff and close the PDF file
                     self.pr.endPDF()
-        except IOError as err:
+        except OSError as err:
             E5MessageBox.critical(
                 self.editor,
                 self.tr("Export source"),
--- a/eric6/QScintilla/Exporters/ExporterRTF.py	Sun Nov 01 11:17:06 2020 +0100
+++ b/eric6/QScintilla/Exporters/ExporterRTF.py	Sat Dec 05 12:29:26 2020 +0100
@@ -365,7 +365,7 @@
                         pos += 1
                     
                     f.write(self.RTF_BODYCLOSE)
-        except IOError as err:
+        except OSError as err:
             E5MessageBox.critical(
                 self.editor,
                 self.tr("Export source"),
--- a/eric6/QScintilla/Exporters/ExporterTEX.py	Sun Nov 01 11:17:06 2020 +0100
+++ b/eric6/QScintilla/Exporters/ExporterTEX.py	Sat Dec 05 12:29:26 2020 +0100
@@ -275,7 +275,7 @@
                     
                     # close last empty style macros and document too
                     f.write("}\n} %end tiny\n\n\\end{document}\n")
-        except IOError as err:
+        except OSError as err:
             E5MessageBox.critical(
                 self.editor,
                 self.tr("Export source"),
--- a/eric6/QScintilla/MiniEditor.py	Sun Nov 01 11:17:06 2020 +0100
+++ b/eric6/QScintilla/MiniEditor.py	Sat Dec 05 12:29:26 2020 +0100
@@ -2530,7 +2530,7 @@
                         fileName, encoding)
                 else:
                     txt, self.encoding = Utilities.readEncodedFile(fileName)
-        except (UnicodeDecodeError, IOError) as why:
+        except (UnicodeDecodeError, OSError) as why:
             E5MessageBox.critical(
                 self, self.tr('Open File'),
                 self.tr('<p>The file <b>{0}</b> could not be opened.</p>'
@@ -2637,7 +2637,7 @@
                 self.encoding = Utilities.writeEncodedFile(
                     fileName, txt, self.encoding,
                     forcedEncoding=editorConfigEncoding)
-        except (IOError, Utilities.CodingError, UnicodeError) as why:
+        except (OSError, Utilities.CodingError, UnicodeError) as why:
             E5MessageBox.critical(
                 self, self.tr('Save File'),
                 self.tr('<p>The file <b>{0}</b> could not be saved.<br/>'
--- a/eric6/QScintilla/ShellWindow.py	Sun Nov 01 11:17:06 2020 +0100
+++ b/eric6/QScintilla/ShellWindow.py	Sat Dec 05 12:29:26 2020 +0100
@@ -241,7 +241,8 @@
             'Restart the shell'))
         self.restartAct.setWhatsThis(self.tr(
             """<b>Restart</b>"""
-            """<p>Restart the shell for the currently selected language.</p>"""
+            """<p>Restart the shell for the currently selected"""
+            """ environment.</p>"""
         ))
         self.restartAct.triggered.connect(self.__shell.doRestart)
         self.fileActions.append(self.restartAct)
@@ -256,7 +257,7 @@
         self.clearRestartAct.setWhatsThis(self.tr(
             """<b>Restart and Clear</b>"""
             """<p>Clear the shell window and restart the shell for the"""
-            """ currently selected language.</p>"""
+            """ currently selected environment.</p>"""
         ))
         self.clearRestartAct.triggered.connect(self.__shell.doClearRestart)
         self.fileActions.append(self.clearRestartAct)
@@ -280,11 +281,9 @@
             self.copyActGrp, 'vm_edit_cut')
         self.cutAct.setStatusTip(QCoreApplication.translate(
             'ViewManager', 'Cut the selection'))
-        self.cutAct.setWhatsThis(QCoreApplication.translate(
-            'ViewManager',
+        self.cutAct.setWhatsThis(self.tr(
             """<b>Cut</b>"""
-            """<p>Cut the selected text of the current editor to the"""
-            """ clipboard.</p>"""
+            """<p>Cut the selected text to the clipboard.</p>"""
         ))
         self.cutAct.triggered.connect(self.__shell.cut)
         self.editActions.append(self.cutAct)
@@ -300,11 +299,9 @@
             self.copyActGrp, 'vm_edit_copy')
         self.copyAct.setStatusTip(QCoreApplication.translate(
             'ViewManager', 'Copy the selection'))
-        self.copyAct.setWhatsThis(QCoreApplication.translate(
-            'ViewManager',
+        self.copyAct.setWhatsThis(self.tr(
             """<b>Copy</b>"""
-            """<p>Copy the selected text of the current editor to the"""
-            """ clipboard.</p>"""
+            """<p>Copy the selected text to the clipboard.</p>"""
         ))
         self.copyAct.triggered.connect(self.__shell.copy)
         self.editActions.append(self.copyAct)
@@ -320,11 +317,9 @@
             self.copyActGrp, 'vm_edit_paste')
         self.pasteAct.setStatusTip(QCoreApplication.translate(
             'ViewManager', 'Paste the last cut/copied text'))
-        self.pasteAct.setWhatsThis(QCoreApplication.translate(
-            'ViewManager',
+        self.pasteAct.setWhatsThis(self.tr(
             """<b>Paste</b>"""
-            """<p>Paste the last cut/copied text from the clipboard to"""
-            """ the current editor.</p>"""
+            """<p>Paste the last cut/copied text from the clipboard.</p>"""
         ))
         self.pasteAct.triggered.connect(self.__shell.paste)
         self.editActions.append(self.pasteAct)
@@ -339,10 +334,9 @@
             self.copyActGrp, 'vm_edit_clear')
         self.clearAct.setStatusTip(QCoreApplication.translate(
             'ViewManager', 'Clear all text'))
-        self.clearAct.setWhatsThis(QCoreApplication.translate(
-            'ViewManager',
+        self.clearAct.setWhatsThis(self.tr(
             """<b>Clear</b>"""
-            """<p>Delete all text of the current editor.</p>"""
+            """<p>Delete all text.</p>"""
         ))
         self.clearAct.triggered.connect(self.__shell.clear)
         self.editActions.append(self.clearAct)
@@ -750,8 +744,8 @@
         self.searchAct.setWhatsThis(QCoreApplication.translate(
             'ViewManager',
             """<b>Search</b>"""
-            """<p>Search for some text in the current editor. A"""
-            """ dialog is shown to enter the searchtext and options"""
+            """<p>Search for some text in the shell window. A"""
+            """ dialog is shown to enter the search text and options"""
             """ for the search.</p>"""
         ))
         self.searchAct.triggered.connect(self.__showFind)
@@ -771,8 +765,8 @@
         self.searchNextAct.setWhatsThis(QCoreApplication.translate(
             'ViewManager',
             """<b>Search next</b>"""
-            """<p>Search the next occurrence of some text in the current"""
-            """ editor. The previously entered searchtext and options are"""
+            """<p>Search the next occurrence of some text in the shell"""
+            """ window. The previously entered search text and options are"""
             """ reused.</p>"""
         ))
         self.searchNextAct.triggered.connect(
@@ -792,8 +786,8 @@
         self.searchPrevAct.setWhatsThis(QCoreApplication.translate(
             'ViewManager',
             """<b>Search previous</b>"""
-            """<p>Search the previous occurrence of some text in the current"""
-            """ editor. The previously entered searchtext and options are"""
+            """<p>Search the previous occurrence of some text in the shell"""
+            """ window. The previously entered search text and options are"""
             """ reused.</p>"""
         ))
         self.searchPrevAct.triggered.connect(
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric6/Styles/eric6_Dark-SQL.e6h	Sat Dec 05 12:29:26 2020 +0100
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE HighlightingStyles SYSTEM "HighlightingStyles-6.0.dtd">
+<!-- Eric6 highlighting styles -->
+<!-- Saved: 2020-11-14, 18:10:34-->
+<!-- Author: Detlev Offenbach <detlev@die-offenbachs.de> -->
+<HighlightingStyles version="6.0">
+  <Lexer name="SQL">
+    <Style style="0" substyle="-1" color="#ffffff" paper="#262626" font="Hack,10,-1,5,50,0,0,0,0,0" eolfill="False">
+      <Description>Default</Description>
+    </Style>
+    <Style style="1" substyle="-1" color="#74cc66" paper="#262626" font="Hack,10,-1,5,50,0,0,0,0,0" eolfill="False">
+      <Description>Comment</Description>
+    </Style>
+    <Style style="2" substyle="-1" color="#74cc66" paper="#262626" font="Hack,10,-1,5,50,0,0,0,0,0" eolfill="False">
+      <Description>Comment line</Description>
+    </Style>
+    <Style style="3" substyle="-1" color="#cfcfcf" paper="#262626" font="Hack,10,-1,5,50,0,0,0,0,0" eolfill="False">
+      <Description>JavaDoc style comment</Description>
+    </Style>
+    <Style style="4" substyle="-1" color="#7fcfcf" paper="#262626" font="Hack,10,-1,5,50,0,0,0,0,0" eolfill="False">
+      <Description>Number</Description>
+    </Style>
+    <Style style="5" substyle="-1" color="#60a5ff" paper="#262626" font="Hack,10,-1,5,75,0,0,0,0,0" eolfill="False">
+      <Description>Keyword</Description>
+    </Style>
+    <Style style="6" substyle="-1" color="#c354c3" paper="#262626" font="Hack,10,-1,5,50,0,0,0,0,0" eolfill="False">
+      <Description>Double-quoted string</Description>
+    </Style>
+    <Style style="7" substyle="-1" color="#c354c3" paper="#262626" font="Hack,10,-1,5,50,0,0,0,0,0" eolfill="False">
+      <Description>Single-quoted string</Description>
+    </Style>
+    <Style style="8" substyle="-1" color="#e6e68c" paper="#262626" font="Hack,10,-1,5,50,0,0,0,0,0" eolfill="False">
+      <Description>SQL*Plus keyword</Description>
+    </Style>
+    <Style style="9" substyle="-1" color="#74cc66" paper="#474747" font="Hack,10,-1,5,50,0,0,0,0,0" eolfill="True">
+      <Description>SQL*Plus prompt</Description>
+    </Style>
+    <Style style="10" substyle="-1" color="#bab1a8" paper="#262626" font="Hack,10,-1,5,75,0,0,0,0,0" eolfill="False">
+      <Description>Operator</Description>
+    </Style>
+    <Style style="11" substyle="-1" color="#ffffff" paper="#262626" font="Hack,10,-1,5,50,0,0,0,0,0" eolfill="False">
+      <Description>Identifier</Description>
+    </Style>
+    <Style style="13" substyle="-1" color="#74cc66" paper="#262626" font="Hack,10,-1,5,50,0,0,0,0,0" eolfill="False">
+      <Description>SQL*Plus comment</Description>
+    </Style>
+    <Style style="15" substyle="-1" color="#74cc66" paper="#262626" font="Hack,10,-1,5,50,0,0,0,0,0" eolfill="False">
+      <Description># comment line</Description>
+    </Style>
+    <Style style="17" substyle="-1" color="#4c9aff" paper="#262626" font="Hack,10,-1,5,50,0,0,0,0,0" eolfill="False">
+      <Description>JavaDoc keyword</Description>
+    </Style>
+    <Style style="18" substyle="-1" color="#ff8040" paper="#262626" font="Hack,10,-1,5,50,0,0,0,0,0" eolfill="False">
+      <Description>JavaDoc keyword error</Description>
+    </Style>
+    <Style style="19" substyle="-1" color="#bb5cff" paper="#262626" font="Hack,10,-1,5,50,0,0,0,0,0" eolfill="False">
+      <Description>User defined 1</Description>
+    </Style>
+    <Style style="20" substyle="-1" color="#ff005d" paper="#262626" font="Hack,10,-1,5,50,0,0,0,0,0" eolfill="False">
+      <Description>User defined 2</Description>
+    </Style>
+    <Style style="21" substyle="-1" color="#ff6161" paper="#262626" font="Hack,10,-1,5,50,0,0,0,0,0" eolfill="False">
+      <Description>User defined 3</Description>
+    </Style>
+    <Style style="22" substyle="-1" color="#fb7cff" paper="#262626" font="Hack,10,-1,5,50,0,0,0,0,0" eolfill="False">
+      <Description>User defined 4</Description>
+    </Style>
+    <Style style="23" substyle="-1" color="#eaded2" paper="#262626" font="Hack,10,-1,5,50,0,0,0,0,0" eolfill="False">
+      <Description>Quoted identifier</Description>
+    </Style>
+    <Style style="24" substyle="-1" color="#eaded2" paper="#262626" font="Hack,10,-1,5,50,0,0,0,0,0" eolfill="False">
+      <Description>Quoted operator</Description>
+    </Style>
+  </Lexer>
+</HighlightingStyles>
--- a/eric6/Tasks/TaskViewer.py	Sun Nov 01 11:17:06 2020 +0100
+++ b/eric6/Tasks/TaskViewer.py	Sat Dec 05 12:29:26 2020 +0100
@@ -736,7 +736,7 @@
                 try:
                     text, encoding = Utilities.readEncodedFile(fn)
                     lines = text.splitlines()
-                except (UnicodeError, IOError):
+                except (UnicodeError, OSError):
                     count += 1
                     progress.setValue(count)
                     continue
@@ -852,7 +852,7 @@
             try:
                 text, encoding = Utilities.readEncodedFile(fn)
                 lines = text.splitlines()
-            except (UnicodeError, IOError):
+            except (UnicodeError, OSError):
                 continue
             
             # now search tasks and record them
--- a/eric6/UI/CompareDialog.py	Sun Nov 01 11:17:06 2020 +0100
+++ b/eric6/UI/CompareDialog.py	Sat Dec 05 12:29:26 2020 +0100
@@ -239,7 +239,7 @@
         try:
             with open(filename1, "r", encoding="utf-8") as f1:
                 lines1 = f1.readlines()
-        except IOError:
+        except OSError:
             E5MessageBox.critical(
                 self,
                 self.tr("Compare Files"),
@@ -252,7 +252,7 @@
         try:
             with open(filename2, "r", encoding="utf-8") as f2:
                 lines2 = f2.readlines()
-        except IOError:
+        except OSError:
             E5MessageBox.critical(
                 self,
                 self.tr("Compare Files"),
--- a/eric6/UI/DiffDialog.py	Sun Nov 01 11:17:06 2020 +0100
+++ b/eric6/UI/DiffDialog.py	Sat Dec 05 12:29:26 2020 +0100
@@ -140,7 +140,7 @@
                     f.write(txt)
                 except UnicodeError:
                     pass
-        except IOError as why:
+        except OSError as why:
             E5MessageBox.critical(
                 self, self.tr('Save Diff'),
                 self.tr(
@@ -155,12 +155,12 @@
         self.filename1 = Utilities.toNativeSeparators(self.file1Picker.text())
         try:
             filemtime1 = time.ctime(os.stat(self.filename1).st_mtime)
-        except IOError:
+        except OSError:
             filemtime1 = ""
         try:
             with open(self.filename1, "r", encoding="utf-8") as f1:
                 lines1 = f1.readlines()
-        except IOError:
+        except OSError:
             E5MessageBox.critical(
                 self,
                 self.tr("Compare Files"),
@@ -172,12 +172,12 @@
         self.filename2 = Utilities.toNativeSeparators(self.file2Picker.text())
         try:
             filemtime2 = time.ctime(os.stat(self.filename2).st_mtime)
-        except IOError:
+        except OSError:
             filemtime2 = ""
         try:
             with open(self.filename2, "r", encoding="utf-8") as f2:
                 lines2 = f2.readlines()
-        except IOError:
+        except OSError:
             E5MessageBox.critical(
                 self,
                 self.tr("Compare Files"),
--- a/eric6/UI/EmailDialog.py	Sun Nov 01 11:17:06 2020 +0100
+++ b/eric6/UI/EmailDialog.py	Sat Dec 05 12:29:26 2020 +0100
@@ -10,7 +10,6 @@
 import os
 import mimetypes
 import smtplib
-import socket
 
 from PyQt5.QtCore import Qt, pyqtSlot
 from PyQt5.QtGui import QTextOption
@@ -330,12 +329,12 @@
                 try:
                     server.login(Preferences.getUser("MailServerUser"),
                                  password)
-                except (smtplib.SMTPException, socket.error) as e:
+                except (smtplib.SMTPException, OSError) as e:
                     if isinstance(e, smtplib.SMTPResponseException):
                         errorStr = e.smtp_error.decode()
                     elif isinstance(e, OSError):
                         errorStr = e.strerror
-                    elif isinstance(e, socket.error):
+                    elif isinstance(e, OSError):
                         errorStr = e[1]
                     else:
                         errorStr = str(e)
@@ -355,12 +354,12 @@
                 server.sendmail(Preferences.getUser("Email"), self.__toAddress,
                                 msg)
                 server.quit()
-        except (smtplib.SMTPException, socket.error) as e:
+        except (smtplib.SMTPException, OSError) as e:
             if isinstance(e, smtplib.SMTPResponseException):
                 errorStr = e.smtp_error.decode()
             elif isinstance(e, smtplib.SMTPException):
                 errorStr = str(e)
-            elif isinstance(e, socket.error):
+            elif isinstance(e, OSError):
                 errorStr = e.strerror
             else:
                 errorStr = str(e)
--- a/eric6/UI/ErrorLogDialog.py	Sun Nov 01 11:17:06 2020 +0100
+++ b/eric6/UI/ErrorLogDialog.py	Sat Dec 05 12:29:26 2020 +0100
@@ -52,7 +52,7 @@
             with open(logFile, "r", encoding="utf-8") as f:
                 txt = f.read()
             self.logEdit.setPlainText(txt)
-        except IOError:
+        except OSError:
             pass
     
     @pyqtSlot()
--- a/eric6/UI/FindFileDialog.py	Sun Nov 01 11:17:06 2020 +0100
+++ b/eric6/UI/FindFileDialog.py	Sat Dec 05 12:29:26 2020 +0100
@@ -462,7 +462,7 @@
             try:
                 text, encoding, hashStr = Utilities.readEncodedFileWithHash(fn)
                 lines = text.splitlines(True)
-            except (UnicodeError, IOError):
+            except (UnicodeError, OSError):
                 progress += 1
                 self.findProgress.setValue(progress)
                 continue
@@ -625,7 +625,7 @@
                         Utilities.readEncodedFileWithHash(fn)
                     )
                     lines = text.splitlines(True)
-                except (UnicodeError, IOError) as err:
+                except (UnicodeError, OSError) as err:
                     E5MessageBox.critical(
                         self,
                         self.tr("Replace in Files"),
@@ -666,7 +666,7 @@
                 txt = "".join(lines)
                 try:
                     Utilities.writeEncodedFile(fn, txt, encoding)
-                except (IOError, Utilities.CodingError, UnicodeError) as err:
+                except (OSError, Utilities.CodingError, UnicodeError) as err:
                     E5MessageBox.critical(
                         self,
                         self.tr("Replace in Files"),
--- a/eric6/UI/InstallInfoDialog.py	Sun Nov 01 11:17:06 2020 +0100
+++ b/eric6/UI/InstallInfoDialog.py	Sat Dec 05 12:29:26 2020 +0100
@@ -94,7 +94,7 @@
                     else self.tr("unknown"))
             
             self.__updateButton.setEnabled(bool(self.__info["exe"]))
-        except EnvironmentError as err:
+        except OSError as err:
             E5MessageBox.critical(
                 self,
                 self.tr("Load Install Information"),
@@ -183,7 +183,7 @@
                 json.dump(self.__info, infoFile, indent=2)
             self.__edited = False
             self.editButton.setChecked(False)
-        except EnvironmentError as err:
+        except OSError as err:
             E5MessageBox.critical(
                 self,
                 self.tr("Save Install Information"),
--- a/eric6/UI/Previewers/PreviewerHTML.py	Sun Nov 01 11:17:06 2020 +0100
+++ b/eric6/UI/Previewers/PreviewerHTML.py	Sat Dec 05 12:29:26 2020 +0100
@@ -499,7 +499,7 @@
                 try:
                     with open(incFile, "r") as f:
                         incTxt = f.read()
-                except (IOError, OSError):
+                except OSError:
                     # remove SSI include
                     incTxt = ""
             else:
--- a/eric6/UI/UserInterface.py	Sun Nov 01 11:17:06 2020 +0100
+++ b/eric6/UI/UserInterface.py	Sat Dec 05 12:29:26 2020 +0100
@@ -1499,7 +1499,7 @@
                             installInfo["eric"], os.W_OK)
                         with open(installInfoFile, "w") as infoFile:
                             json.dump(installInfo, infoFile, indent=2)
-                    except EnvironmentError:
+                    except OSError:
                         # ignore this
                         pass
         else:
@@ -5007,7 +5007,7 @@
                             ' is zero length.</p>')
                         .format(fn))
                     return
-            except EnvironmentError:
+            except OSError:
                 E5MessageBox.critical(
                     self,
                     self.tr('Problem'),
@@ -5077,7 +5077,7 @@
                             ' is zero length.</p>')
                         .format(fn))
                     return
-            except EnvironmentError:
+            except OSError:
                 E5MessageBox.critical(
                     self,
                     self.tr('Problem'),
@@ -5247,7 +5247,7 @@
                             ' is zero length.</p>')
                         .format(fn))
                     return
-            except EnvironmentError:
+            except OSError:
                 E5MessageBox.critical(
                     self,
                     self.tr('Problem'),
@@ -5303,7 +5303,7 @@
                                     ' is zero length.</p>')
                                 .format(fn))
                             return
-                except EnvironmentError:
+                except OSError:
                     if not ignore:
                         E5MessageBox.critical(
                             self,
--- a/eric6/Utilities/BackgroundClient.py	Sun Nov 01 11:17:06 2020 +0100
+++ b/eric6/Utilities/BackgroundClient.py	Sat Dec 05 12:29:26 2020 +0100
@@ -113,7 +113,7 @@
         self.connection.setblocking(False)
         try:
             data = self.connection.recv(length, socket.MSG_PEEK)
-        except socket.error:
+        except OSError:
             pass
         finally:
             self.connection.setblocking(True)
@@ -185,7 +185,7 @@
                     ret = str(ret)
                 
                 self.__send(fx, fn, ret)
-        except socket.error:
+        except OSError:
             pass
         except Exception:
             exctype, excval, exctb = sys.exc_info()
--- a/eric6/Utilities/ClassBrowsers/idlclbr.py	Sun Nov 01 11:17:06 2020 +0100
+++ b/eric6/Utilities/ClassBrowsers/idlclbr.py	Sat Dec 05 12:29:26 2020 +0100
@@ -229,7 +229,7 @@
 
     try:
         src = Utilities.readEncodedFile(file)[0]
-    except (UnicodeError, IOError):
+    except (UnicodeError, OSError):
         # can't do anything with this module
         _modules[module] = {}
         return {}
--- a/eric6/Utilities/ClassBrowsers/jsclbr.py	Sun Nov 01 11:17:06 2020 +0100
+++ b/eric6/Utilities/ClassBrowsers/jsclbr.py	Sat Dec 05 12:29:26 2020 +0100
@@ -305,7 +305,7 @@
 
     try:
         src = Utilities.readEncodedFile(file)[0]
-    except (UnicodeError, IOError):
+    except (UnicodeError, OSError):
         # can't do anything with this module
         _modules[module] = {}
         return {}
--- a/eric6/Utilities/ClassBrowsers/protoclbr.py	Sun Nov 01 11:17:06 2020 +0100
+++ b/eric6/Utilities/ClassBrowsers/protoclbr.py	Sat Dec 05 12:29:26 2020 +0100
@@ -220,7 +220,7 @@
 
     try:
         src = Utilities.readEncodedFile(file)[0]
-    except (UnicodeError, IOError):
+    except (UnicodeError, OSError):
         # can't do anything with this module
         _modules[module] = {}
         return {}
--- a/eric6/Utilities/ClassBrowsers/pyclbr.py	Sun Nov 01 11:17:06 2020 +0100
+++ b/eric6/Utilities/ClassBrowsers/pyclbr.py	Sat Dec 05 12:29:26 2020 +0100
@@ -377,7 +377,7 @@
 
     try:
         src = Utilities.readEncodedFile(file)[0]
-    except (UnicodeError, IOError):
+    except (UnicodeError, OSError):
         # can't do anything with this module
         _modules[module] = {}
         return {}
--- a/eric6/Utilities/ClassBrowsers/rbclbr.py	Sun Nov 01 11:17:06 2020 +0100
+++ b/eric6/Utilities/ClassBrowsers/rbclbr.py	Sat Dec 05 12:29:26 2020 +0100
@@ -276,7 +276,7 @@
 
     try:
         src = Utilities.readEncodedFile(file)[0]
-    except (UnicodeError, IOError):
+    except (UnicodeError, OSError):
         # can't do anything with this module
         _modules[module] = {}
         return {}
--- a/eric6/Utilities/ModuleParser.py	Sun Nov 01 11:17:06 2020 +0100
+++ b/eric6/Utilities/ModuleParser.py	Sat Dec 05 12:29:26 2020 +0100
@@ -1597,7 +1597,7 @@
     try:
         src = Utilities.readEncodedFile(file)[0]
         mod.scan(src)
-    except (UnicodeError, IOError):
+    except (UnicodeError, OSError):
         pass
     if caching:
         _modules[modname] = mod
--- a/eric6/Utilities/__init__.py	Sun Nov 01 11:17:06 2020 +0100
+++ b/eric6/Utilities/__init__.py	Sat Dec 05 12:29:26 2020 +0100
@@ -78,21 +78,40 @@
 
 supportedCodecs = [
     'utf-8',
-    'iso8859-1', 'iso8859-15', 'iso8859-2', 'iso8859-3',
-    'iso8859-4', 'iso8859-5', 'iso8859-6', 'iso8859-7',
-    'iso8859-8', 'iso8859-9', 'iso8859-10', 'iso8859-11',
-    'iso8859-13', 'iso8859-14', 'iso8859-16', 'latin-1',
-    'koi8-r', 'koi8-u',
-    'utf-16', 'utf-32',
-    'cp037', 'cp424', 'cp437', 'cp500', 'cp737', 'cp775',
-    'cp850', 'cp852', 'cp855', 'cp856', 'cp857', 'cp860',
-    'cp861', 'cp862', 'cp863', 'cp864', 'cp865', 'cp866',
-    'cp869', 'cp874', 'cp875', 'cp932', 'cp949', 'cp950',
-    'cp1006', 'cp1026', 'cp1140', 'cp1250', 'cp1251',
-    'cp1252', 'cp1253', 'cp1254', 'cp1255', 'cp1256',
-    'cp1257', 'cp1258',
-    'gb2312', 'gb18030',
-    'ascii'
+    
+    'iso-8859-1', 'iso-8859-2', 'iso-8859-3',
+    'iso-8859-4', 'iso-8859-5', 'iso-8859-6', 'iso-8859-7',
+    'iso-8859-8', 'iso-8859-9', 'iso-8859-10', 'iso-8859-11',
+    'iso-8859-13', 'iso-8859-14', 'iso-8859-15', 'iso-8859-16',
+    'latin-1',
+    
+    'koi8-r', 'koi8-t', 'koi8-u',
+    
+    'utf-7',
+    'utf-16', 'utf-16-be', 'utf-16-le',
+    'utf-32', 'utf-32-be', 'utf-32-le',
+    
+    'cp037', 'cp273', 'cp424', 'cp437', 'cp500', 'cp720',
+    'cp737', 'cp775', 'cp850', 'cp852', 'cp855', 'cp856',
+    'cp857', 'cp858', 'cp860', 'cp861', 'cp862', 'cp863',
+    'cp864', 'cp865', 'cp866', 'cp869', 'cp874', 'cp875',
+    'cp932', 'cp949', 'cp950', 'cp1006', 'cp1026', 'cp1125',
+    'cp1140',
+    
+    'windows-1250', 'windows-1251', 'windows-1252', 'windows-1253',
+    'windows-1254', 'windows-1255', 'windows-1256', 'windows-1257',
+    'windows-1258',
+    
+    'gb2312', 'hz', 'gb18030', 'gbk',
+    
+    'iso-2022-jp', 'iso-2022-jp-1', 'iso-2022-jp-2', 'iso-2022-jp-2004',
+    'iso-2022-jp-3', 'iso-2022-jp-ext', 'iso-2022-kr',
+    
+    'mac-cyrillic', 'mac-greek', 'mac-iceland', 'mac-latin2',
+    'mac-roman', 'mac-turkish',
+    
+    'ascii',
+    'big5-tw', 'big5-hkscs',
 ]
 
 
@@ -661,7 +680,7 @@
     """
     try:
         source, encoding = readEncodedFile(filename)
-    except (UnicodeError, IOError):
+    except (UnicodeError, OSError):
         return {}
     
     return extractFlags(source)
@@ -724,7 +743,7 @@
     @return path with converted separator characters (string)
     """
     return QDir.toNativeSeparators(path)
-    
+
 
 def fromNativeSeparators(path):
     """
@@ -734,7 +753,7 @@
     @return path with converted separator characters (string)
     """
     return QDir.fromNativeSeparators(path)
-    
+
 
 def normcasepath(path):
     """
@@ -745,17 +764,7 @@
     @return case normalized path (string)
     """
     return os.path.normcase(os.path.normpath(path))
-    
 
-def normabspath(path):
-    """
-    Function returning a normalized, absolute path.
-    
-    @param path file path (string)
-    @return absolute, normalized path (string)
-    """
-    return os.path.abspath(path)
-    
 
 def normcaseabspath(path):
     """
@@ -766,18 +775,18 @@
     @return absolute, normalized path (string)
     """
     return os.path.normcase(os.path.abspath(path))
-    
+
 
 def normjoinpath(a, *p):
     """
     Function returning a normalized path of the joined parts passed into it.
     
     @param a first path to be joined (string)
-    @param p variable number of path parts to be joind (string)
+    @param p variable number of path parts to be joined (string)
     @return normalized path (string)
     """
     return os.path.normpath(os.path.join(a, *p))
-    
+
 
 def normabsjoinpath(a, *p):
     """
@@ -789,30 +798,6 @@
     @return absolute, normalized path (string)
     """
     return os.path.abspath(os.path.join(a, *p))
-    
-
-def relpath(path, start=os.path.curdir):
-    """
-    Return a relative version of a path.
-    
-    @param path path to make relative (string)
-    @param start path to make relative from (string)
-    @return relative path (string)
-    @exception ValueError raised to indicate an invalid path
-    """
-    if not path:
-        raise ValueError("no path specified")
-
-    start_list = os.path.abspath(start).split(os.path.sep)
-    path_list = os.path.abspath(path).split(os.path.sep)
-
-    # Work out how much of the filepath is shared by start and path.
-    i = len(os.path.commonprefix([start_list, path_list]))
-
-    rel_list = [os.path.pardir] * (len(start_list) - i) + path_list[i:]
-    if not rel_list:
-        return os.path.curdir
-    return os.path.join(*rel_list)
 
 
 def isinpath(file):
@@ -855,8 +840,8 @@
     if start:
         if path == start:
             return True
-        elif normcasepath(toNativeSeparators(path)).startswith(
-                normcasepath(toNativeSeparators(start + "/"))):
+        elif normcasepath(path).startswith(
+                normcasepath(start + "/")):
             return True
         else:
             return False
@@ -864,27 +849,6 @@
         return False
 
 
-def relativePath(path, start):
-    """
-    Function to convert a file path to a path relative to a start path.
-    
-    @param path file or directory name to convert (string)
-    @param start start path (string)
-    @return relative path or unchanged path, if path does not start with
-        the start path (string)
-    """
-    if startswithPath(path, start):
-        if path == start:
-            return ""
-        else:
-            if start.endswith(("/", "\\")):
-                return path[len(start):]
-            else:
-                return path[len(start) + 1:]
-    else:
-        return path
-
-
 def relativeUniversalPath(path, start):
     """
     Function to convert a file path to a path relative to a start path
@@ -895,7 +859,7 @@
     @return relative path or unchanged path, if path does not start with
         the start path with universal separators (string)
     """
-    return fromNativeSeparators(relativePath(path, start))
+    return fromNativeSeparators(os.path.relpath(path, start))
 
 
 def absolutePath(path, start):
@@ -908,7 +872,7 @@
     @return absolute path (string)
     """
     if not os.path.isabs(path):
-        path = os.path.join(start, path)
+        path = os.path.normpath(os.path.join(start, path))
     return path
 
 
@@ -922,7 +886,7 @@
     @return absolute path with native separators (string)
     """
     if not os.path.isabs(path):
-        path = toNativeSeparators(os.path.join(start, path))
+        path = toNativeSeparators(os.path.normpath(os.path.join(start, path)))
     return path
 
 
@@ -1250,7 +1214,7 @@
     """
     try:
         names = os.listdir(path)
-    except EnvironmentError:
+    except OSError:
         return []
 
     dirs = []
@@ -2039,7 +2003,7 @@
                 try:
                     with open(rfile, "r") as f:
                         lines = f.read().splitlines()
-                except IOError:
+                except OSError:
                     continue
                 
                 info.append('  {0}'.format(rfile))
--- a/eric6/VCS/ProjectHelper.py	Sun Nov 01 11:17:06 2020 +0100
+++ b/eric6/VCS/ProjectHelper.py	Sat Dec 05 12:29:26 2020 +0100
@@ -246,7 +246,7 @@
                 if not os.path.isdir(projectdir):
                     try:
                         os.makedirs(projectdir)
-                    except EnvironmentError:
+                    except OSError:
                         E5MessageBox.critical(
                             self.parent(),
                             QCoreApplication.translate(
--- a/eric6/ViewManager/ViewManager.py	Sun Nov 01 11:17:06 2020 +0100
+++ b/eric6/ViewManager/ViewManager.py	Sat Dec 05 12:29:26 2020 +0100
@@ -4495,7 +4495,7 @@
         
         @param prog name of file to be opened (string)
         """
-        prog = Utilities.normabspath(prog)
+        prog = os.path.abspath(prog)
         # Open up the new files.
         self.openSourceFile(prog)
 
@@ -4712,7 +4712,7 @@
         try:
             newWin, editor = self.getEditor(fn, filetype=filetype,
                                             addNext=addNext, indexes=indexes)
-        except (IOError, UnicodeDecodeError):
+        except (OSError, UnicodeDecodeError):
             return None
         
         if newWin:
@@ -4881,7 +4881,7 @@
         """
         try:
             newWin, self.currentEditor = self.getEditor(fn)
-        except (IOError, UnicodeDecodeError):
+        except (OSError, UnicodeDecodeError):
             return
         
         enc = self.currentEditor.getEncoding()
@@ -6585,7 +6585,7 @@
             try:
                 with open(dictionaryFile, "r", encoding="utf-8") as f:
                     data = f.read()
-            except (IOError, OSError) as err:
+            except OSError as err:
                 E5MessageBox.critical(
                     self.ui,
                     QCoreApplication.translate(
@@ -6614,7 +6614,7 @@
                 try:
                     with open(dictionaryFile, "w", encoding="utf-8") as f:
                         f.write(data)
-                except (IOError, OSError) as err:
+                except OSError as err:
                     E5MessageBox.critical(
                         self.ui,
                         QCoreApplication.translate(
--- a/eric6/VirtualEnv/VirtualenvConfigurationDialog.py	Sun Nov 01 11:17:06 2020 +0100
+++ b/eric6/VirtualEnv/VirtualenvConfigurationDialog.py	Sat Dec 05 12:29:26 2020 +0100
@@ -171,6 +171,16 @@
             self.venvStack.setCurrentWidget(self.venvPage)
     
     @pyqtSlot(str)
+    def on_nameEdit_textChanged(self, txt):
+        """
+        Private slot handling a change of the virtual environment name.
+        
+        @param txt name of the virtual environment
+        @type str
+        """
+        self.__updateOK()
+    
+    @pyqtSlot(str)
     def on_targetDirectoryPicker_textChanged(self, txt):
         """
         Private slot handling a change of the target directory.
--- a/eric6/VirtualEnv/VirtualenvExecDialog.py	Sun Nov 01 11:17:06 2020 +0100
+++ b/eric6/VirtualEnv/VirtualenvExecDialog.py	Sat Dec 05 12:29:26 2020 +0100
@@ -268,7 +268,7 @@
                     f.write("\n")
                     f.write(self.tr("Errors:\n"))
                     f.write(errtxt)
-        except (IOError, OSError) as err:
+        except OSError as err:
             self.__logError(
                 self.tr("""The logfile '{0}' could not be written.\n"""
                         """Reason: {1}\n""").format(logFile, str(err)))
@@ -295,7 +295,7 @@
         try:
             with open(script, "w", encoding="utf-8") as f:
                 f.write(txt)
-        except (IOError, OSError) as err:
+        except OSError as err:
             self.__logError(
                 self.tr("""The script file '{0}' could not be written.\n"""
                         """Reason: {1}\n""").format(script, str(err)))
--- a/eric6/WebBrowser/AdBlock/AdBlockSubscription.py	Sun Nov 01 11:17:06 2020 +0100
+++ b/eric6/WebBrowser/AdBlock/AdBlockSubscription.py	Sat Dec 05 12:29:26 2020 +0100
@@ -473,7 +473,7 @@
         try:
             with open(fileName, "r", encoding="utf-8") as f:
                 data = f.read()
-        except (IOError, OSError):
+        except (OSError, OSError):
             return False
         
         match = re.search(self.__checksumRe, data)
--- a/eric6/WebBrowser/Bookmarks/BookmarksImporters/ChromeImporter.py	Sun Nov 01 11:17:06 2020 +0100
+++ b/eric6/WebBrowser/Bookmarks/BookmarksImporters/ChromeImporter.py	Sat Dec 05 12:29:26 2020 +0100
@@ -123,7 +123,7 @@
         try:
             with open(self.__fileName, "r", encoding="utf-8") as f:
                 contents = json.load(f)
-        except IOError as err:
+        except OSError as err:
             self._error = True
             self._errorString = self.tr(
                 "File '{0}' cannot be read.\nReason: {1}"
--- a/eric6/WebBrowser/Bookmarks/BookmarksImporters/IExplorerImporter.py	Sun Nov 01 11:17:06 2020 +0100
+++ b/eric6/WebBrowser/Bookmarks/BookmarksImporters/IExplorerImporter.py	Sat Dec 05 12:29:26 2020 +0100
@@ -126,7 +126,7 @@
                     try:
                         with open(path, "r") as f:
                             contents = f.read()
-                    except IOError:
+                    except OSError:
                         continue
                     url = ""
                     for line in contents.splitlines():
--- a/eric6/WebBrowser/Bookmarks/BookmarksImporters/OperaImporter.py	Sun Nov 01 11:17:06 2020 +0100
+++ b/eric6/WebBrowser/Bookmarks/BookmarksImporters/OperaImporter.py	Sat Dec 05 12:29:26 2020 +0100
@@ -100,7 +100,7 @@
         try:
             with open(self.__fileName, "r", encoding="utf-8") as f:
                 contents = f.read()
-        except IOError as err:
+        except OSError as err:
             self._error = True
             self._errorString = self.tr(
                 "File '{0}' cannot be read.\nReason: {1}"
--- a/eric6/WebBrowser/Bookmarks/BookmarksImporters/SafariImporter.py	Sun Nov 01 11:17:06 2020 +0100
+++ b/eric6/WebBrowser/Bookmarks/BookmarksImporters/SafariImporter.py	Sat Dec 05 12:29:26 2020 +0100
@@ -102,7 +102,7 @@
         try:
             with open(self.__fileName, "rb") as f:
                 bookmarksDict = plistlib.load(f)
-        except (plistlib.InvalidFileException, EnvironmentError) as err:
+        except (plistlib.InvalidFileException, OSError) as err:
             self._error = True
             self._errorString = self.tr(
                 "Bookmarks file cannot be read.\nReason: {0}".format(str(err)))
--- a/eric6/WebBrowser/GreaseMonkey/GreaseMonkeyDownloader.py	Sun Nov 01 11:17:06 2020 +0100
+++ b/eric6/WebBrowser/GreaseMonkey/GreaseMonkeyDownloader.py	Sat Dec 05 12:29:26 2020 +0100
@@ -90,7 +90,7 @@
         try:
             with open(self.__fileName, "w", encoding="utf-8") as f:
                 f.write(response)
-        except (IOError, OSError):
+        except OSError:
             self.error.emit()
             return
         
@@ -145,7 +145,7 @@
         try:
             with open(self.__fileName, "w", encoding="utf-8") as f:
                 f.write(response)
-        except (IOError, OSError):
+        except OSError:
             self.error.emit()
             return
         
--- a/eric6/WebBrowser/GreaseMonkey/GreaseMonkeyManager.py	Sun Nov 01 11:17:06 2020 +0100
+++ b/eric6/WebBrowser/GreaseMonkey/GreaseMonkeyManager.py	Sat Dec 05 12:29:26 2020 +0100
@@ -130,7 +130,7 @@
             if deleteScript:
                 try:
                     os.remove(fileName)
-                except (IOError, OSError):
+                except OSError:
                     # ignore
                     pass
     
@@ -177,7 +177,7 @@
                 try:
                     with open(fileName, "r", encoding="utf-8") as f:
                         source = f.read().strip()
-                except (IOError, OSError):
+                except OSError:
                     source = ""
                 if source:
                     script += source + "\n"
--- a/eric6/WebBrowser/GreaseMonkey/GreaseMonkeyScript.py	Sun Nov 01 11:17:06 2020 +0100
+++ b/eric6/WebBrowser/GreaseMonkey/GreaseMonkeyScript.py	Sat Dec 05 12:29:26 2020 +0100
@@ -276,7 +276,7 @@
         try:
             with open(self.__fileName, "r", encoding="utf-8") as f:
                 fileData = f.read()
-        except (IOError, OSError):
+        except OSError:
             # silently ignore because it shouldn't happen
             return
         
--- a/eric6/WebBrowser/Network/ProtocolHandlerManager.py	Sun Nov 01 11:17:06 2020 +0100
+++ b/eric6/WebBrowser/Network/ProtocolHandlerManager.py	Sat Dec 05 12:29:26 2020 +0100
@@ -108,7 +108,7 @@
                     url = QUrl(urlStr)
                     self.__protocolHandlers[scheme] = url
                     self.__registerHandler(scheme, url)
-        except (IOError, OSError):
+        except OSError:
             # ignore issues silently
             pass
     
--- a/eric6/WebBrowser/Session/SessionManager.py	Sun Nov 01 11:17:06 2020 +0100
+++ b/eric6/WebBrowser/Session/SessionManager.py	Sat Dec 05 12:29:26 2020 +0100
@@ -228,7 +228,7 @@
                 sessionData = json.load(sessionFile)
             if not cls.isValidSession(sessionData):
                 sessionData = {}
-        except (IOError, OSError):
+        except OSError:
             sessionData = {}
         
         return sessionData
--- a/eric6/WebBrowser/Sync/DirectorySyncHandler.py	Sun Nov 01 11:17:06 2020 +0100
+++ b/eric6/WebBrowser/Sync/DirectorySyncHandler.py	Sat Dec 05 12:29:26 2020 +0100
@@ -94,7 +94,7 @@
                              self._remoteFiles[type_]), "rb"
             ) as f:
                 data = f.read()
-        except IOError as err:
+        except OSError as err:
             self.syncStatus.emit(
                 type_,
                 self.tr("Cannot read remote file.\n{0}").format(str(err)))
@@ -132,7 +132,7 @@
                 ) as f:
                     f.write(bytes(data))
                     f.close()
-            except IOError as err:
+            except OSError as err:
                 self.syncStatus.emit(
                     type_,
                     self.tr("Cannot write remote file.\n{0}").format(
--- a/eric6/WebBrowser/Sync/FtpSyncHandler.py	Sun Nov 01 11:17:06 2020 +0100
+++ b/eric6/WebBrowser/Sync/FtpSyncHandler.py	Sat Dec 05 12:29:26 2020 +0100
@@ -409,5 +409,5 @@
                 code = err.args[0].strip()[:3]
                 if code == "421":
                     self.__connected = False
-            except IOError:
+            except OSError:
                 self.__connected = False
--- a/eric6/WebBrowser/Sync/SyncHandler.py	Sun Nov 01 11:17:06 2020 +0100
+++ b/eric6/WebBrowser/Sync/SyncHandler.py	Sat Dec 05 12:29:26 2020 +0100
@@ -210,7 +210,7 @@
             try:
                 with open(fileName, "rb") as inputFile:
                     data = inputFile.read()
-            except IOError:
+            except OSError:
                 return QByteArray()
             
             if (
@@ -275,5 +275,5 @@
             if timestamp > 0:
                 os.utime(fileName, (timestamp, timestamp))
             return True, ""
-        except IOError as error:
+        except OSError as error:
             return False, str(error)
--- a/eric6/WebBrowser/Tools/WebIconProvider.py	Sun Nov 01 11:17:06 2020 +0100
+++ b/eric6/WebBrowser/Tools/WebIconProvider.py	Sat Dec 05 12:29:26 2020 +0100
@@ -90,7 +90,7 @@
             try:
                 with open(filename, "r") as f:
                     db = json.load(f)
-            except (IOError, OSError):
+            except OSError:
                 # ignore silentyl
                 db = {}
             
@@ -123,7 +123,7 @@
             try:
                 with open(filename, "w") as f:
                     json.dump(db, f)
-            except (IOError, OSError):
+            except OSError:
                 # ignore silentyl
                 pass
     
--- a/eric6/WebBrowser/WebBrowserWindow.py	Sun Nov 01 11:17:06 2020 +0100
+++ b/eric6/WebBrowser/WebBrowserWindow.py	Sat Dec 05 12:29:26 2020 +0100
@@ -12,8 +12,8 @@
 import sys
 
 from PyQt5.QtCore import (
-    pyqtSlot, pyqtSignal, Qt, QByteArray, QSize, QTimer, QUrl, QTextCodec,
-    QProcess, QEvent, QFileInfo
+    pyqtSlot, pyqtSignal, Qt, QByteArray, QSize, QTimer, QUrl, QProcess,
+    QEvent, QFileInfo
 )
 from PyQt5.QtGui import QDesktopServices, QKeySequence, QFont, QFontMetrics
 from PyQt5.QtWidgets import (
@@ -4147,7 +4147,8 @@
         """
         return self.__navigationBar.searchEdit().openSearchManager()
     
-    def __createTextEncodingAction(self, codec, defaultCodec, parentMenu):
+    def __createTextEncodingAction(self, codec, defaultCodec, parentMenu,
+                                   name=None):
         """
         Private method to create an action for the text encoding menu.
         
@@ -4157,8 +4158,13 @@
         @type str
         @param parentMenu reference to the parent menu
         @type QMenu
-        """
-        act = QAction(codec, parentMenu)
+        @param name name for the action
+        @type str
+        """
+        if name:
+            act = QAction(name, parentMenu)
+        else:
+            act = QAction(codec, parentMenu)
         act.setData(codec)
         act.setCheckable(True)
         if defaultCodec == codec:
@@ -4192,55 +4198,45 @@
         """
         self.__textEncodingMenu.clear()
         
-        codecs = []
-        for mib in QTextCodec.availableMibs():
-            codec = str(QTextCodec.codecForMib(mib).name(),
-                        encoding="utf-8").lower()
-            if codec not in codecs:
-                codecs.append(codec)
-        codecs.sort()
-        
         defaultTextEncoding = self.webSettings().defaultTextEncoding().lower()
-        if defaultTextEncoding in codecs:
+        if defaultTextEncoding in Utilities.supportedCodecs:
             currentCodec = defaultTextEncoding
         else:
-            currentCodec = "system"
+            currentCodec = ""
         
         isoCodecs = []
         winCodecs = []
-        isciiCodecs = []
         uniCodecs = []
-        ibmCodecs = []
+        cpCodecs = []
+        macCodecs = []
         otherCodecs = []
         
-        for codec in codecs:
-            if codec.startswith(("iso", "latin")):
+        for codec in sorted(Utilities.supportedCodecs):
+            if codec.startswith(("iso-", "latin")):
                 isoCodecs.append(codec)
-            elif codec.startswith(("windows")):
+            elif codec.startswith(("windows-")):
                 winCodecs.append(codec)
-            elif codec.startswith("iscii"):
-                isciiCodecs.append(codec)
-            elif codec.startswith("utf"):
+            elif codec.startswith("utf-"):
                 uniCodecs.append(codec)
-            elif codec.startswith(("ibm")):
-                ibmCodecs.append(codec)
-            elif codec == "system":
-                self.__createTextEncodingAction(codec, currentCodec,
-                                                self.__textEncodingMenu)
+            elif codec.startswith("cp"):
+                cpCodecs.append(codec)
+            elif codec.startswith("mac-"):
+                macCodecs.append(codec)
             else:
                 otherCodecs.append(codec)
         
-        if not self.__textEncodingMenu.isEmpty():
-            self.__textEncodingMenu.addSeparator()
+        self.__createTextEncodingAction(
+            "", currentCodec, self.__textEncodingMenu, name=self.tr("System"))
+        self.__textEncodingMenu.addSeparator()
         self.__createTextEncodingSubmenu(self.tr("ISO"), isoCodecs,
                                          self.__textEncodingMenu)
         self.__createTextEncodingSubmenu(self.tr("Unicode"), uniCodecs,
                                          self.__textEncodingMenu)
         self.__createTextEncodingSubmenu(self.tr("Windows"), winCodecs,
                                          self.__textEncodingMenu)
-        self.__createTextEncodingSubmenu(self.tr("ISCII"), isciiCodecs,
+        self.__createTextEncodingSubmenu(self.tr("IBM"), cpCodecs,
                                          self.__textEncodingMenu)
-        self.__createTextEncodingSubmenu(self.tr("IBM"), ibmCodecs,
+        self.__createTextEncodingSubmenu(self.tr("Apple"), macCodecs,
                                          self.__textEncodingMenu)
         self.__createTextEncodingSubmenu(self.tr("Other"), otherCodecs,
                                          self.__textEncodingMenu)
--- a/eric6/eric6.py	Sun Nov 01 11:17:06 2020 +0100
+++ b/eric6/eric6.py	Sat Dec 05 12:29:26 2020 +0100
@@ -205,7 +205,7 @@
         with open(logFile, "w", encoding="utf-8") as f:
             f.write(msg)
             f.write(versionInfo)
-    except IOError:
+    except OSError:
         pass
     
     if inMainLoop is None:
@@ -369,13 +369,12 @@
             disabledPlugins.append(pluginName)
     for arg in sys.argv:
         if arg.startswith("--plugin=") and sys.argv.index(arg) < ddindex:
-            import Utilities
             # extract the plugin development option
             pluginFile = arg.replace("--plugin=", "").replace('"', "")
             sys.argv.remove(arg)
             ddindex -= 1
             pluginFile = os.path.expanduser(pluginFile)
-            pluginFile = Utilities.normabspath(pluginFile)
+            pluginFile = os.path.abspath(pluginFile)
             break
     
     # is there a set of filenames or options on the command line,
--- a/eric6/eric6_api.py	Sun Nov 01 11:17:06 2020 +0100
+++ b/eric6/eric6_api.py	Sat Dec 05 12:29:26 2020 +0100
@@ -276,7 +276,7 @@
                         api = apiGenerator.genAPI(True, basePackage,
                                                   includePrivate)
                         bases = apiGenerator.genBases(includePrivate)
-                    except IOError as v:
+                    except OSError as v:
                         sys.stderr.write("{0} error: {1}\n".format(file, v[1]))
                         continue
                     except ImportError as v:
@@ -299,7 +299,7 @@
             with open(outputFile, "w", encoding="utf-8",
                       newline=newline) as out:
                 out.write("\n".join(sorted(apis)) + "\n")
-        except IOError as v:
+        except OSError as v:
             sys.stderr.write("{0} error: {1}\n".format(outputFile, v[1]))
             sys.exit(3)
         try:
@@ -308,7 +308,7 @@
                 for baseEntry in sorted(basesDict.keys()):
                     out.write("{0} {1}\n".format(
                         baseEntry, " ".join(sorted(basesDict[baseEntry]))))
-        except IOError as v:
+        except OSError as v:
             sys.stderr.write("{0} error: {1}\n".format(basesFile, v[1]))
             sys.exit(3)
     
--- a/eric6/eric6_doc.py	Sun Nov 01 11:17:06 2020 +0100
+++ b/eric6/eric6_doc.py	Sat Dec 05 12:29:26 2020 +0100
@@ -271,7 +271,7 @@
         if not os.path.isdir(outputDir):
             try:
                 os.makedirs(outputDir)
-            except EnvironmentError:
+            except OSError:
                 sys.stderr.write(
                     "Could not create output directory {0}.".format(outputDir))
                 sys.exit(2)
@@ -283,7 +283,7 @@
         try:
             with open(stylesheetFile, "r", encoding="utf-8") as sf:
                 stylesheet = sf.read()
-        except IOError:
+        except OSError:
             sys.stderr.write(
                 "The CSS stylesheet '{0}' does not exist\n".format(
                     stylesheetFile))
@@ -299,7 +299,7 @@
             if not os.path.isdir(qtHelpOutputDir):
                 try:
                     os.makedirs(qtHelpOutputDir)
-                except EnvironmentError:
+                except OSError:
                     sys.stderr.write(
                         "Could not create QtHelp output directory {0}.".format(
                             qtHelpOutputDir))
@@ -372,7 +372,7 @@
                         inpackage=inpackage, extensions=supportedExtensions)
                     moduleDocument = ModuleDocument(module, colors, stylesheet)
                     doc = moduleDocument.genDocument()
-                except IOError as v:
+                except OSError as v:
                     sys.stderr.write("{0} error: {1}\n".format(file, v[1]))
                     continue
                 except ImportError as v:
@@ -400,7 +400,7 @@
                     with open(f, "w", encoding="utf-8",
                               newline=newline) as out:
                         out.write(doc)
-                except IOError as v:
+                except OSError as v:
                     sys.stderr.write("{0} error: {1}\n".format(file, v[1]))
                 else:
                     sys.stdout.write("{0} ok\n".format(f))
--- a/eric6/eric6_post_install.py	Sun Nov 01 11:17:06 2020 +0100
+++ b/eric6/eric6_post_install.py	Sat Dec 05 12:29:26 2020 +0100
@@ -44,7 +44,7 @@
         if not os.path.exists(eric6EntryPath):
             try:
                 os.makedirs(eric6EntryPath)
-            except EnvironmentError:
+            except OSError:
                 # maybe restrictions prohibited link creation
                 return
         
--- a/eric6/i18n/eric6_cs.ts	Sun Nov 01 11:17:06 2020 +0100
+++ b/eric6/i18n/eric6_cs.ts	Sat Dec 05 12:29:26 2020 +0100
@@ -4423,7 +4423,7 @@
 <context>
     <name>CodingError</name>
     <message>
-        <location filename="../Utilities/__init__.py" line="110"/>
+        <location filename="../Utilities/__init__.py" line="129"/>
         <source>The coding &apos;{0}&apos; is wrong for the given text.</source>
         <translation>Nesprávné kódování &apos;{0}&apos; pro daný text.</translation>
     </message>
@@ -7926,47 +7926,47 @@
 <context>
     <name>DebuggerInterfacePython</name>
     <message>
-        <location filename="../Debugger/DebuggerInterfacePython.py" line="459"/>
+        <location filename="../Debugger/DebuggerInterfacePython.py" line="456"/>
         <source>Start Debugger</source>
         <translation type="unfinished">Spustit debuger</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebuggerInterfacePython.py" line="1018"/>
+        <location filename="../Debugger/DebuggerInterfacePython.py" line="1015"/>
         <source>Parent Process</source>
         <translation type="unfinished">Rodičovský proces</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebuggerInterfacePython.py" line="1019"/>
+        <location filename="../Debugger/DebuggerInterfacePython.py" line="1016"/>
         <source>Child process</source>
         <translation type="unfinished">Dětský proces</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebuggerInterfacePython.py" line="1020"/>
+        <location filename="../Debugger/DebuggerInterfacePython.py" line="1017"/>
         <source>Client forking</source>
         <translation type="unfinished">Větvení klienta</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebuggerInterfacePython.py" line="1020"/>
+        <location filename="../Debugger/DebuggerInterfacePython.py" line="1017"/>
         <source>Select the fork branch to follow.</source>
         <translation type="unfinished">Pokračovat ve fork větvi.</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebuggerInterfacePython.py" line="459"/>
+        <location filename="../Debugger/DebuggerInterfacePython.py" line="456"/>
         <source>&lt;p&gt;The debugger backend could not be started.&lt;/p&gt;</source>
         <translation type="unfinished">&lt;p&gt;Debugovací backend nelze spustit.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebuggerInterfacePython.py" line="1066"/>
+        <location filename="../Debugger/DebuggerInterfacePython.py" line="1061"/>
         <source>Debug Protocol Error</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebuggerInterfacePython.py" line="1066"/>
+        <location filename="../Debugger/DebuggerInterfacePython.py" line="1061"/>
         <source>&lt;p&gt;The response received from the debugger backend could not be decoded. Please report this issue with the received data to the eric bugs email address.&lt;/p&gt;&lt;p&gt;Error: {0}&lt;/p&gt;&lt;p&gt;Data:&lt;br/&gt;{1}&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebuggerInterfacePython.py" line="354"/>
+        <location filename="../Debugger/DebuggerInterfacePython.py" line="351"/>
         <source>&lt;p&gt;No suitable Python3 environment configured.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
@@ -22825,57 +22825,57 @@
 <context>
     <name>GitProjectBrowserHelper</name>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/ProjectBrowserHelper.py" line="486"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/ProjectBrowserHelper.py" line="484"/>
         <source>Version Control</source>
         <translation type="unfinished">Kontrola verzí</translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/ProjectBrowserHelper.py" line="497"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/ProjectBrowserHelper.py" line="495"/>
         <source>Commit changes to repository...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/ProjectBrowserHelper.py" line="503"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/ProjectBrowserHelper.py" line="501"/>
         <source>Add/Stage to repository</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/ProjectBrowserHelper.py" line="506"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/ProjectBrowserHelper.py" line="504"/>
         <source>Unstage changes</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/ProjectBrowserHelper.py" line="512"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/ProjectBrowserHelper.py" line="510"/>
         <source>Remove from repository (and disk)</source>
         <translation type="unfinished">Odebrat z repozitáře (a z disku)</translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/ProjectBrowserHelper.py" line="586"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/ProjectBrowserHelper.py" line="584"/>
         <source>Remove from repository only</source>
         <translation type="unfinished">Odebrat jen z repozitáře</translation>
     </message>
     <message>
+        <location filename="../Plugins/VcsPlugins/vcsGit/ProjectBrowserHelper.py" line="426"/>
+        <source>Copy</source>
+        <translation type="unfinished">Kopírovat</translation>
+    </message>
+    <message>
         <location filename="../Plugins/VcsPlugins/vcsGit/ProjectBrowserHelper.py" line="428"/>
-        <source>Copy</source>
-        <translation type="unfinished">Kopírovat</translation>
-    </message>
-    <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/ProjectBrowserHelper.py" line="430"/>
         <source>Move</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/ProjectBrowserHelper.py" line="433"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/ProjectBrowserHelper.py" line="431"/>
         <source>Show log browser</source>
         <translation type="unfinished">Zobrazit log prohlížeč</translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/ProjectBrowserHelper.py" line="518"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/ProjectBrowserHelper.py" line="516"/>
         <source>Show status</source>
         <translation type="unfinished">Zobrazit status</translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/ProjectBrowserHelper.py" line="523"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/ProjectBrowserHelper.py" line="521"/>
         <source>Show differences</source>
         <translation type="unfinished"></translation>
     </message>
@@ -22885,7 +22885,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/ProjectBrowserHelper.py" line="527"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/ProjectBrowserHelper.py" line="525"/>
         <source>Show differences (extended)</source>
         <translation type="unfinished"></translation>
     </message>
@@ -22900,37 +22900,37 @@
         <translation type="unfinished">Zobrazit komentované soubory</translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/ProjectBrowserHelper.py" line="533"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/ProjectBrowserHelper.py" line="531"/>
         <source>Revert changes</source>
         <translation type="unfinished">Vrátit změny</translation>
     </message>
     <message>
+        <location filename="../Plugins/VcsPlugins/vcsGit/ProjectBrowserHelper.py" line="538"/>
+        <source>Select all local file entries</source>
+        <translation type="unfinished">Vybrat všechny lokální soubory</translation>
+    </message>
+    <message>
         <location filename="../Plugins/VcsPlugins/vcsGit/ProjectBrowserHelper.py" line="540"/>
-        <source>Select all local file entries</source>
-        <translation type="unfinished">Vybrat všechny lokální soubory</translation>
+        <source>Select all versioned file entries</source>
+        <translation type="unfinished">Vybrat všechny soubory ve správě verzí</translation>
     </message>
     <message>
         <location filename="../Plugins/VcsPlugins/vcsGit/ProjectBrowserHelper.py" line="542"/>
-        <source>Select all versioned file entries</source>
-        <translation type="unfinished">Vybrat všechny soubory ve správě verzí</translation>
+        <source>Select all local directory entries</source>
+        <translation type="unfinished">Vybrat všechny lokální adresáře</translation>
     </message>
     <message>
         <location filename="../Plugins/VcsPlugins/vcsGit/ProjectBrowserHelper.py" line="544"/>
-        <source>Select all local directory entries</source>
-        <translation type="unfinished">Vybrat všechny lokální adresáře</translation>
-    </message>
-    <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/ProjectBrowserHelper.py" line="546"/>
         <source>Select all versioned directory entries</source>
         <translation type="unfinished">Vybrat všechny adresáře ve správě verzí</translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/ProjectBrowserHelper.py" line="549"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/ProjectBrowserHelper.py" line="547"/>
         <source>Configure...</source>
         <translation type="unfinished">Konfigurovat...</translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/ProjectBrowserHelper.py" line="586"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/ProjectBrowserHelper.py" line="584"/>
         <source>Do you really want to remove these files from the repository?</source>
         <translation type="unfinished">Opravdu chcete odebrat tyto soubory z repozitáře?</translation>
     </message>
@@ -26646,27 +26646,27 @@
 <context>
     <name>Globals</name>
     <message>
-        <location filename="../Globals/__init__.py" line="440"/>
+        <location filename="../Globals/__init__.py" line="446"/>
         <source>{0:4.2f} Bytes</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Globals/__init__.py" line="444"/>
+        <location filename="../Globals/__init__.py" line="450"/>
         <source>{0:4.2f} KiB</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Globals/__init__.py" line="448"/>
+        <location filename="../Globals/__init__.py" line="454"/>
         <source>{0:4.2f} MiB</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Globals/__init__.py" line="452"/>
+        <location filename="../Globals/__init__.py" line="458"/>
         <source>{0:4.2f} GiB</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Globals/__init__.py" line="456"/>
+        <location filename="../Globals/__init__.py" line="462"/>
         <source>{0:4.2f} TiB</source>
         <translation type="unfinished"></translation>
     </message>
@@ -39144,102 +39144,102 @@
 <context>
     <name>IconEditorGrid</name>
     <message>
-        <location filename="../IconEditor/IconEditorGrid.py" line="210"/>
+        <location filename="../IconEditor/IconEditorGrid.py" line="208"/>
         <source>Set Pixel</source>
         <translation>Nastavit pixel</translation>
     </message>
     <message>
+        <location filename="../IconEditor/IconEditorGrid.py" line="209"/>
+        <source>Erase Pixel</source>
+        <translation>Vymazat pixel</translation>
+    </message>
+    <message>
+        <location filename="../IconEditor/IconEditorGrid.py" line="210"/>
+        <source>Draw Line</source>
+        <translation>Nakreslit linku</translation>
+    </message>
+    <message>
         <location filename="../IconEditor/IconEditorGrid.py" line="211"/>
-        <source>Erase Pixel</source>
-        <translation>Vymazat pixel</translation>
+        <source>Draw Rectangle</source>
+        <translation>Nakreslit obdélník</translation>
     </message>
     <message>
         <location filename="../IconEditor/IconEditorGrid.py" line="212"/>
-        <source>Draw Line</source>
-        <translation>Nakreslit linku</translation>
+        <source>Draw Filled Rectangle</source>
+        <translation>Nakreslit vyplněný obdélník</translation>
     </message>
     <message>
         <location filename="../IconEditor/IconEditorGrid.py" line="213"/>
-        <source>Draw Rectangle</source>
-        <translation>Nakreslit obdélník</translation>
+        <source>Draw Circle</source>
+        <translation>Nakreslit kruh</translation>
     </message>
     <message>
         <location filename="../IconEditor/IconEditorGrid.py" line="214"/>
-        <source>Draw Filled Rectangle</source>
-        <translation>Nakreslit vyplněný obdélník</translation>
+        <source>Draw Filled Circle</source>
+        <translation>Nakreslit vyplněný kruh</translation>
     </message>
     <message>
         <location filename="../IconEditor/IconEditorGrid.py" line="215"/>
-        <source>Draw Circle</source>
-        <translation>Nakreslit kruh</translation>
+        <source>Draw Ellipse</source>
+        <translation>Nakreslit elipsu</translation>
     </message>
     <message>
         <location filename="../IconEditor/IconEditorGrid.py" line="216"/>
-        <source>Draw Filled Circle</source>
-        <translation>Nakreslit vyplněný kruh</translation>
+        <source>Draw Filled Ellipse</source>
+        <translation>Nakreslit vyplněnou elipsu</translation>
     </message>
     <message>
         <location filename="../IconEditor/IconEditorGrid.py" line="217"/>
-        <source>Draw Ellipse</source>
-        <translation>Nakreslit elipsu</translation>
-    </message>
-    <message>
-        <location filename="../IconEditor/IconEditorGrid.py" line="218"/>
-        <source>Draw Filled Ellipse</source>
-        <translation>Nakreslit vyplněnou elipsu</translation>
-    </message>
-    <message>
-        <location filename="../IconEditor/IconEditorGrid.py" line="219"/>
         <source>Fill Region</source>
         <translation>Vyplnit oblast</translation>
     </message>
     <message>
-        <location filename="../IconEditor/IconEditorGrid.py" line="848"/>
+        <location filename="../IconEditor/IconEditorGrid.py" line="846"/>
         <source>Cut Selection</source>
         <translation>Odebrat výběr</translation>
     </message>
     <message>
-        <location filename="../IconEditor/IconEditorGrid.py" line="907"/>
+        <location filename="../IconEditor/IconEditorGrid.py" line="905"/>
         <source>Paste</source>
         <translation>Vložit</translation>
     </message>
     <message>
-        <location filename="../IconEditor/IconEditorGrid.py" line="907"/>
+        <location filename="../IconEditor/IconEditorGrid.py" line="905"/>
         <source>&lt;p&gt;The clipboard image is larger than the current image.&lt;br/&gt;Paste as new image?&lt;/p&gt;</source>
         <translation>&lt;p&gt;Obrázek ze schránky je větší než aktuální obrázek.&lt;br/&gt;Vložit jako nový obrázek?&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../IconEditor/IconEditorGrid.py" line="920"/>
+        <location filename="../IconEditor/IconEditorGrid.py" line="918"/>
         <source>Paste Clipboard</source>
         <translation>Vložit ze schránky</translation>
     </message>
     <message>
-        <location filename="../IconEditor/IconEditorGrid.py" line="938"/>
+        <location filename="../IconEditor/IconEditorGrid.py" line="936"/>
         <source>Pasting Image</source>
         <translation>Vkládání obrázku</translation>
     </message>
     <message>
-        <location filename="../IconEditor/IconEditorGrid.py" line="938"/>
+        <location filename="../IconEditor/IconEditorGrid.py" line="936"/>
         <source>Invalid image data in clipboard.</source>
         <translation>Neplatná data obrázku ve schránce.</translation>
     </message>
     <message>
-        <location filename="../IconEditor/IconEditorGrid.py" line="949"/>
+        <location filename="../IconEditor/IconEditorGrid.py" line="947"/>
         <source>Paste Clipboard as New Image</source>
         <translation>Vložit ze schránky jako nový obrázek</translation>
     </message>
     <message>
-        <location filename="../IconEditor/IconEditorGrid.py" line="978"/>
+        <location filename="../IconEditor/IconEditorGrid.py" line="976"/>
         <source>Clear Image</source>
         <translation>Vyčistit obrázek</translation>
     </message>
     <message>
-        <location filename="../IconEditor/IconEditorGrid.py" line="998"/>
+        <location filename="../IconEditor/IconEditorGrid.py" line="996"/>
         <source>Resize Image</source>
         <translation>Změnit velikost obrázku</translation>
     </message>
     <message>
-        <location filename="../IconEditor/IconEditorGrid.py" line="1025"/>
+        <location filename="../IconEditor/IconEditorGrid.py" line="1023"/>
         <source>Convert to Grayscale</source>
         <translation>Převést do šedi</translation>
     </message>
@@ -41185,52 +41185,52 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/InstallInfoDialog.py" line="71"/>
+        <location filename="../UI/InstallInfoDialog.py" line="70"/>
         <source>Yes</source>
         <translation type="unfinished">Ano</translation>
     </message>
     <message>
-        <location filename="../UI/InstallInfoDialog.py" line="71"/>
+        <location filename="../UI/InstallInfoDialog.py" line="70"/>
         <source>No</source>
         <translation type="unfinished">Ne</translation>
     </message>
     <message>
-        <location filename="../UI/InstallInfoDialog.py" line="75"/>
+        <location filename="../UI/InstallInfoDialog.py" line="74"/>
         <source>&apos;eric-ide&apos; was installed from PyPI using the pip command.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/InstallInfoDialog.py" line="81"/>
+        <location filename="../UI/InstallInfoDialog.py" line="80"/>
         <source>The information shown in this dialog was guessed at the first start of eric.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/InstallInfoDialog.py" line="99"/>
+        <location filename="../UI/InstallInfoDialog.py" line="98"/>
         <source>Load Install Information</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/InstallInfoDialog.py" line="99"/>
+        <location filename="../UI/InstallInfoDialog.py" line="98"/>
         <source>&lt;p&gt;The file containing the install information could not be read.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/InstallInfoDialog.py" line="151"/>
+        <location filename="../UI/InstallInfoDialog.py" line="150"/>
         <source>Install Information</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/InstallInfoDialog.py" line="151"/>
+        <location filename="../UI/InstallInfoDialog.py" line="150"/>
         <source>The install information was edited. Unsaved changes will be lost. Save first?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/InstallInfoDialog.py" line="188"/>
+        <location filename="../UI/InstallInfoDialog.py" line="187"/>
         <source>Save Install Information</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/InstallInfoDialog.py" line="188"/>
+        <location filename="../UI/InstallInfoDialog.py" line="187"/>
         <source>&lt;p&gt;The file containing the install information could not be written.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
@@ -41240,17 +41240,17 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/InstallInfoDialog.py" line="61"/>
+        <location filename="../UI/InstallInfoDialog.py" line="60"/>
         <source>Installed as Administrator:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/InstallInfoDialog.py" line="63"/>
+        <location filename="../UI/InstallInfoDialog.py" line="62"/>
         <source>Installed with sudo:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/InstallInfoDialog.py" line="93"/>
+        <location filename="../UI/InstallInfoDialog.py" line="92"/>
         <source>unknown</source>
         <translation type="unfinished">neznámý</translation>
     </message>
@@ -41260,32 +41260,32 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/InstallInfoDialog.py" line="87"/>
+        <location filename="../UI/InstallInfoDialog.py" line="86"/>
         <source>The installation information was provided by the user.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/InstallInfoDialog.py" line="39"/>
+        <location filename="../UI/InstallInfoDialog.py" line="38"/>
         <source>Delete Info</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/InstallInfoDialog.py" line="255"/>
+        <location filename="../UI/InstallInfoDialog.py" line="254"/>
         <source>Upgrade Instructions</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/InstallInfoDialog.py" line="201"/>
+        <location filename="../UI/InstallInfoDialog.py" line="200"/>
         <source>Delete Installation Information</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/InstallInfoDialog.py" line="201"/>
+        <location filename="../UI/InstallInfoDialog.py" line="200"/>
         <source>Do you really want to delete the installation information? It will be recreated at the next start.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/InstallInfoDialog.py" line="228"/>
+        <location filename="../UI/InstallInfoDialog.py" line="227"/>
         <source>Perform the following step(s) with Administrator privileges.
 </source>
         <translation type="unfinished"></translation>
@@ -51014,12 +51014,12 @@
         <translation type="unfinished">Chyby</translation>
     </message>
     <message>
-        <location filename="../PipInterface/PipDialog.py" line="143"/>
+        <location filename="../PipInterface/PipDialog.py" line="146"/>
         <source>Process Generation Error</source>
         <translation type="unfinished">Chyba v procesu generování</translation>
     </message>
     <message>
-        <location filename="../PipInterface/PipDialog.py" line="143"/>
+        <location filename="../PipInterface/PipDialog.py" line="146"/>
         <source>The process {0} could not be started.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -51727,7 +51727,7 @@
         </translation>
     </message>
     <message>
-        <location filename="../PipInterface/PipPackagesWidget.py" line="910"/>
+        <location filename="../PipInterface/PipPackagesWidget.py" line="911"/>
         <source>Search PyPI</source>
         <translation type="unfinished"></translation>
     </message>
@@ -51747,102 +51747,102 @@
         <translation type="unfinished">Chyby: {0}</translation>
     </message>
     <message>
-        <location filename="../PipInterface/PipPackagesWidget.py" line="872"/>
+        <location filename="../PipInterface/PipPackagesWidget.py" line="873"/>
         <source>Show Package Details</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../PipInterface/PipPackagesWidget.py" line="872"/>
+        <location filename="../PipInterface/PipPackagesWidget.py" line="873"/>
         <source>Select the package version:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../PipInterface/PipPackagesWidget.py" line="910"/>
+        <location filename="../PipInterface/PipPackagesWidget.py" line="911"/>
         <source>&lt;p&gt;No package details info for &lt;b&gt;{0}&lt;/b&gt; available.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../PipInterface/PipPackagesWidget.py" line="926"/>
+        <location filename="../PipInterface/PipPackagesWidget.py" line="927"/>
         <source>Install Pip</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../PipInterface/PipPackagesWidget.py" line="929"/>
+        <location filename="../PipInterface/PipPackagesWidget.py" line="930"/>
         <source>Install Pip to User-Site</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../PipInterface/PipPackagesWidget.py" line="932"/>
+        <location filename="../PipInterface/PipPackagesWidget.py" line="933"/>
         <source>Repair Pip</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../PipInterface/PipPackagesWidget.py" line="1046"/>
+        <location filename="../PipInterface/PipPackagesWidget.py" line="1050"/>
         <source>Install Packages</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../PipInterface/PipPackagesWidget.py" line="939"/>
+        <location filename="../PipInterface/PipPackagesWidget.py" line="940"/>
         <source>Install Local Package</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../PipInterface/PipPackagesWidget.py" line="943"/>
+        <location filename="../PipInterface/PipPackagesWidget.py" line="944"/>
         <source>Install Requirements</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../PipInterface/PipPackagesWidget.py" line="946"/>
+        <location filename="../PipInterface/PipPackagesWidget.py" line="947"/>
         <source>Uninstall Requirements</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../PipInterface/PipPackagesWidget.py" line="949"/>
+        <location filename="../PipInterface/PipPackagesWidget.py" line="950"/>
         <source>Generate Requirements...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../PipInterface/PipPackagesWidget.py" line="967"/>
+        <location filename="../PipInterface/PipPackagesWidget.py" line="968"/>
         <source>Edit User Configuration...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../PipInterface/PipPackagesWidget.py" line="970"/>
+        <location filename="../PipInterface/PipPackagesWidget.py" line="971"/>
         <source>Edit Environment Configuration...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../PipInterface/PipPackagesWidget.py" line="975"/>
+        <location filename="../PipInterface/PipPackagesWidget.py" line="976"/>
         <source>Configure...</source>
         <translation type="unfinished">Konfigurovat...</translation>
     </message>
     <message>
-        <location filename="../PipInterface/PipPackagesWidget.py" line="1158"/>
+        <location filename="../PipInterface/PipPackagesWidget.py" line="1166"/>
         <source>Edit Configuration</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../PipInterface/PipPackagesWidget.py" line="1158"/>
+        <location filename="../PipInterface/PipPackagesWidget.py" line="1166"/>
         <source>No valid configuration path determined. Aborting</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../PipInterface/PipPackagesWidget.py" line="953"/>
+        <location filename="../PipInterface/PipPackagesWidget.py" line="954"/>
         <source>Show Cache Info...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../PipInterface/PipPackagesWidget.py" line="956"/>
+        <location filename="../PipInterface/PipPackagesWidget.py" line="957"/>
         <source>Show Cached Files...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../PipInterface/PipPackagesWidget.py" line="959"/>
+        <location filename="../PipInterface/PipPackagesWidget.py" line="960"/>
         <source>Remove Cached Files...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../PipInterface/PipPackagesWidget.py" line="962"/>
+        <location filename="../PipInterface/PipPackagesWidget.py" line="963"/>
         <source>Purge Cache...</source>
         <translation type="unfinished"></translation>
     </message>
@@ -53790,72 +53790,72 @@
         <translation>Vytvořit adresář projektu</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="2939"/>
+        <location filename="../Project/Project.py" line="2943"/>
         <source>New Project</source>
         <translation>Nový projekt</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="2454"/>
+        <location filename="../Project/Project.py" line="2458"/>
         <source>Add existing files to the project?</source>
         <translation>Přidat existující soubory do projektu?</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="2581"/>
+        <location filename="../Project/Project.py" line="2585"/>
         <source>Would you like to edit the VCS command options?</source>
         <translation>Chcete editovat parametry VCS příkazu?</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="3808"/>
+        <location filename="../Project/Project.py" line="3812"/>
         <source>New project</source>
         <translation>Nový projekt</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="2524"/>
+        <location filename="../Project/Project.py" line="2528"/>
         <source>Shall the project file be added to the repository?</source>
         <translation>Má být projekt přidán do repozitáře?</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="2553"/>
+        <location filename="../Project/Project.py" line="2557"/>
         <source>Select version control system for the project</source>
         <translation>Výběr verzovacího systému projektu</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="3822"/>
+        <location filename="../Project/Project.py" line="3826"/>
         <source>Open project</source>
         <translation>Otevřít projekt</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="3083"/>
+        <location filename="../Project/Project.py" line="3087"/>
         <source>Project Files (*.e4p)</source>
         <translation>Soubory projektu (*.e4p)</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="3859"/>
+        <location filename="../Project/Project.py" line="3863"/>
         <source>Save project as</source>
         <translation>Uložit projekt jako</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="3098"/>
+        <location filename="../Project/Project.py" line="3102"/>
         <source>Save File</source>
         <translation>Uložit soubor</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="3134"/>
+        <location filename="../Project/Project.py" line="3138"/>
         <source>Close Project</source>
         <translation>Zavřít projekt</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="3134"/>
+        <location filename="../Project/Project.py" line="3138"/>
         <source>The current project has unsaved changes.</source>
         <translation>Aktuální projekt obsahuje neuložené změny.</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="3311"/>
+        <location filename="../Project/Project.py" line="3315"/>
         <source>Syntax errors detected</source>
         <translation>Zjištěny syntaktické chyby</translation>
     </message>
     <message numerus="yes">
-        <location filename="../Project/Project.py" line="3311"/>
+        <location filename="../Project/Project.py" line="3315"/>
         <source>The project contains %n file(s) with syntax errors.</source>
         <translation>
             <numerusform>Projekt obsahuje %n soubor se syntaktickými chybami.</numerusform>
@@ -53864,567 +53864,567 @@
         </translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="3808"/>
+        <location filename="../Project/Project.py" line="3812"/>
         <source>&amp;New...</source>
         <translation>&amp;Nový...</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="3813"/>
+        <location filename="../Project/Project.py" line="3817"/>
         <source>Generate a new project</source>
         <translation>Vygenerovat nový projekt</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="3814"/>
+        <location filename="../Project/Project.py" line="3818"/>
         <source>&lt;b&gt;New...&lt;/b&gt;&lt;p&gt;This opens a dialog for entering the info for a new project.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Nový...&lt;/b&gt;&lt;p&gt;Otevře se dialogové okno pro zadání informací o novém projektu.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="3822"/>
+        <location filename="../Project/Project.py" line="3826"/>
         <source>&amp;Open...</source>
         <translation>&amp;Otevřít...</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="3827"/>
+        <location filename="../Project/Project.py" line="3831"/>
         <source>Open an existing project</source>
         <translation>Otevřít existující projekt</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="3828"/>
+        <location filename="../Project/Project.py" line="3832"/>
         <source>&lt;b&gt;Open...&lt;/b&gt;&lt;p&gt;This opens an existing project.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Otevřít....&lt;/b&gt;&lt;p&gt;Otevře existující projekt.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="3835"/>
-        <source>Close project</source>
-        <translation>Zavřít projekt</translation>
-    </message>
-    <message>
-        <location filename="../Project/Project.py" line="3835"/>
-        <source>&amp;Close</source>
-        <translation>&amp;Zavřít</translation>
-    </message>
-    <message>
         <location filename="../Project/Project.py" line="3839"/>
+        <source>Close project</source>
+        <translation>Zavřít projekt</translation>
+    </message>
+    <message>
+        <location filename="../Project/Project.py" line="3839"/>
+        <source>&amp;Close</source>
+        <translation>&amp;Zavřít</translation>
+    </message>
+    <message>
+        <location filename="../Project/Project.py" line="3843"/>
         <source>Close the current project</source>
         <translation>Uzavře aktuální projekt</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="3840"/>
+        <location filename="../Project/Project.py" line="3844"/>
         <source>&lt;b&gt;Close&lt;/b&gt;&lt;p&gt;This closes the current project.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Zavřít&lt;/b&gt;&lt;p&gt;Aktuální projekt se uzavře.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="3847"/>
-        <source>Save project</source>
-        <translation>Uložit projekt</translation>
-    </message>
-    <message>
-        <location filename="../Project/Project.py" line="4039"/>
-        <source>&amp;Save</source>
-        <translation>&amp;Uložit</translation>
-    </message>
-    <message>
         <location filename="../Project/Project.py" line="3851"/>
+        <source>Save project</source>
+        <translation>Uložit projekt</translation>
+    </message>
+    <message>
+        <location filename="../Project/Project.py" line="4043"/>
+        <source>&amp;Save</source>
+        <translation>&amp;Uložit</translation>
+    </message>
+    <message>
+        <location filename="../Project/Project.py" line="3855"/>
         <source>Save the current project</source>
         <translation>Uložit aktuální projekt</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="3852"/>
+        <location filename="../Project/Project.py" line="3856"/>
         <source>&lt;b&gt;Save&lt;/b&gt;&lt;p&gt;This saves the current project.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Uložit&lt;/b&gt;&lt;p&gt;Aktuální projekt se uloží.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="3859"/>
-        <source>Save &amp;as...</source>
-        <translation>Uložit j&amp;ako...</translation>
-    </message>
-    <message>
         <location filename="../Project/Project.py" line="3863"/>
+        <source>Save &amp;as...</source>
+        <translation>Uložit j&amp;ako...</translation>
+    </message>
+    <message>
+        <location filename="../Project/Project.py" line="3867"/>
         <source>Save the current project to a new file</source>
         <translation>Uloží aktuální projekt do nového souboru</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="3865"/>
+        <location filename="../Project/Project.py" line="3869"/>
         <source>&lt;b&gt;Save as&lt;/b&gt;&lt;p&gt;This saves the current project to a new file.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Uložit jako&lt;/b&gt;&lt;p&gt;Uloží aktuální projekt do nového souboru.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="3874"/>
+        <location filename="../Project/Project.py" line="3878"/>
         <source>Add files to project</source>
         <translation>Přidat soubory do projektu</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="3874"/>
+        <location filename="../Project/Project.py" line="3878"/>
         <source>Add &amp;files...</source>
         <translation>&amp;Přidat soubory...</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="3879"/>
+        <location filename="../Project/Project.py" line="3883"/>
         <source>Add files to the current project</source>
         <translation>Přidat soubory do aktuálního projektu</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="3881"/>
+        <location filename="../Project/Project.py" line="3885"/>
         <source>&lt;b&gt;Add files...&lt;/b&gt;&lt;p&gt;This opens a dialog for adding files to the current project. The place to add is determined by the file extension.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Přidat soubory...&lt;/b&gt;&lt;p&gt;Otevře dialog pri přidání souborů do aktuálního projektu. Místo pro přidání je definováno extenzí souborů.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="3890"/>
+        <location filename="../Project/Project.py" line="3894"/>
         <source>Add directory to project</source>
         <translation>Přidat adresář do projektu</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="3890"/>
+        <location filename="../Project/Project.py" line="3894"/>
         <source>Add directory...</source>
         <translation>Přidat adresář...</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="3895"/>
+        <location filename="../Project/Project.py" line="3899"/>
         <source>Add a directory to the current project</source>
         <translation>Přidat adresář do aktuálního projektu</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="3897"/>
+        <location filename="../Project/Project.py" line="3901"/>
         <source>&lt;b&gt;Add directory...&lt;/b&gt;&lt;p&gt;This opens a dialog for adding a directory to the current project.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Přidat adresář...&lt;/b&gt;&lt;p&gt;Otevře dialog pro přičtení adresáře do aktuálního projektu.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="3905"/>
+        <location filename="../Project/Project.py" line="3909"/>
         <source>Add translation to project</source>
         <translation>Přidat překlad do projektu</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="3905"/>
+        <location filename="../Project/Project.py" line="3909"/>
         <source>Add &amp;translation...</source>
         <translation>Přida&amp;t překlad...</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="3910"/>
+        <location filename="../Project/Project.py" line="3914"/>
         <source>Add a translation to the current project</source>
         <translation>Přidat překlad do aktuálního projektu</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="3912"/>
+        <location filename="../Project/Project.py" line="3916"/>
         <source>&lt;b&gt;Add translation...&lt;/b&gt;&lt;p&gt;This opens a dialog for add a translation to the current project.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Přidat překlad&lt;/b&gt;&lt;p&gt;Otevře dialog pro přidání překladu do aktuálního projektu.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="3920"/>
+        <location filename="../Project/Project.py" line="3924"/>
         <source>Search new files</source>
         <translation>Hledat nové soubory</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="3920"/>
-        <source>Searc&amp;h new files...</source>
-        <translation>&amp;Hledat nové soubory...</translation>
-    </message>
-    <message>
         <location filename="../Project/Project.py" line="3924"/>
+        <source>Searc&amp;h new files...</source>
+        <translation>&amp;Hledat nové soubory...</translation>
+    </message>
+    <message>
+        <location filename="../Project/Project.py" line="3928"/>
         <source>Search new files in the project directory.</source>
         <translation>Hledat nové soubory v adresáři projektu.</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="3950"/>
+        <location filename="../Project/Project.py" line="3954"/>
         <source>Project properties</source>
         <translation>Nastavení projektu</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="3950"/>
+        <location filename="../Project/Project.py" line="3954"/>
         <source>&amp;Properties...</source>
         <translation>&amp;Natavení...</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="3955"/>
+        <location filename="../Project/Project.py" line="3959"/>
         <source>Show the project properties</source>
         <translation>Zobrazit nastavení projektu</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="3956"/>
+        <location filename="../Project/Project.py" line="3960"/>
         <source>&lt;b&gt;Properties...&lt;/b&gt;&lt;p&gt;This shows a dialog to edit the project properties.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Nastavení...&lt;/b&gt;&lt;p&gt;Zobrazí dialog s editací nastavení projektu.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="3963"/>
+        <location filename="../Project/Project.py" line="3967"/>
         <source>User project properties</source>
         <translation>Uživatelská nastavení projektu</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="3963"/>
+        <location filename="../Project/Project.py" line="3967"/>
         <source>&amp;User Properties...</source>
         <translation>Uživat&amp;elská nastavení...</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="3968"/>
+        <location filename="../Project/Project.py" line="3972"/>
         <source>Show the user specific project properties</source>
         <translation>Zobrazit uživatelem definovaná nastavení projektu</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="3970"/>
+        <location filename="../Project/Project.py" line="3974"/>
         <source>&lt;b&gt;User Properties...&lt;/b&gt;&lt;p&gt;This shows a dialog to edit the user specific project properties.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Uživatelská nastavení...&lt;/b&gt;&lt;p&gt;Zobrazí dialog s editací uživatelských nastavení projektu.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="3978"/>
+        <location filename="../Project/Project.py" line="3982"/>
         <source>Filetype Associations</source>
         <translation>Asociace typů souborů</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="3978"/>
-        <source>Filetype Associations...</source>
-        <translation>Asociace typů souborů...</translation>
-    </message>
-    <message>
         <location filename="../Project/Project.py" line="3982"/>
+        <source>Filetype Associations...</source>
+        <translation>Asociace typů souborů...</translation>
+    </message>
+    <message>
+        <location filename="../Project/Project.py" line="3986"/>
         <source>Show the project filetype associations</source>
         <translation>Zobrazit asociace typů souborů</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4014"/>
+        <location filename="../Project/Project.py" line="4018"/>
         <source>Debugger Properties</source>
         <translation>Nastavení debugeru</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4014"/>
-        <source>Debugger &amp;Properties...</source>
-        <translation>Nastavení &amp;debuggeru...</translation>
-    </message>
-    <message>
         <location filename="../Project/Project.py" line="4018"/>
+        <source>Debugger &amp;Properties...</source>
+        <translation>Nastavení &amp;debuggeru...</translation>
+    </message>
+    <message>
+        <location filename="../Project/Project.py" line="4022"/>
         <source>Show the debugger properties</source>
         <translation>Zobrazit nastavení debugeru</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4019"/>
+        <location filename="../Project/Project.py" line="4023"/>
         <source>&lt;b&gt;Debugger Properties...&lt;/b&gt;&lt;p&gt;This shows a dialog to edit project specific debugger settings.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Nastavení debugeru...&lt;/b&gt;&lt;p&gt;Zobrazí dialog s editací nastavení debugeru.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4027"/>
+        <location filename="../Project/Project.py" line="4031"/>
         <source>Load</source>
         <translation>Načíst</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4027"/>
-        <source>&amp;Load</source>
-        <translation>&amp;Načíst</translation>
-    </message>
-    <message>
         <location filename="../Project/Project.py" line="4031"/>
+        <source>&amp;Load</source>
+        <translation>&amp;Načíst</translation>
+    </message>
+    <message>
+        <location filename="../Project/Project.py" line="4035"/>
         <source>Load the debugger properties</source>
         <translation>Načíst nastavení debugeru</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4032"/>
+        <location filename="../Project/Project.py" line="4036"/>
         <source>&lt;b&gt;Load Debugger Properties&lt;/b&gt;&lt;p&gt;This loads the project specific debugger settings.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Načíst nastavení debugeru&lt;/b&gt;&lt;p&gt;Načtou se nastavení debugeru do projektu.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4039"/>
-        <source>Save</source>
-        <translation>Uložit</translation>
-    </message>
-    <message>
         <location filename="../Project/Project.py" line="4043"/>
+        <source>Save</source>
+        <translation>Uložit</translation>
+    </message>
+    <message>
+        <location filename="../Project/Project.py" line="4047"/>
         <source>Save the debugger properties</source>
         <translation>Uložit nastavení debugeru</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4044"/>
+        <location filename="../Project/Project.py" line="4048"/>
         <source>&lt;b&gt;Save Debugger Properties&lt;/b&gt;&lt;p&gt;This saves the project specific debugger settings.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Uložit nastavení debugeru&lt;/b&gt;&lt;p&gt;Uloží nastavení debugeru definovaná v projektu..&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4051"/>
+        <location filename="../Project/Project.py" line="4055"/>
         <source>Delete</source>
         <translation>Smazat</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4051"/>
-        <source>&amp;Delete</source>
-        <translation>Sma&amp;zat</translation>
-    </message>
-    <message>
         <location filename="../Project/Project.py" line="4055"/>
+        <source>&amp;Delete</source>
+        <translation>Sma&amp;zat</translation>
+    </message>
+    <message>
+        <location filename="../Project/Project.py" line="4059"/>
         <source>Delete the debugger properties</source>
         <translation>Smazat nastavení debugeru</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4056"/>
+        <location filename="../Project/Project.py" line="4060"/>
         <source>&lt;b&gt;Delete Debugger Properties&lt;/b&gt;&lt;p&gt;This deletes the file containing the project specific debugger settings.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Smazat nastavení debugeru&lt;/b&gt;&lt;p&gt;Smaže se soubor obsahující nastavení debugeru v daném projektu.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4064"/>
+        <location filename="../Project/Project.py" line="4068"/>
         <source>Reset</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4064"/>
-        <source>&amp;Reset</source>
-        <translation>&amp;Reset</translation>
-    </message>
-    <message>
         <location filename="../Project/Project.py" line="4068"/>
+        <source>&amp;Reset</source>
+        <translation>&amp;Reset</translation>
+    </message>
+    <message>
+        <location filename="../Project/Project.py" line="4072"/>
         <source>Reset the debugger properties</source>
         <translation>Reset nastavení debugeru</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4069"/>
+        <location filename="../Project/Project.py" line="4073"/>
         <source>&lt;b&gt;Reset Debugger Properties&lt;/b&gt;&lt;p&gt;This resets the project specific debugger settings.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Reset nastavení debugeru&lt;/b&gt;&lt;p&gt;Zresetuje nastavení debugeru v projektu.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4078"/>
-        <source>Load session</source>
-        <translation>Načíst relaci</translation>
-    </message>
-    <message>
         <location filename="../Project/Project.py" line="4082"/>
+        <source>Load session</source>
+        <translation>Načíst relaci</translation>
+    </message>
+    <message>
+        <location filename="../Project/Project.py" line="4086"/>
         <source>Load the projects session file.</source>
         <translation>Načíst soubor s relací projektu.</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4083"/>
+        <location filename="../Project/Project.py" line="4087"/>
         <source>&lt;b&gt;Load session&lt;/b&gt;&lt;p&gt;This loads the projects session file. The session consists of the following data.&lt;br&gt;- all open source files&lt;br&gt;- all breakpoint&lt;br&gt;- the commandline arguments&lt;br&gt;- the working directory&lt;br&gt;- the exception reporting flag&lt;/p&gt;</source>
         <translation>&lt;b&gt;Načíst relaci&lt;/b&gt;&lt;p&gt;Načte soubor s relací projektu. Relace obsahuje následující údaje:&lt;br&gt;- všechny otevřené zdrojové soubory&lt;br&gt;- všechny breakpointy&lt;br&gt;- argumenty příkazové řádky &lt;br&gt;- pracovní adresář&lt;br&gt;- příznak výjimky&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4096"/>
-        <source>Save session</source>
-        <translation>Uložit relaci</translation>
-    </message>
-    <message>
         <location filename="../Project/Project.py" line="4100"/>
+        <source>Save session</source>
+        <translation>Uložit relaci</translation>
+    </message>
+    <message>
+        <location filename="../Project/Project.py" line="4104"/>
         <source>Save the projects session file.</source>
         <translation>Uložit soubor s relací projektu.</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4101"/>
+        <location filename="../Project/Project.py" line="4105"/>
         <source>&lt;b&gt;Save session&lt;/b&gt;&lt;p&gt;This saves the projects session file. The session consists of the following data.&lt;br&gt;- all open source files&lt;br&gt;- all breakpoint&lt;br&gt;- the commandline arguments&lt;br&gt;- the working directory&lt;br&gt;- the exception reporting flag&lt;/p&gt;</source>
         <translation>&lt;b&gt;Uložit relaci&lt;/b&gt;&lt;p&gt;Uloží soubor s relací projektu. Relace obsahuje následující údaje:&lt;br&gt;- všechny otevřené zdrojové soubory&lt;br&gt;- všechny breakpointy&lt;br&gt;- argumenty příkazové řádky &lt;br&gt;- pracovní adresář&lt;br&gt;- příznak výjimky&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4114"/>
-        <source>Delete session</source>
-        <translation>Smazat relaci</translation>
-    </message>
-    <message>
         <location filename="../Project/Project.py" line="4118"/>
+        <source>Delete session</source>
+        <translation>Smazat relaci</translation>
+    </message>
+    <message>
+        <location filename="../Project/Project.py" line="4122"/>
         <source>Delete the projects session file.</source>
         <translation>Smaže soubor s relací projektu.</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4119"/>
+        <location filename="../Project/Project.py" line="4123"/>
         <source>&lt;b&gt;Delete session&lt;/b&gt;&lt;p&gt;This deletes the projects session file&lt;/p&gt;</source>
         <translation>&lt;b&gt;Smazat relaci&lt;/b&gt;&lt;p&gt;Smaže soubor s relací projektu.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4128"/>
+        <location filename="../Project/Project.py" line="4132"/>
         <source>Code Metrics</source>
         <translation>Metriky kódu</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4128"/>
-        <source>&amp;Code Metrics...</source>
-        <translation>Metriky &amp;kódu...</translation>
-    </message>
-    <message>
         <location filename="../Project/Project.py" line="4132"/>
+        <source>&amp;Code Metrics...</source>
+        <translation>Metriky &amp;kódu...</translation>
+    </message>
+    <message>
+        <location filename="../Project/Project.py" line="4136"/>
         <source>Show some code metrics for the project.</source>
         <translation>Zobrazit metriky kódu projektu.</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4134"/>
+        <location filename="../Project/Project.py" line="4138"/>
         <source>&lt;b&gt;Code Metrics...&lt;/b&gt;&lt;p&gt;This shows some code metrics for all Python files in the project.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Metriky kódu...&lt;/b&gt;&lt;p&gt;Zobrazí se metriky kódu všech python souborů v projektu.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4142"/>
-        <source>Python Code Coverage</source>
-        <translation>Pokrytí python kódu</translation>
-    </message>
-    <message>
-        <location filename="../Project/Project.py" line="4142"/>
-        <source>Code Co&amp;verage...</source>
-        <translation>Pokr&amp;ytí kódu...</translation>
-    </message>
-    <message>
         <location filename="../Project/Project.py" line="4146"/>
+        <source>Python Code Coverage</source>
+        <translation>Pokrytí python kódu</translation>
+    </message>
+    <message>
+        <location filename="../Project/Project.py" line="4146"/>
+        <source>Code Co&amp;verage...</source>
+        <translation>Pokr&amp;ytí kódu...</translation>
+    </message>
+    <message>
+        <location filename="../Project/Project.py" line="4150"/>
         <source>Show code coverage information for the project.</source>
         <translation>Zobrazit informace pokrytí kódu projektu.</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4148"/>
+        <location filename="../Project/Project.py" line="4152"/>
         <source>&lt;b&gt;Code Coverage...&lt;/b&gt;&lt;p&gt;This shows the code coverage information for all Python files in the project.&lt;/p&gt;</source>
         <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="5032"/>
+        <location filename="../Project/Project.py" line="5036"/>
         <source>Profile Data</source>
         <translation>Profilovat data</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4156"/>
-        <source>&amp;Profile Data...</source>
-        <translation>&amp;Profilovat data...</translation>
-    </message>
-    <message>
         <location filename="../Project/Project.py" line="4160"/>
+        <source>&amp;Profile Data...</source>
+        <translation>&amp;Profilovat data...</translation>
+    </message>
+    <message>
+        <location filename="../Project/Project.py" line="4164"/>
         <source>Show profiling data for the project.</source>
         <translation>Zobrazit profilování dat projektu.</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4162"/>
+        <location filename="../Project/Project.py" line="4166"/>
         <source>&lt;b&gt;Profile Data...&lt;/b&gt;&lt;p&gt;This shows the profiling data for the project.&lt;/p&gt;</source>
         <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="5086"/>
+        <location filename="../Project/Project.py" line="5090"/>
         <source>Application Diagram</source>
         <translation>Diagram aplikace</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4171"/>
-        <source>&amp;Application Diagram...</source>
-        <translation>Diagram &amp;aplikace...</translation>
-    </message>
-    <message>
         <location filename="../Project/Project.py" line="4175"/>
+        <source>&amp;Application Diagram...</source>
+        <translation>Diagram &amp;aplikace...</translation>
+    </message>
+    <message>
+        <location filename="../Project/Project.py" line="4179"/>
         <source>Show a diagram of the project.</source>
         <translation>Zobrazit diagram projektu.</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4177"/>
+        <location filename="../Project/Project.py" line="4181"/>
         <source>&lt;b&gt;Application Diagram...&lt;/b&gt;&lt;p&gt;This shows a diagram of the project.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Diagram aplikace...&lt;/b&gt;&lt;p&gt;Zobrazí diagram projektu.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4302"/>
+        <location filename="../Project/Project.py" line="4306"/>
         <source>&amp;Project</source>
         <translation>&amp;Projekt</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4303"/>
+        <location filename="../Project/Project.py" line="4307"/>
         <source>Open &amp;Recent Projects</source>
         <translation>Otevřít poslední p&amp;rojekty</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4308"/>
-        <source>&amp;Version Control</source>
-        <translation>Kontrola &amp;verzí</translation>
-    </message>
-    <message>
         <location filename="../Project/Project.py" line="4312"/>
-        <source>Chec&amp;k</source>
-        <translation>Zkontro&amp;lovat</translation>
-    </message>
-    <message>
-        <location filename="../Project/Project.py" line="4314"/>
-        <source>Sho&amp;w</source>
-        <translation>Zo&amp;brazit</translation>
-    </message>
-    <message>
-        <location filename="../Project/Project.py" line="4315"/>
-        <source>&amp;Diagrams</source>
-        <translation>&amp;Diagramy</translation>
-    </message>
-    <message>
-        <location filename="../Project/Project.py" line="4304"/>
-        <source>Session</source>
-        <translation>Relace</translation>
-    </message>
-    <message>
-        <location filename="../Project/Project.py" line="4317"/>
-        <source>Source &amp;Documentation</source>
-        <translation>Zd&amp;rojová dokumentace</translation>
-    </message>
-    <message>
-        <location filename="../Project/Project.py" line="4305"/>
-        <source>Debugger</source>
-        <translation></translation>
+        <source>&amp;Version Control</source>
+        <translation>Kontrola &amp;verzí</translation>
     </message>
     <message>
         <location filename="../Project/Project.py" line="4316"/>
+        <source>Chec&amp;k</source>
+        <translation>Zkontro&amp;lovat</translation>
+    </message>
+    <message>
+        <location filename="../Project/Project.py" line="4318"/>
+        <source>Sho&amp;w</source>
+        <translation>Zo&amp;brazit</translation>
+    </message>
+    <message>
+        <location filename="../Project/Project.py" line="4319"/>
+        <source>&amp;Diagrams</source>
+        <translation>&amp;Diagramy</translation>
+    </message>
+    <message>
+        <location filename="../Project/Project.py" line="4308"/>
+        <source>Session</source>
+        <translation>Relace</translation>
+    </message>
+    <message>
+        <location filename="../Project/Project.py" line="4321"/>
+        <source>Source &amp;Documentation</source>
+        <translation>Zd&amp;rojová dokumentace</translation>
+    </message>
+    <message>
+        <location filename="../Project/Project.py" line="4309"/>
+        <source>Debugger</source>
+        <translation></translation>
+    </message>
+    <message>
+        <location filename="../Project/Project.py" line="4320"/>
         <source>Pac&amp;kagers</source>
         <translation>Balíč&amp;ky</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4442"/>
+        <location filename="../Project/Project.py" line="4446"/>
         <source>Project</source>
         <translation>Projekt</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4508"/>
+        <location filename="../Project/Project.py" line="4512"/>
         <source>&amp;Clear</source>
         <translation>&amp;Vyčistit</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4681"/>
+        <location filename="../Project/Project.py" line="4685"/>
         <source>Search New Files</source>
         <translation>Hledat nové soubory</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4681"/>
+        <location filename="../Project/Project.py" line="4685"/>
         <source>There were no new files found to be added.</source>
         <translation>Nebyly nalezeny žádné soubory, které je možné přidat.</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4829"/>
+        <location filename="../Project/Project.py" line="4833"/>
         <source>Version Control System</source>
         <translation>Version Control System</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4959"/>
+        <location filename="../Project/Project.py" line="4963"/>
         <source>Coverage Data</source>
         <translation>Datové pokrytí</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="5009"/>
+        <location filename="../Project/Project.py" line="5013"/>
         <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="4982"/>
+        <location filename="../Project/Project.py" line="4986"/>
         <source>Code Coverage</source>
         <translation>Pokrytí kódu</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4982"/>
+        <location filename="../Project/Project.py" line="4986"/>
         <source>Please select a coverage file</source>
         <translation>Prosím, vyberte soubor pokrytí</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="5032"/>
+        <location filename="../Project/Project.py" line="5036"/>
         <source>Please select a profile file</source>
         <translation>Prosím, vyberte soubor s profilem</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="5086"/>
+        <location filename="../Project/Project.py" line="5090"/>
         <source>Include module names?</source>
         <translation>Včetně jmen modulů?</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="5281"/>
+        <location filename="../Project/Project.py" line="5285"/>
         <source>Create Package List</source>
         <translation>Vytvořit seznam balíčků</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4200"/>
+        <location filename="../Project/Project.py" line="4204"/>
         <source>Create &amp;Package List</source>
         <translation type="unfinished">Vytvořit Plugin &amp;archiv</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="5554"/>
+        <location filename="../Project/Project.py" line="5558"/>
         <source>Create Plugin Archive</source>
         <translation>Vytvořit Plugin archiv</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="5230"/>
+        <location filename="../Project/Project.py" line="5234"/>
         <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>
     <message>
-        <location filename="../Project/Project.py" line="5300"/>
+        <location filename="../Project/Project.py" line="5304"/>
         <source>The project does not have a main script defined. Aborting...</source>
         <translation>Projekt nemá definován hlavní skript. Zrušeno...</translation>
     </message>
@@ -54434,12 +54434,12 @@
         <translation>&lt;p&gt;Zdrojový adresář neobsahuje žádné soubory související s danou kategorií.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="2939"/>
+        <location filename="../Project/Project.py" line="2943"/>
         <source>Select Version Control System</source>
         <translation>Vybrat Version Control System</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="2560"/>
+        <location filename="../Project/Project.py" line="2564"/>
         <source>None</source>
         <translation>None</translation>
     </message>
@@ -54449,7 +54449,7 @@
         <translation>Zaregistrovat typ projektu</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4216"/>
+        <location filename="../Project/Project.py" line="4220"/>
         <source>Create Plugin &amp;Archives</source>
         <translation type="unfinished"></translation>
     </message>
@@ -54459,32 +54459,32 @@
         <translation>Nejdříve musíte specifikovat vzor překladu.</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="2662"/>
+        <location filename="../Project/Project.py" line="2666"/>
         <source>Translation Pattern</source>
         <translation>Vzor překladu</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="2662"/>
+        <location filename="../Project/Project.py" line="2666"/>
         <source>Enter the path pattern for translation files (use &apos;%language%&apos; in place of the language code):</source>
         <translation>Zadejte vzor cesty pro soubory s překlady (použijte  &apos;%language%&apos; na místě s kódem jazyka):</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="3996"/>
-        <source>Lexer Associations</source>
-        <translation>Spojení lexeru</translation>
-    </message>
-    <message>
-        <location filename="../Project/Project.py" line="3996"/>
-        <source>Lexer Associations...</source>
-        <translation>Spojení lexeru...</translation>
-    </message>
-    <message>
         <location filename="../Project/Project.py" line="4000"/>
+        <source>Lexer Associations</source>
+        <translation>Spojení lexeru</translation>
+    </message>
+    <message>
+        <location filename="../Project/Project.py" line="4000"/>
+        <source>Lexer Associations...</source>
+        <translation>Spojení lexeru...</translation>
+    </message>
+    <message>
+        <location filename="../Project/Project.py" line="4004"/>
         <source>Show the project lexer associations (overriding defaults)</source>
         <translation>Zobrazit spojení lexeru projektu (přepíše výchozí)</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4002"/>
+        <location filename="../Project/Project.py" line="4006"/>
         <source>&lt;b&gt;Lexer Associations...&lt;/b&gt;&lt;p&gt;This shows a dialog to edit the lexer associations of the project. These associations override the global lexer associations. Lexers are used to highlight the editor text.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Spojení lexeru...&lt;/b&gt;&lt;p&gt;Zobrazuje dialog s editací spojení lexeru projektu. Tato spojení přepisují globální lexer spojení. Lexer je použit pro zvýraznění textu v editoru.&lt;/p&gt;</translation>
     </message>
@@ -54564,7 +54564,7 @@
         <translation>&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="../Project/Project.py" line="3098"/>
+        <location filename="../Project/Project.py" line="3102"/>
         <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; already exists. Overwrite it?&lt;/p&gt;</source>
         <translation>&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>
@@ -54579,22 +54579,22 @@
         <translation>&lt;p&gt;Adresář projektu &lt;b&gt;{0}&lt;/b&gt; nelze vytvořit.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4829"/>
+        <location filename="../Project/Project.py" line="4833"/>
         <source>&lt;p&gt;The selected VCS &lt;b&gt;{0}&lt;/b&gt; could not be found.&lt;br/&gt;Disabling version control.&lt;/p&gt;&lt;p&gt;{1}&lt;/p&gt;</source>
         <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="5281"/>
+        <location filename="../Project/Project.py" line="5285"/>
         <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>
     <message>
-        <location filename="../Project/Project.py" line="5440"/>
+        <location filename="../Project/Project.py" line="5444"/>
         <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="5513"/>
+        <location filename="../Project/Project.py" line="5517"/>
         <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>
@@ -54609,32 +54609,32 @@
         <translation>&lt;p&gt;Cílový adresář &lt;b&gt;{0}&lt;/b&gt; nelze vytvořit.&lt;/p&gt;&lt;p&gt;Důvod: {1}&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="2421"/>
+        <location filename="../Project/Project.py" line="2424"/>
         <source>Create main script</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="2421"/>
+        <location filename="../Project/Project.py" line="2424"/>
         <source>&lt;p&gt;The mainscript &lt;b&gt;{0}&lt;/b&gt; could not be created.&lt;br/&gt;Reason: {1}&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4185"/>
-        <source>Load Diagram</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../Project/Project.py" line="4185"/>
-        <source>&amp;Load Diagram...</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <location filename="../Project/Project.py" line="4189"/>
+        <source>Load Diagram</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Project/Project.py" line="4189"/>
+        <source>&amp;Load Diagram...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Project/Project.py" line="4193"/>
         <source>Load a diagram from file.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4191"/>
+        <location filename="../Project/Project.py" line="4195"/>
         <source>&lt;b&gt;Load Diagram...&lt;/b&gt;&lt;p&gt;This loads a diagram from file.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
@@ -54659,37 +54659,37 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4817"/>
+        <location filename="../Project/Project.py" line="4821"/>
         <source>&lt;p&gt;The selected VCS &lt;b&gt;{0}&lt;/b&gt; could not be found. &lt;br/&gt;Reverting override.&lt;/p&gt;&lt;p&gt;{1}&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="5554"/>
+        <location filename="../Project/Project.py" line="5558"/>
         <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>
     <message>
-        <location filename="../Project/Project.py" line="4205"/>
+        <location filename="../Project/Project.py" line="4209"/>
         <source>Create an initial PKGLIST file for an eric6 plugin.</source>
         <translation type="unfinished">Vytvořit soubor eric5 plugin archivu. {6 ?}</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4207"/>
+        <location filename="../Project/Project.py" line="4211"/>
         <source>&lt;b&gt;Create Package List&lt;/b&gt;&lt;p&gt;This creates an initial list of files to include in an eric6 plugin archive. The list is created from the project file.&lt;/p&gt;</source>
         <translation type="unfinished">&lt;b&gt;Vytvořit Plugin archiv&lt;/b&gt;&lt;p&gt;Vytvoří soubor s eric5 plugin archivem za použití seznamu souborů daných v PKGLIST souboru. Jméno archivu je odvozeno ze jména hlavního skriptu.&lt;/p&gt; {6 ?}</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4221"/>
+        <location filename="../Project/Project.py" line="4225"/>
         <source>Create eric6 plugin archive files.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4223"/>
+        <location filename="../Project/Project.py" line="4227"/>
         <source>&lt;b&gt;Create Plugin Archives&lt;/b&gt;&lt;p&gt;This creates eric6 plugin archive files using the list of files given in a PKGLIST* file. The archive name is built from the main script name if not designated in the package list file.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="5404"/>
+        <location filename="../Project/Project.py" line="5408"/>
         <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>
@@ -54699,118 +54699,118 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="2909"/>
+        <location filename="../Project/Project.py" line="2913"/>
         <source>Create project management directory</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="2909"/>
+        <location filename="../Project/Project.py" line="2913"/>
         <source>&lt;p&gt;The project directory &lt;b&gt;{0}&lt;/b&gt; is not writable.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="3935"/>
+        <location filename="../Project/Project.py" line="3939"/>
         <source>Alt+Ctrl+P</source>
         <comment>Project|Search Project File</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="3941"/>
+        <location filename="../Project/Project.py" line="3945"/>
         <source>Search for a file in the project list of files.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="3943"/>
+        <location filename="../Project/Project.py" line="3947"/>
         <source>&lt;b&gt;Search Project File&lt;/b&gt;&lt;p&gt;This searches for a file in the project list of files.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="3935"/>
+        <location filename="../Project/Project.py" line="3939"/>
         <source>Search Project File</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="3935"/>
+        <location filename="../Project/Project.py" line="3939"/>
         <source>Search Project File...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
+        <location filename="../Project/Project.py" line="5340"/>
+        <source>Create Plugin Archives</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Project/Project.py" line="4237"/>
+        <source>Create Plugin Archives (Snapshot)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Project/Project.py" line="4237"/>
+        <source>Create Plugin Archives (&amp;Snapshot)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Project/Project.py" line="4242"/>
+        <source>Create eric6 plugin archive files (snapshot releases).</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Project/Project.py" line="4244"/>
+        <source>&lt;b&gt;Create Plugin Archives (Snapshot)&lt;/b&gt;&lt;p&gt;This creates eric6 plugin archive files using the list of files given in the PKGLIST* file. The archive name is built from the main script name if not designated in the package list file. The version entry of the main script is modified to reflect a snapshot release.&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Project/Project.py" line="5318"/>
+        <source>Select package lists:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
         <location filename="../Project/Project.py" line="5336"/>
-        <source>Create Plugin Archives</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../Project/Project.py" line="4233"/>
-        <source>Create Plugin Archives (Snapshot)</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../Project/Project.py" line="4233"/>
-        <source>Create Plugin Archives (&amp;Snapshot)</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../Project/Project.py" line="4238"/>
-        <source>Create eric6 plugin archive files (snapshot releases).</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../Project/Project.py" line="4240"/>
-        <source>&lt;b&gt;Create Plugin Archives (Snapshot)&lt;/b&gt;&lt;p&gt;This creates eric6 plugin archive files using the list of files given in the PKGLIST* file. The archive name is built from the main script name if not designated in the package list file. The version entry of the main script is modified to reflect a snapshot release.&lt;/p&gt;</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../Project/Project.py" line="5314"/>
-        <source>Select package lists:</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../Project/Project.py" line="5332"/>
         <source>Creating plugin archives...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="5332"/>
+        <location filename="../Project/Project.py" line="5336"/>
         <source>Abort</source>
         <translation type="unfinished">Přerušit</translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="5332"/>
+        <location filename="../Project/Project.py" line="5336"/>
         <source>%v/%m Archives</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="5348"/>
+        <location filename="../Project/Project.py" line="5352"/>
         <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="5459"/>
+        <location filename="../Project/Project.py" line="5463"/>
         <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="5462"/>
+        <location filename="../Project/Project.py" line="5466"/>
         <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="5325"/>
+        <location filename="../Project/Project.py" line="5329"/>
         <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="5376"/>
+        <location filename="../Project/Project.py" line="5380"/>
         <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>
     <message>
-        <location filename="../Project/Project.py" line="3926"/>
+        <location filename="../Project/Project.py" line="3930"/>
         <source>&lt;b&gt;Search new files...&lt;/b&gt;&lt;p&gt;This searches for new files (sources, *.ui, *.idl, *.proto) in the project directory and registered subdirectories.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="3984"/>
+        <location filename="../Project/Project.py" line="3988"/>
         <source>&lt;b&gt;Filetype Associations...&lt;/b&gt;&lt;p&gt;This shows a dialog to edit the file type associations of the project. These associations determine the type (source, form, interface, protocol or others) with a filename pattern. They are used when adding a file to the project and when performing a search for new files.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
@@ -54830,82 +54830,82 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="2735"/>
+        <location filename="../Project/Project.py" line="2739"/>
         <source>Create Makefile</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="2735"/>
+        <location filename="../Project/Project.py" line="2739"/>
         <source>&lt;p&gt;The makefile &lt;b&gt;{0}&lt;/b&gt; could not be created.&lt;br/&gt;Reason: {1}&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="5740"/>
+        <location filename="../Project/Project.py" line="5744"/>
         <source>Execute Make</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4254"/>
-        <source>&amp;Execute Make</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <location filename="../Project/Project.py" line="4258"/>
+        <source>&amp;Execute Make</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Project/Project.py" line="4262"/>
         <source>Perform a &apos;make&apos; run.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4260"/>
+        <location filename="../Project/Project.py" line="4264"/>
         <source>&lt;b&gt;Execute Make&lt;/b&gt;&lt;p&gt;This performs a &apos;make&apos; run to rebuild the configured target.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="5720"/>
+        <location filename="../Project/Project.py" line="5724"/>
         <source>Test for Changes</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4268"/>
-        <source>&amp;Test for Changes</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <location filename="../Project/Project.py" line="4272"/>
+        <source>&amp;Test for Changes</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Project/Project.py" line="4276"/>
         <source>Question &apos;make&apos;, if a rebuild is needed.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4274"/>
+        <location filename="../Project/Project.py" line="4278"/>
         <source>&lt;b&gt;Test for Changes&lt;/b&gt;&lt;p&gt;This questions &apos;make&apos;, if a rebuild of the configured target is necessary.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4319"/>
+        <location filename="../Project/Project.py" line="4323"/>
         <source>Make</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="5668"/>
+        <location filename="../Project/Project.py" line="5672"/>
         <source>The make process did not start.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="5713"/>
+        <location filename="../Project/Project.py" line="5717"/>
         <source>The make process crashed.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="5723"/>
+        <location filename="../Project/Project.py" line="5727"/>
         <source>&lt;p&gt;There are changes that require the configured make target &lt;b&gt;{0}&lt;/b&gt; to be rebuilt.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="5728"/>
+        <location filename="../Project/Project.py" line="5732"/>
         <source>&lt;p&gt;There are changes that require the default make target to be rebuilt.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="5740"/>
+        <location filename="../Project/Project.py" line="5744"/>
         <source>The makefile contains errors.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -54920,7 +54920,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Project/Project.py" line="4307"/>
+        <location filename="../Project/Project.py" line="4311"/>
         <source>Project-T&amp;ools</source>
         <translation type="unfinished"></translation>
     </message>
@@ -65260,231 +65260,251 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../QScintilla/ShellWindow.py" line="242"/>
-        <source>&lt;b&gt;Restart&lt;/b&gt;&lt;p&gt;Restart the shell for the currently selected language.&lt;/p&gt;</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../QScintilla/ShellWindow.py" line="249"/>
+        <location filename="../QScintilla/ShellWindow.py" line="250"/>
         <source>Restart and Clear</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../QScintilla/ShellWindow.py" line="254"/>
+        <location filename="../QScintilla/ShellWindow.py" line="255"/>
         <source>Clear the window and restart the shell</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../QScintilla/ShellWindow.py" line="256"/>
-        <source>&lt;b&gt;Restart and Clear&lt;/b&gt;&lt;p&gt;Clear the shell window and restart the shell for the currently selected language.&lt;/p&gt;</source>
+        <location filename="../QScintilla/ShellWindow.py" line="885"/>
+        <source>Show History</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../QScintilla/ShellWindow.py" line="885"/>
+        <source>&amp;Show History...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../QScintilla/ShellWindow.py" line="891"/>
-        <source>Show History</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../QScintilla/ShellWindow.py" line="891"/>
-        <source>&amp;Show History...</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../QScintilla/ShellWindow.py" line="897"/>
         <source>Show the shell history in a dialog</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
+        <location filename="../QScintilla/ShellWindow.py" line="895"/>
+        <source>Clear History</source>
+        <translation type="unfinished">Vyčistit historii</translation>
+    </message>
+    <message>
+        <location filename="../QScintilla/ShellWindow.py" line="895"/>
+        <source>&amp;Clear History...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
         <location filename="../QScintilla/ShellWindow.py" line="901"/>
-        <source>Clear History</source>
-        <translation type="unfinished">Vyčistit historii</translation>
-    </message>
-    <message>
-        <location filename="../QScintilla/ShellWindow.py" line="901"/>
-        <source>&amp;Clear History...</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../QScintilla/ShellWindow.py" line="907"/>
         <source>Clear the shell history</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../QScintilla/ShellWindow.py" line="911"/>
+        <location filename="../QScintilla/ShellWindow.py" line="905"/>
         <source>Select History Entry</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../QScintilla/ShellWindow.py" line="911"/>
+        <location filename="../QScintilla/ShellWindow.py" line="905"/>
         <source>Select History &amp;Entry</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../QScintilla/ShellWindow.py" line="916"/>
+        <location filename="../QScintilla/ShellWindow.py" line="910"/>
         <source>Select an entry of the shell history</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
+        <location filename="../QScintilla/ShellWindow.py" line="918"/>
+        <source>About</source>
+        <translation type="unfinished">O aplikaci</translation>
+    </message>
+    <message>
+        <location filename="../QScintilla/ShellWindow.py" line="918"/>
+        <source>&amp;About</source>
+        <translation type="unfinished">O &amp;aplikaci</translation>
+    </message>
+    <message>
+        <location filename="../QScintilla/ShellWindow.py" line="922"/>
+        <source>Display information about this software</source>
+        <translation type="unfinished">Zobrazit informace a tomto software</translation>
+    </message>
+    <message>
         <location filename="../QScintilla/ShellWindow.py" line="924"/>
-        <source>About</source>
-        <translation type="unfinished">O aplikaci</translation>
-    </message>
-    <message>
-        <location filename="../QScintilla/ShellWindow.py" line="924"/>
-        <source>&amp;About</source>
-        <translation type="unfinished">O &amp;aplikaci</translation>
-    </message>
-    <message>
-        <location filename="../QScintilla/ShellWindow.py" line="928"/>
-        <source>Display information about this software</source>
-        <translation type="unfinished">Zobrazit informace a tomto software</translation>
+        <source>&lt;b&gt;About&lt;/b&gt;&lt;p&gt;Display some information about this software.&lt;/p&gt;</source>
+        <translation type="unfinished">&lt;b&gt;O aplikaci&lt;/b&gt;&lt;p&gt;Zobrazí se informace o tomto software.&lt;/p&gt;</translation>
+    </message>
+    <message>
+        <location filename="../QScintilla/ShellWindow.py" line="930"/>
+        <source>About Qt</source>
+        <translation type="unfinished">O Qt</translation>
     </message>
     <message>
         <location filename="../QScintilla/ShellWindow.py" line="930"/>
-        <source>&lt;b&gt;About&lt;/b&gt;&lt;p&gt;Display some information about this software.&lt;/p&gt;</source>
-        <translation type="unfinished">&lt;b&gt;O aplikaci&lt;/b&gt;&lt;p&gt;Zobrazí se informace o tomto software.&lt;/p&gt;</translation>
-    </message>
-    <message>
-        <location filename="../QScintilla/ShellWindow.py" line="936"/>
-        <source>About Qt</source>
-        <translation type="unfinished">O Qt</translation>
+        <source>About &amp;Qt</source>
+        <translation type="unfinished">O &amp;Qt</translation>
+    </message>
+    <message>
+        <location filename="../QScintilla/ShellWindow.py" line="934"/>
+        <source>Display information about the Qt toolkit</source>
+        <translation type="unfinished">Zobrazit informace o Qt toolkitu</translation>
     </message>
     <message>
         <location filename="../QScintilla/ShellWindow.py" line="936"/>
-        <source>About &amp;Qt</source>
-        <translation type="unfinished">O &amp;Qt</translation>
-    </message>
-    <message>
-        <location filename="../QScintilla/ShellWindow.py" line="940"/>
-        <source>Display information about the Qt toolkit</source>
-        <translation type="unfinished">Zobrazit informace o Qt toolkitu</translation>
-    </message>
-    <message>
-        <location filename="../QScintilla/ShellWindow.py" line="942"/>
         <source>&lt;b&gt;About Qt&lt;/b&gt;&lt;p&gt;Display some information about the Qt toolkit.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
+        <location filename="../QScintilla/ShellWindow.py" line="943"/>
+        <source>What&apos;s This?</source>
+        <translation type="unfinished">Co je to?</translation>
+    </message>
+    <message>
+        <location filename="../QScintilla/ShellWindow.py" line="943"/>
+        <source>&amp;What&apos;s This?</source>
+        <translation type="unfinished">&amp;Co je to?</translation>
+    </message>
+    <message>
+        <location filename="../QScintilla/ShellWindow.py" line="943"/>
+        <source>Shift+F1</source>
+        <comment>Help|What&apos;s This?&apos;</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
         <location filename="../QScintilla/ShellWindow.py" line="949"/>
-        <source>What&apos;s This?</source>
-        <translation type="unfinished">Co je to?</translation>
-    </message>
-    <message>
-        <location filename="../QScintilla/ShellWindow.py" line="949"/>
-        <source>&amp;What&apos;s This?</source>
-        <translation type="unfinished">&amp;Co je to?</translation>
-    </message>
-    <message>
-        <location filename="../QScintilla/ShellWindow.py" line="949"/>
-        <source>Shift+F1</source>
-        <comment>Help|What&apos;s This?&apos;</comment>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../QScintilla/ShellWindow.py" line="955"/>
         <source>Context sensitive help</source>
         <translation type="unfinished">Kontextově senzitivní nápověda</translation>
     </message>
     <message>
-        <location filename="../QScintilla/ShellWindow.py" line="956"/>
+        <location filename="../QScintilla/ShellWindow.py" line="950"/>
         <source>&lt;b&gt;Display context sensitive help&lt;/b&gt;&lt;p&gt;In What&apos;s This? mode, the mouse cursor shows an arrow with a question mark, and you can click on the interface elements to get a short description of what they do and how to use them. In dialogs, this feature can be accessed using the context help button in the titlebar.&lt;/p&gt;</source>
         <translation type="unfinished">&lt;b&gt;Zobrazit kontextově senzitivní nápovědu&lt;/b&gt;&lt;p&gt;V režimu &quot;Co je to?&quot; se nad různými prvky aplikace u kurzoru zobrazí otazník. Když pak kliknete na tyto prvky, zobrazí se krátký popis co daný prvek znamená a jak jej použít. V dialogových oknech se tato funkce spustí tlačítkem kontextové nápovědy na horní liště.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../QScintilla/ShellWindow.py" line="1100"/>
+        <location filename="../QScintilla/ShellWindow.py" line="1094"/>
         <source>About eric6 Shell Window</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../QScintilla/ShellWindow.py" line="1100"/>
+        <location filename="../QScintilla/ShellWindow.py" line="1094"/>
         <source>The eric6 Shell is a standalone shell window. It uses the same backend as the debugger of the full IDE, but is executed independently.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../QScintilla/ShellWindow.py" line="1128"/>
+        <location filename="../QScintilla/ShellWindow.py" line="1122"/>
         <source>&amp;File</source>
         <translation type="unfinished">S&amp;oubor</translation>
     </message>
     <message>
-        <location filename="../QScintilla/ShellWindow.py" line="1137"/>
+        <location filename="../QScintilla/ShellWindow.py" line="1131"/>
         <source>&amp;Edit</source>
         <translation type="unfinished">&amp;Edit</translation>
     </message>
     <message>
-        <location filename="../QScintilla/ShellWindow.py" line="1148"/>
+        <location filename="../QScintilla/ShellWindow.py" line="1142"/>
         <source>&amp;View</source>
         <translation type="unfinished">Poh&amp;led</translation>
     </message>
     <message>
-        <location filename="../QScintilla/ShellWindow.py" line="1155"/>
+        <location filename="../QScintilla/ShellWindow.py" line="1149"/>
         <source>Histor&amp;y</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
+        <location filename="../QScintilla/ShellWindow.py" line="1156"/>
+        <source>&amp;Start</source>
+        <translation type="unfinished">&amp;Start</translation>
+    </message>
+    <message>
         <location filename="../QScintilla/ShellWindow.py" line="1162"/>
-        <source>&amp;Start</source>
-        <translation type="unfinished">&amp;Start</translation>
-    </message>
-    <message>
-        <location filename="../QScintilla/ShellWindow.py" line="1168"/>
         <source>&amp;Help</source>
         <translation type="unfinished">&amp;Nápověda</translation>
     </message>
     <message>
-        <location filename="../QScintilla/ShellWindow.py" line="1201"/>
+        <location filename="../QScintilla/ShellWindow.py" line="1195"/>
         <source>File</source>
         <translation type="unfinished">Soubor</translation>
     </message>
     <message>
-        <location filename="../QScintilla/ShellWindow.py" line="1210"/>
+        <location filename="../QScintilla/ShellWindow.py" line="1204"/>
         <source>Edit</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
+        <location filename="../QScintilla/ShellWindow.py" line="1211"/>
+        <source>Find</source>
+        <translation type="unfinished">Hledat</translation>
+    </message>
+    <message>
         <location filename="../QScintilla/ShellWindow.py" line="1217"/>
-        <source>Find</source>
-        <translation type="unfinished">Hledat</translation>
-    </message>
-    <message>
-        <location filename="../QScintilla/ShellWindow.py" line="1223"/>
         <source>View</source>
         <translation type="unfinished">Pohled</translation>
     </message>
     <message>
+        <location filename="../QScintilla/ShellWindow.py" line="1224"/>
+        <source>History</source>
+        <translation type="unfinished">Historie</translation>
+    </message>
+    <message>
         <location filename="../QScintilla/ShellWindow.py" line="1230"/>
-        <source>History</source>
-        <translation type="unfinished">Historie</translation>
-    </message>
-    <message>
-        <location filename="../QScintilla/ShellWindow.py" line="1236"/>
         <source>Help</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../QScintilla/ShellWindow.py" line="1257"/>
+        <location filename="../QScintilla/ShellWindow.py" line="1251"/>
         <source>&lt;p&gt;This part of the status bar allows zooming the  shell.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../QScintilla/ShellWindow.py" line="585"/>
+        <location filename="../QScintilla/ShellWindow.py" line="579"/>
         <source>Move forward one history entry</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../QScintilla/ShellWindow.py" line="595"/>
+        <location filename="../QScintilla/ShellWindow.py" line="589"/>
         <source>Move back one history entry</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../QScintilla/ShellWindow.py" line="1036"/>
+        <location filename="../QScintilla/ShellWindow.py" line="1030"/>
         <source>eric6 Shell</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../QScintilla/ShellWindow.py" line="1034"/>
+        <location filename="../QScintilla/ShellWindow.py" line="1028"/>
         <source>eric6 Shell [{0}]</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../QScintilla/ShellWindow.py" line="242"/>
+        <source>&lt;b&gt;Restart&lt;/b&gt;&lt;p&gt;Restart the shell for the currently selected environment.&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../QScintilla/ShellWindow.py" line="257"/>
+        <source>&lt;b&gt;Restart and Clear&lt;/b&gt;&lt;p&gt;Clear the shell window and restart the shell for the currently selected environment.&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../QScintilla/ShellWindow.py" line="284"/>
+        <source>&lt;b&gt;Cut&lt;/b&gt;&lt;p&gt;Cut the selected text to the clipboard.&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../QScintilla/ShellWindow.py" line="302"/>
+        <source>&lt;b&gt;Copy&lt;/b&gt;&lt;p&gt;Copy the selected text to the clipboard.&lt;/p&gt;</source>
+        <translation type="unfinished">&lt;b&gt;Kopírovat&lt;/b&gt;&lt;p&gt;Kopírovat vybraný text do schránky.&lt;/p&gt;</translation>
+    </message>
+    <message>
+        <location filename="../QScintilla/ShellWindow.py" line="320"/>
+        <source>&lt;b&gt;Paste&lt;/b&gt;&lt;p&gt;Paste the last cut/copied text from the clipboard.&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../QScintilla/ShellWindow.py" line="337"/>
+        <source>&lt;b&gt;Clear&lt;/b&gt;&lt;p&gt;Delete all text.&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>Shelve</name>
@@ -77807,568 +77827,568 @@
 <context>
     <name>UserInterface</name>
     <message>
-        <location filename="../UI/UserInterface.py" line="277"/>
+        <location filename="../UI/UserInterface.py" line="278"/>
         <source>Generating Main User Interface...</source>
         <translation>Generování hlavního uživatelského rozhraní...</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="327"/>
+        <location filename="../UI/UserInterface.py" line="328"/>
         <source>Setting up connections...</source>
         <translation>Nastavení připojení...</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="584"/>
+        <location filename="../UI/UserInterface.py" line="585"/>
         <source>Initializing Tools...</source>
         <translation>Inicializace nástrojů...</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="594"/>
+        <location filename="../UI/UserInterface.py" line="595"/>
         <source>Registering Objects...</source>
         <translation>Registrování objektů...</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="627"/>
+        <location filename="../UI/UserInterface.py" line="628"/>
         <source>Initializing Actions...</source>
         <translation>Inicializace akcí...</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="629"/>
+        <location filename="../UI/UserInterface.py" line="630"/>
         <source>Initializing Menus...</source>
         <translation>Inicializace menu...</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="631"/>
+        <location filename="../UI/UserInterface.py" line="632"/>
         <source>Initializing Toolbars...</source>
         <translation>Inicializace nástrojových lišt...</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="633"/>
+        <location filename="../UI/UserInterface.py" line="634"/>
         <source>Initializing Statusbar...</source>
         <translation>Inicializace statusbaru...</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="660"/>
+        <location filename="../UI/UserInterface.py" line="661"/>
         <source>Initializing Single Application Server...</source>
         <translation>Inicializace jednouživatelského aplikačního serveru...</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="1715"/>
+        <location filename="../UI/UserInterface.py" line="1749"/>
         <source>Project-Viewer</source>
         <translation>Prohlížeč projektu</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="1750"/>
+        <location filename="../UI/UserInterface.py" line="1784"/>
         <source>Debug-Viewer</source>
         <translation>Prohlížeč debugeru</translation>
     </message>
     <message>
+        <location filename="../UI/UserInterface.py" line="1836"/>
+        <source>Log-Viewer</source>
+        <translation>Prohlížeč logu</translation>
+    </message>
+    <message>
+        <location filename="../UI/UserInterface.py" line="1854"/>
+        <source>Task-Viewer</source>
+        <translation>Prohlížeč úloh</translation>
+    </message>
+    <message>
+        <location filename="../UI/UserInterface.py" line="1873"/>
+        <source>Template-Viewer</source>
+        <translation>Prohlížeč šablon</translation>
+    </message>
+    <message>
         <location filename="../UI/UserInterface.py" line="1802"/>
-        <source>Log-Viewer</source>
-        <translation>Prohlížeč logu</translation>
-    </message>
-    <message>
-        <location filename="../UI/UserInterface.py" line="1820"/>
-        <source>Task-Viewer</source>
-        <translation>Prohlížeč úloh</translation>
-    </message>
-    <message>
-        <location filename="../UI/UserInterface.py" line="1839"/>
-        <source>Template-Viewer</source>
-        <translation>Prohlížeč šablon</translation>
-    </message>
-    <message>
-        <location filename="../UI/UserInterface.py" line="1768"/>
         <source>Shell</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="1785"/>
+        <location filename="../UI/UserInterface.py" line="1819"/>
         <source>File-Browser</source>
         <translation>Browser souborů</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="1603"/>
+        <location filename="../UI/UserInterface.py" line="1637"/>
         <source>Quit</source>
         <translation>Konec</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="1603"/>
+        <location filename="../UI/UserInterface.py" line="1637"/>
         <source>&amp;Quit</source>
         <translation>&amp;Konec</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="1603"/>
+        <location filename="../UI/UserInterface.py" line="1637"/>
         <source>Ctrl+Q</source>
         <comment>File|Quit</comment>
         <translation></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="1609"/>
+        <location filename="../UI/UserInterface.py" line="1643"/>
         <source>Quit the IDE</source>
         <translation>Ukončit IDE</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="1610"/>
+        <location filename="../UI/UserInterface.py" line="1644"/>
         <source>&lt;b&gt;Quit the IDE&lt;/b&gt;&lt;p&gt;This quits the IDE. Any unsaved changes may be saved first. Any Python program being debugged will be stopped and the preferences will be written to disc.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Ukončit IDE&lt;/b&gt;&lt;p&gt;Ukončí se IDE. Nejdříve by se měly uložit neuložené změny. Python programy běžící v debug procesu budou ukončeny a nastavení budou uložena.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="1681"/>
-        <source>Edit Profile</source>
-        <translation>Editační profil</translation>
-    </message>
-    <message>
-        <location filename="../UI/UserInterface.py" line="1687"/>
-        <source>Activate the edit view profile</source>
-        <translation>Aktivovat profil editace</translation>
-    </message>
-    <message>
-        <location filename="../UI/UserInterface.py" line="1689"/>
-        <source>&lt;b&gt;Edit Profile&lt;/b&gt;&lt;p&gt;Activate the &quot;Edit View Profile&quot;. Windows being shown, if this profile is active, may be configured with the &quot;View Profile Configuration&quot; dialog.&lt;/p&gt;</source>
-        <translation>&lt;b&gt;Editační profil&lt;/b&gt;&lt;p&gt;Aktivování skupiny &apos;Editační profil&apos;. Okna, která se v tomto profilu zobrazí lze nastavit v dialogu &apos;Konfigurace profilu pohledů&apos;.&lt;/p&gt;</translation>
-    </message>
-    <message>
-        <location filename="../UI/UserInterface.py" line="1698"/>
-        <source>Debug Profile</source>
-        <translation>Debugovací profil</translation>
-    </message>
-    <message>
-        <location filename="../UI/UserInterface.py" line="1704"/>
-        <source>Activate the debug view profile</source>
-        <translation>Aktivovat debugovací profil</translation>
-    </message>
-    <message>
-        <location filename="../UI/UserInterface.py" line="1706"/>
-        <source>&lt;b&gt;Debug Profile&lt;/b&gt;&lt;p&gt;Activate the &quot;Debug View Profile&quot;. Windows being shown, if this profile is active, may be configured with the &quot;View Profile Configuration&quot; dialog.&lt;/p&gt;</source>
-        <translation>&lt;b&gt;Debugovací profil&lt;/b&gt;&lt;p&gt;Aktivování skupiny &apos;Debugovací profil&apos;. Okna, která se v tomto profilu zobrazí lze nastavit v dialogu &apos;Konfigurace profilu pohledů&apos;.&lt;/p&gt;</translation>
-    </message>
-    <message>
         <location filename="../UI/UserInterface.py" line="1715"/>
+        <source>Edit Profile</source>
+        <translation>Editační profil</translation>
+    </message>
+    <message>
+        <location filename="../UI/UserInterface.py" line="1721"/>
+        <source>Activate the edit view profile</source>
+        <translation>Aktivovat profil editace</translation>
+    </message>
+    <message>
+        <location filename="../UI/UserInterface.py" line="1723"/>
+        <source>&lt;b&gt;Edit Profile&lt;/b&gt;&lt;p&gt;Activate the &quot;Edit View Profile&quot;. Windows being shown, if this profile is active, may be configured with the &quot;View Profile Configuration&quot; dialog.&lt;/p&gt;</source>
+        <translation>&lt;b&gt;Editační profil&lt;/b&gt;&lt;p&gt;Aktivování skupiny &apos;Editační profil&apos;. Okna, která se v tomto profilu zobrazí lze nastavit v dialogu &apos;Konfigurace profilu pohledů&apos;.&lt;/p&gt;</translation>
+    </message>
+    <message>
+        <location filename="../UI/UserInterface.py" line="1732"/>
+        <source>Debug Profile</source>
+        <translation>Debugovací profil</translation>
+    </message>
+    <message>
+        <location filename="../UI/UserInterface.py" line="1738"/>
+        <source>Activate the debug view profile</source>
+        <translation>Aktivovat debugovací profil</translation>
+    </message>
+    <message>
+        <location filename="../UI/UserInterface.py" line="1740"/>
+        <source>&lt;b&gt;Debug Profile&lt;/b&gt;&lt;p&gt;Activate the &quot;Debug View Profile&quot;. Windows being shown, if this profile is active, may be configured with the &quot;View Profile Configuration&quot; dialog.&lt;/p&gt;</source>
+        <translation>&lt;b&gt;Debugovací profil&lt;/b&gt;&lt;p&gt;Aktivování skupiny &apos;Debugovací profil&apos;. Okna, která se v tomto profilu zobrazí lze nastavit v dialogu &apos;Konfigurace profilu pohledů&apos;.&lt;/p&gt;</translation>
+    </message>
+    <message>
+        <location filename="../UI/UserInterface.py" line="1749"/>
         <source>&amp;Project-Viewer</source>
         <translation>Prohlížeč &amp;projektu</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="1715"/>
+        <location filename="../UI/UserInterface.py" line="1749"/>
         <source>Alt+Shift+P</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="1750"/>
+        <location filename="../UI/UserInterface.py" line="1784"/>
         <source>Alt+Shift+D</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="1768"/>
-        <source>&amp;Shell</source>
-        <translation>&amp;Shell</translation>
-    </message>
-    <message>
-        <location filename="../UI/UserInterface.py" line="1768"/>
-        <source>Alt+Shift+S</source>
-        <translation></translation>
-    </message>
-    <message>
-        <location filename="../UI/UserInterface.py" line="1785"/>
-        <source>Alt+Shift+F</source>
-        <translation></translation>
-    </message>
-    <message>
         <location filename="../UI/UserInterface.py" line="1802"/>
+        <source>&amp;Shell</source>
+        <translation>&amp;Shell</translation>
+    </message>
+    <message>
+        <location filename="../UI/UserInterface.py" line="1802"/>
+        <source>Alt+Shift+S</source>
+        <translation></translation>
+    </message>
+    <message>
+        <location filename="../UI/UserInterface.py" line="1819"/>
+        <source>Alt+Shift+F</source>
+        <translation></translation>
+    </message>
+    <message>
+        <location filename="../UI/UserInterface.py" line="1836"/>
         <source>Alt+Shift+G</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="1820"/>
+        <location filename="../UI/UserInterface.py" line="1854"/>
         <source>Alt+Shift+T</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="1732"/>
+        <location filename="../UI/UserInterface.py" line="1766"/>
         <source>Alt+Shift+M</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2087"/>
+        <location filename="../UI/UserInterface.py" line="2121"/>
         <source>What&apos;s This?</source>
         <translation>Co je to?</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2087"/>
+        <location filename="../UI/UserInterface.py" line="2121"/>
         <source>&amp;What&apos;s This?</source>
         <translation>&amp;Co je to?</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2087"/>
+        <location filename="../UI/UserInterface.py" line="2121"/>
         <source>Shift+F1</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2093"/>
+        <location filename="../UI/UserInterface.py" line="2127"/>
         <source>Context sensitive help</source>
         <translation>Kontextově senzitivní nápověda</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2094"/>
+        <location filename="../UI/UserInterface.py" line="2128"/>
         <source>&lt;b&gt;Display context sensitive help&lt;/b&gt;&lt;p&gt;In What&apos;s This? mode, the mouse cursor shows an arrow with a question mark, and you can click on the interface elements to get a short description of what they do and how to use them. In dialogs, this feature can be accessed using the context help button in the titlebar.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Zobrazit kontextově senzitivní nápovědu&lt;/b&gt;&lt;p&gt;V režimu &quot;Co je to?&quot; se nad různými prvky aplikace u kurzoru zobrazí otazník. Když pak kliknete na tyto prvky, zobrazí se krátký popis co daný prvek znamená a jak jej použít. V dialogových oknech se tato funkce spustí tlačítkem kontextové nápovědy na horní liště.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2105"/>
+        <location filename="../UI/UserInterface.py" line="2139"/>
         <source>Helpviewer</source>
         <translation>Prohlížeč nápovědy</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2105"/>
+        <location filename="../UI/UserInterface.py" line="2139"/>
         <source>&amp;Helpviewer...</source>
         <translation>Pro&amp;hlížeč nápovědy...</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2105"/>
+        <location filename="../UI/UserInterface.py" line="2139"/>
         <source>F1</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2111"/>
+        <location filename="../UI/UserInterface.py" line="2145"/>
         <source>Open the helpviewer window</source>
         <translation>Otevřít okno prohlížeče nápovědy</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2131"/>
+        <location filename="../UI/UserInterface.py" line="2165"/>
         <source>Show Versions</source>
         <translation>Zobrazit verze</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2131"/>
+        <location filename="../UI/UserInterface.py" line="2165"/>
         <source>Show &amp;Versions</source>
         <translation>Zobrazit &amp;verze</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2135"/>
+        <location filename="../UI/UserInterface.py" line="2169"/>
         <source>Display version information</source>
         <translation>Zobrazit informace o verzích</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2137"/>
+        <location filename="../UI/UserInterface.py" line="2171"/>
         <source>&lt;b&gt;Show Versions&lt;/b&gt;&lt;p&gt;Display version information.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Zobrazit verze&lt;/b&gt;&lt;p&gt;Zobrazí informace o verzích.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2147"/>
+        <location filename="../UI/UserInterface.py" line="2181"/>
         <source>Check for Updates</source>
         <translation>Zjistit aktualizace</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2144"/>
+        <location filename="../UI/UserInterface.py" line="2178"/>
         <source>Check for &amp;Updates...</source>
         <translation>Zjistit akt&amp;ualizace...</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="3745"/>
+        <location filename="../UI/UserInterface.py" line="3779"/>
         <source>Report Bug</source>
         <translation>Reportovat Bugy</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2196"/>
+        <location filename="../UI/UserInterface.py" line="2230"/>
         <source>Report &amp;Bug...</source>
         <translation>Reportovat &amp;Bugy...</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2200"/>
+        <location filename="../UI/UserInterface.py" line="2234"/>
         <source>Report a bug</source>
         <translation>Reportovat bug</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2201"/>
+        <location filename="../UI/UserInterface.py" line="2235"/>
         <source>&lt;b&gt;Report Bug...&lt;/b&gt;&lt;p&gt;Opens a dialog to report a bug.&lt;/p&gt;</source>
         <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="3279"/>
+        <location filename="../UI/UserInterface.py" line="3313"/>
         <source>Unittest</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2223"/>
+        <location filename="../UI/UserInterface.py" line="2257"/>
         <source>&amp;Unittest...</source>
         <translation>&amp;Unittest...</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2228"/>
+        <location filename="../UI/UserInterface.py" line="2262"/>
         <source>Start unittest dialog</source>
         <translation>Otevřít dialog unittestu</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2229"/>
+        <location filename="../UI/UserInterface.py" line="2263"/>
         <source>&lt;b&gt;Unittest&lt;/b&gt;&lt;p&gt;Perform unit tests. The dialog gives you the ability to select and run a unittest suite.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Unittest&lt;/b&gt;&lt;p&gt;Provést unittesty. V dialogovém okně se nastaví který test se má provést.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2237"/>
+        <location filename="../UI/UserInterface.py" line="2271"/>
         <source>Unittest Restart</source>
         <translation>Restart unittestu</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2237"/>
+        <location filename="../UI/UserInterface.py" line="2271"/>
         <source>&amp;Restart Unittest...</source>
         <translation>&amp;Restart unittestu...</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2242"/>
+        <location filename="../UI/UserInterface.py" line="2276"/>
         <source>Restart last unittest</source>
         <translation>Restart posledního unittestu</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2243"/>
+        <location filename="../UI/UserInterface.py" line="2277"/>
         <source>&lt;b&gt;Restart Unittest&lt;/b&gt;&lt;p&gt;Restart the unittest performed last.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Restart unittestu&lt;/b&gt;&lt;p&gt;Restartuje se poslední provedený unittest.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2267"/>
+        <location filename="../UI/UserInterface.py" line="2301"/>
         <source>Unittest Script</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2267"/>
+        <location filename="../UI/UserInterface.py" line="2301"/>
         <source>Unittest &amp;Script...</source>
         <translation>Unittest &amp;Script...</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2272"/>
+        <location filename="../UI/UserInterface.py" line="2306"/>
         <source>Run unittest with current script</source>
         <translation>Spustit unittest s aktuálním skriptem</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2274"/>
+        <location filename="../UI/UserInterface.py" line="2308"/>
         <source>&lt;b&gt;Unittest Script&lt;/b&gt;&lt;p&gt;Run unittest with current script.&lt;/p&gt;</source>
         <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="2282"/>
+        <location filename="../UI/UserInterface.py" line="2316"/>
         <source>Unittest Project</source>
         <translation>Unittest Projekt</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2282"/>
+        <location filename="../UI/UserInterface.py" line="2316"/>
         <source>Unittest &amp;Project...</source>
         <translation>Unittest &amp;Projekt...</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2287"/>
+        <location filename="../UI/UserInterface.py" line="2321"/>
         <source>Run unittest with current project</source>
         <translation>Spustit unittest s aktuálním projektem</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2289"/>
+        <location filename="../UI/UserInterface.py" line="2323"/>
         <source>&lt;b&gt;Unittest Project&lt;/b&gt;&lt;p&gt;Run unittest with current project.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Unittest projekt&lt;/b&gt;&lt;p&gt;Spustit unittest s aktuálním projektem.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2350"/>
+        <location filename="../UI/UserInterface.py" line="2384"/>
         <source>UI Previewer</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2350"/>
+        <location filename="../UI/UserInterface.py" line="2384"/>
         <source>&amp;UI Previewer...</source>
         <translation>&amp;UI Previewer...</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2355"/>
+        <location filename="../UI/UserInterface.py" line="2389"/>
         <source>Start the UI Previewer</source>
         <translation>Spustit UI Previewer</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2356"/>
-        <source>&lt;b&gt;UI Previewer&lt;/b&gt;&lt;p&gt;Start the UI Previewer.&lt;/p&gt;</source>
-        <translation>&lt;b&gt;UI Previewer&lt;/b&gt;&lt;p&gt;Spustit UI Previewer.&lt;/p&gt;</translation>
-    </message>
-    <message>
-        <location filename="../UI/UserInterface.py" line="2363"/>
-        <source>Translations Previewer</source>
-        <translation>Náhled překladů</translation>
-    </message>
-    <message>
-        <location filename="../UI/UserInterface.py" line="2363"/>
-        <source>&amp;Translations Previewer...</source>
-        <translation>Náhled &amp;překladů...</translation>
-    </message>
-    <message>
-        <location filename="../UI/UserInterface.py" line="2368"/>
-        <source>Start the Translations Previewer</source>
-        <translation>Spustit Previewer překladů</translation>
-    </message>
-    <message>
-        <location filename="../UI/UserInterface.py" line="2370"/>
-        <source>&lt;b&gt;Translations Previewer&lt;/b&gt;&lt;p&gt;Start the Translations Previewer.&lt;/p&gt;</source>
-        <translation>&lt;b&gt;Previewer překladů&lt;/b&gt;&lt;p&gt;Spustit Previewer překladů.&lt;/p&gt;</translation>
-    </message>
-    <message>
-        <location filename="../UI/UserInterface.py" line="2377"/>
-        <source>Compare Files</source>
-        <translation>Porovnat soubory</translation>
-    </message>
-    <message>
-        <location filename="../UI/UserInterface.py" line="2377"/>
-        <source>&amp;Compare Files...</source>
-        <translation>&amp;Porovnat soubory...</translation>
-    </message>
-    <message>
-        <location filename="../UI/UserInterface.py" line="2395"/>
-        <source>Compare two files</source>
-        <translation>Porovnat dva soubory</translation>
-    </message>
-    <message>
-        <location filename="../UI/UserInterface.py" line="2383"/>
-        <source>&lt;b&gt;Compare Files&lt;/b&gt;&lt;p&gt;Open a dialog to compare two files.&lt;/p&gt;</source>
-        <translation>&lt;b&gt;Porovnat soubory&lt;/b&gt;&lt;p&gt;Otevře dialog pro porovnání dvou souborů.&lt;/p&gt;</translation>
-    </message>
-    <message>
         <location filename="../UI/UserInterface.py" line="2390"/>
+        <source>&lt;b&gt;UI Previewer&lt;/b&gt;&lt;p&gt;Start the UI Previewer.&lt;/p&gt;</source>
+        <translation>&lt;b&gt;UI Previewer&lt;/b&gt;&lt;p&gt;Spustit UI Previewer.&lt;/p&gt;</translation>
+    </message>
+    <message>
+        <location filename="../UI/UserInterface.py" line="2397"/>
+        <source>Translations Previewer</source>
+        <translation>Náhled překladů</translation>
+    </message>
+    <message>
+        <location filename="../UI/UserInterface.py" line="2397"/>
+        <source>&amp;Translations Previewer...</source>
+        <translation>Náhled &amp;překladů...</translation>
+    </message>
+    <message>
+        <location filename="../UI/UserInterface.py" line="2402"/>
+        <source>Start the Translations Previewer</source>
+        <translation>Spustit Previewer překladů</translation>
+    </message>
+    <message>
+        <location filename="../UI/UserInterface.py" line="2404"/>
+        <source>&lt;b&gt;Translations Previewer&lt;/b&gt;&lt;p&gt;Start the Translations Previewer.&lt;/p&gt;</source>
+        <translation>&lt;b&gt;Previewer překladů&lt;/b&gt;&lt;p&gt;Spustit Previewer překladů.&lt;/p&gt;</translation>
+    </message>
+    <message>
+        <location filename="../UI/UserInterface.py" line="2411"/>
+        <source>Compare Files</source>
+        <translation>Porovnat soubory</translation>
+    </message>
+    <message>
+        <location filename="../UI/UserInterface.py" line="2411"/>
+        <source>&amp;Compare Files...</source>
+        <translation>&amp;Porovnat soubory...</translation>
+    </message>
+    <message>
+        <location filename="../UI/UserInterface.py" line="2429"/>
+        <source>Compare two files</source>
+        <translation>Porovnat dva soubory</translation>
+    </message>
+    <message>
+        <location filename="../UI/UserInterface.py" line="2417"/>
+        <source>&lt;b&gt;Compare Files&lt;/b&gt;&lt;p&gt;Open a dialog to compare two files.&lt;/p&gt;</source>
+        <translation>&lt;b&gt;Porovnat soubory&lt;/b&gt;&lt;p&gt;Otevře dialog pro porovnání dvou souborů.&lt;/p&gt;</translation>
+    </message>
+    <message>
+        <location filename="../UI/UserInterface.py" line="2424"/>
         <source>Compare Files side by side</source>
         <translation>Porovnat soubory stranu proti straně</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2396"/>
+        <location filename="../UI/UserInterface.py" line="2430"/>
         <source>&lt;b&gt;Compare Files side by side&lt;/b&gt;&lt;p&gt;Open a dialog to compare two files and show the result side by side.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Porovnat soubory stranu proti straně&lt;/b&gt;&lt;p&gt;Otevře dialog pro porovnání souborů a zobrazení rozdílů strany proti straně.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2490"/>
+        <location filename="../UI/UserInterface.py" line="2524"/>
         <source>Preferences</source>
         <translation>Nastavení</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2490"/>
+        <location filename="../UI/UserInterface.py" line="2524"/>
         <source>&amp;Preferences...</source>
         <translation>Na&amp;stavení...</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2495"/>
+        <location filename="../UI/UserInterface.py" line="2529"/>
         <source>Set the prefered configuration</source>
         <translation>Nastavení konfigurace</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2497"/>
+        <location filename="../UI/UserInterface.py" line="2531"/>
         <source>&lt;b&gt;Preferences&lt;/b&gt;&lt;p&gt;Set the configuration items of the application with your prefered values.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Nastavení&lt;/b&gt;&lt;p&gt;Upravit konfiguraci aplikace podle požadavků uživatele.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2534"/>
+        <location filename="../UI/UserInterface.py" line="2568"/>
         <source>Reload APIs</source>
         <translation>Obnovit API</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2534"/>
-        <source>Reload &amp;APIs</source>
-        <translation>Obnovit &amp;API</translation>
-    </message>
-    <message>
-        <location filename="../UI/UserInterface.py" line="2538"/>
-        <source>Reload the API information</source>
-        <translation>Obnovit API nastavení</translation>
-    </message>
-    <message>
-        <location filename="../UI/UserInterface.py" line="2540"/>
-        <source>&lt;b&gt;Reload APIs&lt;/b&gt;&lt;p&gt;Reload the API information.&lt;/p&gt;</source>
-        <translation>&lt;b&gt;Obnovit API&lt;/b&gt;&lt;p&gt;Obnovit API nastavení.&lt;/p&gt;</translation>
-    </message>
-    <message>
-        <location filename="../UI/UserInterface.py" line="2563"/>
-        <source>View Profiles</source>
-        <translation>Profily pohledů</translation>
-    </message>
-    <message>
-        <location filename="../UI/UserInterface.py" line="2563"/>
-        <source>&amp;View Profiles...</source>
-        <translation>Profily &amp;pohledů...</translation>
-    </message>
-    <message>
         <location filename="../UI/UserInterface.py" line="2568"/>
-        <source>Configure view profiles</source>
-        <translation>Konfigurace profilů pohledů</translation>
-    </message>
-    <message>
-        <location filename="../UI/UserInterface.py" line="2570"/>
-        <source>&lt;b&gt;View Profiles&lt;/b&gt;&lt;p&gt;Configure the view profiles. With this dialog you may set the visibility of the various windows for the predetermined view profiles.&lt;/p&gt;</source>
-        <translation>&lt;b&gt;Profily pohledů&lt;/b&gt;&lt;p&gt;Konfigurace profilu pohledů. V tomto dialogu můžete nastavit zobrazování různých typů pohledů - editačních oken.&lt;/p&gt;</translation>
-    </message>
-    <message>
-        <location filename="../UI/UserInterface.py" line="2595"/>
-        <source>Keyboard Shortcuts</source>
-        <translation>Klávesové zkratky</translation>
-    </message>
-    <message>
-        <location filename="../UI/UserInterface.py" line="2595"/>
-        <source>Keyboard &amp;Shortcuts...</source>
-        <translation>Klávesové &amp;zkratky...</translation>
-    </message>
-    <message>
-        <location filename="../UI/UserInterface.py" line="2600"/>
-        <source>Set the keyboard shortcuts</source>
-        <translation>Nastavení klávesových zkratek</translation>
+        <source>Reload &amp;APIs</source>
+        <translation>Obnovit &amp;API</translation>
+    </message>
+    <message>
+        <location filename="../UI/UserInterface.py" line="2572"/>
+        <source>Reload the API information</source>
+        <translation>Obnovit API nastavení</translation>
+    </message>
+    <message>
+        <location filename="../UI/UserInterface.py" line="2574"/>
+        <source>&lt;b&gt;Reload APIs&lt;/b&gt;&lt;p&gt;Reload the API information.&lt;/p&gt;</source>
+        <translation>&lt;b&gt;Obnovit API&lt;/b&gt;&lt;p&gt;Obnovit API nastavení.&lt;/p&gt;</translation>
+    </message>
+    <message>
+        <location filename="../UI/UserInterface.py" line="2597"/>
+        <source>View Profiles</source>
+        <translation>Profily pohledů</translation>
+    </message>
+    <message>
+        <location filename="../UI/UserInterface.py" line="2597"/>
+        <source>&amp;View Profiles...</source>
+        <translation>Profily &amp;pohledů...</translation>
     </message>
     <message>
         <location filename="../UI/UserInterface.py" line="2602"/>
-        <source>&lt;b&gt;Keyboard Shortcuts&lt;/b&gt;&lt;p&gt;Set the keyboard shortcuts of the application with your prefered values.&lt;/p&gt;</source>
-        <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="6217"/>
-        <source>Export Keyboard Shortcuts</source>
-        <translation>Exportovat klávesové zkratky</translation>
-    </message>
-    <message>
-        <location filename="../UI/UserInterface.py" line="2610"/>
-        <source>&amp;Export Keyboard Shortcuts...</source>
-        <translation>&amp;Exportovat klávesové zkratky...</translation>
-    </message>
-    <message>
-        <location filename="../UI/UserInterface.py" line="2615"/>
-        <source>Export the keyboard shortcuts</source>
-        <translation>Export klávesových zkratek</translation>
-    </message>
-    <message>
-        <location filename="../UI/UserInterface.py" line="2617"/>
-        <source>&lt;b&gt;Export Keyboard Shortcuts&lt;/b&gt;&lt;p&gt;Export the keyboard shortcuts of the application.&lt;/p&gt;</source>
-        <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="6241"/>
-        <source>Import Keyboard Shortcuts</source>
-        <translation>Import klávesových zkratek</translation>
-    </message>
-    <message>
-        <location filename="../UI/UserInterface.py" line="2624"/>
-        <source>&amp;Import Keyboard Shortcuts...</source>
-        <translation>&amp;Import klávesových zkratek...</translation>
+        <source>Configure view profiles</source>
+        <translation>Konfigurace profilů pohledů</translation>
+    </message>
+    <message>
+        <location filename="../UI/UserInterface.py" line="2604"/>
+        <source>&lt;b&gt;View Profiles&lt;/b&gt;&lt;p&gt;Configure the view profiles. With this dialog you may set the visibility of the various windows for the predetermined view profiles.&lt;/p&gt;</source>
+        <translation>&lt;b&gt;Profily pohledů&lt;/b&gt;&lt;p&gt;Konfigurace profilu pohledů. V tomto dialogu můžete nastavit zobrazování různých typů pohledů - editačních oken.&lt;/p&gt;</translation>
+    </message>
+    <message>
+        <location filename="../UI/UserInterface.py" line="2629"/>
+        <source>Keyboard Shortcuts</source>
+        <translation>Klávesové zkratky</translation>
     </message>
     <message>
         <location filename="../UI/UserInterface.py" line="2629"/>
+        <source>Keyboard &amp;Shortcuts...</source>
+        <translation>Klávesové &amp;zkratky...</translation>
+    </message>
+    <message>
+        <location filename="../UI/UserInterface.py" line="2634"/>
+        <source>Set the keyboard shortcuts</source>
+        <translation>Nastavení klávesových zkratek</translation>
+    </message>
+    <message>
+        <location filename="../UI/UserInterface.py" line="2636"/>
+        <source>&lt;b&gt;Keyboard Shortcuts&lt;/b&gt;&lt;p&gt;Set the keyboard shortcuts of the application with your prefered values.&lt;/p&gt;</source>
+        <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="6251"/>
+        <source>Export Keyboard Shortcuts</source>
+        <translation>Exportovat klávesové zkratky</translation>
+    </message>
+    <message>
+        <location filename="../UI/UserInterface.py" line="2644"/>
+        <source>&amp;Export Keyboard Shortcuts...</source>
+        <translation>&amp;Exportovat klávesové zkratky...</translation>
+    </message>
+    <message>
+        <location filename="../UI/UserInterface.py" line="2649"/>
+        <source>Export the keyboard shortcuts</source>
+        <translation>Export klávesových zkratek</translation>
+    </message>
+    <message>
+        <location filename="../UI/UserInterface.py" line="2651"/>
+        <source>&lt;b&gt;Export Keyboard Shortcuts&lt;/b&gt;&lt;p&gt;Export the keyboard shortcuts of the application.&lt;/p&gt;</source>
+        <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="6275"/>
+        <source>Import Keyboard Shortcuts</source>
+        <translation>Import klávesových zkratek</translation>
+    </message>
+    <message>
+        <location filename="../UI/UserInterface.py" line="2658"/>
+        <source>&amp;Import Keyboard Shortcuts...</source>
+        <translation>&amp;Import klávesových zkratek...</translation>
+    </message>
+    <message>
+        <location filename="../UI/UserInterface.py" line="2663"/>
         <source>Import the keyboard shortcuts</source>
         <translation>Import klávesových zkratek</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2631"/>
+        <location filename="../UI/UserInterface.py" line="2665"/>
         <source>&lt;b&gt;Import Keyboard Shortcuts&lt;/b&gt;&lt;p&gt;Import the keyboard shortcuts of the application.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Import klávesových zkratek&lt;/b&gt;&lt;p&gt;Do aplikace se importují klávesové zkratky.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2689"/>
+        <location filename="../UI/UserInterface.py" line="2723"/>
         <source>Activate current editor</source>
         <translation>Aktivovat aktuální editor</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2689"/>
+        <location filename="../UI/UserInterface.py" line="2723"/>
         <source>Alt+Shift+E</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2699"/>
+        <location filename="../UI/UserInterface.py" line="2733"/>
         <source>Ctrl+Alt+Tab</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2708"/>
+        <location filename="../UI/UserInterface.py" line="2742"/>
         <source>Shift+Ctrl+Alt+Tab</source>
         <translation></translation>
     </message>
@@ -78398,72 +78418,72 @@
         <translation type="obsolete">Otevřít PyQt4 dokumentaci</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2889"/>
+        <location filename="../UI/UserInterface.py" line="2923"/>
         <source>Eric API Documentation</source>
         <translation>Eric API dokumentace</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2889"/>
+        <location filename="../UI/UserInterface.py" line="2923"/>
         <source>&amp;Eric API Documentation</source>
         <translation>&amp;Eric API dokumentace</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2893"/>
+        <location filename="../UI/UserInterface.py" line="2927"/>
         <source>Open Eric API Documentation</source>
         <translation>Otevřít Eric API dokumentaci</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="3074"/>
+        <location filename="../UI/UserInterface.py" line="3108"/>
         <source>&amp;Unittest</source>
         <translation>&amp;Unittest</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="3018"/>
+        <location filename="../UI/UserInterface.py" line="3052"/>
         <source>E&amp;xtras</source>
         <translation>E&amp;xtra funkce</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="3091"/>
+        <location filename="../UI/UserInterface.py" line="3125"/>
         <source>Select Tool Group</source>
         <translation>Vybrat skupinu nástrojů</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="3102"/>
+        <location filename="../UI/UserInterface.py" line="3136"/>
         <source>Se&amp;ttings</source>
         <translation>Nas&amp;tavení</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="3132"/>
+        <location filename="../UI/UserInterface.py" line="3166"/>
         <source>&amp;Window</source>
         <translation>O&amp;kno</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="3193"/>
+        <location filename="../UI/UserInterface.py" line="3227"/>
         <source>&amp;Toolbars</source>
         <translation>&amp;Toolbary</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="3207"/>
+        <location filename="../UI/UserInterface.py" line="3241"/>
         <source>&amp;Help</source>
         <translation>&amp;Nápověda</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="3278"/>
+        <location filename="../UI/UserInterface.py" line="3312"/>
         <source>Tools</source>
         <translation>Nástroje</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="3280"/>
+        <location filename="../UI/UserInterface.py" line="3314"/>
         <source>Settings</source>
         <translation>Nastavení</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5147"/>
+        <location filename="../UI/UserInterface.py" line="5181"/>
         <source>Help</source>
         <translation>Nápověda</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="3282"/>
+        <location filename="../UI/UserInterface.py" line="3316"/>
         <source>Profiles</source>
         <translation>Profily</translation>
     </message>
@@ -78473,27 +78493,27 @@
         <translation type="obsolete">&lt;h3&gt;Čísla verzí&lt;/h3&gt;&lt;table&gt;</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="7214"/>
+        <location filename="../UI/UserInterface.py" line="7248"/>
         <source>&lt;/table&gt;</source>
         <translation>&lt;/table&gt;</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="3745"/>
+        <location filename="../UI/UserInterface.py" line="3779"/>
         <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="4146"/>
+        <location filename="../UI/UserInterface.py" line="4180"/>
         <source>Configure Tool Groups ...</source>
         <translation>Konfigurace Skupin nástrojů...</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="4150"/>
+        <location filename="../UI/UserInterface.py" line="4184"/>
         <source>Configure current Tool Group ...</source>
         <translation>Konfigurace aktuální skupiny nástrojů...</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="4101"/>
+        <location filename="../UI/UserInterface.py" line="4135"/>
         <source>&amp;Builtin Tools</source>
         <translation>&amp;Vestavěné nástroje</translation>
     </message>
@@ -78503,32 +78523,32 @@
         <translation type="obsolete">V aktuálním projektu není definován hlavní skript. Zrušeno</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5275"/>
+        <location filename="../UI/UserInterface.py" line="5309"/>
         <source>Problem</source>
         <translation>Problém</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5470"/>
+        <location filename="../UI/UserInterface.py" line="5504"/>
         <source>Process Generation Error</source>
         <translation>Chyba v procesu generování</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5147"/>
-        <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="5181"/>
+        <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="5215"/>
         <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="5809"/>
+        <location filename="../UI/UserInterface.py" line="5843"/>
         <source>Documentation Missing</source>
         <translation>Dokumentace chybí</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5792"/>
+        <location filename="../UI/UserInterface.py" line="5826"/>
         <source>Documentation</source>
         <translation>Dokumentace</translation>
     </message>
@@ -78538,472 +78558,472 @@
         <translation type="obsolete">&lt;p&gt;Počátek dokumentace PySide nebyl nastaven.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="6411"/>
+        <location filename="../UI/UserInterface.py" line="6445"/>
         <source>Save tasks</source>
         <translation>Uložit úlohy</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="6440"/>
+        <location filename="../UI/UserInterface.py" line="6474"/>
         <source>Read tasks</source>
         <translation>Načíst úlohy</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="6804"/>
+        <location filename="../UI/UserInterface.py" line="6838"/>
         <source>Drop Error</source>
         <translation>Zahodit chybu</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="7175"/>
+        <location filename="../UI/UserInterface.py" line="7209"/>
         <source>Error during updates check</source>
         <translation>Chyba během zjišťování aktualizací</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="7156"/>
+        <location filename="../UI/UserInterface.py" line="7190"/>
         <source>Update available</source>
         <translation>Byla nalezena aktualizace</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2552"/>
-        <source>Show external tools</source>
-        <translation>Zobrazit externí nástroje</translation>
-    </message>
-    <message>
-        <location filename="../UI/UserInterface.py" line="2547"/>
-        <source>Show external &amp;tools</source>
-        <translation>Zobrazit externí nás&amp;troje</translation>
-    </message>
-    <message>
-        <location filename="../UI/UserInterface.py" line="7175"/>
-        <source>Could not perform updates check.</source>
-        <translation>Kontrolu updatů nelze provést.</translation>
-    </message>
-    <message>
-        <location filename="../UI/UserInterface.py" line="6989"/>
-        <source>&amp;Cancel</source>
-        <translation>&amp;Zrušit</translation>
-    </message>
-    <message>
-        <location filename="../UI/UserInterface.py" line="7251"/>
-        <source>First time usage</source>
-        <translation>Spuštěno poprvé</translation>
-    </message>
-    <message>
-        <location filename="../UI/UserInterface.py" line="270"/>
-        <source>Initializing Plugin Manager...</source>
-        <translation>Inicializace Plugin manažera...</translation>
-    </message>
-    <message>
-        <location filename="../UI/UserInterface.py" line="3055"/>
-        <source>P&amp;lugins</source>
-        <translation>P&amp;luginy</translation>
-    </message>
-    <message>
-        <location filename="../UI/UserInterface.py" line="3283"/>
-        <source>Plugins</source>
-        <translation>Pluginy</translation>
-    </message>
-    <message>
-        <location filename="../UI/UserInterface.py" line="2726"/>
-        <source>Plugin Infos</source>
-        <translation>Plugin Infa</translation>
-    </message>
-    <message>
-        <location filename="../UI/UserInterface.py" line="2730"/>
-        <source>Show Plugin Infos</source>
-        <translation>Zobrazit Plugin infa</translation>
-    </message>
-    <message>
-        <location filename="../UI/UserInterface.py" line="2731"/>
-        <source>&lt;b&gt;Plugin Infos...&lt;/b&gt;&lt;p&gt;This opens a dialog, that show some information about loaded plugins.&lt;/p&gt;</source>
-        <translation>&lt;b&gt;Plugin Infa&lt;/b&gt;&lt;p&gt;Otevře dialog, který zobrazí informace o načtených pluginech.&lt;/p&gt;</translation>
-    </message>
-    <message>
-        <location filename="../UI/UserInterface.py" line="2726"/>
-        <source>&amp;Plugin Infos...</source>
-        <translation>&amp;Plugin Infa...</translation>
-    </message>
-    <message>
-        <location filename="../UI/UserInterface.py" line="4118"/>
-        <source>&amp;Plugin Tools</source>
-        <translation>&amp;Plugin nástroje</translation>
-    </message>
-    <message>
-        <location filename="../UI/UserInterface.py" line="2757"/>
-        <source>Uninstall Plugin</source>
-        <translation>Odinstalovat plugin</translation>
-    </message>
-    <message>
-        <location filename="../UI/UserInterface.py" line="2752"/>
-        <source>&amp;Uninstall Plugin...</source>
-        <translation>&amp;Odinstalovat plugin...</translation>
-    </message>
-    <message>
-        <location filename="../UI/UserInterface.py" line="2758"/>
-        <source>&lt;b&gt;Uninstall Plugin...&lt;/b&gt;&lt;p&gt;This opens a dialog to uninstall a plugin.&lt;/p&gt;</source>
-        <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="4267"/>
-        <source>&amp;Show all</source>
-        <translation>&amp;Zobrazit vše</translation>
-    </message>
-    <message>
-        <location filename="../UI/UserInterface.py" line="4269"/>
-        <source>&amp;Hide all</source>
-        <translation>&amp;Skrýt vše</translation>
-    </message>
-    <message>
-        <location filename="../UI/UserInterface.py" line="670"/>
-        <source>Activating Plugins...</source>
-        <translation>Aktivace pluginů...</translation>
-    </message>
-    <message>
-        <location filename="../UI/UserInterface.py" line="3028"/>
-        <source>Wi&amp;zards</source>
-        <translation>&amp;Průvodci</translation>
-    </message>
-    <message>
-        <location filename="../UI/UserInterface.py" line="2155"/>
-        <source>Show downloadable versions</source>
-        <translation>Zobrazit verze ke stažení</translation>
-    </message>
-    <message>
-        <location filename="../UI/UserInterface.py" line="2155"/>
-        <source>Show &amp;downloadable versions...</source>
-        <translation>Zobrazit verze pro &amp;download...</translation>
-    </message>
-    <message>
-        <location filename="../UI/UserInterface.py" line="2159"/>
-        <source>Show the versions available for download</source>
-        <translation>Zobrazit dostupné verze ke stažení</translation>
-    </message>
-    <message>
-        <location filename="../UI/UserInterface.py" line="7199"/>
-        <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>
-    <message>
-        <location filename="../UI/UserInterface.py" line="2765"/>
-        <source>Plugin Repository</source>
-        <translation>Repozitář pluginů</translation>
-    </message>
-    <message>
-        <location filename="../UI/UserInterface.py" line="2765"/>
-        <source>Plugin &amp;Repository...</source>
-        <translation>&amp;Repozitář pluginů...</translation>
-    </message>
-    <message>
-        <location filename="../UI/UserInterface.py" line="2770"/>
-        <source>Show Plugins available for download</source>
-        <translation>Zobrazit pluginy dostupné ke stažení</translation>
-    </message>
-    <message>
-        <location filename="../UI/UserInterface.py" line="2772"/>
-        <source>&lt;b&gt;Plugin Repository...&lt;/b&gt;&lt;p&gt;This opens a dialog, that shows a list of plugins available on the Internet.&lt;/p&gt;</source>
-        <translation>&lt;b&gt;Repozitář pluginů...&lt;/b&gt;&lt;p&gt;Otevře se dialog, který zobrazí seznam pluginů dostupných ke stažení přes internet.&lt;/p&gt;</translation>
-    </message>
-    <message>
-        <location filename="../UI/UserInterface.py" line="2744"/>
-        <source>Install Plugins</source>
-        <translation>Instalovat pluginy</translation>
-    </message>
-    <message>
-        <location filename="../UI/UserInterface.py" line="2739"/>
-        <source>&amp;Install Plugins...</source>
-        <translation>&amp;Instalovat pluginy...</translation>
-    </message>
-    <message>
-        <location filename="../UI/UserInterface.py" line="2745"/>
-        <source>&lt;b&gt;Install Plugins...&lt;/b&gt;&lt;p&gt;This opens a dialog to install or update plugins.&lt;/p&gt;</source>
-        <translation>&lt;b&gt;Instalovat pluginy...&lt;/b&gt;&lt;p&gt;Otevře dialog pro instalaci nebo aktualizaci pluginů.&lt;/p&gt;</translation>
-    </message>
-    <message>
-        <location filename="../UI/UserInterface.py" line="2422"/>
-        <source>Mini Editor</source>
-        <translation></translation>
-    </message>
-    <message>
-        <location filename="../UI/UserInterface.py" line="2417"/>
-        <source>Mini &amp;Editor...</source>
-        <translation>Mini &amp;Editor...</translation>
-    </message>
-    <message>
-        <location filename="../UI/UserInterface.py" line="2423"/>
-        <source>&lt;b&gt;Mini Editor&lt;/b&gt;&lt;p&gt;Open a dialog with a simplified editor.&lt;/p&gt;</source>
-        <translation>&lt;b&gt;Mini editor&lt;/b&gt;&lt;p&gt;Otevře se okno s jednoduchým editorem&lt;/p&gt;</translation>
-    </message>
-    <message>
-        <location filename="../UI/UserInterface.py" line="2580"/>
-        <source>Toolbars</source>
-        <translation>Lišty nástrojů</translation>
-    </message>
-    <message>
-        <location filename="../UI/UserInterface.py" line="2580"/>
-        <source>Tool&amp;bars...</source>
-        <translation>&amp;Lišty nástrojů...</translation>
-    </message>
-    <message>
-        <location filename="../UI/UserInterface.py" line="2585"/>
-        <source>Configure toolbars</source>
-        <translation>Konfigurace lišt nástrojů</translation>
-    </message>
-    <message>
         <location filename="../UI/UserInterface.py" line="2586"/>
+        <source>Show external tools</source>
+        <translation>Zobrazit externí nástroje</translation>
+    </message>
+    <message>
+        <location filename="../UI/UserInterface.py" line="2581"/>
+        <source>Show external &amp;tools</source>
+        <translation>Zobrazit externí nás&amp;troje</translation>
+    </message>
+    <message>
+        <location filename="../UI/UserInterface.py" line="7209"/>
+        <source>Could not perform updates check.</source>
+        <translation>Kontrolu updatů nelze provést.</translation>
+    </message>
+    <message>
+        <location filename="../UI/UserInterface.py" line="7023"/>
+        <source>&amp;Cancel</source>
+        <translation>&amp;Zrušit</translation>
+    </message>
+    <message>
+        <location filename="../UI/UserInterface.py" line="7285"/>
+        <source>First time usage</source>
+        <translation>Spuštěno poprvé</translation>
+    </message>
+    <message>
+        <location filename="../UI/UserInterface.py" line="271"/>
+        <source>Initializing Plugin Manager...</source>
+        <translation>Inicializace Plugin manažera...</translation>
+    </message>
+    <message>
+        <location filename="../UI/UserInterface.py" line="3089"/>
+        <source>P&amp;lugins</source>
+        <translation>P&amp;luginy</translation>
+    </message>
+    <message>
+        <location filename="../UI/UserInterface.py" line="3317"/>
+        <source>Plugins</source>
+        <translation>Pluginy</translation>
+    </message>
+    <message>
+        <location filename="../UI/UserInterface.py" line="2760"/>
+        <source>Plugin Infos</source>
+        <translation>Plugin Infa</translation>
+    </message>
+    <message>
+        <location filename="../UI/UserInterface.py" line="2764"/>
+        <source>Show Plugin Infos</source>
+        <translation>Zobrazit Plugin infa</translation>
+    </message>
+    <message>
+        <location filename="../UI/UserInterface.py" line="2765"/>
+        <source>&lt;b&gt;Plugin Infos...&lt;/b&gt;&lt;p&gt;This opens a dialog, that show some information about loaded plugins.&lt;/p&gt;</source>
+        <translation>&lt;b&gt;Plugin Infa&lt;/b&gt;&lt;p&gt;Otevře dialog, který zobrazí informace o načtených pluginech.&lt;/p&gt;</translation>
+    </message>
+    <message>
+        <location filename="../UI/UserInterface.py" line="2760"/>
+        <source>&amp;Plugin Infos...</source>
+        <translation>&amp;Plugin Infa...</translation>
+    </message>
+    <message>
+        <location filename="../UI/UserInterface.py" line="4152"/>
+        <source>&amp;Plugin Tools</source>
+        <translation>&amp;Plugin nástroje</translation>
+    </message>
+    <message>
+        <location filename="../UI/UserInterface.py" line="2791"/>
+        <source>Uninstall Plugin</source>
+        <translation>Odinstalovat plugin</translation>
+    </message>
+    <message>
+        <location filename="../UI/UserInterface.py" line="2786"/>
+        <source>&amp;Uninstall Plugin...</source>
+        <translation>&amp;Odinstalovat plugin...</translation>
+    </message>
+    <message>
+        <location filename="../UI/UserInterface.py" line="2792"/>
+        <source>&lt;b&gt;Uninstall Plugin...&lt;/b&gt;&lt;p&gt;This opens a dialog to uninstall a plugin.&lt;/p&gt;</source>
+        <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="4301"/>
+        <source>&amp;Show all</source>
+        <translation>&amp;Zobrazit vše</translation>
+    </message>
+    <message>
+        <location filename="../UI/UserInterface.py" line="4303"/>
+        <source>&amp;Hide all</source>
+        <translation>&amp;Skrýt vše</translation>
+    </message>
+    <message>
+        <location filename="../UI/UserInterface.py" line="671"/>
+        <source>Activating Plugins...</source>
+        <translation>Aktivace pluginů...</translation>
+    </message>
+    <message>
+        <location filename="../UI/UserInterface.py" line="3062"/>
+        <source>Wi&amp;zards</source>
+        <translation>&amp;Průvodci</translation>
+    </message>
+    <message>
+        <location filename="../UI/UserInterface.py" line="2189"/>
+        <source>Show downloadable versions</source>
+        <translation>Zobrazit verze ke stažení</translation>
+    </message>
+    <message>
+        <location filename="../UI/UserInterface.py" line="2189"/>
+        <source>Show &amp;downloadable versions...</source>
+        <translation>Zobrazit verze pro &amp;download...</translation>
+    </message>
+    <message>
+        <location filename="../UI/UserInterface.py" line="2193"/>
+        <source>Show the versions available for download</source>
+        <translation>Zobrazit dostupné verze ke stažení</translation>
+    </message>
+    <message>
+        <location filename="../UI/UserInterface.py" line="7233"/>
+        <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>
+    <message>
+        <location filename="../UI/UserInterface.py" line="2799"/>
+        <source>Plugin Repository</source>
+        <translation>Repozitář pluginů</translation>
+    </message>
+    <message>
+        <location filename="../UI/UserInterface.py" line="2799"/>
+        <source>Plugin &amp;Repository...</source>
+        <translation>&amp;Repozitář pluginů...</translation>
+    </message>
+    <message>
+        <location filename="../UI/UserInterface.py" line="2804"/>
+        <source>Show Plugins available for download</source>
+        <translation>Zobrazit pluginy dostupné ke stažení</translation>
+    </message>
+    <message>
+        <location filename="../UI/UserInterface.py" line="2806"/>
+        <source>&lt;b&gt;Plugin Repository...&lt;/b&gt;&lt;p&gt;This opens a dialog, that shows a list of plugins available on the Internet.&lt;/p&gt;</source>
+        <translation>&lt;b&gt;Repozitář pluginů...&lt;/b&gt;&lt;p&gt;Otevře se dialog, který zobrazí seznam pluginů dostupných ke stažení přes internet.&lt;/p&gt;</translation>
+    </message>
+    <message>
+        <location filename="../UI/UserInterface.py" line="2778"/>
+        <source>Install Plugins</source>
+        <translation>Instalovat pluginy</translation>
+    </message>
+    <message>
+        <location filename="../UI/UserInterface.py" line="2773"/>
+        <source>&amp;Install Plugins...</source>
+        <translation>&amp;Instalovat pluginy...</translation>
+    </message>
+    <message>
+        <location filename="../UI/UserInterface.py" line="2779"/>
+        <source>&lt;b&gt;Install Plugins...&lt;/b&gt;&lt;p&gt;This opens a dialog to install or update plugins.&lt;/p&gt;</source>
+        <translation>&lt;b&gt;Instalovat pluginy...&lt;/b&gt;&lt;p&gt;Otevře dialog pro instalaci nebo aktualizaci pluginů.&lt;/p&gt;</translation>
+    </message>
+    <message>
+        <location filename="../UI/UserInterface.py" line="2456"/>
+        <source>Mini Editor</source>
+        <translation></translation>
+    </message>
+    <message>
+        <location filename="../UI/UserInterface.py" line="2451"/>
+        <source>Mini &amp;Editor...</source>
+        <translation>Mini &amp;Editor...</translation>
+    </message>
+    <message>
+        <location filename="../UI/UserInterface.py" line="2457"/>
+        <source>&lt;b&gt;Mini Editor&lt;/b&gt;&lt;p&gt;Open a dialog with a simplified editor.&lt;/p&gt;</source>
+        <translation>&lt;b&gt;Mini editor&lt;/b&gt;&lt;p&gt;Otevře se okno s jednoduchým editorem&lt;/p&gt;</translation>
+    </message>
+    <message>
+        <location filename="../UI/UserInterface.py" line="2614"/>
+        <source>Toolbars</source>
+        <translation>Lišty nástrojů</translation>
+    </message>
+    <message>
+        <location filename="../UI/UserInterface.py" line="2614"/>
+        <source>Tool&amp;bars...</source>
+        <translation>&amp;Lišty nástrojů...</translation>
+    </message>
+    <message>
+        <location filename="../UI/UserInterface.py" line="2619"/>
+        <source>Configure toolbars</source>
+        <translation>Konfigurace lišt nástrojů</translation>
+    </message>
+    <message>
+        <location filename="../UI/UserInterface.py" line="2620"/>
         <source>&lt;b&gt;Toolbars&lt;/b&gt;&lt;p&gt;Configure the toolbars. With this dialog you may change the actions shown on the various toolbars and define your own toolbars.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Listy nástrojů&lt;/b&gt;&lt;p&gt;Konfigurace lišt nástrojů. S tímto dialogem můžete změnit akce zobrazené v různých nástrojových lištách nebo definovat své vlastní nástrojové lišty.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="686"/>
+        <location filename="../UI/UserInterface.py" line="687"/>
         <source>Restoring Toolbarmanager...</source>
         <translation>Obnovit manažer nástrojových lišt...</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5415"/>
+        <location filename="../UI/UserInterface.py" line="5449"/>
         <source>External Tools</source>
         <translation>Externí nástroje</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="1732"/>
+        <location filename="../UI/UserInterface.py" line="1766"/>
         <source>Multiproject-Viewer</source>
         <translation>Prohlížeč multiprojektu</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="1732"/>
+        <location filename="../UI/UserInterface.py" line="1766"/>
         <source>&amp;Multiproject-Viewer</source>
         <translation>Prohlížeč &amp;multiprojektu</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="6536"/>
+        <location filename="../UI/UserInterface.py" line="6570"/>
         <source>Save session</source>
         <translation>Uložit relaci</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="6520"/>
+        <location filename="../UI/UserInterface.py" line="6554"/>
         <source>Read session</source>
         <translation>Načíst relaci</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="3459"/>
+        <location filename="../UI/UserInterface.py" line="3493"/>
         <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="3473"/>
+        <location filename="../UI/UserInterface.py" line="3507"/>
         <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>
     <message>
-        <location filename="../UI/UserInterface.py" line="2208"/>
+        <location filename="../UI/UserInterface.py" line="2242"/>
         <source>Request Feature</source>
         <translation>Požadavek na vlastnost</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2208"/>
+        <location filename="../UI/UserInterface.py" line="2242"/>
         <source>Request &amp;Feature...</source>
         <translation>&amp;Požadavek na vlastnost...</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2212"/>
+        <location filename="../UI/UserInterface.py" line="2246"/>
         <source>Send a feature request</source>
         <translation>Poslat požadavek na vlastnost</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2214"/>
+        <location filename="../UI/UserInterface.py" line="2248"/>
         <source>&lt;b&gt;Request Feature...&lt;/b&gt;&lt;p&gt;Opens a dialog to send a feature request.&lt;/p&gt;</source>
         <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="3452"/>
+        <location filename="../UI/UserInterface.py" line="3486"/>
         <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="3480"/>
+        <location filename="../UI/UserInterface.py" line="3514"/>
         <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="3487"/>
+        <location filename="../UI/UserInterface.py" line="3521"/>
         <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>
     <message>
-        <location filename="../UI/UserInterface.py" line="1882"/>
+        <location filename="../UI/UserInterface.py" line="1916"/>
         <source>Horizontal Toolbox</source>
         <translation>Vodorovná nástrojová lišta</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="1882"/>
+        <location filename="../UI/UserInterface.py" line="1916"/>
         <source>&amp;Horizontal Toolbox</source>
         <translation>&amp;Horizontální lista nástrojů</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="1886"/>
+        <location filename="../UI/UserInterface.py" line="1920"/>
         <source>Toggle the Horizontal Toolbox window</source>
         <translation>Přepnout na vodorovnou lištu nástrojů</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="1888"/>
+        <location filename="../UI/UserInterface.py" line="1922"/>
         <source>&lt;b&gt;Toggle the Horizontal Toolbox window&lt;/b&gt;&lt;p&gt;If the Horizontal Toolbox window is hidden then display it. If it is displayed then close it.&lt;/p&gt;</source>
         <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="4065"/>
+        <location filename="../UI/UserInterface.py" line="4099"/>
         <source>Restart application</source>
         <translation>Restartovat aplikaci</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="4065"/>
+        <location filename="../UI/UserInterface.py" line="4099"/>
         <source>The application needs to be restarted. Do it now?</source>
         <translation>Aplikace potřebuje restartovat. Má se provést nyní?</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="1839"/>
+        <location filename="../UI/UserInterface.py" line="1873"/>
         <source>Alt+Shift+A</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="3064"/>
+        <location filename="../UI/UserInterface.py" line="3098"/>
         <source>Configure...</source>
         <translation>Konfigurovat...</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="3466"/>
+        <location filename="../UI/UserInterface.py" line="3500"/>
         <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>
     <message>
-        <location filename="../UI/UserInterface.py" line="2717"/>
+        <location filename="../UI/UserInterface.py" line="2751"/>
         <source>Switch between tabs</source>
         <translation>Přepnout mezi taby</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2717"/>
+        <location filename="../UI/UserInterface.py" line="2751"/>
         <source>Ctrl+1</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2506"/>
+        <location filename="../UI/UserInterface.py" line="2540"/>
         <source>Export Preferences</source>
         <translation>Exportovat předvolby</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2506"/>
+        <location filename="../UI/UserInterface.py" line="2540"/>
         <source>E&amp;xport Preferences...</source>
         <translation>E&amp;xportovat předvolby...</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2511"/>
+        <location filename="../UI/UserInterface.py" line="2545"/>
         <source>Export the current configuration</source>
         <translation>Export aktuální konfigurace</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2513"/>
+        <location filename="../UI/UserInterface.py" line="2547"/>
         <source>&lt;b&gt;Export Preferences&lt;/b&gt;&lt;p&gt;Export the current configuration to a file.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Export předvoleb&lt;/b&gt;&lt;p&gt;Export aktuální konfigurace do souboru.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2520"/>
+        <location filename="../UI/UserInterface.py" line="2554"/>
         <source>Import Preferences</source>
         <translation>Import předvoleb</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2520"/>
+        <location filename="../UI/UserInterface.py" line="2554"/>
         <source>I&amp;mport Preferences...</source>
         <translation>I&amp;mport předvoleb...</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2525"/>
+        <location filename="../UI/UserInterface.py" line="2559"/>
         <source>Import a previously exported configuration</source>
         <translation>Import dříve exportované konfigurace</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2527"/>
+        <location filename="../UI/UserInterface.py" line="2561"/>
         <source>&lt;b&gt;Import Preferences&lt;/b&gt;&lt;p&gt;Import a previously exported configuration.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Import předvoleb&lt;/b&gt;&lt;p&gt;Import dříve exportované konfigurace.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2699"/>
+        <location filename="../UI/UserInterface.py" line="2733"/>
         <source>Show next</source>
         <translation>Zobrazit další</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2708"/>
+        <location filename="../UI/UserInterface.py" line="2742"/>
         <source>Show previous</source>
         <translation>Zobrazit předchozí</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="1896"/>
+        <location filename="../UI/UserInterface.py" line="1930"/>
         <source>Left Sidebar</source>
         <translation>Levé menu</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="1896"/>
+        <location filename="../UI/UserInterface.py" line="1930"/>
         <source>&amp;Left Sidebar</source>
         <translation>&amp;Levé menu</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="1900"/>
+        <location filename="../UI/UserInterface.py" line="1934"/>
         <source>Toggle the left sidebar window</source>
         <translation>Přepnout okno levého menu</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="1901"/>
+        <location filename="../UI/UserInterface.py" line="1935"/>
         <source>&lt;b&gt;Toggle the left sidebar window&lt;/b&gt;&lt;p&gt;If the left sidebar window is hidden then display it. If it is displayed then close it.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Přepnout okno levého menu&lt;/b&gt;&lt;p&gt;Je-li okno levého menu skryto, tak se zobrazí. Je-li zobrazeno, skryje se.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="1923"/>
+        <location filename="../UI/UserInterface.py" line="1957"/>
         <source>Bottom Sidebar</source>
         <translation>Dolní menu</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="1923"/>
+        <location filename="../UI/UserInterface.py" line="1957"/>
         <source>&amp;Bottom Sidebar</source>
         <translation>&amp;Dolní menu</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="1927"/>
+        <location filename="../UI/UserInterface.py" line="1961"/>
         <source>Toggle the bottom sidebar window</source>
         <translation>Přepnout okno dolního menu</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="1929"/>
+        <location filename="../UI/UserInterface.py" line="1963"/>
         <source>&lt;b&gt;Toggle the bottom sidebar window&lt;/b&gt;&lt;p&gt;If the bottom sidebar window is hidden then display it. If it is displayed then close it.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Přepnout okno dolního menu&lt;/b&gt;&lt;p&gt;Je-li okno dolního menu skryto, tak se zobrazí. Je-li zobrazeno, skryje se.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="1750"/>
+        <location filename="../UI/UserInterface.py" line="1784"/>
         <source>&amp;Debug-Viewer</source>
         <translation>Prohlížeč &amp;debugeru</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2404"/>
+        <location filename="../UI/UserInterface.py" line="2438"/>
         <source>SQL Browser</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2404"/>
+        <location filename="../UI/UserInterface.py" line="2438"/>
         <source>SQL &amp;Browser...</source>
         <translation>SQL &amp;Browser...</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2409"/>
+        <location filename="../UI/UserInterface.py" line="2443"/>
         <source>Browse a SQL database</source>
         <translation>Procházet SQL databázi</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2410"/>
+        <location filename="../UI/UserInterface.py" line="2444"/>
         <source>&lt;b&gt;SQL Browser&lt;/b&gt;&lt;p&gt;Browse a SQL database.&lt;/p&gt;</source>
         <translation>&lt;b&gt;SQL Browser&lt;/b&gt;&lt;p&gt;Procházet SQL databázi.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2461"/>
+        <location filename="../UI/UserInterface.py" line="2495"/>
         <source>Icon Editor</source>
         <translation>Editor ikon</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2461"/>
+        <location filename="../UI/UserInterface.py" line="2495"/>
         <source>&amp;Icon Editor...</source>
         <translation>Editor &amp;ikon...</translation>
     </message>
@@ -79028,747 +79048,747 @@
         <translation type="obsolete">Otevřít PySide dokumentaci</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="1569"/>
+        <location filename="../UI/UserInterface.py" line="1603"/>
         <source>{0} - Passive Mode</source>
         <translation>{0} - Pasivní mód</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="1576"/>
+        <location filename="../UI/UserInterface.py" line="1610"/>
         <source>{0} - {1} - Passive Mode</source>
         <translation>{0} - {1} - pasivní mód</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="1580"/>
+        <location filename="../UI/UserInterface.py" line="1614"/>
         <source>{0} - {1} - {2} - Passive Mode</source>
         <translation>{0} - {1} - {2} - pasivní mód</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="3563"/>
+        <location filename="../UI/UserInterface.py" line="3597"/>
         <source>External Tools/{0}</source>
         <translation>Externí nástroje/{0}</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5275"/>
+        <location filename="../UI/UserInterface.py" line="5309"/>
         <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="5000"/>
+        <location filename="../UI/UserInterface.py" line="5034"/>
         <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="5070"/>
+        <location filename="../UI/UserInterface.py" line="5104"/>
         <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="5114"/>
+        <location filename="../UI/UserInterface.py" line="5148"/>
         <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="5161"/>
+        <location filename="../UI/UserInterface.py" line="5195"/>
         <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="5231"/>
+        <location filename="../UI/UserInterface.py" line="5265"/>
         <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="5288"/>
+        <location filename="../UI/UserInterface.py" line="5322"/>
         <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="5311"/>
+        <location filename="../UI/UserInterface.py" line="5345"/>
         <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="5406"/>
+        <location filename="../UI/UserInterface.py" line="5440"/>
         <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="5415"/>
+        <location filename="../UI/UserInterface.py" line="5449"/>
         <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="5454"/>
+        <location filename="../UI/UserInterface.py" line="5488"/>
         <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="5470"/>
+        <location filename="../UI/UserInterface.py" line="5504"/>
         <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="5548"/>
+        <location filename="../UI/UserInterface.py" line="5582"/>
         <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="5809"/>
+        <location filename="../UI/UserInterface.py" line="5843"/>
         <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="6411"/>
+        <location filename="../UI/UserInterface.py" line="6445"/>
         <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="6440"/>
-        <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="6474"/>
+        <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="6508"/>
         <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="6520"/>
+        <location filename="../UI/UserInterface.py" line="6554"/>
         <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="6804"/>
+        <location filename="../UI/UserInterface.py" line="6838"/>
         <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="6998"/>
+        <location filename="../UI/UserInterface.py" line="7032"/>
         <source>Trying host {0}</source>
         <translation>Zkouším host {0}</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="1122"/>
+        <location filename="../UI/UserInterface.py" line="1123"/>
         <source>Cooperation</source>
         <translation>Spolupráce</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="1938"/>
+        <location filename="../UI/UserInterface.py" line="1972"/>
         <source>Alt+Shift+O</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="1178"/>
+        <location filename="../UI/UserInterface.py" line="1179"/>
         <source>Symbols</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="1975"/>
+        <location filename="../UI/UserInterface.py" line="2009"/>
         <source>Alt+Shift+Y</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="1187"/>
+        <location filename="../UI/UserInterface.py" line="1188"/>
         <source>Numbers</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="1994"/>
+        <location filename="../UI/UserInterface.py" line="2028"/>
         <source>Alt+Shift+B</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="6241"/>
+        <location filename="../UI/UserInterface.py" line="6275"/>
         <source>Keyboard shortcut file (*.e4k)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2867"/>
+        <location filename="../UI/UserInterface.py" line="2901"/>
         <source>Python 3 Documentation</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2867"/>
+        <location filename="../UI/UserInterface.py" line="2901"/>
         <source>Python &amp;3 Documentation</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2871"/>
+        <location filename="../UI/UserInterface.py" line="2905"/>
         <source>Open Python 3 Documentation</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="7064"/>
+        <location filename="../UI/UserInterface.py" line="7098"/>
         <source>Error getting versions information</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="7057"/>
+        <location filename="../UI/UserInterface.py" line="7091"/>
         <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="6009"/>
+        <location filename="../UI/UserInterface.py" line="6043"/>
         <source>Open Browser</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="6009"/>
+        <location filename="../UI/UserInterface.py" line="6043"/>
         <source>Could not start a web browser</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="7064"/>
+        <location filename="../UI/UserInterface.py" line="7098"/>
         <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>
     <message>
-        <location filename="../UI/UserInterface.py" line="695"/>
+        <location filename="../UI/UserInterface.py" line="696"/>
         <source>Setting View Profile...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="708"/>
+        <location filename="../UI/UserInterface.py" line="709"/>
         <source>Reading Tasks...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="713"/>
+        <location filename="../UI/UserInterface.py" line="714"/>
         <source>Reading Templates...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="718"/>
+        <location filename="../UI/UserInterface.py" line="719"/>
         <source>Starting Debugger...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="1662"/>
+        <location filename="../UI/UserInterface.py" line="1696"/>
         <source>New Window</source>
         <translation type="unfinished">Nové okno</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="1662"/>
+        <location filename="../UI/UserInterface.py" line="1696"/>
         <source>New &amp;Window</source>
         <translation type="unfinished">&amp;Nové okno</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="1662"/>
+        <location filename="../UI/UserInterface.py" line="1696"/>
         <source>Ctrl+Shift+N</source>
         <comment>File|New Window</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2251"/>
+        <location filename="../UI/UserInterface.py" line="2285"/>
         <source>Unittest Rerun Failed</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2251"/>
+        <location filename="../UI/UserInterface.py" line="2285"/>
         <source>Rerun Failed Tests...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2256"/>
+        <location filename="../UI/UserInterface.py" line="2290"/>
         <source>Rerun failed tests of the last run</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2258"/>
+        <location filename="../UI/UserInterface.py" line="2292"/>
         <source>&lt;b&gt;Rerun Failed Tests&lt;/b&gt;&lt;p&gt;Rerun all tests that failed during the last unittest run.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2390"/>
+        <location filename="../UI/UserInterface.py" line="2424"/>
         <source>Compare &amp;Files side by side...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2475"/>
+        <location filename="../UI/UserInterface.py" line="2509"/>
         <source>Snapshot</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2475"/>
+        <location filename="../UI/UserInterface.py" line="2509"/>
         <source>&amp;Snapshot...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2480"/>
+        <location filename="../UI/UserInterface.py" line="2514"/>
         <source>Take snapshots of a screen region</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2482"/>
+        <location filename="../UI/UserInterface.py" line="2516"/>
         <source>&lt;b&gt;Snapshot&lt;/b&gt;&lt;p&gt;This opens a dialog to take snapshots of a screen region.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5383"/>
+        <location filename="../UI/UserInterface.py" line="5417"/>
         <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="7270"/>
+        <location filename="../UI/UserInterface.py" line="7304"/>
         <source>Select Workspace Directory</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="1857"/>
+        <location filename="../UI/UserInterface.py" line="1891"/>
         <source>Left Toolbox</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="1869"/>
+        <location filename="../UI/UserInterface.py" line="1903"/>
         <source>Right Toolbox</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="1721"/>
+        <location filename="../UI/UserInterface.py" line="1755"/>
         <source>Switch the input focus to the Project-Viewer window.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="1723"/>
+        <location filename="../UI/UserInterface.py" line="1757"/>
         <source>&lt;b&gt;Activate Project-Viewer&lt;/b&gt;&lt;p&gt;This switches the input focus to the Project-Viewer window.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="1738"/>
+        <location filename="../UI/UserInterface.py" line="1772"/>
         <source>Switch the input focus to the Multiproject-Viewer window.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="1740"/>
-        <source>&lt;b&gt;Activate Multiproject-Viewer&lt;/b&gt;&lt;p&gt;This switches the input focus to the Multiproject-Viewer window.&lt;/p&gt;</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../UI/UserInterface.py" line="1756"/>
-        <source>Switch the input focus to the Debug-Viewer window.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../UI/UserInterface.py" line="1758"/>
-        <source>&lt;b&gt;Activate Debug-Viewer&lt;/b&gt;&lt;p&gt;This switches the input focus to the Debug-Viewer window.&lt;/p&gt;</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <location filename="../UI/UserInterface.py" line="1774"/>
-        <source>Switch the input focus to the Shell window.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../UI/UserInterface.py" line="1776"/>
-        <source>&lt;b&gt;Activate Shell&lt;/b&gt;&lt;p&gt;This switches the input focus to the Shell window.&lt;/p&gt;</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../UI/UserInterface.py" line="1785"/>
-        <source>&amp;File-Browser</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../UI/UserInterface.py" line="1791"/>
-        <source>Switch the input focus to the File-Browser window.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../UI/UserInterface.py" line="1793"/>
-        <source>&lt;b&gt;Activate File-Browser&lt;/b&gt;&lt;p&gt;This switches the input focus to the File-Browser window.&lt;/p&gt;</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../UI/UserInterface.py" line="1802"/>
-        <source>Lo&amp;g-Viewer</source>
+        <source>&lt;b&gt;Activate Multiproject-Viewer&lt;/b&gt;&lt;p&gt;This switches the input focus to the Multiproject-Viewer window.&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../UI/UserInterface.py" line="1790"/>
+        <source>Switch the input focus to the Debug-Viewer window.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../UI/UserInterface.py" line="1792"/>
+        <source>&lt;b&gt;Activate Debug-Viewer&lt;/b&gt;&lt;p&gt;This switches the input focus to the Debug-Viewer window.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../UI/UserInterface.py" line="1808"/>
-        <source>Switch the input focus to the Log-Viewer window.</source>
+        <source>Switch the input focus to the Shell window.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../UI/UserInterface.py" line="1810"/>
+        <source>&lt;b&gt;Activate Shell&lt;/b&gt;&lt;p&gt;This switches the input focus to the Shell window.&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../UI/UserInterface.py" line="1819"/>
+        <source>&amp;File-Browser</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../UI/UserInterface.py" line="1825"/>
+        <source>Switch the input focus to the File-Browser window.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../UI/UserInterface.py" line="1827"/>
+        <source>&lt;b&gt;Activate File-Browser&lt;/b&gt;&lt;p&gt;This switches the input focus to the File-Browser window.&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../UI/UserInterface.py" line="1836"/>
+        <source>Lo&amp;g-Viewer</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../UI/UserInterface.py" line="1842"/>
+        <source>Switch the input focus to the Log-Viewer window.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../UI/UserInterface.py" line="1844"/>
         <source>&lt;b&gt;Activate Log-Viewer&lt;/b&gt;&lt;p&gt;This switches the input focus to the Log-Viewer window.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="1820"/>
+        <location filename="../UI/UserInterface.py" line="1854"/>
         <source>&amp;Task-Viewer</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="1826"/>
-        <source>Switch the input focus to the Task-Viewer window.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../UI/UserInterface.py" line="1839"/>
-        <source>Templ&amp;ate-Viewer</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../UI/UserInterface.py" line="1845"/>
-        <source>Switch the input focus to the Template-Viewer window.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../UI/UserInterface.py" line="1847"/>
-        <source>&lt;b&gt;Activate Template-Viewer&lt;/b&gt;&lt;p&gt;This switches the input focus to the Template-Viewer window.&lt;/p&gt;</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../UI/UserInterface.py" line="1857"/>
-        <source>&amp;Left Toolbox</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <location filename="../UI/UserInterface.py" line="1860"/>
-        <source>Toggle the Left Toolbox window</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../UI/UserInterface.py" line="1861"/>
-        <source>&lt;b&gt;Toggle the Left Toolbox window&lt;/b&gt;&lt;p&gt;If the Left Toolbox window is hidden then display it. If it is displayed then close it.&lt;/p&gt;</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../UI/UserInterface.py" line="1869"/>
-        <source>&amp;Right Toolbox</source>
+        <source>Switch the input focus to the Task-Viewer window.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../UI/UserInterface.py" line="1873"/>
+        <source>Templ&amp;ate-Viewer</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../UI/UserInterface.py" line="1879"/>
+        <source>Switch the input focus to the Template-Viewer window.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../UI/UserInterface.py" line="1881"/>
+        <source>&lt;b&gt;Activate Template-Viewer&lt;/b&gt;&lt;p&gt;This switches the input focus to the Template-Viewer window.&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../UI/UserInterface.py" line="1891"/>
+        <source>&amp;Left Toolbox</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../UI/UserInterface.py" line="1894"/>
+        <source>Toggle the Left Toolbox window</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../UI/UserInterface.py" line="1895"/>
+        <source>&lt;b&gt;Toggle the Left Toolbox window&lt;/b&gt;&lt;p&gt;If the Left Toolbox window is hidden then display it. If it is displayed then close it.&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../UI/UserInterface.py" line="1903"/>
+        <source>&amp;Right Toolbox</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../UI/UserInterface.py" line="1907"/>
         <source>Toggle the Right Toolbox window</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="1874"/>
+        <location filename="../UI/UserInterface.py" line="1908"/>
         <source>&lt;b&gt;Toggle the Right Toolbox window&lt;/b&gt;&lt;p&gt;If the Right Toolbox window is hidden then display it. If it is displayed then close it.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="1909"/>
+        <location filename="../UI/UserInterface.py" line="1943"/>
         <source>Right Sidebar</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="1909"/>
+        <location filename="../UI/UserInterface.py" line="1943"/>
         <source>&amp;Right Sidebar</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="1913"/>
+        <location filename="../UI/UserInterface.py" line="1947"/>
         <source>Toggle the right sidebar window</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="1915"/>
+        <location filename="../UI/UserInterface.py" line="1949"/>
         <source>&lt;b&gt;Toggle the right sidebar window&lt;/b&gt;&lt;p&gt;If the right sidebar window is hidden then display it. If it is displayed then close it.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="1938"/>
+        <location filename="../UI/UserInterface.py" line="1972"/>
         <source>Cooperation-Viewer</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="1938"/>
+        <location filename="../UI/UserInterface.py" line="1972"/>
         <source>Co&amp;operation-Viewer</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="1944"/>
+        <location filename="../UI/UserInterface.py" line="1978"/>
         <source>Switch the input focus to the Cooperation-Viewer window.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="1946"/>
+        <location filename="../UI/UserInterface.py" line="1980"/>
         <source>&lt;b&gt;Activate Cooperation-Viewer&lt;/b&gt;&lt;p&gt;This switches the input focus to the Cooperation-Viewer window.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="1975"/>
+        <location filename="../UI/UserInterface.py" line="2009"/>
         <source>Symbols-Viewer</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="1975"/>
+        <location filename="../UI/UserInterface.py" line="2009"/>
         <source>S&amp;ymbols-Viewer</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="1981"/>
+        <location filename="../UI/UserInterface.py" line="2015"/>
         <source>Switch the input focus to the Symbols-Viewer window.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="1983"/>
+        <location filename="../UI/UserInterface.py" line="2017"/>
         <source>&lt;b&gt;Activate Symbols-Viewer&lt;/b&gt;&lt;p&gt;This switches the input focus to the Symbols-Viewer window.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="1994"/>
+        <location filename="../UI/UserInterface.py" line="2028"/>
         <source>Numbers-Viewer</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="1994"/>
+        <location filename="../UI/UserInterface.py" line="2028"/>
         <source>Num&amp;bers-Viewer</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2000"/>
+        <location filename="../UI/UserInterface.py" line="2034"/>
         <source>Switch the input focus to the Numbers-Viewer window.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2002"/>
+        <location filename="../UI/UserInterface.py" line="2036"/>
         <source>&lt;b&gt;Activate Numbers-Viewer&lt;/b&gt;&lt;p&gt;This switches the input focus to the Numbers-Viewer window.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="3141"/>
+        <location filename="../UI/UserInterface.py" line="3175"/>
         <source>&amp;Windows</source>
         <translation type="unfinished">&amp;Windows</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="1828"/>
+        <location filename="../UI/UserInterface.py" line="1862"/>
         <source>&lt;b&gt;Activate Task-Viewer&lt;/b&gt;&lt;p&gt;This switches the input focus to the Task-Viewer window.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="1957"/>
+        <location filename="../UI/UserInterface.py" line="1991"/>
         <source>IRC</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="1957"/>
+        <location filename="../UI/UserInterface.py" line="1991"/>
         <source>&amp;IRC</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="1963"/>
+        <location filename="../UI/UserInterface.py" line="1997"/>
         <source>Switch the input focus to the IRC window.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="1965"/>
+        <location filename="../UI/UserInterface.py" line="1999"/>
         <source>&lt;b&gt;Activate IRC&lt;/b&gt;&lt;p&gt;This switches the input focus to the IRC window.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2309"/>
+        <location filename="../UI/UserInterface.py" line="2343"/>
         <source>Qt-Designer</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2309"/>
+        <location filename="../UI/UserInterface.py" line="2343"/>
         <source>Qt-&amp;Designer...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2314"/>
+        <location filename="../UI/UserInterface.py" line="2348"/>
         <source>Start Qt-Designer</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2315"/>
+        <location filename="../UI/UserInterface.py" line="2349"/>
         <source>&lt;b&gt;Qt-Designer&lt;/b&gt;&lt;p&gt;Start Qt-Designer.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2335"/>
+        <location filename="../UI/UserInterface.py" line="2369"/>
         <source>Qt-Linguist</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2335"/>
+        <location filename="../UI/UserInterface.py" line="2369"/>
         <source>Qt-&amp;Linguist...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2340"/>
+        <location filename="../UI/UserInterface.py" line="2374"/>
         <source>Start Qt-Linguist</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2341"/>
+        <location filename="../UI/UserInterface.py" line="2375"/>
         <source>&lt;b&gt;Qt-Linguist&lt;/b&gt;&lt;p&gt;Start Qt-Linguist.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2831"/>
+        <location filename="../UI/UserInterface.py" line="2865"/>
         <source>Qt5 Documentation</source>
         <translation type="unfinished">Qt4 dokumentace {5 ?}</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2831"/>
+        <location filename="../UI/UserInterface.py" line="2865"/>
         <source>Qt&amp;5 Documentation</source>
         <translation type="unfinished">Qt&amp;4 dokumentace {5 ?}</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2835"/>
+        <location filename="../UI/UserInterface.py" line="2869"/>
         <source>Open Qt5 Documentation</source>
         <translation type="unfinished">Otevřít Qt4 dokumentaci {5 ?}</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2639"/>
+        <location filename="../UI/UserInterface.py" line="2673"/>
         <source>Manage SSL Certificates</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2639"/>
+        <location filename="../UI/UserInterface.py" line="2673"/>
         <source>Manage SSL Certificates...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2644"/>
+        <location filename="../UI/UserInterface.py" line="2678"/>
         <source>Manage the saved SSL certificates</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2646"/>
+        <location filename="../UI/UserInterface.py" line="2680"/>
         <source>&lt;b&gt;Manage SSL Certificates...&lt;/b&gt;&lt;p&gt;Opens a dialog to manage the saved SSL certificates.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2655"/>
+        <location filename="../UI/UserInterface.py" line="2689"/>
         <source>Edit Message Filters</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2655"/>
+        <location filename="../UI/UserInterface.py" line="2689"/>
         <source>Edit Message Filters...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2660"/>
+        <location filename="../UI/UserInterface.py" line="2694"/>
         <source>Edit the message filters used to suppress unwanted messages</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2662"/>
+        <location filename="../UI/UserInterface.py" line="2696"/>
         <source>&lt;b&gt;Edit Message Filters&lt;/b&gt;&lt;p&gt;Opens a dialog to edit the message filters used to suppress unwanted messages been shown in an error window.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2846"/>
+        <location filename="../UI/UserInterface.py" line="2880"/>
         <source>PyQt5 Documentation</source>
         <translation type="unfinished">PyQt4 dokumentace {5 ?}</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2846"/>
+        <location filename="../UI/UserInterface.py" line="2880"/>
         <source>PyQt&amp;5 Documentation</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2850"/>
+        <location filename="../UI/UserInterface.py" line="2884"/>
         <source>Open PyQt5 Documentation</source>
         <translation type="unfinished">Otevřít PyQt4 dokumentaci {5 ?}</translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="5687"/>
+        <location filename="../UI/UserInterface.py" line="5721"/>
         <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>
     <message>
-        <location filename="../UI/UserInterface.py" line="2873"/>
+        <location filename="../UI/UserInterface.py" line="2907"/>
         <source>&lt;b&gt;Python 3 Documentation&lt;/b&gt;&lt;p&gt;Display the Python 3 documentation. If no documentation directory is configured, the location of the Python 3 documentation is assumed to be the doc directory underneath the location of the Python 3 executable on Windows and &lt;i&gt;/usr/share/doc/packages/python/html&lt;/i&gt; on Unix. Set PYTHON3DOCDIR in your environment to override this.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="6989"/>
+        <location filename="../UI/UserInterface.py" line="7023"/>
         <source>%v/%m</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2174"/>
+        <location filename="../UI/UserInterface.py" line="2208"/>
         <source>Show Error Log</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2170"/>
+        <location filename="../UI/UserInterface.py" line="2204"/>
         <source>Show Error &amp;Log...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../UI/UserInterface.py" line="2175"/>
+        <location filename="../UI/UserInterface.py" line="2209"/>
         <source>&lt;b&gt;Show Error Log...&lt;/b&gt;&lt;p&gt;Opens a dialog showing the most recent error log.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>