Fixed a signal/slot issue with the "Remove Split" action. maintenance

Thu, 18 Jan 2018 18:57:40 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Thu, 18 Jan 2018 18:57:40 +0100
branch
maintenance
changeset 6097
bf18415da0c7
parent 6071
e9bda9b4260b (current diff)
parent 6096
95342b6d7ab4 (diff)
child 6103
55bb39334322

Fixed a signal/slot issue with the "Remove Split" action.

APIs/Python3/eric6.api file | annotate | diff | comparison | revisions
Documentation/Help/source.qch file | annotate | diff | comparison | revisions
Documentation/Help/source.qhp file | annotate | diff | comparison | revisions
Documentation/Source/eric6.QScintilla.Editor.html file | annotate | diff | comparison | revisions
Graphics/UMLGraphicsView.py file | annotate | diff | comparison | revisions
Helpviewer/HelpBrowserWV.py file | annotate | diff | comparison | revisions
Plugins/ViewManagerPlugins/Listspace/Listspace.py file | annotate | diff | comparison | revisions
Plugins/ViewManagerPlugins/Tabview/Tabview.py file | annotate | diff | comparison | revisions
Preferences/__init__.py file | annotate | diff | comparison | revisions
QScintilla/Editor.py file | annotate | diff | comparison | revisions
QScintilla/Shell.py file | annotate | diff | comparison | revisions
ViewManager/ViewManager.py file | annotate | diff | comparison | revisions
WebBrowser/Download/DownloadItem.py file | annotate | diff | comparison | revisions
WebBrowser/WebBrowserView.py file | annotate | diff | comparison | revisions
changelog file | annotate | diff | comparison | revisions
i18n/eric6_cs.ts file | annotate | diff | comparison | revisions
i18n/eric6_de.qm file | annotate | diff | comparison | revisions
i18n/eric6_de.ts file | annotate | diff | comparison | revisions
i18n/eric6_empty.ts file | annotate | diff | comparison | revisions
i18n/eric6_en.ts file | annotate | diff | comparison | revisions
i18n/eric6_es.qm file | annotate | diff | comparison | revisions
i18n/eric6_es.ts file | annotate | diff | comparison | revisions
i18n/eric6_fr.ts file | annotate | diff | comparison | revisions
i18n/eric6_it.ts file | annotate | diff | comparison | revisions
i18n/eric6_pt.ts file | annotate | diff | comparison | revisions
i18n/eric6_ru.qm file | annotate | diff | comparison | revisions
i18n/eric6_ru.ts file | annotate | diff | comparison | revisions
i18n/eric6_tr.ts file | annotate | diff | comparison | revisions
i18n/eric6_zh_CN.ts file | annotate | diff | comparison | revisions
--- a/APIs/Python3/eric6.api	Thu Jan 18 11:10:57 2018 +0100
+++ b/APIs/Python3/eric6.api	Thu Jan 18 18:57:40 2018 +0100
@@ -6749,7 +6749,7 @@
 eric6.Plugins.VcsPlugins.vcsSubversion.subversion.Subversion.vcsTag?4(name)
 eric6.Plugins.VcsPlugins.vcsSubversion.subversion.Subversion.vcsUpdate?4(name, noDialog=False)
 eric6.Plugins.VcsPlugins.vcsSubversion.subversion.Subversion?1(plugin, parent=None, name=None)
-eric6.Plugins.ViewManagerPlugins.Listspace.Listspace.Listspace._addView?5(win, fn=None, noName="", addNext=False)
+eric6.Plugins.ViewManagerPlugins.Listspace.Listspace.Listspace._addView?5(win, fn=None, noName="", addNext=False, indexes=None)
 eric6.Plugins.ViewManagerPlugins.Listspace.Listspace.Listspace._initWindowActions?5()
 eric6.Plugins.ViewManagerPlugins.Listspace.Listspace.Listspace._modificationStatusChanged?5(m, editor)
 eric6.Plugins.ViewManagerPlugins.Listspace.Listspace.Listspace._removeAllViews?5()
@@ -6781,16 +6781,19 @@
 eric6.Plugins.ViewManagerPlugins.Listspace.Listspace.Listspace.editorSavedEd?7
 eric6.Plugins.ViewManagerPlugins.Listspace.Listspace.Listspace.editorTextChanged?7
 eric6.Plugins.ViewManagerPlugins.Listspace.Listspace.Listspace.eventFilter?4(watched, event)
+eric6.Plugins.ViewManagerPlugins.Listspace.Listspace.Listspace.getOpenEditorsForSession?4()
 eric6.Plugins.ViewManagerPlugins.Listspace.Listspace.Listspace.getSplitOrientation?4()
 eric6.Plugins.ViewManagerPlugins.Listspace.Listspace.Listspace.lastEditorClosed?7
 eric6.Plugins.ViewManagerPlugins.Listspace.Listspace.Listspace.mainWidget?4()
 eric6.Plugins.ViewManagerPlugins.Listspace.Listspace.Listspace.nextSplit?4()
 eric6.Plugins.ViewManagerPlugins.Listspace.Listspace.Listspace.prevSplit?4()
 eric6.Plugins.ViewManagerPlugins.Listspace.Listspace.Listspace.previewStateChanged?7
-eric6.Plugins.ViewManagerPlugins.Listspace.Listspace.Listspace.removeSplit?4()
+eric6.Plugins.ViewManagerPlugins.Listspace.Listspace.Listspace.removeSplit?4(index=-1)
 eric6.Plugins.ViewManagerPlugins.Listspace.Listspace.Listspace.setEditorName?4(editor, newName)
+eric6.Plugins.ViewManagerPlugins.Listspace.Listspace.Listspace.setSplitCount?4(count)
 eric6.Plugins.ViewManagerPlugins.Listspace.Listspace.Listspace.setSplitOrientation?4(orientation)
 eric6.Plugins.ViewManagerPlugins.Listspace.Listspace.Listspace.showWindowMenu?4(windowMenu)
+eric6.Plugins.ViewManagerPlugins.Listspace.Listspace.Listspace.splitCount?4()
 eric6.Plugins.ViewManagerPlugins.Listspace.Listspace.Listspace.syntaxerrorToggled?7
 eric6.Plugins.ViewManagerPlugins.Listspace.Listspace.Listspace.tile?4()
 eric6.Plugins.ViewManagerPlugins.Listspace.Listspace.Listspace?1(parent)
@@ -6823,7 +6826,7 @@
 eric6.Plugins.ViewManagerPlugins.Tabview.Tabview.TabWidget.setCurrentWidget?4(assembly)
 eric6.Plugins.ViewManagerPlugins.Tabview.Tabview.TabWidget.showIndicator?4(on)
 eric6.Plugins.ViewManagerPlugins.Tabview.Tabview.TabWidget?1(vm)
-eric6.Plugins.ViewManagerPlugins.Tabview.Tabview.Tabview._addView?5(win, fn=None, noName="", addNext=False)
+eric6.Plugins.ViewManagerPlugins.Tabview.Tabview.Tabview._addView?5(win, fn=None, noName="", addNext=False, indexes=None)
 eric6.Plugins.ViewManagerPlugins.Tabview.Tabview.Tabview._initWindowActions?5()
 eric6.Plugins.ViewManagerPlugins.Tabview.Tabview.Tabview._modificationStatusChanged?5(m, editor)
 eric6.Plugins.ViewManagerPlugins.Tabview.Tabview.Tabview._removeAllViews?5()
@@ -6855,6 +6858,7 @@
 eric6.Plugins.ViewManagerPlugins.Tabview.Tabview.Tabview.editorSavedEd?7
 eric6.Plugins.ViewManagerPlugins.Tabview.Tabview.Tabview.editorTextChanged?7
 eric6.Plugins.ViewManagerPlugins.Tabview.Tabview.Tabview.eventFilter?4(watched, event)
+eric6.Plugins.ViewManagerPlugins.Tabview.Tabview.Tabview.getOpenEditorsForSession?4()
 eric6.Plugins.ViewManagerPlugins.Tabview.Tabview.Tabview.getSplitOrientation?4()
 eric6.Plugins.ViewManagerPlugins.Tabview.Tabview.Tabview.getTabWidgetById?4(id_)
 eric6.Plugins.ViewManagerPlugins.Tabview.Tabview.Tabview.insertView?4(win, tabWidget, index, fn=None, noName="")
@@ -6864,10 +6868,12 @@
 eric6.Plugins.ViewManagerPlugins.Tabview.Tabview.Tabview.preferencesChanged?4()
 eric6.Plugins.ViewManagerPlugins.Tabview.Tabview.Tabview.prevSplit?4()
 eric6.Plugins.ViewManagerPlugins.Tabview.Tabview.Tabview.previewStateChanged?7
-eric6.Plugins.ViewManagerPlugins.Tabview.Tabview.Tabview.removeSplit?4()
+eric6.Plugins.ViewManagerPlugins.Tabview.Tabview.Tabview.removeSplit?4(index=-1)
 eric6.Plugins.ViewManagerPlugins.Tabview.Tabview.Tabview.setEditorName?4(editor, newName)
+eric6.Plugins.ViewManagerPlugins.Tabview.Tabview.Tabview.setSplitCount?4(count)
 eric6.Plugins.ViewManagerPlugins.Tabview.Tabview.Tabview.setSplitOrientation?4(orientation)
 eric6.Plugins.ViewManagerPlugins.Tabview.Tabview.Tabview.showWindowMenu?4(windowMenu)
+eric6.Plugins.ViewManagerPlugins.Tabview.Tabview.Tabview.splitCount?4()
 eric6.Plugins.ViewManagerPlugins.Tabview.Tabview.Tabview.syntaxerrorToggled?7
 eric6.Plugins.ViewManagerPlugins.Tabview.Tabview.Tabview.tile?4()
 eric6.Plugins.ViewManagerPlugins.Tabview.Tabview.Tabview?1(parent)
@@ -8299,6 +8305,7 @@
 eric6.QScintilla.Editor.Editor.highlight?4(line=None, error=False, syntaxError=False)
 eric6.QScintilla.Editor.Editor.highlightVisible?4()
 eric6.QScintilla.Editor.Editor.indentLineOrSelection?4()
+eric6.QScintilla.Editor.Editor.isClone?4(editor)
 eric6.QScintilla.Editor.Editor.isJavascriptFile?4()
 eric6.QScintilla.Editor.Editor.isLastEditPositionAvailable?4()
 eric6.QScintilla.Editor.Editor.isPy2File?4()
@@ -8928,6 +8935,7 @@
 eric6.QScintilla.QsciScintillaCompat.QsciScintillaCompat.UserSeparator?7
 eric6.QScintilla.QsciScintillaCompat.QsciScintillaCompat._encodeString?5(string)
 eric6.QScintilla.QsciScintillaCompat.QsciScintillaCompat.byteAt?4(pos)
+eric6.QScintilla.QsciScintillaCompat.QsciScintillaCompat.canPaste?4()
 eric6.QScintilla.QsciScintillaCompat.QsciScintillaCompat.charAt?4(pos)
 eric6.QScintilla.QsciScintillaCompat.QsciScintillaCompat.clearAllIndicators?4(indicator)
 eric6.QScintilla.QsciScintillaCompat.QsciScintillaCompat.clearAlternateKeys?4()
@@ -10388,7 +10396,7 @@
 eric6.ViewManager.ViewManager.QuickSearchLineEdit.focusInEvent?4(evt)
 eric6.ViewManager.ViewManager.QuickSearchLineEdit.gotFocus?7
 eric6.ViewManager.ViewManager.QuickSearchLineEdit.keyPressEvent?4(evt)
-eric6.ViewManager.ViewManager.ViewManager._addView?5(win, fn=None, noName="", addNext=False)
+eric6.ViewManager.ViewManager.ViewManager._addView?5(win, fn=None, noName="", addNext=False, indexes=None)
 eric6.ViewManager.ViewManager.ViewManager._checkActions?5(editor, setSb=True)
 eric6.ViewManager.ViewManager.ViewManager._getOpenFileFilter?5()
 eric6.ViewManager.ViewManager.ViewManager._getOpenStartDir?5()
@@ -10443,13 +10451,14 @@
 eric6.ViewManager.ViewManager.ViewManager.getAPIsManager?4()
 eric6.ViewManager.ViewManager.ViewManager.getActions?4(actionSetType)
 eric6.ViewManager.ViewManager.ViewManager.getActiveName?4()
-eric6.ViewManager.ViewManager.ViewManager.getEditor?4(fn, filetype="", addNext=False)
+eric6.ViewManager.ViewManager.ViewManager.getEditor?4(fn, filetype="", addNext=False, indexes=None)
 eric6.ViewManager.ViewManager.ViewManager.getMostRecent?4()
 eric6.ViewManager.ViewManager.ViewManager.getNumber?4()
 eric6.ViewManager.ViewManager.ViewManager.getOpenEditor?4(fn)
 eric6.ViewManager.ViewManager.ViewManager.getOpenEditorCount?4(fn)
 eric6.ViewManager.ViewManager.ViewManager.getOpenEditors?4()
 eric6.ViewManager.ViewManager.ViewManager.getOpenEditorsCount?4()
+eric6.ViewManager.ViewManager.ViewManager.getOpenEditorsForSession?4()
 eric6.ViewManager.ViewManager.ViewManager.getOpenFilenames?4()
 eric6.ViewManager.ViewManager.ViewManager.getSRHistory?4(key)
 eric6.ViewManager.ViewManager.ViewManager.getSplitOrientation?4()
@@ -10473,10 +10482,10 @@
 eric6.ViewManager.ViewManager.ViewManager.lastEditorClosed?7
 eric6.ViewManager.ViewManager.ViewManager.mainWidget?4()
 eric6.ViewManager.ViewManager.ViewManager.newEditor?4()
-eric6.ViewManager.ViewManager.ViewManager.newEditorView?4(fn, caller, filetype="")
+eric6.ViewManager.ViewManager.ViewManager.newEditorView?4(fn, caller, filetype="", indexes=None)
 eric6.ViewManager.ViewManager.ViewManager.nextSplit?4()
 eric6.ViewManager.ViewManager.ViewManager.openFiles?4(prog)
-eric6.ViewManager.ViewManager.ViewManager.openSourceFile?4(fn, lineno=-1, filetype="", selStart=0, selEnd=0, pos=0, addNext=False)
+eric6.ViewManager.ViewManager.ViewManager.openSourceFile?4(fn, lineno=-1, filetype="", selStart=0, selEnd=0, pos=0, addNext=False, indexes=None)
 eric6.ViewManager.ViewManager.ViewManager.preferencesChanged?4()
 eric6.ViewManager.ViewManager.ViewManager.prevSplit?4()
 eric6.ViewManager.ViewManager.ViewManager.previewStateChanged?7
@@ -10488,7 +10497,7 @@
 eric6.ViewManager.ViewManager.ViewManager.projectLexerAssociationsChanged?4()
 eric6.ViewManager.ViewManager.ViewManager.projectOpened?4()
 eric6.ViewManager.ViewManager.ViewManager.receive?4(projectHash, fileName, command)
-eric6.ViewManager.ViewManager.ViewManager.removeSplit?4()
+eric6.ViewManager.ViewManager.ViewManager.removeSplit?4(index=-1)
 eric6.ViewManager.ViewManager.ViewManager.replaceWidget?4()
 eric6.ViewManager.ViewManager.ViewManager.saveAllEditors?4()
 eric6.ViewManager.ViewManager.ViewManager.saveAsCurrentEditor?4()
@@ -10507,6 +10516,7 @@
 eric6.ViewManager.ViewManager.ViewManager.setFileLine?4(fn, line, error=False, syntaxError=False)
 eric6.ViewManager.ViewManager.ViewManager.setReferences?4(ui, dbs)
 eric6.ViewManager.ViewManager.ViewManager.setSbInfo?4(sbLine, sbPos, sbWritable, sbEncoding, sbLanguage, sbEol, sbZoom)
+eric6.ViewManager.ViewManager.ViewManager.setSplitCount?4(count)
 eric6.ViewManager.ViewManager.ViewManager.setSplitOrientation?4(orientation)
 eric6.ViewManager.ViewManager.ViewManager.shareConnected?4(connected)
 eric6.ViewManager.ViewManager.ViewManager.shareEditor?4(share)
@@ -10515,6 +10525,7 @@
 eric6.ViewManager.ViewManager.ViewManager.showReplaceWidget?4()
 eric6.ViewManager.ViewManager.ViewManager.showSearchWidget?4()
 eric6.ViewManager.ViewManager.ViewManager.showWindowMenu?4(windowMenu)
+eric6.ViewManager.ViewManager.ViewManager.splitCount?4()
 eric6.ViewManager.ViewManager.ViewManager.startSharedEdit?4()
 eric6.ViewManager.ViewManager.ViewManager.syntaxerrorToggled?7
 eric6.ViewManager.ViewManager.ViewManager.textForFind?4(getCurrentWord=True)
@@ -10988,6 +10999,7 @@
 eric6.WebBrowser.Download.DownloadItem.DownloadItem.getInfoData?4()
 eric6.WebBrowser.Download.DownloadItem.DownloadItem.getPageUrl?4()
 eric6.WebBrowser.Download.DownloadItem.DownloadItem.on_openButton_clicked?4()
+eric6.WebBrowser.Download.DownloadItem.DownloadItem.on_pauseButton_clicked?4(checked)
 eric6.WebBrowser.Download.DownloadItem.DownloadItem.on_stopButton_clicked?4()
 eric6.WebBrowser.Download.DownloadItem.DownloadItem.openFile?4()
 eric6.WebBrowser.Download.DownloadItem.DownloadItem.openFolder?4()
@@ -11004,6 +11016,7 @@
 eric6.WebBrowser.Download.DownloadManager.DownloadManager.allowQuit?4()
 eric6.WebBrowser.Download.DownloadManager.DownloadManager.changeOccurred?4()
 eric6.WebBrowser.Download.DownloadManager.DownloadManager.cleanup?4()
+eric6.WebBrowser.Download.DownloadManager.DownloadManager.closeEvent?4(evt)
 eric6.WebBrowser.Download.DownloadManager.DownloadManager.count?4()
 eric6.WebBrowser.Download.DownloadManager.DownloadManager.download?4(downloadItem)
 eric6.WebBrowser.Download.DownloadManager.DownloadManager.downloadDirectory?4()
@@ -11660,6 +11673,7 @@
 eric6.WebBrowser.SafeBrowsing.SafeBrowsingLabel.SafeBrowsingLabel?1(parent=None)
 eric6.WebBrowser.SafeBrowsing.SafeBrowsingManager.SafeBrowsingManager.close?4()
 eric6.WebBrowser.SafeBrowsing.SafeBrowsingManager.SafeBrowsingManager.configurationChanged?4()
+eric6.WebBrowser.SafeBrowsing.SafeBrowsingManager.SafeBrowsingManager.enabled?7
 eric6.WebBrowser.SafeBrowsing.SafeBrowsingManager.SafeBrowsingManager.fairUseDelayExpired?4()
 eric6.WebBrowser.SafeBrowsing.SafeBrowsingManager.SafeBrowsingManager.fullCacheCleanup?4()
 eric6.WebBrowser.SafeBrowsing.SafeBrowsingManager.SafeBrowsingManager.getIgnoreSchemes?4()
--- a/APIs/Python3/eric6.bas	Thu Jan 18 11:10:57 2018 +0100
+++ b/APIs/Python3/eric6.bas	Thu Jan 18 18:57:40 2018 +0100
@@ -12,8 +12,8 @@
 AdBlockMatcher QObject
 AdBlockNetwork QObject
 AdBlockPage QObject
-AdBlockRuleOption IntFlag
-AdBlockRuleType IntFlag
+AdBlockRuleOption IntEnum
+AdBlockRuleType IntEnum
 AdBlockSubscription QObject
 AdBlockTreeWidget E5TreeWidget
 AdBlockUrlInterceptor UrlInterceptor
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DTDs/Session-6.1.dtd	Thu Jan 18 18:57:40 2018 +0100
@@ -0,0 +1,125 @@
+<!-- This is the DTD for eric's (project) session file version 6.1 -->
+
+<!ELEMENT   MultiProject    (#PCDATA)>
+
+<!ELEMENT   Project         (#PCDATA)>
+
+<!ELEMENT   ViewManagerSplits   (#PCDATA)>
+<!ATTLIST   ViewManagerSplits
+    count       CDATA   #REQUIRED
+    orientation CDATA   #REQUIRED>
+
+<!ELEMENT   Filename        (#PCDATA)>
+<!ATTLIST   Filename
+    cline       CDATA   #REQUIRED
+    cindex      CDATA   #REQUIRED
+    folds       CDATA   #REQUIRED
+    zoom        CDATA   #REQUIRED
+    cloned      CDATA   #REQUIRED
+    splitindex  CDATA   #REQUIRED
+    editorindex CDATA   #REQUIRED>
+
+<!ELEMENT   Filenames       (Filename*)>
+
+<!ELEMENT   ActiveWindow    (#PCDATA)>
+<!ATTLIST   ActiveWindow
+    cline       CDATA   #REQUIRED
+    cindex      CDATA   #REQUIRED>
+
+<!ELEMENT   BpFilename      (#PCDATA)>
+<!ELEMENT   Linenumber      EMPTY>
+<!ATTLIST   Linenumber
+    value       CDATA   #REQUIRED>
+<!ELEMENT   Condition       (#PCDATA)>
+<!ELEMENT   Temporary       EMPTY>
+<!ATTLIST   Temporary
+    value       CDATA   #REQUIRED>
+<!ELEMENT   Enabled         EMPTY>
+<!ATTLIST   Enabled
+    value       CDATA   #REQUIRED>
+<!ELEMENT   Count           EMPTY>
+<!ATTLIST   Count
+    value       CDATA   #REQUIRED>
+
+<!ELEMENT   Breakpoint      (BpFilename,
+                             Linenumber,
+                             Condition,
+                             Temporary,
+                             Enabled,
+                             Count)>
+
+<!ELEMENT   Breakpoints     (Breakpoint*)>
+
+<!ELEMENT   Special         (#PCDATA)>
+
+<!ELEMENT   Watchexpression (Condition,
+                             Temporary,
+                             Enabled,
+                             Count,
+                             Special)>
+
+<!ELEMENT   Watchexpressions (Watchexpression*)>
+
+<!ELEMENT   Exception       (#PCDATA)>
+
+<!ELEMENT   IgnoredException (#PCDATA)>
+
+<!ELEMENT   Interpreter      (#PCDATA)>
+<!ELEMENT   CommandLine      (#PCDATA)>
+<!ELEMENT   WorkingDirectory (#PCDATA)>
+<!ELEMENT   Environment      (#PCDATA)>
+<!ELEMENT   ReportExceptions EMPTY>
+<!ATTLIST   ReportExceptions
+    value       CDATA   #REQUIRED>
+<!ELEMENT   Exceptions       (Exception*)>
+<!ELEMENT   IgnoredExceptions (IgnoredException*)>
+<!ELEMENT   AutoClearShell   EMPTY>
+<!ATTLIST   AutoClearShell
+    value       CDATA   #REQUIRED>
+<!ELEMENT   TracePython      EMPTY>
+<!ATTLIST   TracePython
+    value       CDATA   #REQUIRED>
+<!ELEMENT   AutoContinue     EMPTY>
+<!ATTLIST   AutoContinue
+    value       CDATA   #REQUIRED>
+<!ELEMENT   CovexcPattern    (#PCDATA)>
+
+<!ELEMENT   DebugInfo       (Interpreter,
+                             CommandLine,
+                             WorkingDirectory,
+                             Environment,
+                             ReportExceptions,
+                             Exceptions,
+                             IgnoredExceptions,
+                             AutoClearShell,
+                             TracePython,
+                             AutoContinue,
+                             CovexcPattern)>
+
+<!ELEMENT   BmFilename      (#PCDATA)>
+
+<!ELEMENT   Bookmark        (BmFilename,
+                             Linenumber)>
+
+<!ELEMENT   Bookmarks       (Bookmark*)>
+
+<!ELEMENT   ExpandedItemName     (#PCDATA)>
+
+<!ELEMENT   ProjectBrowserState  (ExpandedItemName*)>
+<!ATTLIST   ProjectBrowserState
+    name        CDATA   #REQUIRED>
+
+<!ELEMENT   ProjectBrowserStates (ProjectBrowserState*)>
+
+<!ELEMENT   Session         (MultiProject?,
+                             Project?,
+                             ViewManagerSplits?,
+                             Filenames,
+                             ActiveWindow?,
+                             Breakpoints,
+                             Watchexpressions,
+                             DebugInfo,
+                             Bookmarks,
+                             ProjectBrowserStates?)>
+<!ATTLIST   Session
+    version     CDATA   #REQUIRED>
Binary file Documentation/Help/source.qch has changed
--- a/Documentation/Help/source.qhp	Thu Jan 18 11:10:57 2018 +0100
+++ b/Documentation/Help/source.qhp	Thu Jan 18 18:57:40 2018 +0100
@@ -4166,8 +4166,6 @@
       <keyword name="DownloadItem.__initialize" id="DownloadItem.__initialize" ref="eric6.WebBrowser.Download.DownloadItem.html#DownloadItem.__initialize" />
       <keyword name="DownloadItem.__metaDataChanged" id="DownloadItem.__metaDataChanged" ref="eric6.Helpviewer.Download.DownloadItem.html#DownloadItem.__metaDataChanged" />
       <keyword name="DownloadItem.__networkError" id="DownloadItem.__networkError" ref="eric6.Helpviewer.Download.DownloadItem.html#DownloadItem.__networkError" />
-      <keyword name="DownloadItem.__open" id="DownloadItem.__open" ref="eric6.Helpviewer.Download.DownloadItem.html#DownloadItem.__open" />
-      <keyword name="DownloadItem.__open" id="DownloadItem.__open" ref="eric6.WebBrowser.Download.DownloadItem.html#DownloadItem.__open" />
       <keyword name="DownloadItem.__readyRead" id="DownloadItem.__readyRead" ref="eric6.Helpviewer.Download.DownloadItem.html#DownloadItem.__readyRead" />
       <keyword name="DownloadItem.__saveFileName" id="DownloadItem.__saveFileName" ref="eric6.Helpviewer.Download.DownloadItem.html#DownloadItem.__saveFileName" />
       <keyword name="DownloadItem.__saveFileName" id="DownloadItem.__saveFileName" ref="eric6.WebBrowser.Download.DownloadItem.html#DownloadItem.__saveFileName" />
@@ -4205,6 +4203,7 @@
       <keyword name="DownloadItem.on_openButton_clicked" id="DownloadItem.on_openButton_clicked" ref="eric6.Helpviewer.Download.DownloadItem.html#DownloadItem.on_openButton_clicked" />
       <keyword name="DownloadItem.on_openButton_clicked" id="DownloadItem.on_openButton_clicked" ref="eric6.WebBrowser.Download.DownloadItem.html#DownloadItem.on_openButton_clicked" />
       <keyword name="DownloadItem.on_pauseButton_clicked" id="DownloadItem.on_pauseButton_clicked" ref="eric6.Helpviewer.Download.DownloadItem.html#DownloadItem.on_pauseButton_clicked" />
+      <keyword name="DownloadItem.on_pauseButton_clicked" id="DownloadItem.on_pauseButton_clicked" ref="eric6.WebBrowser.Download.DownloadItem.html#DownloadItem.on_pauseButton_clicked" />
       <keyword name="DownloadItem.on_stopButton_clicked" id="DownloadItem.on_stopButton_clicked" ref="eric6.Helpviewer.Download.DownloadItem.html#DownloadItem.on_stopButton_clicked" />
       <keyword name="DownloadItem.on_stopButton_clicked" id="DownloadItem.on_stopButton_clicked" ref="eric6.WebBrowser.Download.DownloadItem.html#DownloadItem.on_stopButton_clicked" />
       <keyword name="DownloadItem.on_tryAgainButton_clicked" id="DownloadItem.on_tryAgainButton_clicked" ref="eric6.Helpviewer.Download.DownloadItem.html#DownloadItem.on_tryAgainButton_clicked" />
@@ -4264,6 +4263,7 @@
       <keyword name="DownloadManager.changeOccurred" id="DownloadManager.changeOccurred" ref="eric6.WebBrowser.Download.DownloadManager.html#DownloadManager.changeOccurred" />
       <keyword name="DownloadManager.cleanup" id="DownloadManager.cleanup" ref="eric6.Helpviewer.Download.DownloadManager.html#DownloadManager.cleanup" />
       <keyword name="DownloadManager.cleanup" id="DownloadManager.cleanup" ref="eric6.WebBrowser.Download.DownloadManager.html#DownloadManager.cleanup" />
+      <keyword name="DownloadManager.closeEvent" id="DownloadManager.closeEvent" ref="eric6.WebBrowser.Download.DownloadManager.html#DownloadManager.closeEvent" />
       <keyword name="DownloadManager.count" id="DownloadManager.count" ref="eric6.Helpviewer.Download.DownloadManager.html#DownloadManager.count" />
       <keyword name="DownloadManager.count" id="DownloadManager.count" ref="eric6.WebBrowser.Download.DownloadManager.html#DownloadManager.count" />
       <keyword name="DownloadManager.download" id="DownloadManager.download" ref="eric6.Helpviewer.Download.DownloadManager.html#DownloadManager.download" />
@@ -5185,6 +5185,7 @@
       <keyword name="Editor.__encodingsMenuTriggered" id="Editor.__encodingsMenuTriggered" ref="eric6.QScintilla.Editor.html#Editor.__encodingsMenuTriggered" />
       <keyword name="Editor.__eolChanged" id="Editor.__eolChanged" ref="eric6.QScintilla.Editor.html#Editor.__eolChanged" />
       <keyword name="Editor.__eolMenuTriggered" id="Editor.__eolMenuTriggered" ref="eric6.QScintilla.Editor.html#Editor.__eolMenuTriggered" />
+      <keyword name="Editor.__executeSelection" id="Editor.__executeSelection" ref="eric6.QScintilla.Editor.html#Editor.__executeSelection" />
       <keyword name="Editor.__exportMenuTriggered" id="Editor.__exportMenuTriggered" ref="eric6.QScintilla.Editor.html#Editor.__exportMenuTriggered" />
       <keyword name="Editor.__getCharacter" id="Editor.__getCharacter" ref="eric6.QScintilla.Editor.html#Editor.__getCharacter" />
       <keyword name="Editor.__getCodeCoverageFile" id="Editor.__getCodeCoverageFile" ref="eric6.QScintilla.Editor.html#Editor.__getCodeCoverageFile" />
@@ -5400,6 +5401,7 @@
       <keyword name="Editor.highlight" id="Editor.highlight" ref="eric6.QScintilla.Editor.html#Editor.highlight" />
       <keyword name="Editor.highlightVisible" id="Editor.highlightVisible" ref="eric6.QScintilla.Editor.html#Editor.highlightVisible" />
       <keyword name="Editor.indentLineOrSelection" id="Editor.indentLineOrSelection" ref="eric6.QScintilla.Editor.html#Editor.indentLineOrSelection" />
+      <keyword name="Editor.isClone" id="Editor.isClone" ref="eric6.QScintilla.Editor.html#Editor.isClone" />
       <keyword name="Editor.isJavascriptFile" id="Editor.isJavascriptFile" ref="eric6.QScintilla.Editor.html#Editor.isJavascriptFile" />
       <keyword name="Editor.isLastEditPositionAvailable" id="Editor.isLastEditPositionAvailable" ref="eric6.QScintilla.Editor.html#Editor.isLastEditPositionAvailable" />
       <keyword name="Editor.isPy2File" id="Editor.isPy2File" ref="eric6.QScintilla.Editor.html#Editor.isPy2File" />
@@ -10707,14 +10709,17 @@
       <keyword name="Listspace.canTile" id="Listspace.canTile" ref="eric6.Plugins.ViewManagerPlugins.Listspace.Listspace.html#Listspace.canTile" />
       <keyword name="Listspace.cascade" id="Listspace.cascade" ref="eric6.Plugins.ViewManagerPlugins.Listspace.Listspace.html#Listspace.cascade" />
       <keyword name="Listspace.eventFilter" id="Listspace.eventFilter" ref="eric6.Plugins.ViewManagerPlugins.Listspace.Listspace.html#Listspace.eventFilter" />
+      <keyword name="Listspace.getOpenEditorsForSession" id="Listspace.getOpenEditorsForSession" ref="eric6.Plugins.ViewManagerPlugins.Listspace.Listspace.html#Listspace.getOpenEditorsForSession" />
       <keyword name="Listspace.getSplitOrientation" id="Listspace.getSplitOrientation" ref="eric6.Plugins.ViewManagerPlugins.Listspace.Listspace.html#Listspace.getSplitOrientation" />
       <keyword name="Listspace.mainWidget" id="Listspace.mainWidget" ref="eric6.Plugins.ViewManagerPlugins.Listspace.Listspace.html#Listspace.mainWidget" />
       <keyword name="Listspace.nextSplit" id="Listspace.nextSplit" ref="eric6.Plugins.ViewManagerPlugins.Listspace.Listspace.html#Listspace.nextSplit" />
       <keyword name="Listspace.prevSplit" id="Listspace.prevSplit" ref="eric6.Plugins.ViewManagerPlugins.Listspace.Listspace.html#Listspace.prevSplit" />
       <keyword name="Listspace.removeSplit" id="Listspace.removeSplit" ref="eric6.Plugins.ViewManagerPlugins.Listspace.Listspace.html#Listspace.removeSplit" />
       <keyword name="Listspace.setEditorName" id="Listspace.setEditorName" ref="eric6.Plugins.ViewManagerPlugins.Listspace.Listspace.html#Listspace.setEditorName" />
+      <keyword name="Listspace.setSplitCount" id="Listspace.setSplitCount" ref="eric6.Plugins.ViewManagerPlugins.Listspace.Listspace.html#Listspace.setSplitCount" />
       <keyword name="Listspace.setSplitOrientation" id="Listspace.setSplitOrientation" ref="eric6.Plugins.ViewManagerPlugins.Listspace.Listspace.html#Listspace.setSplitOrientation" />
       <keyword name="Listspace.showWindowMenu" id="Listspace.showWindowMenu" ref="eric6.Plugins.ViewManagerPlugins.Listspace.Listspace.html#Listspace.showWindowMenu" />
+      <keyword name="Listspace.splitCount" id="Listspace.splitCount" ref="eric6.Plugins.ViewManagerPlugins.Listspace.Listspace.html#Listspace.splitCount" />
       <keyword name="Listspace.tile" id="Listspace.tile" ref="eric6.Plugins.ViewManagerPlugins.Listspace.Listspace.html#Listspace.tile" />
       <keyword name="LogView (Module)" id="LogView (Module)" ref="eric6.UI.LogView.html" />
       <keyword name="LogViewer" id="LogViewer" ref="eric6.UI.LogView.html#LogViewer" />
@@ -13255,6 +13260,7 @@
       <keyword name="QsciScintillaCompat.__setFoldMarker" id="QsciScintillaCompat.__setFoldMarker" ref="eric6.QScintilla.QsciScintillaCompat.html#QsciScintillaCompat.__setFoldMarker" />
       <keyword name="QsciScintillaCompat._encodeString" id="QsciScintillaCompat._encodeString" ref="eric6.QScintilla.QsciScintillaCompat.html#QsciScintillaCompat._encodeString" />
       <keyword name="QsciScintillaCompat.byteAt" id="QsciScintillaCompat.byteAt" ref="eric6.QScintilla.QsciScintillaCompat.html#QsciScintillaCompat.byteAt" />
+      <keyword name="QsciScintillaCompat.canPaste" id="QsciScintillaCompat.canPaste" ref="eric6.QScintilla.QsciScintillaCompat.html#QsciScintillaCompat.canPaste" />
       <keyword name="QsciScintillaCompat.charAt" id="QsciScintillaCompat.charAt" ref="eric6.QScintilla.QsciScintillaCompat.html#QsciScintillaCompat.charAt" />
       <keyword name="QsciScintillaCompat.clearAllIndicators" id="QsciScintillaCompat.clearAllIndicators" ref="eric6.QScintilla.QsciScintillaCompat.html#QsciScintillaCompat.clearAllIndicators" />
       <keyword name="QsciScintillaCompat.clearAlternateKeys" id="QsciScintillaCompat.clearAlternateKeys" ref="eric6.QScintilla.QsciScintillaCompat.html#QsciScintillaCompat.clearAlternateKeys" />
@@ -15840,6 +15846,7 @@
       <keyword name="Tabview.canTile" id="Tabview.canTile" ref="eric6.Plugins.ViewManagerPlugins.Tabview.Tabview.html#Tabview.canTile" />
       <keyword name="Tabview.cascade" id="Tabview.cascade" ref="eric6.Plugins.ViewManagerPlugins.Tabview.Tabview.html#Tabview.cascade" />
       <keyword name="Tabview.eventFilter" id="Tabview.eventFilter" ref="eric6.Plugins.ViewManagerPlugins.Tabview.Tabview.html#Tabview.eventFilter" />
+      <keyword name="Tabview.getOpenEditorsForSession" id="Tabview.getOpenEditorsForSession" ref="eric6.Plugins.ViewManagerPlugins.Tabview.Tabview.html#Tabview.getOpenEditorsForSession" />
       <keyword name="Tabview.getSplitOrientation" id="Tabview.getSplitOrientation" ref="eric6.Plugins.ViewManagerPlugins.Tabview.Tabview.html#Tabview.getSplitOrientation" />
       <keyword name="Tabview.getTabWidgetById" id="Tabview.getTabWidgetById" ref="eric6.Plugins.ViewManagerPlugins.Tabview.Tabview.html#Tabview.getTabWidgetById" />
       <keyword name="Tabview.insertView" id="Tabview.insertView" ref="eric6.Plugins.ViewManagerPlugins.Tabview.Tabview.html#Tabview.insertView" />
@@ -15849,8 +15856,10 @@
       <keyword name="Tabview.prevSplit" id="Tabview.prevSplit" ref="eric6.Plugins.ViewManagerPlugins.Tabview.Tabview.html#Tabview.prevSplit" />
       <keyword name="Tabview.removeSplit" id="Tabview.removeSplit" ref="eric6.Plugins.ViewManagerPlugins.Tabview.Tabview.html#Tabview.removeSplit" />
       <keyword name="Tabview.setEditorName" id="Tabview.setEditorName" ref="eric6.Plugins.ViewManagerPlugins.Tabview.Tabview.html#Tabview.setEditorName" />
+      <keyword name="Tabview.setSplitCount" id="Tabview.setSplitCount" ref="eric6.Plugins.ViewManagerPlugins.Tabview.Tabview.html#Tabview.setSplitCount" />
       <keyword name="Tabview.setSplitOrientation" id="Tabview.setSplitOrientation" ref="eric6.Plugins.ViewManagerPlugins.Tabview.Tabview.html#Tabview.setSplitOrientation" />
       <keyword name="Tabview.showWindowMenu" id="Tabview.showWindowMenu" ref="eric6.Plugins.ViewManagerPlugins.Tabview.Tabview.html#Tabview.showWindowMenu" />
+      <keyword name="Tabview.splitCount" id="Tabview.splitCount" ref="eric6.Plugins.ViewManagerPlugins.Tabview.Tabview.html#Tabview.splitCount" />
       <keyword name="Tabview.tile" id="Tabview.tile" ref="eric6.Plugins.ViewManagerPlugins.Tabview.Tabview.html#Tabview.tile" />
       <keyword name="TagError" id="TagError" ref="eric6.DocumentationTools.ModuleDocumentor.html#TagError" />
       <keyword name="Task" id="Task" ref="eric6.Tasks.Task.html#Task" />
@@ -17187,6 +17196,7 @@
       <keyword name="ViewManager.getOpenEditorCount" id="ViewManager.getOpenEditorCount" ref="eric6.ViewManager.ViewManager.html#ViewManager.getOpenEditorCount" />
       <keyword name="ViewManager.getOpenEditors" id="ViewManager.getOpenEditors" ref="eric6.ViewManager.ViewManager.html#ViewManager.getOpenEditors" />
       <keyword name="ViewManager.getOpenEditorsCount" id="ViewManager.getOpenEditorsCount" ref="eric6.ViewManager.ViewManager.html#ViewManager.getOpenEditorsCount" />
+      <keyword name="ViewManager.getOpenEditorsForSession" id="ViewManager.getOpenEditorsForSession" ref="eric6.ViewManager.ViewManager.html#ViewManager.getOpenEditorsForSession" />
       <keyword name="ViewManager.getOpenFilenames" id="ViewManager.getOpenFilenames" ref="eric6.ViewManager.ViewManager.html#ViewManager.getOpenFilenames" />
       <keyword name="ViewManager.getSRHistory" id="ViewManager.getSRHistory" ref="eric6.ViewManager.ViewManager.html#ViewManager.getSRHistory" />
       <keyword name="ViewManager.getSplitOrientation" id="ViewManager.getSplitOrientation" ref="eric6.ViewManager.ViewManager.html#ViewManager.getSplitOrientation" />
@@ -17242,6 +17252,7 @@
       <keyword name="ViewManager.setFileLine" id="ViewManager.setFileLine" ref="eric6.ViewManager.ViewManager.html#ViewManager.setFileLine" />
       <keyword name="ViewManager.setReferences" id="ViewManager.setReferences" ref="eric6.ViewManager.ViewManager.html#ViewManager.setReferences" />
       <keyword name="ViewManager.setSbInfo" id="ViewManager.setSbInfo" ref="eric6.ViewManager.ViewManager.html#ViewManager.setSbInfo" />
+      <keyword name="ViewManager.setSplitCount" id="ViewManager.setSplitCount" ref="eric6.ViewManager.ViewManager.html#ViewManager.setSplitCount" />
       <keyword name="ViewManager.setSplitOrientation" id="ViewManager.setSplitOrientation" ref="eric6.ViewManager.ViewManager.html#ViewManager.setSplitOrientation" />
       <keyword name="ViewManager.shareConnected" id="ViewManager.shareConnected" ref="eric6.ViewManager.ViewManager.html#ViewManager.shareConnected" />
       <keyword name="ViewManager.shareEditor" id="ViewManager.shareEditor" ref="eric6.ViewManager.ViewManager.html#ViewManager.shareEditor" />
@@ -17250,6 +17261,7 @@
       <keyword name="ViewManager.showReplaceWidget" id="ViewManager.showReplaceWidget" ref="eric6.ViewManager.ViewManager.html#ViewManager.showReplaceWidget" />
       <keyword name="ViewManager.showSearchWidget" id="ViewManager.showSearchWidget" ref="eric6.ViewManager.ViewManager.html#ViewManager.showSearchWidget" />
       <keyword name="ViewManager.showWindowMenu" id="ViewManager.showWindowMenu" ref="eric6.ViewManager.ViewManager.html#ViewManager.showWindowMenu" />
+      <keyword name="ViewManager.splitCount" id="ViewManager.splitCount" ref="eric6.ViewManager.ViewManager.html#ViewManager.splitCount" />
       <keyword name="ViewManager.startSharedEdit" id="ViewManager.startSharedEdit" ref="eric6.ViewManager.ViewManager.html#ViewManager.startSharedEdit" />
       <keyword name="ViewManager.textForFind" id="ViewManager.textForFind" ref="eric6.ViewManager.ViewManager.html#ViewManager.textForFind" />
       <keyword name="ViewManager.tile" id="ViewManager.tile" ref="eric6.ViewManager.ViewManager.html#ViewManager.tile" />
--- a/Documentation/Source/eric6.E5XML.SessionReader.html	Thu Jan 18 11:10:57 2018 +0100
+++ b/Documentation/Source/eric6.E5XML.SessionReader.html	Thu Jan 18 18:57:40 2018 +0100
@@ -104,12 +104,12 @@
 <p>
         Constructor
 </p><dl>
-<dt><i>device</i></dt>
+<dt><i>device</i> (QIODevice)</dt>
 <dd>
-reference to the I/O device to read from (QIODevice)
-</dd><dt><i>isGlobal</i></dt>
+reference to the I/O device to read from
+</dd><dt><i>isGlobal</i> (bool)</dt>
 <dd>
-flag indicating to read the global session (boolean).
+flag indicating to read the global session
 </dd>
 </dl><a NAME="SessionReader.__readBookmark" ID="SessionReader.__readBookmark"></a>
 <h4>SessionReader.__readBookmark</h4>
@@ -147,9 +147,9 @@
 <p>
         Private method to read the project browser state info.
 </p><dl>
-<dt><i>browserName</i></dt>
+<dt><i>browserName</i> (str)</dt>
 <dd>
-name of the project browser (string)
+name of the project browser
 </dd>
 </dl><a NAME="SessionReader.__readProjectBrowserStates" ID="SessionReader.__readProjectBrowserStates"></a>
 <h4>SessionReader.__readProjectBrowserStates</h4>
@@ -172,10 +172,10 @@
 <p>
         Public method to read and parse the XML document.
 </p><dl>
-<dt><i>quiet</i></dt>
+<dt><i>quiet</i> (bool)</dt>
 <dd>
 flag indicating quiet operations.
-                If this flag is true, no errors are reported.
+            If this flag is true, no errors are reported.
 </dd>
 </dl>
 <div align="right"><a href="#top">Up</a></div>
--- a/Documentation/Source/eric6.E5XML.SessionWriter.html	Thu Jan 18 11:10:57 2018 +0100
+++ b/Documentation/Source/eric6.E5XML.SessionWriter.html	Thu Jan 18 18:57:40 2018 +0100
@@ -74,12 +74,12 @@
 <p>
         Constructor
 </p><dl>
-<dt><i>device</i></dt>
+<dt><i>device</i> (QIODevice)</dt>
 <dd>
-reference to the I/O device to write to (QIODevice)
-</dd><dt><i>projectName</i></dt>
+reference to the I/O device to write to
+</dd><dt><i>projectName</i> (str or None)</dt>
 <dd>
-name of the project (string) or None for the
+name of the project or None for the
             global session
 </dd>
 </dl><a NAME="SessionWriter.writeXML" ID="SessionWriter.writeXML"></a>
--- a/Documentation/Source/eric6.Helpviewer.Download.DownloadItem.html	Thu Jan 18 11:10:57 2018 +0100
+++ b/Documentation/Source/eric6.Helpviewer.Download.DownloadItem.html	Thu Jan 18 18:57:40 2018 +0100
@@ -93,9 +93,6 @@
 <td><a href="#DownloadItem.__networkError">__networkError</a></td>
 <td>Private slot to handle a network error.</td>
 </tr><tr>
-<td><a href="#DownloadItem.__open">__open</a></td>
-<td>Private slot to open the downloaded file.</td>
-</tr><tr>
 <td><a href="#DownloadItem.__readyRead">__readyRead</a></td>
 <td>Private slot to read the available data.</td>
 </tr><tr>
@@ -257,11 +254,6 @@
 <b>__networkError</b>(<i></i>)
 <p>
         Private slot to handle a network error.
-</p><a NAME="DownloadItem.__open" ID="DownloadItem.__open"></a>
-<h4>DownloadItem.__open</h4>
-<b>__open</b>(<i></i>)
-<p>
-        Private slot to open the downloaded file.
 </p><a NAME="DownloadItem.__readyRead" ID="DownloadItem.__readyRead"></a>
 <h4>DownloadItem.__readyRead</h4>
 <b>__readyRead</b>(<i></i>)
--- a/Documentation/Source/eric6.PluginManager.PluginInfoDialog.html	Thu Jan 18 11:10:57 2018 +0100
+++ b/Documentation/Source/eric6.PluginManager.PluginInfoDialog.html	Thu Jan 18 18:57:40 2018 +0100
@@ -110,9 +110,10 @@
 <p>
         Private method to create a list entry based on the provided info.
 </p><dl>
-<dt><i>info</i></dt>
+<dt><i>info</i> (dict)</dt>
 <dd>
-tuple giving the info for the entry
+dictionary giving the info for the entry (as returned by
+            PluginManager.getPluginInfos())
 </dd>
 </dl><a NAME="PluginInfoDialog.__deactivatePlugin" ID="PluginInfoDialog.__deactivatePlugin"></a>
 <h4>PluginInfoDialog.__deactivatePlugin</h4>
--- a/Documentation/Source/eric6.PluginManager.PluginManager.html	Thu Jan 18 11:10:57 2018 +0100
+++ b/Documentation/Source/eric6.PluginManager.PluginManager.html	Thu Jan 18 18:57:40 2018 +0100
@@ -165,7 +165,7 @@
 <td>Public method to get data to display information about a plugins external tool.</td>
 </tr><tr>
 <td><a href="#PluginManager.getPluginInfos">getPluginInfos</a></td>
-<td>Public method to get infos about all loaded plugins.</td>
+<td>Public method to get infos about all loaded plug-ins.</td>
 </tr><tr>
 <td><a href="#PluginManager.getPluginModules">getPluginModules</a></td>
 <td>Public method to get a list of plugin modules.</td>
@@ -301,10 +301,15 @@
         directory.
 </p><a NAME="PluginManager.__downloadRepositoryFileDone" ID="PluginManager.__downloadRepositoryFileDone"></a>
 <h4>PluginManager.__downloadRepositoryFileDone</h4>
-<b>__downloadRepositoryFileDone</b>(<i></i>)
+<b>__downloadRepositoryFileDone</b>(<i>reply</i>)
 <p>
         Private method called after the repository file was downloaded.
-</p><a NAME="PluginManager.__getShortInfo" ID="PluginManager.__getShortInfo"></a>
+</p><dl>
+<dt><i>reply</i> (QNetworkReply)</dt>
+<dd>
+reference to the reply object of the download
+</dd>
+</dl><a NAME="PluginManager.__getShortInfo" ID="PluginManager.__getShortInfo"></a>
 <h4>PluginManager.__getShortInfo</h4>
 <b>__getShortInfo</b>(<i>module</i>)
 <p>
@@ -317,9 +322,13 @@
 </dl><dl>
 <dt>Returns:</dt>
 <dd>
-short info as a tuple giving plugin name (string),
-            short description (string), error flag (boolean) and
-            version (string)
+dictionay containing plug-in data
+</dd>
+</dl><dl>
+<dt>Return Type:</dt>
+<dd>
+dict ("plugin_name": str, "version": str, "short_desc": str,
+            "error": bool)
 </dd>
 </dl><a NAME="PluginManager.__insertPluginsPaths" ID="PluginManager.__insertPluginsPaths"></a>
 <h4>PluginManager.__insertPluginsPaths</h4>
@@ -627,13 +636,19 @@
 <h4>PluginManager.getPluginInfos</h4>
 <b>getPluginInfos</b>(<i></i>)
 <p>
-        Public method to get infos about all loaded plugins.
+        Public method to get infos about all loaded plug-ins.
 </p><dl>
 <dt>Returns:</dt>
 <dd>
-list of tuples giving module name (string), plugin name
-            (string), version (string), autoactivate (boolean), active
-            (boolean), short description (string), error flag (boolean)
+list of dictionaries with keys "module_name", "plugin_name",
+            "version", "auto_activate", "active", "short_desc", "error"
+</dd>
+</dl><dl>
+<dt>Return Type:</dt>
+<dd>
+list of dict ("module_name": str, "plugin_name": str,
+            "version": str, "auto_activate": bool, "active": bool,
+            "short_desc": str, "error": bool)
 </dd>
 </dl><a NAME="PluginManager.getPluginModules" ID="PluginManager.getPluginModules"></a>
 <h4>PluginManager.getPluginModules</h4>
--- a/Documentation/Source/eric6.PluginManager.PluginRepositoryDialog.html	Thu Jan 18 11:10:57 2018 +0100
+++ b/Documentation/Source/eric6.PluginManager.PluginRepositoryDialog.html	Thu Jan 18 18:57:40 2018 +0100
@@ -284,11 +284,16 @@
 </dd>
 </dl><a NAME="PluginRepositoryWidget.__downloadFileDone" ID="PluginRepositoryWidget.__downloadFileDone"></a>
 <h4>PluginRepositoryWidget.__downloadFileDone</h4>
-<b>__downloadFileDone</b>(<i></i>)
+<b>__downloadFileDone</b>(<i>reply</i>)
 <p>
         Private method called, after the file has been downloaded
         from the Internet.
-</p><a NAME="PluginRepositoryWidget.__downloadPlugin" ID="PluginRepositoryWidget.__downloadPlugin"></a>
+</p><dl>
+<dt><i>reply</i> (QNetworkReply)</dt>
+<dd>
+reference to the reply object of the download
+</dd>
+</dl><a NAME="PluginRepositoryWidget.__downloadPlugin" ID="PluginRepositoryWidget.__downloadPlugin"></a>
 <h4>PluginRepositoryWidget.__downloadPlugin</h4>
 <b>__downloadPlugin</b>(<i></i>)
 <p>
--- a/Documentation/Source/eric6.Plugins.VcsPlugins.vcsGit.GitUtilities.html	Thu Jan 18 11:10:57 2018 +0100
+++ b/Documentation/Source/eric6.Plugins.VcsPlugins.vcsGit.GitUtilities.html	Thu Jan 18 18:57:40 2018 +0100
@@ -66,7 +66,7 @@
 </p><dl>
 <dt><i>proc</i></dt>
 <dd>
-reference to the proces to be prepared (QProcess)
+reference to the process to be prepared (QProcess)
 </dd><dt><i>language</i></dt>
 <dd>
 language to be set (string)
--- a/Documentation/Source/eric6.Plugins.VcsPlugins.vcsMercurial.HgUtilities.html	Thu Jan 18 11:10:57 2018 +0100
+++ b/Documentation/Source/eric6.Plugins.VcsPlugins.vcsMercurial.HgUtilities.html	Thu Jan 18 18:57:40 2018 +0100
@@ -90,7 +90,7 @@
 </p><dl>
 <dt><i>proc</i></dt>
 <dd>
-reference to the proces to be prepared (QProcess)
+reference to the process to be prepared (QProcess)
 </dd><dt><i>encoding</i></dt>
 <dd>
 encoding to be used by the process (string)
--- a/Documentation/Source/eric6.Plugins.ViewManagerPlugins.Listspace.Listspace.html	Thu Jan 18 11:10:57 2018 +0100
+++ b/Documentation/Source/eric6.Plugins.ViewManagerPlugins.Listspace.Listspace.html	Thu Jan 18 18:57:40 2018 +0100
@@ -223,6 +223,9 @@
 <td><a href="#Listspace.eventFilter">eventFilter</a></td>
 <td>Public method called to filter the event queue.</td>
 </tr><tr>
+<td><a href="#Listspace.getOpenEditorsForSession">getOpenEditorsForSession</a></td>
+<td>Public method to get a lists of all open editors.</td>
+</tr><tr>
 <td><a href="#Listspace.getSplitOrientation">getSplitOrientation</a></td>
 <td>Public method to get the orientation of the split view.</td>
 </tr><tr>
@@ -236,17 +239,23 @@
 <td>Public slot used to move to the previous split.</td>
 </tr><tr>
 <td><a href="#Listspace.removeSplit">removeSplit</a></td>
-<td>Public method used to remove the current split view.</td>
+<td>Public method used to remove the current split view or a split view by index.</td>
 </tr><tr>
 <td><a href="#Listspace.setEditorName">setEditorName</a></td>
 <td>Public method to change the displayed name of the editor.</td>
 </tr><tr>
+<td><a href="#Listspace.setSplitCount">setSplitCount</a></td>
+<td>Public method to set the number of split views.</td>
+</tr><tr>
 <td><a href="#Listspace.setSplitOrientation">setSplitOrientation</a></td>
 <td>Public method used to set the orientation of the split view.</td>
 </tr><tr>
 <td><a href="#Listspace.showWindowMenu">showWindowMenu</a></td>
 <td>Public method to set up the viewmanager part of the Window menu.</td>
 </tr><tr>
+<td><a href="#Listspace.splitCount">splitCount</a></td>
+<td>Public method to get the number of splitted views.</td>
+</tr><tr>
 <td><a href="#Listspace.tile">tile</a></td>
 <td>Public method to tile the managed windows.</td>
 </tr>
@@ -261,9 +270,9 @@
 <p>
         Constructor
 </p><dl>
-<dt><i>parent</i></dt>
+<dt><i>parent</i> (QWidget)</dt>
 <dd>
-parent widget (QWidget)
+parent widget
 </dd>
 </dl><a NAME="Listspace.__captionChange" ID="Listspace.__captionChange"></a>
 <h4>Listspace.__captionChange</h4>
@@ -273,10 +282,10 @@
 </p><p>
         Updates the listwidget text to reflect the new caption information.
 </p><dl>
-<dt><i>cap</i></dt>
+<dt><i>cap</i> (str)</dt>
 <dd>
-Caption for the editor (string)
-</dd><dt><i>editor</i></dt>
+Caption for the editor
+</dd><dt><i>editor</i> (Editor)</dt>
 <dd>
 Editor to update the caption for
 </dd>
@@ -333,7 +342,7 @@
 <p>
         Private slot to handle the currentChanged signal.
 </p><dl>
-<dt><i>index</i></dt>
+<dt><i>index</i> (int)</dt>
 <dd>
 index of the current editor
 </dd>
@@ -343,7 +352,7 @@
 <p>
         Private slot to handle a change of the current editor's cursor line.
 </p><dl>
-<dt><i>lineno</i></dt>
+<dt><i>lineno</i> (int)</dt>
 <dd>
 line number of the current editor's cursor (zero based)
 </dd>
@@ -359,9 +368,9 @@
         Private slot to handle the customContextMenuRequested signal of
         the viewlist.
 </p><dl>
-<dt><i>point</i></dt>
+<dt><i>point</i> (QPoint)</dt>
 <dd>
-position to open the menu at (QPoint)
+position to open the menu at
 </dd>
 </dl><a NAME="Listspace.__showSelectedView" ID="Listspace.__showSelectedView"></a>
 <h4>Listspace.__showSelectedView</h4>
@@ -369,29 +378,33 @@
 <p>
         Private slot called to show a view selected in the list.
 </p><dl>
-<dt><i>row</i></dt>
+<dt><i>row</i> (int)</dt>
 <dd>
-row number of the item clicked on (integer)
+row number of the item clicked on
 </dd>
 </dl><a NAME="Listspace._addView" ID="Listspace._addView"></a>
 <h4>Listspace._addView</h4>
-<b>_addView</b>(<i>win, fn=None, noName="", addNext=False</i>)
+<b>_addView</b>(<i>win, fn=None, noName="", addNext=False, indexes=None</i>)
 <p>
         Protected method to add a view (i.e. window).
 </p><dl>
-<dt><i>win</i></dt>
+<dt><i>win</i> (EditorAssembly)</dt>
 <dd>
 editor assembly to be added
-</dd><dt><i>fn</i></dt>
+</dd><dt><i>fn</i> (str)</dt>
 <dd>
-filename of this editor (string)
-</dd><dt><i>noName</i></dt>
+filename of this editor
+</dd><dt><i>noName</i> (str)</dt>
 <dd>
-name to be used for an unnamed editor (string)
-</dd><dt><i>addNext</i></dt>
+name to be used for an unnamed editor
+</dd><dt><i>addNext</i> (bool)</dt>
 <dd>
 flag indicating to add the view next to the current
-            view (bool)
+            view
+</dd><dt><i>indexes</i> (tuple of two int)</dt>
+<dd>
+of the editor, first the split view index, second the
+            index within the view
 </dd>
 </dl><a NAME="Listspace._initWindowActions" ID="Listspace._initWindowActions"></a>
 <h4>Listspace._initWindowActions</h4>
@@ -405,10 +418,10 @@
 <p>
         Protected slot to handle the modificationStatusChanged signal.
 </p><dl>
-<dt><i>m</i></dt>
+<dt><i>m</i> (bool)</dt>
 <dd>
-flag indicating the modification status (boolean)
-</dd><dt><i>editor</i></dt>
+flag indicating the modification status
+</dd><dt><i>editor</i> (Editor)</dt>
 <dd>
 editor window changed
 </dd>
@@ -423,7 +436,7 @@
 <p>
         Protected method to remove a view (i.e. window).
 </p><dl>
-<dt><i>win</i></dt>
+<dt><i>win</i> (Editor)</dt>
 <dd>
 editor window to be removed
 </dd>
@@ -433,12 +446,12 @@
 <p>
         Protected method to show a view (i.e. window).
 </p><dl>
-<dt><i>win</i></dt>
+<dt><i>win</i> (EditorAssembly)</dt>
 <dd>
 editor assembly to be shown
-</dd><dt><i>fn</i></dt>
+</dd><dt><i>fn</i> (string)</dt>
 <dd>
-filename of this editor (string)
+filename of this editor
 </dd>
 </dl><a NAME="Listspace._syntaxErrorToggled" ID="Listspace._syntaxErrorToggled"></a>
 <h4>Listspace._syntaxErrorToggled</h4>
@@ -446,7 +459,7 @@
 <p>
         Protected slot to handle the syntaxerrorToggled signal.
 </p><dl>
-<dt><i>editor</i></dt>
+<dt><i>editor</i> (Editor)</dt>
 <dd>
 editor that sent the signal
 </dd>
@@ -460,6 +473,11 @@
 <dd>
 reference to the active editor
 </dd>
+</dl><dl>
+<dt>Return Type:</dt>
+<dd>
+EditorAssembly
+</dd>
 </dl><a NAME="Listspace.addSplit" ID="Listspace.addSplit"></a>
 <h4>Listspace.addSplit</h4>
 <b>addSplit</b>(<i></i>)
@@ -475,6 +493,11 @@
 <dd>
 flag indicating cascading of windows is available
 </dd>
+</dl><dl>
+<dt>Return Type:</dt>
+<dd>
+bool
+</dd>
 </dl><a NAME="Listspace.canSplit" ID="Listspace.canSplit"></a>
 <h4>Listspace.canSplit</h4>
 <b>canSplit</b>(<i></i>)
@@ -483,7 +506,12 @@
 </p><dl>
 <dt>Returns:</dt>
 <dd>
-flag indicating splitting of the view is available.
+flag indicating splitting of the view is available
+</dd>
+</dl><dl>
+<dt>Return Type:</dt>
+<dd>
+bool
 </dd>
 </dl><a NAME="Listspace.canTile" ID="Listspace.canTile"></a>
 <h4>Listspace.canTile</h4>
@@ -495,6 +523,11 @@
 <dd>
 flag indicating tiling of windows is available
 </dd>
+</dl><dl>
+<dt>Return Type:</dt>
+<dd>
+bool
+</dd>
 </dl><a NAME="Listspace.cascade" ID="Listspace.cascade"></a>
 <h4>Listspace.cascade</h4>
 <b>cascade</b>(<i></i>)
@@ -506,10 +539,10 @@
 <p>
         Public method called to filter the event queue.
 </p><dl>
-<dt><i>watched</i></dt>
+<dt><i>watched</i> (QObject)</dt>
 <dd>
 the QObject being watched
-</dd><dt><i>event</i></dt>
+</dd><dt><i>event</i> (QEvent)</dt>
 <dd>
 the event that occurred
 </dd>
@@ -518,6 +551,29 @@
 <dd>
 flag indicating, if we handled the event
 </dd>
+</dl><dl>
+<dt>Return Type:</dt>
+<dd>
+bool
+</dd>
+</dl><a NAME="Listspace.getOpenEditorsForSession" ID="Listspace.getOpenEditorsForSession"></a>
+<h4>Listspace.getOpenEditorsForSession</h4>
+<b>getOpenEditorsForSession</b>(<i></i>)
+<p>
+        Public method to get a lists of all open editors.
+</p><p>
+        The returned list contains one list per split view. If the view manager
+        cannot split the view, only one list of editors is returned.
+</p><dl>
+<dt>Returns:</dt>
+<dd>
+list of list of editor references
+</dd>
+</dl><dl>
+<dt>Return Type:</dt>
+<dd>
+list of list of Editor
+</dd>
 </dl><a NAME="Listspace.getSplitOrientation" ID="Listspace.getSplitOrientation"></a>
 <h4>Listspace.getSplitOrientation</h4>
 <b>getSplitOrientation</b>(<i></i>)
@@ -526,7 +582,12 @@
 </p><dl>
 <dt>Returns:</dt>
 <dd>
-orientation of the split (Qt.Horizontal or Qt.Vertical)
+orientation of the split
+</dd>
+</dl><dl>
+<dt>Return Type:</dt>
+<dd>
+Qt.Horizontal or Qt.Vertical
 </dd>
 </dl><a NAME="Listspace.mainWidget" ID="Listspace.mainWidget"></a>
 <h4>Listspace.mainWidget</h4>
@@ -556,13 +617,25 @@
         Public slot used to move to the previous split.
 </p><a NAME="Listspace.removeSplit" ID="Listspace.removeSplit"></a>
 <h4>Listspace.removeSplit</h4>
-<b>removeSplit</b>(<i></i>)
+<b>removeSplit</b>(<i>index=-1</i>)
 <p>
-        Public method used to remove the current split view.
+        Public method used to remove the current split view or a split view
+        by index.
 </p><dl>
+<dt><i>index</i> (int)</dt>
+<dd>
+index of the split to be removed (-1 means to
+            delete the current split)
+</dd>
+</dl><dl>
 <dt>Returns:</dt>
 <dd>
-flag indicating successfull removal
+flag indicating successful deletion
+</dd>
+</dl><dl>
+<dt>Return Type:</dt>
+<dd>
+bool
 </dd>
 </dl><a NAME="Listspace.setEditorName" ID="Listspace.setEditorName"></a>
 <h4>Listspace.setEditorName</h4>
@@ -570,12 +643,22 @@
 <p>
         Public method to change the displayed name of the editor.
 </p><dl>
-<dt><i>editor</i></dt>
+<dt><i>editor</i> (Editor)</dt>
 <dd>
 editor window to be changed
-</dd><dt><i>newName</i></dt>
+</dd><dt><i>newName</i> (str)</dt>
 <dd>
-new name to be shown (string)
+new name to be shown
+</dd>
+</dl><a NAME="Listspace.setSplitCount" ID="Listspace.setSplitCount"></a>
+<h4>Listspace.setSplitCount</h4>
+<b>setSplitCount</b>(<i>count</i>)
+<p>
+        Public method to set the number of split views.
+</p><dl>
+<dt><i>count</i> (int)</dt>
+<dd>
+number of split views
 </dd>
 </dl><a NAME="Listspace.setSplitOrientation" ID="Listspace.setSplitOrientation"></a>
 <h4>Listspace.setSplitOrientation</h4>
@@ -583,10 +666,9 @@
 <p>
         Public method used to set the orientation of the split view.
 </p><dl>
-<dt><i>orientation</i></dt>
+<dt><i>orientation</i> (Qt.Horizontal or Qt.Vertical)</dt>
 <dd>
 orientation of the split
-                (Qt.Horizontal or Qt.Vertical)
 </dd>
 </dl><a NAME="Listspace.showWindowMenu" ID="Listspace.showWindowMenu"></a>
 <h4>Listspace.showWindowMenu</h4>
@@ -594,10 +676,25 @@
 <p>
         Public method to set up the viewmanager part of the Window menu.
 </p><dl>
-<dt><i>windowMenu</i></dt>
+<dt><i>windowMenu</i> (QMenu)</dt>
 <dd>
 reference to the window menu
 </dd>
+</dl><a NAME="Listspace.splitCount" ID="Listspace.splitCount"></a>
+<h4>Listspace.splitCount</h4>
+<b>splitCount</b>(<i></i>)
+<p>
+        Public method to get the number of splitted views.
+</p><dl>
+<dt>Returns:</dt>
+<dd>
+number of splitted views
+</dd>
+</dl><dl>
+<dt>Return Type:</dt>
+<dd>
+int
+</dd>
 </dl><a NAME="Listspace.tile" ID="Listspace.tile"></a>
 <h4>Listspace.tile</h4>
 <b>tile</b>(<i></i>)
@@ -665,9 +762,9 @@
 <p>
         Constructor
 </p><dl>
-<dt><i>parent</i></dt>
+<dt><i>parent</i> (QWidget)</dt>
 <dd>
-parent widget (QWidget)
+parent widget
 </dd>
 </dl><a NAME="StackedWidget.addWidget" ID="StackedWidget.addWidget"></a>
 <h4>StackedWidget.addWidget</h4>
@@ -675,10 +772,9 @@
 <p>
         Public method to add a new widget.
 </p><dl>
-<dt><i>assembly</i></dt>
+<dt><i>assembly</i> (QScintilla.EditorAssembly.EditorAssembly)</dt>
 <dd>
 editor assembly object to be added
-            (QScintilla.EditorAssembly.EditorAssembly)
 </dd>
 </dl><a NAME="StackedWidget.currentWidget" ID="StackedWidget.currentWidget"></a>
 <h4>StackedWidget.currentWidget</h4>
@@ -688,7 +784,12 @@
 </p><dl>
 <dt>Returns:</dt>
 <dd>
-reference to the current editor (Editor)
+reference to the current editor
+</dd>
+</dl><dl>
+<dt>Return Type:</dt>
+<dd>
+Editor
 </dd>
 </dl><a NAME="StackedWidget.firstEditor" ID="StackedWidget.firstEditor"></a>
 <h4>StackedWidget.firstEditor</h4>
@@ -699,7 +800,12 @@
 </p><dl>
 <dt>Returns:</dt>
 <dd>
-first editor in list (QScintilla.Editor.Editor)
+first editor in list
+</dd>
+</dl><dl>
+<dt>Return Type:</dt>
+<dd>
+QScintilla.Editor.Editor
 </dd>
 </dl><a NAME="StackedWidget.hasEditor" ID="StackedWidget.hasEditor"></a>
 <h4>StackedWidget.hasEditor</h4>
@@ -707,7 +813,7 @@
 <p>
         Public method to check for an editor.
 </p><dl>
-<dt><i>editor</i></dt>
+<dt><i>editor</i> (Editor)</dt>
 <dd>
 editor object to check for
 </dd>
@@ -717,6 +823,11 @@
 flag indicating, whether the editor to be checked belongs
             to the list of editors managed by this stacked widget.
 </dd>
+</dl><dl>
+<dt>Return Type:</dt>
+<dd>
+bool
+</dd>
 </dl><a NAME="StackedWidget.nextTab" ID="StackedWidget.nextTab"></a>
 <h4>StackedWidget.nextTab</h4>
 <b>nextTab</b>(<i></i>)
@@ -733,9 +844,9 @@
 <p>
         Public method to remove a widget.
 </p><dl>
-<dt><i>widget</i></dt>
+<dt><i>widget</i> (QWidget)</dt>
 <dd>
-widget to be removed (QWidget)
+widget to be removed
 </dd>
 </dl><a NAME="StackedWidget.setCurrentIndex" ID="StackedWidget.setCurrentIndex"></a>
 <h4>StackedWidget.setCurrentIndex</h4>
@@ -743,9 +854,9 @@
 <p>
         Public method to set the current widget by its index.
 </p><dl>
-<dt><i>index</i></dt>
+<dt><i>index</i> (int)</dt>
 <dd>
-index of widget to be made current (integer)
+index of widget to be made current
 </dd>
 </dl><a NAME="StackedWidget.setCurrentWidget" ID="StackedWidget.setCurrentWidget"></a>
 <h4>StackedWidget.setCurrentWidget</h4>
@@ -753,9 +864,9 @@
 <p>
         Public method to set the current widget.
 </p><dl>
-<dt><i>widget</i></dt>
+<dt><i>widget</i> (QWidget)</dt>
 <dd>
-widget to be made current (QWidget)
+widget to be made current
 </dd>
 </dl>
 <div align="right"><a href="#top">Up</a></div>
--- a/Documentation/Source/eric6.Plugins.ViewManagerPlugins.Tabview.Tabview.html	Thu Jan 18 11:10:57 2018 +0100
+++ b/Documentation/Source/eric6.Plugins.ViewManagerPlugins.Tabview.Tabview.html	Thu Jan 18 18:57:40 2018 +0100
@@ -110,9 +110,9 @@
 <p>
         Constructor
 </p><dl>
-<dt><i>parent</i></dt>
+<dt><i>parent</i> (QWidget)</dt>
 <dd>
-reference to the parent widget (QWidget)
+reference to the parent widget
 </dd>
 </dl><a NAME="TabBar.dragEnterEvent" ID="TabBar.dragEnterEvent"></a>
 <h4>TabBar.dragEnterEvent</h4>
@@ -120,9 +120,9 @@
 <p>
         Protected method to handle drag enter events.
 </p><dl>
-<dt><i>event</i></dt>
+<dt><i>event</i> (QDragEnterEvent)</dt>
 <dd>
-reference to the drag enter event (QDragEnterEvent)
+reference to the drag enter event
 </dd>
 </dl><a NAME="TabBar.dropEvent" ID="TabBar.dropEvent"></a>
 <h4>TabBar.dropEvent</h4>
@@ -130,9 +130,9 @@
 <p>
         Protected method to handle drop events.
 </p><dl>
-<dt><i>event</i></dt>
+<dt><i>event</i> (QDropEvent)</dt>
 <dd>
-reference to the drop event (QDropEvent)
+reference to the drop event
 </dd>
 </dl><a NAME="TabBar.mouseMoveEvent" ID="TabBar.mouseMoveEvent"></a>
 <h4>TabBar.mouseMoveEvent</h4>
@@ -140,9 +140,9 @@
 <p>
         Protected method to handle mouse move events.
 </p><dl>
-<dt><i>event</i></dt>
+<dt><i>event</i> (QMouseEvent)</dt>
 <dd>
-reference to the mouse move event (QMouseEvent)
+reference to the mouse move event
 </dd>
 </dl><a NAME="TabBar.mousePressEvent" ID="TabBar.mousePressEvent"></a>
 <h4>TabBar.mousePressEvent</h4>
@@ -150,9 +150,9 @@
 <p>
         Protected method to handle mouse press events.
 </p><dl>
-<dt><i>event</i></dt>
+<dt><i>event</i> (QMouseEvent)</dt>
 <dd>
-reference to the mouse press event (QMouseEvent)
+reference to the mouse press event
 </dd>
 </dl>
 <div align="right"><a href="#top">Up</a></div>
@@ -291,9 +291,9 @@
 <p>
         Constructor
 </p><dl>
-<dt><i>vm</i></dt>
+<dt><i>vm</i> (Tabview)</dt>
 <dd>
-view manager widget (Tabview)
+view manager widget
 </dd>
 </dl><a NAME="TabWidget.__captionChange" ID="TabWidget.__captionChange"></a>
 <h4>TabWidget.__captionChange</h4>
@@ -304,10 +304,10 @@
         Updates the tab text and tooltip text to reflect the new caption
         information.
 </p><dl>
-<dt><i>cap</i></dt>
+<dt><i>cap</i> (str)</dt>
 <dd>
 Caption for the editor
-</dd><dt><i>editor</i></dt>
+</dd><dt><i>editor</i> (Editor)</dt>
 <dd>
 Editor to update the caption for
 </dd>
@@ -399,12 +399,12 @@
 <p>
         Private method to copy an editor.
 </p><dl>
-<dt><i>sourceIndex</i></dt>
+<dt><i>sourceIndex</i> (int)</dt>
 <dd>
-index of the tab (integer)
-</dd><dt><i>targetIndex</i></dt>
+index of the tab
+</dd><dt><i>targetIndex</i> (int)</dt>
 <dd>
-index position to place it to (integer)
+index position to place it to
 </dd>
 </dl><a NAME="TabWidget.__copyTabOther" ID="TabWidget.__copyTabOther"></a>
 <h4>TabWidget.__copyTabOther</h4>
@@ -412,15 +412,15 @@
 <p>
         Private method to copy an editor from another TabWidget.
 </p><dl>
-<dt><i>sourceId</i></dt>
+<dt><i>sourceId</i> (str)</dt>
 <dd>
-id of the TabWidget to get the editor from (string)
-</dd><dt><i>sourceIndex</i></dt>
+id of the TabWidget to get the editor from
+</dd><dt><i>sourceIndex</i> (int)</dt>
 <dd>
-index of the tab in the old tab widget (integer)
-</dd><dt><i>targetIndex</i></dt>
+index of the tab in the old tab widget
+</dd><dt><i>targetIndex</i> (int)</dt>
 <dd>
-index position to place it to (integer)
+index position to place it to
 </dd>
 </dl><a NAME="TabWidget.__cursorLineChanged" ID="TabWidget.__cursorLineChanged"></a>
 <h4>TabWidget.__cursorLineChanged</h4>
@@ -428,7 +428,7 @@
 <p>
         Private slot to handle a change of the current editor's cursor line.
 </p><dl>
-<dt><i>lineno</i></dt>
+<dt><i>lineno</i> (int)</dt>
 <dd>
 line number of the current editor's cursor (zero based)
 </dd>
@@ -443,9 +443,9 @@
 <p>
         Private slot called to handle the navigation button menu selection.
 </p><dl>
-<dt><i>act</i></dt>
+<dt><i>act</i> (QAction)</dt>
 <dd>
-reference to the selected action (QAction)
+reference to the selected action
 </dd>
 </dl><a NAME="TabWidget.__relocateTab" ID="TabWidget.__relocateTab"></a>
 <h4>TabWidget.__relocateTab</h4>
@@ -453,15 +453,15 @@
 <p>
         Private method to relocate an editor from another TabWidget.
 </p><dl>
-<dt><i>sourceId</i></dt>
+<dt><i>sourceId</i> (str)</dt>
 <dd>
-id of the TabWidget to get the editor from (string)
-</dd><dt><i>sourceIndex</i></dt>
+id of the TabWidget to get the editor from
+</dd><dt><i>sourceIndex</i> (int)</dt>
 <dd>
-index of the tab in the old tab widget (integer)
-</dd><dt><i>targetIndex</i></dt>
+index of the tab in the old tab widget
+</dd><dt><i>targetIndex</i> (int)</dt>
 <dd>
-index position to place it to (integer)
+index position to place it to
 </dd>
 </dl><a NAME="TabWidget.__showContextMenu" ID="TabWidget.__showContextMenu"></a>
 <h4>TabWidget.__showContextMenu</h4>
@@ -469,12 +469,12 @@
 <p>
         Private slot to show the tab context menu.
 </p><dl>
-<dt><i>coord</i></dt>
+<dt><i>coord</i> (QPoint)</dt>
 <dd>
-the position of the mouse pointer (QPoint)
-</dd><dt><i>index</i></dt>
+the position of the mouse pointer
+</dd><dt><i>index</i> (int)</dt>
 <dd>
-index of the tab the menu is requested for (integer)
+index of the tab the menu is requested for
 </dd>
 </dl><a NAME="TabWidget.__showNavigationMenu" ID="TabWidget.__showNavigationMenu"></a>
 <h4>TabWidget.__showNavigationMenu</h4>
@@ -487,13 +487,12 @@
 <p>
         Public method to add a new tab.
 </p><dl>
-<dt><i>assembly</i></dt>
+<dt><i>assembly</i> (QScintilla.EditorAssembly.EditorAssembly)</dt>
 <dd>
 editor assembly object to be added
-            (QScintilla.EditorAssembly.EditorAssembly)
-</dd><dt><i>title</i></dt>
+</dd><dt><i>title</i> (str)</dt>
 <dd>
-title for the new tab (string)
+title for the new tab
 </dd>
 </dl><a NAME="TabWidget.currentWidget" ID="TabWidget.currentWidget"></a>
 <h4>TabWidget.currentWidget</h4>
@@ -503,7 +502,12 @@
 </p><dl>
 <dt>Returns:</dt>
 <dd>
-reference to the current page (Editor)
+reference to the current page
+</dd>
+</dl><dl>
+<dt>Return Type:</dt>
+<dd>
+Editor
 </dd>
 </dl><a NAME="TabWidget.hasEditor" ID="TabWidget.hasEditor"></a>
 <h4>TabWidget.hasEditor</h4>
@@ -511,7 +515,7 @@
 <p>
         Public method to check for an editor.
 </p><dl>
-<dt><i>editor</i></dt>
+<dt><i>editor</i> (Editor)</dt>
 <dd>
 editor object to check for
 </dd>
@@ -521,6 +525,11 @@
 flag indicating, whether the editor to be checked belongs
             to the list of editors managed by this tab widget.
 </dd>
+</dl><dl>
+<dt>Return Type:</dt>
+<dd>
+bool
+</dd>
 </dl><a NAME="TabWidget.hasEditors" ID="TabWidget.hasEditors"></a>
 <h4>TabWidget.hasEditors</h4>
 <b>hasEditors</b>(<i></i>)
@@ -531,20 +540,30 @@
 <dd>
 flag indicating editors are managed
 </dd>
+</dl><dl>
+<dt>Return Type:</dt>
+<dd>
+bool
+</dd>
 </dl><a NAME="TabWidget.indexOf" ID="TabWidget.indexOf"></a>
 <h4>TabWidget.indexOf</h4>
 <b>indexOf</b>(<i>widget</i>)
 <p>
         Public method to get the tab index of the given editor.
 </p><dl>
-<dt><i>widget</i></dt>
+<dt><i>widget</i> (QLabel or Editor)</dt>
 <dd>
-widget to get the index for (QLabel or Editor)
+widget to get the index for
 </dd>
 </dl><dl>
 <dt>Returns:</dt>
 <dd>
-tab index of the editor (integer)
+tab index of the editor
+</dd>
+</dl><dl>
+<dt>Return Type:</dt>
+<dd>
+int
 </dd>
 </dl><a NAME="TabWidget.insertWidget" ID="TabWidget.insertWidget"></a>
 <h4>TabWidget.insertWidget</h4>
@@ -552,21 +571,25 @@
 <p>
         Public method to insert a new tab.
 </p><dl>
-<dt><i>index</i></dt>
+<dt><i>index</i> (int)</dt>
 <dd>
-index position for the new tab (integer)
-</dd><dt><i>assembly</i></dt>
+index position for the new tab
+</dd><dt><i>assembly</i> (QScintilla.EditorAssembly.EditorAssembly)</dt>
 <dd>
 editor assembly object to be added
-            (QScintilla.EditorAssembly.EditorAssembly)
-</dd><dt><i>title</i></dt>
+</dd><dt><i>title</i> (str)</dt>
 <dd>
-title for the new tab (string)
+title for the new tab
 </dd>
 </dl><dl>
 <dt>Returns:</dt>
 <dd>
-index of the inserted tab (integer)
+index of the inserted tab
+</dd>
+</dl><dl>
+<dt>Return Type:</dt>
+<dd>
+int
 </dd>
 </dl><a NAME="TabWidget.mouseDoubleClickEvent" ID="TabWidget.mouseDoubleClickEvent"></a>
 <h4>TabWidget.mouseDoubleClickEvent</h4>
@@ -584,9 +607,9 @@
 <p>
         Public method to remove a widget.
 </p><dl>
-<dt><i>widget</i></dt>
+<dt><i>widget</i> (QWidget)</dt>
 <dd>
-widget to be removed (QWidget)
+widget to be removed
 </dd>
 </dl><a NAME="TabWidget.setCurrentWidget" ID="TabWidget.setCurrentWidget"></a>
 <h4>TabWidget.setCurrentWidget</h4>
@@ -594,10 +617,9 @@
 <p>
         Public method to set the current tab by the given editor assembly.
 </p><dl>
-<dt><i>assembly</i></dt>
+<dt><i>assembly</i> (EditorAssembly.EditorAssembly)</dt>
 <dd>
 editor assembly to determine current tab from
-            (EditorAssembly.EditorAssembly)
 </dd>
 </dl><a NAME="TabWidget.showIndicator" ID="TabWidget.showIndicator"></a>
 <h4>TabWidget.showIndicator</h4>
@@ -605,9 +627,9 @@
 <p>
         Public slot to set the indicator on or off.
 </p><dl>
-<dt><i>on</i></dt>
+<dt><i>on</i> (bool)</dt>
 <dd>
-flag indicating the dtate of the indicator (boolean)
+flag indicating the state of the indicator
 </dd>
 </dl>
 <div align="right"><a href="#top">Up</a></div>
@@ -751,6 +773,9 @@
 <td><a href="#Tabview.eventFilter">eventFilter</a></td>
 <td>Public method called to filter the event queue.</td>
 </tr><tr>
+<td><a href="#Tabview.getOpenEditorsForSession">getOpenEditorsForSession</a></td>
+<td>Public method to get a lists of all open editors.</td>
+</tr><tr>
 <td><a href="#Tabview.getSplitOrientation">getSplitOrientation</a></td>
 <td>Public method to get the orientation of the split view.</td>
 </tr><tr>
@@ -773,17 +798,23 @@
 <td>Public slot used to move to the previous split.</td>
 </tr><tr>
 <td><a href="#Tabview.removeSplit">removeSplit</a></td>
-<td>Public method used to remove the current split view.</td>
+<td>Public method used to remove the current split view or a split view by index.</td>
 </tr><tr>
 <td><a href="#Tabview.setEditorName">setEditorName</a></td>
 <td>Public method to change the displayed name of the editor.</td>
 </tr><tr>
+<td><a href="#Tabview.setSplitCount">setSplitCount</a></td>
+<td>Public method to set the number of split views.</td>
+</tr><tr>
 <td><a href="#Tabview.setSplitOrientation">setSplitOrientation</a></td>
 <td>Public method used to set the orientation of the split view.</td>
 </tr><tr>
 <td><a href="#Tabview.showWindowMenu">showWindowMenu</a></td>
 <td>Public method to set up the viewmanager part of the Window menu.</td>
 </tr><tr>
+<td><a href="#Tabview.splitCount">splitCount</a></td>
+<td>Public method to get the number of splitted views.</td>
+</tr><tr>
 <td><a href="#Tabview.tile">tile</a></td>
 <td>Public method to tile the managed windows.</td>
 </tr>
@@ -798,9 +829,9 @@
 <p>
         Constructor
 </p><dl>
-<dt><i>parent</i></dt>
+<dt><i>parent</i> (QWidget)</dt>
 <dd>
-parent widget (QWidget)
+parent widget
 </dd>
 </dl><a NAME="Tabview.__currentChanged" ID="Tabview.__currentChanged"></a>
 <h4>Tabview.__currentChanged</h4>
@@ -808,29 +839,33 @@
 <p>
         Private slot to handle the currentChanged signal.
 </p><dl>
-<dt><i>index</i></dt>
+<dt><i>index</i> (int)</dt>
 <dd>
-index of the current tab (integer)
+index of the current tab
 </dd>
 </dl><a NAME="Tabview._addView" ID="Tabview._addView"></a>
 <h4>Tabview._addView</h4>
-<b>_addView</b>(<i>win, fn=None, noName="", addNext=False</i>)
+<b>_addView</b>(<i>win, fn=None, noName="", addNext=False, indexes=None</i>)
 <p>
         Protected method to add a view (i.e. window).
 </p><dl>
-<dt><i>win</i></dt>
+<dt><i>win</i> (EditorAssembly)</dt>
 <dd>
 editor assembly to be added
-</dd><dt><i>fn</i></dt>
+</dd><dt><i>fn</i> (str)</dt>
 <dd>
-filename of this editor (string)
-</dd><dt><i>noName</i></dt>
+filename of this editor
+</dd><dt><i>noName</i> (str)</dt>
 <dd>
-name to be used for an unnamed editor (string)
-</dd><dt><i>addNext</i></dt>
+name to be used for an unnamed editor
+</dd><dt><i>addNext</i> (bool)</dt>
 <dd>
 flag indicating to add the view next to the current
-            view (bool)
+            view
+</dd><dt><i>indexes</i> (tuple of two int)</dt>
+<dd>
+of the editor, first the split view index, second the
+            index within the view
 </dd>
 </dl><a NAME="Tabview._initWindowActions" ID="Tabview._initWindowActions"></a>
 <h4>Tabview._initWindowActions</h4>
@@ -844,10 +879,10 @@
 <p>
         Protected slot to handle the modificationStatusChanged signal.
 </p><dl>
-<dt><i>m</i></dt>
+<dt><i>m</i> (bool)</dt>
 <dd>
-flag indicating the modification status (boolean)
-</dd><dt><i>editor</i></dt>
+flag indicating the modification status
+</dd><dt><i>editor</i> (Editor)</dt>
 <dd>
 editor window changed
 </dd>
@@ -862,7 +897,7 @@
 <p>
         Protected method to remove a view (i.e. window).
 </p><dl>
-<dt><i>win</i></dt>
+<dt><i>win</i> (Editor)</dt>
 <dd>
 editor window to be removed
 </dd>
@@ -872,12 +907,12 @@
 <p>
         Protected method to show a view (i.e. window).
 </p><dl>
-<dt><i>win</i></dt>
+<dt><i>win</i> (EditorAssembly)</dt>
 <dd>
 editor assembly to be shown
-</dd><dt><i>fn</i></dt>
+</dd><dt><i>fn</i> (str)</dt>
 <dd>
-filename of this editor (string)
+filename of this editor
 </dd>
 </dl><a NAME="Tabview._syntaxErrorToggled" ID="Tabview._syntaxErrorToggled"></a>
 <h4>Tabview._syntaxErrorToggled</h4>
@@ -885,7 +920,7 @@
 <p>
         Protected slot to handle the syntaxerrorToggled signal.
 </p><dl>
-<dt><i>editor</i></dt>
+<dt><i>editor</i> (Editor)</dt>
 <dd>
 editor that sent the signal
 </dd>
@@ -899,6 +934,11 @@
 <dd>
 reference to the active editor
 </dd>
+</dl><dl>
+<dt>Return Type:</dt>
+<dd>
+Editor
+</dd>
 </dl><a NAME="Tabview.addSplit" ID="Tabview.addSplit"></a>
 <h4>Tabview.addSplit</h4>
 <b>addSplit</b>(<i></i>)
@@ -914,6 +954,11 @@
 <dd>
 flag indicating cascading of windows is available
 </dd>
+</dl><dl>
+<dt>Return Type:</dt>
+<dd>
+bool
+</dd>
 </dl><a NAME="Tabview.canSplit" ID="Tabview.canSplit"></a>
 <h4>Tabview.canSplit</h4>
 <b>canSplit</b>(<i></i>)
@@ -924,6 +969,11 @@
 <dd>
 flag indicating splitting of the view is available.
 </dd>
+</dl><dl>
+<dt>Return Type:</dt>
+<dd>
+bool
+</dd>
 </dl><a NAME="Tabview.canTile" ID="Tabview.canTile"></a>
 <h4>Tabview.canTile</h4>
 <b>canTile</b>(<i></i>)
@@ -934,6 +984,11 @@
 <dd>
 flag indicating tiling of windows is available
 </dd>
+</dl><dl>
+<dt>Return Type:</dt>
+<dd>
+bool
+</dd>
 </dl><a NAME="Tabview.cascade" ID="Tabview.cascade"></a>
 <h4>Tabview.cascade</h4>
 <b>cascade</b>(<i></i>)
@@ -945,18 +1000,41 @@
 <p>
         Public method called to filter the event queue.
 </p><dl>
-<dt><i>watched</i></dt>
+<dt><i>watched</i> (QObject)</dt>
 <dd>
-the QObject being watched (QObject)
-</dd><dt><i>event</i></dt>
+the QObject being watched
+</dd><dt><i>event</i> (QEvent)</dt>
 <dd>
-the event that occurred (QEvent)
+the event that occurred
 </dd>
 </dl><dl>
 <dt>Returns:</dt>
 <dd>
 always False
 </dd>
+</dl><dl>
+<dt>Return Type:</dt>
+<dd>
+bool
+</dd>
+</dl><a NAME="Tabview.getOpenEditorsForSession" ID="Tabview.getOpenEditorsForSession"></a>
+<h4>Tabview.getOpenEditorsForSession</h4>
+<b>getOpenEditorsForSession</b>(<i></i>)
+<p>
+        Public method to get a lists of all open editors.
+</p><p>
+        The returned list contains one list per split view. If the view manager
+        cannot split the view, only one list of editors is returned.
+</p><dl>
+<dt>Returns:</dt>
+<dd>
+list of list of editor references
+</dd>
+</dl><dl>
+<dt>Return Type:</dt>
+<dd>
+list of list of Editor
+</dd>
 </dl><a NAME="Tabview.getSplitOrientation" ID="Tabview.getSplitOrientation"></a>
 <h4>Tabview.getSplitOrientation</h4>
 <b>getSplitOrientation</b>(<i></i>)
@@ -965,7 +1043,12 @@
 </p><dl>
 <dt>Returns:</dt>
 <dd>
-orientation of the split (Qt.Horizontal or Qt.Vertical)
+orientation of the split
+</dd>
+</dl><dl>
+<dt>Return Type:</dt>
+<dd>
+Qt.Horizontal or Qt.Vertical
 </dd>
 </dl><a NAME="Tabview.getTabWidgetById" ID="Tabview.getTabWidgetById"></a>
 <h4>Tabview.getTabWidgetById</h4>
@@ -973,14 +1056,19 @@
 <p>
         Public method to get a reference to a tab widget knowing its ID.
 </p><dl>
-<dt><i>id_</i></dt>
+<dt><i>id_</i> (int)</dt>
 <dd>
-id of the tab widget (long)
+id of the tab widget
 </dd>
 </dl><dl>
 <dt>Returns:</dt>
 <dd>
-reference to the tab widget (TabWidget)
+reference to the tab widget
+</dd>
+</dl><dl>
+<dt>Return Type:</dt>
+<dd>
+TabWidget
 </dd>
 </dl><a NAME="Tabview.insertView" ID="Tabview.insertView"></a>
 <h4>Tabview.insertView</h4>
@@ -988,22 +1076,21 @@
 <p>
         Public method to add a view (i.e. window).
 </p><dl>
-<dt><i>win</i></dt>
+<dt><i>win</i> (EditorAssembly)</dt>
 <dd>
 editor assembly to be inserted
-</dd><dt><i>tabWidget</i></dt>
+</dd><dt><i>tabWidget</i> (TabWidget)</dt>
 <dd>
 reference to the tab widget to insert the editor into
-            (TabWidget)
-</dd><dt><i>index</i></dt>
+</dd><dt><i>index</i> (int)</dt>
+<dd>
+index position to insert at
+</dd><dt><i>fn</i> (str)</dt>
 <dd>
-index position to insert at (integer)
-</dd><dt><i>fn</i></dt>
+filename of this editor
+</dd><dt><i>noName</i> (str)</dt>
 <dd>
-filename of this editor (string)
-</dd><dt><i>noName</i></dt>
-<dd>
-name to be used for an unnamed editor (string)
+name to be used for an unnamed editor
 </dd>
 </dl><a NAME="Tabview.mainWidget" ID="Tabview.mainWidget"></a>
 <h4>Tabview.mainWidget</h4>
@@ -1038,13 +1125,25 @@
         Public slot used to move to the previous split.
 </p><a NAME="Tabview.removeSplit" ID="Tabview.removeSplit"></a>
 <h4>Tabview.removeSplit</h4>
-<b>removeSplit</b>(<i></i>)
+<b>removeSplit</b>(<i>index=-1</i>)
 <p>
-        Public method used to remove the current split view.
+        Public method used to remove the current split view or a split view
+        by index.
 </p><dl>
+<dt><i>index</i> (int)</dt>
+<dd>
+index of the split to be removed (-1 means to
+            delete the current split)
+</dd>
+</dl><dl>
 <dt>Returns:</dt>
 <dd>
-flag indicating successfull removal
+flag indicating successful deletion
+</dd>
+</dl><dl>
+<dt>Return Type:</dt>
+<dd>
+bool
 </dd>
 </dl><a NAME="Tabview.setEditorName" ID="Tabview.setEditorName"></a>
 <h4>Tabview.setEditorName</h4>
@@ -1052,12 +1151,22 @@
 <p>
         Public method to change the displayed name of the editor.
 </p><dl>
-<dt><i>editor</i></dt>
+<dt><i>editor</i> (Editor)</dt>
 <dd>
 editor window to be changed
-</dd><dt><i>newName</i></dt>
+</dd><dt><i>newName</i> (str)</dt>
 <dd>
-new name to be shown (string)
+new name to be shown
+</dd>
+</dl><a NAME="Tabview.setSplitCount" ID="Tabview.setSplitCount"></a>
+<h4>Tabview.setSplitCount</h4>
+<b>setSplitCount</b>(<i>count</i>)
+<p>
+        Public method to set the number of split views.
+</p><dl>
+<dt><i>count</i> (int)</dt>
+<dd>
+number of split views
 </dd>
 </dl><a NAME="Tabview.setSplitOrientation" ID="Tabview.setSplitOrientation"></a>
 <h4>Tabview.setSplitOrientation</h4>
@@ -1065,10 +1174,9 @@
 <p>
         Public method used to set the orientation of the split view.
 </p><dl>
-<dt><i>orientation</i></dt>
+<dt><i>orientation</i> (Qt.Horizontal or Qt.Vertical)</dt>
 <dd>
 orientation of the split
-                (Qt.Horizontal or Qt.Vertical)
 </dd>
 </dl><a NAME="Tabview.showWindowMenu" ID="Tabview.showWindowMenu"></a>
 <h4>Tabview.showWindowMenu</h4>
@@ -1076,10 +1184,25 @@
 <p>
         Public method to set up the viewmanager part of the Window menu.
 </p><dl>
-<dt><i>windowMenu</i></dt>
+<dt><i>windowMenu</i> (QMenu)</dt>
 <dd>
 reference to the window menu
 </dd>
+</dl><a NAME="Tabview.splitCount" ID="Tabview.splitCount"></a>
+<h4>Tabview.splitCount</h4>
+<b>splitCount</b>(<i></i>)
+<p>
+        Public method to get the number of splitted views.
+</p><dl>
+<dt>Returns:</dt>
+<dd>
+number of splitted views
+</dd>
+</dl><dl>
+<dt>Return Type:</dt>
+<dd>
+int
+</dd>
 </dl><a NAME="Tabview.tile" ID="Tabview.tile"></a>
 <h4>Tabview.tile</h4>
 <b>tile</b>(<i></i>)
--- a/Documentation/Source/eric6.QScintilla.Editor.html	Thu Jan 18 11:10:57 2018 +0100
+++ b/Documentation/Source/eric6.QScintilla.Editor.html	Thu Jan 18 18:57:40 2018 +0100
@@ -294,6 +294,9 @@
 <td><a href="#Editor.__eolMenuTriggered">__eolMenuTriggered</a></td>
 <td>Private method to handle the selection of an eol type.</td>
 </tr><tr>
+<td><a href="#Editor.__executeSelection">__executeSelection</a></td>
+<td>Private slot to execute the selected text in the shell window.</td>
+</tr><tr>
 <td><a href="#Editor.__exportMenuTriggered">__exportMenuTriggered</a></td>
 <td>Private method to handle the selection of an export format.</td>
 </tr><tr>
@@ -939,6 +942,9 @@
 <td><a href="#Editor.indentLineOrSelection">indentLineOrSelection</a></td>
 <td>Public slot to indent the current line or current selection.</td>
 </tr><tr>
+<td><a href="#Editor.isClone">isClone</a></td>
+<td>Public method to test, if the given editor is a clone.</td>
+</tr><tr>
 <td><a href="#Editor.isJavascriptFile">isJavascriptFile</a></td>
 <td>Public method to return a flag indicating a Javascript file.</td>
 </tr><tr>
@@ -1697,7 +1703,12 @@
 <dd>
 reference to the action that was triggered (QAction)
 </dd>
-</dl><a NAME="Editor.__exportMenuTriggered" ID="Editor.__exportMenuTriggered"></a>
+</dl><a NAME="Editor.__executeSelection" ID="Editor.__executeSelection"></a>
+<h4>Editor.__executeSelection</h4>
+<b>__executeSelection</b>(<i></i>)
+<p>
+        Private slot to execute the selected text in the shell window.
+</p><a NAME="Editor.__exportMenuTriggered" ID="Editor.__exportMenuTriggered"></a>
 <h4>Editor.__exportMenuTriggered</h4>
 <b>__exportMenuTriggered</b>(<i>act</i>)
 <p>
@@ -2691,9 +2702,9 @@
 <p>
         Public method to add a clone to our list.
 </p><dl>
-<dt><i>editor</i></dt>
-<dd>
-reference to the cloned editor (Editor)
+<dt><i>editor</i> (Editor)</dt>
+<dd>
+reference to the cloned editor
 </dd>
 </dl><a NAME="Editor.addCompletionListHook" ID="Editor.addCompletionListHook"></a>
 <h4>Editor.addCompletionListHook</h4>
@@ -3752,7 +3763,27 @@
 <b>indentLineOrSelection</b>(<i></i>)
 <p>
         Public slot to indent the current line or current selection.
-</p><a NAME="Editor.isJavascriptFile" ID="Editor.isJavascriptFile"></a>
+</p><a NAME="Editor.isClone" ID="Editor.isClone"></a>
+<h4>Editor.isClone</h4>
+<b>isClone</b>(<i>editor</i>)
+<p>
+        Public method to test, if the given editor is a clone.
+</p><dl>
+<dt><i>editor</i> (Editor)</dt>
+<dd>
+reference to the cloned editor
+</dd>
+</dl><dl>
+<dt>Returns:</dt>
+<dd>
+flag indicating a clone
+</dd>
+</dl><dl>
+<dt>Return Type:</dt>
+<dd>
+bool
+</dd>
+</dl><a NAME="Editor.isJavascriptFile" ID="Editor.isJavascriptFile"></a>
 <h4>Editor.isJavascriptFile</h4>
 <b>isJavascriptFile</b>(<i></i>)
 <p>
@@ -4076,9 +4107,9 @@
 <p>
         Public method to remove a clone from our list.
 </p><dl>
-<dt><i>editor</i></dt>
-<dd>
-reference to the cloned editor (Editor)
+<dt><i>editor</i> (Editor)</dt>
+<dd>
+reference to the cloned editor
 </dd>
 </dl><a NAME="Editor.removeCompletionListHook" ID="Editor.removeCompletionListHook"></a>
 <h4>Editor.removeCompletionListHook</h4>
--- a/Documentation/Source/eric6.QScintilla.QsciScintillaCompat.html	Thu Jan 18 11:10:57 2018 +0100
+++ b/Documentation/Source/eric6.QScintilla.QsciScintillaCompat.html	Thu Jan 18 18:57:40 2018 +0100
@@ -91,6 +91,9 @@
 <td><a href="#QsciScintillaCompat.byteAt">byteAt</a></td>
 <td>Public method to get the raw character (bytes) at a position in the text.</td>
 </tr><tr>
+<td><a href="#QsciScintillaCompat.canPaste">canPaste</a></td>
+<td>Public method to test, if the paste action is available (i.e.</td>
+</tr><tr>
 <td><a href="#QsciScintillaCompat.charAt">charAt</a></td>
 <td>Public method to get the character at a position in the text observing multibyte characters.</td>
 </tr><tr>
@@ -492,6 +495,22 @@
 raw character at the requested position or empty bytes, if the
             position is negative or past the end of the document (bytes)
 </dd>
+</dl><a NAME="QsciScintillaCompat.canPaste" ID="QsciScintillaCompat.canPaste"></a>
+<h4>QsciScintillaCompat.canPaste</h4>
+<b>canPaste</b>(<i></i>)
+<p>
+        Public method to test, if the paste action is available (i.e. if the
+        clipboard contains some text).
+</p><dl>
+<dt>Returns:</dt>
+<dd>
+flag indicating the availability of 'paste'
+</dd>
+</dl><dl>
+<dt>Return Type:</dt>
+<dd>
+bool
+</dd>
 </dl><a NAME="QsciScintillaCompat.charAt" ID="QsciScintillaCompat.charAt"></a>
 <h4>QsciScintillaCompat.charAt</h4>
 <b>charAt</b>(<i>pos</i>)
--- a/Documentation/Source/eric6.ViewManager.ViewManager.html	Thu Jan 18 11:10:57 2018 +0100
+++ b/Documentation/Source/eric6.ViewManager.ViewManager.html	Thu Jan 18 18:57:40 2018 +0100
@@ -777,6 +777,9 @@
 <td><a href="#ViewManager.getOpenEditorsCount">getOpenEditorsCount</a></td>
 <td>Public method to get the number of open editors.</td>
 </tr><tr>
+<td><a href="#ViewManager.getOpenEditorsForSession">getOpenEditorsForSession</a></td>
+<td>Public method to get a lists of all open editors.</td>
+</tr><tr>
 <td><a href="#ViewManager.getOpenFilenames">getOpenFilenames</a></td>
 <td>Public method returning a list of the filenames of all editors.</td>
 </tr><tr>
@@ -886,7 +889,7 @@
 <td>Public slot to handle received editor commands.</td>
 </tr><tr>
 <td><a href="#ViewManager.removeSplit">removeSplit</a></td>
-<td>Public method used to remove the current split view.</td>
+<td>Public method used to remove the current split view or a split view by index.</td>
 </tr><tr>
 <td><a href="#ViewManager.replaceWidget">replaceWidget</a></td>
 <td>Public method to get a reference to the replace widget.</td>
@@ -942,6 +945,9 @@
 <td><a href="#ViewManager.setSbInfo">setSbInfo</a></td>
 <td>Public method to transfer statusbar info from the user interface to viewmanager.</td>
 </tr><tr>
+<td><a href="#ViewManager.setSplitCount">setSplitCount</a></td>
+<td>Public method to set the number of split views.</td>
+</tr><tr>
 <td><a href="#ViewManager.setSplitOrientation">setSplitOrientation</a></td>
 <td>Public method used to set the orientation of the split view.</td>
 </tr><tr>
@@ -966,6 +972,9 @@
 <td><a href="#ViewManager.showWindowMenu">showWindowMenu</a></td>
 <td>Public method to set up the viewmanager part of the Window menu.</td>
 </tr><tr>
+<td><a href="#ViewManager.splitCount">splitCount</a></td>
+<td>Public method to get the number of split views.</td>
+</tr><tr>
 <td><a href="#ViewManager.startSharedEdit">startSharedEdit</a></td>
 <td>Public slot to start a shared edit session for the current editor.</td>
 </tr><tr>
@@ -1923,23 +1932,27 @@
 </dd>
 </dl><a NAME="ViewManager._addView" ID="ViewManager._addView"></a>
 <h4>ViewManager._addView</h4>
-<b>_addView</b>(<i>win, fn=None, noName="", addNext=False</i>)
+<b>_addView</b>(<i>win, fn=None, noName="", addNext=False, indexes=None</i>)
 <p>
         Protected method to add a view (i.e. window).
 </p><dl>
-<dt><i>win</i></dt>
+<dt><i>win</i> (EditorAssembly)</dt>
 <dd>
 editor assembly to be added
-</dd><dt><i>fn</i></dt>
+</dd><dt><i>fn</i> (str)</dt>
 <dd>
 filename of this editor
-</dd><dt><i>noName</i></dt>
+</dd><dt><i>noName</i> (str)</dt>
 <dd>
-name to be used for an unnamed editor (string)
-</dd><dt><i>addNext</i></dt>
+name to be used for an unnamed editor
+</dd><dt><i>addNext</i> (bool)</dt>
 <dd>
 flag indicating to add the view next to the current
-            view (bool)
+            view
+</dd><dt><i>indexes</i> (tuple of two int)</dt>
+<dd>
+of the editor, first the split view index, second the
+            index within the view
 </dd>
 </dl><dl>
 <dt>Raises <b>RuntimeError</b>:</dt>
@@ -2392,23 +2405,27 @@
 </dd>
 </dl><a NAME="ViewManager.getEditor" ID="ViewManager.getEditor"></a>
 <h4>ViewManager.getEditor</h4>
-<b>getEditor</b>(<i>fn, filetype="", addNext=False</i>)
+<b>getEditor</b>(<i>fn, filetype="", addNext=False, indexes=None</i>)
 <p>
         Public method to return the editor displaying the given file.
 </p><p>
         If there is no editor with the given file, a new editor window is
         created.
 </p><dl>
-<dt><i>fn</i></dt>
+<dt><i>fn</i> (str)</dt>
 <dd>
 filename to look for
-</dd><dt><i>filetype</i></dt>
+</dd><dt><i>filetype</i> (str)</dt>
 <dd>
-type of the source file (string)
-</dd><dt><i>addNext</i></dt>
+type of the source file
+</dd><dt><i>addNext</i> (bool)</dt>
 <dd>
 flag indicating that if a new editor needs to be
-            created, it should be added next to the current editor (bool)
+            created, it should be added next to the current editor
+</dd><dt><i>indexes</i> (tuple of two int)</dt>
+<dd>
+of the editor, first the split view index, second the
+            index within the view
 </dd>
 </dl><dl>
 <dt>Returns:</dt>
@@ -2416,6 +2433,11 @@
 tuple of two values giving a flag indicating a new window
             creation and a reference to the editor displaying this file
 </dd>
+</dl><dl>
+<dt>Return Type:</dt>
+<dd>
+tuple of (bool, Editor)
+</dd>
 </dl><a NAME="ViewManager.getMostRecent" ID="ViewManager.getMostRecent"></a>
 <h4>ViewManager.getMostRecent</h4>
 <b>getMostRecent</b>(<i></i>)
@@ -2488,6 +2510,26 @@
 <dd>
 number of open editors (integer)
 </dd>
+</dl><a NAME="ViewManager.getOpenEditorsForSession" ID="ViewManager.getOpenEditorsForSession"></a>
+<h4>ViewManager.getOpenEditorsForSession</h4>
+<b>getOpenEditorsForSession</b>(<i></i>)
+<p>
+        Public method to get a lists of all open editors.
+</p><p>
+        The returned list contains one list per split view. If the view manager
+        cannot split the view, only one list of editors is returned.
+</p><p>
+        Note: This method should be implemented by subclasses.
+</p><dl>
+<dt>Returns:</dt>
+<dd>
+list of list of editor references
+</dd>
+</dl><dl>
+<dt>Return Type:</dt>
+<dd>
+list of list of Editor
+</dd>
 </dl><a NAME="ViewManager.getOpenFilenames" ID="ViewManager.getOpenFilenames"></a>
 <h4>ViewManager.getOpenFilenames</h4>
 <b>getOpenFilenames</b>(<i></i>)
@@ -2748,19 +2790,33 @@
         Public slot to generate a new empty editor.
 </p><a NAME="ViewManager.newEditorView" ID="ViewManager.newEditorView"></a>
 <h4>ViewManager.newEditorView</h4>
-<b>newEditorView</b>(<i>fn, caller, filetype=""</i>)
+<b>newEditorView</b>(<i>fn, caller, filetype="", indexes=None</i>)
 <p>
         Public method to create a new editor displaying the given document.
 </p><dl>
-<dt><i>fn</i></dt>
+<dt><i>fn</i> (str)</dt>
 <dd>
 filename of this view
-</dd><dt><i>caller</i></dt>
+</dd><dt><i>caller</i> (Editor)</dt>
 <dd>
 reference to the editor calling this method
-</dd><dt><i>filetype</i></dt>
+</dd><dt><i>filetype</i> (str)</dt>
+<dd>
+type of the source file
+</dd><dt><i>indexes</i> (tuple of two int)</dt>
 <dd>
-type of the source file (string)
+of the editor, first the split view index, second the
+            index within the view
+</dd>
+</dl><dl>
+<dt>Returns:</dt>
+<dd>
+reference to the new editor object
+</dd>
+</dl><dl>
+<dt>Return Type:</dt>
+<dd>
+Editor
 </dd>
 </dl><a NAME="ViewManager.nextSplit" ID="ViewManager.nextSplit"></a>
 <h4>ViewManager.nextSplit</h4>
@@ -2779,34 +2835,48 @@
 </dd>
 </dl><a NAME="ViewManager.openSourceFile" ID="ViewManager.openSourceFile"></a>
 <h4>ViewManager.openSourceFile</h4>
-<b>openSourceFile</b>(<i>fn, lineno=-1, filetype="", selStart=0, selEnd=0, pos=0, addNext=False</i>)
+<b>openSourceFile</b>(<i>fn, lineno=-1, filetype="", selStart=0, selEnd=0, pos=0, addNext=False, indexes=None</i>)
 <p>
         Public slot to display a file in an editor.
 </p><dl>
-<dt><i>fn</i></dt>
+<dt><i>fn</i> (str)</dt>
 <dd>
-name of file to be opened (string)
-</dd><dt><i>lineno</i></dt>
+name of file to be opened
+</dd><dt><i>lineno</i> (int or list of int)</dt>
 <dd>
-line number to place the cursor at (integer) or
-            list of line numbers (list of integers) (cursor will be
-            placed at the next line greater than the current one)
-</dd><dt><i>filetype</i></dt>
+line number to place the cursor at or list of line
+            numbers (cursor will be placed at the next line greater than
+            the current one)
+</dd><dt><i>filetype</i> (str)</dt>
 <dd>
-type of the source file (string)
-</dd><dt><i>selStart</i></dt>
+type of the source file
+</dd><dt><i>selStart</i> (int)</dt>
 <dd>
-start of an area to be selected (integer)
-</dd><dt><i>selEnd</i></dt>
+start of an area to be selected
+</dd><dt><i>selEnd</i> (int)</dt>
 <dd>
-end of an area to be selected (integer)
-</dd><dt><i>pos</i></dt>
+end of an area to be selected
+</dd><dt><i>pos</i> (int)</dt>
 <dd>
-position within the line to place the cursor at (integer)
-</dd><dt><i>addNext</i></dt>
+position within the line to place the cursor at
+</dd><dt><i>addNext</i> (bool)</dt>
 <dd>
 flag indicating to add the file next to the current
-            editor (bool)
+            editor
+</dd><dt><i>indexes</i> (tuple of two int)</dt>
+<dd>
+of the editor, first the split view index, second the
+            index within the view
+</dd>
+</dl><dl>
+<dt>Returns:</dt>
+<dd>
+reference to the opened editor
+</dd>
+</dl><dl>
+<dt>Return Type:</dt>
+<dd>
+Editor
 </dd>
 </dl><a NAME="ViewManager.preferencesChanged" ID="ViewManager.preferencesChanged"></a>
 <h4>ViewManager.preferencesChanged</h4>
@@ -2893,13 +2963,25 @@
 </dd>
 </dl><a NAME="ViewManager.removeSplit" ID="ViewManager.removeSplit"></a>
 <h4>ViewManager.removeSplit</h4>
-<b>removeSplit</b>(<i></i>)
+<b>removeSplit</b>(<i>index=-1</i>)
 <p>
-        Public method used to remove the current split view.
+        Public method used to remove the current split view or a split view
+        by index.
 </p><dl>
+<dt><i>index</i> (int)</dt>
+<dd>
+index of the split to be removed (-1 means to
+            delete the current split)
+</dd>
+</dl><dl>
 <dt>Returns:</dt>
 <dd>
-Flag indicating successful deletion
+flag indicating successful deletion
+</dd>
+</dl><dl>
+<dt>Return Type:</dt>
+<dd>
+bool
 </dd>
 </dl><a NAME="ViewManager.replaceWidget" ID="ViewManager.replaceWidget"></a>
 <h4>ViewManager.replaceWidget</h4>
@@ -3118,6 +3200,16 @@
 <dd>
 reference to the zoom widget (E5ZoomWidget)
 </dd>
+</dl><a NAME="ViewManager.setSplitCount" ID="ViewManager.setSplitCount"></a>
+<h4>ViewManager.setSplitCount</h4>
+<b>setSplitCount</b>(<i>count</i>)
+<p>
+        Public method to set the number of split views.
+</p><dl>
+<dt><i>count</i> (int)</dt>
+<dd>
+number of split views
+</dd>
 </dl><a NAME="ViewManager.setSplitOrientation" ID="ViewManager.setSplitOrientation"></a>
 <h4>ViewManager.setSplitOrientation</h4>
 <b>setSplitOrientation</b>(<i>orientation</i>)
@@ -3198,6 +3290,21 @@
 <dd>
 Not implemented
 </dd>
+</dl><a NAME="ViewManager.splitCount" ID="ViewManager.splitCount"></a>
+<h4>ViewManager.splitCount</h4>
+<b>splitCount</b>(<i></i>)
+<p>
+        Public method to get the number of split views.
+</p><dl>
+<dt>Returns:</dt>
+<dd>
+number of split views
+</dd>
+</dl><dl>
+<dt>Return Type:</dt>
+<dd>
+int
+</dd>
 </dl><a NAME="ViewManager.startSharedEdit" ID="ViewManager.startSharedEdit"></a>
 <h4>ViewManager.startSharedEdit</h4>
 <b>startSharedEdit</b>(<i></i>)
--- a/Documentation/Source/eric6.WebBrowser.AdBlock.AdBlockRule.html	Thu Jan 18 11:10:57 2018 +0100
+++ b/Documentation/Source/eric6.WebBrowser.AdBlock.AdBlockRule.html	Thu Jan 18 18:57:40 2018 +0100
@@ -1176,7 +1176,7 @@
     Class implementing the rule option enum.
 </p>
 <h3>Derived from</h3>
-IntFlag
+IntEnum
 <h3>Class Attributes</h3>
 <table>
 <tr><td>DocumentOption</td></tr><tr><td>DomainRestrictedOption</td></tr><tr><td>ElementHideOption</td></tr><tr><td>FontOption</td></tr><tr><td>ImageOption</td></tr><tr><td>MediaOption</td></tr><tr><td>NoOption</td></tr><tr><td>ObjectOption</td></tr><tr><td>ObjectSubrequestOption</td></tr><tr><td>OtherOption</td></tr><tr><td>PingOption</td></tr><tr><td>ScriptOption</td></tr><tr><td>StyleSheetOption</td></tr><tr><td>SubdocumentOption</td></tr><tr><td>ThirdPartyOption</td></tr><tr><td>XMLHttpRequestOption</td></tr>
@@ -1202,7 +1202,7 @@
     Class implementing the rule type enum.
 </p>
 <h3>Derived from</h3>
-IntFlag
+IntEnum
 <h3>Class Attributes</h3>
 <table>
 <tr><td>CssRule</td></tr><tr><td>DomainMatchRule</td></tr><tr><td>Invalid</td></tr><tr><td>MatchAllUrlsRule</td></tr><tr><td>RegExpMatchRule</td></tr><tr><td>StringContainsMatchRule</td></tr><tr><td>StringEndsMatchRule</td></tr>
--- a/Documentation/Source/eric6.WebBrowser.Download.DownloadItem.html	Thu Jan 18 11:10:57 2018 +0100
+++ b/Documentation/Source/eric6.WebBrowser.Download.DownloadItem.html	Thu Jan 18 18:57:40 2018 +0100
@@ -87,9 +87,6 @@
 <td><a href="#DownloadItem.__initialize">__initialize</a></td>
 <td>Private method to initialize the widget.</td>
 </tr><tr>
-<td><a href="#DownloadItem.__open">__open</a></td>
-<td>Private slot to open the downloaded file.</td>
-</tr><tr>
 <td><a href="#DownloadItem.__saveFileName">__saveFileName</a></td>
 <td>Private method to calculate a name for the file to download.</td>
 </tr><tr>
@@ -144,6 +141,9 @@
 <td><a href="#DownloadItem.on_openButton_clicked">on_openButton_clicked</a></td>
 <td>Private slot to open the downloaded file.</td>
 </tr><tr>
+<td><a href="#DownloadItem.on_pauseButton_clicked">on_pauseButton_clicked</a></td>
+<td>Private slot to pause the download.</td>
+</tr><tr>
 <td><a href="#DownloadItem.on_stopButton_clicked">on_stopButton_clicked</a></td>
 <td>Private slot to stop the download.</td>
 </tr><tr>
@@ -214,11 +214,6 @@
 <b>__initialize</b>(<i></i>)
 <p>
         Private method to initialize the widget.
-</p><a NAME="DownloadItem.__open" ID="DownloadItem.__open"></a>
-<h4>DownloadItem.__open</h4>
-<b>__open</b>(<i></i>)
-<p>
-        Private slot to open the downloaded file.
 </p><a NAME="DownloadItem.__saveFileName" ID="DownloadItem.__saveFileName"></a>
 <h4>DownloadItem.__saveFileName</h4>
 <b>__saveFileName</b>(<i>directory</i>)
@@ -362,14 +357,15 @@
 </p><dl>
 <dt>Returns:</dt>
 <dd>
-tuple of URL, save location, flag, the
-            URL of the related web page and the date and time
-            of the download
+dictionary containing the URL, save location, done flag,
+            the URL of the related web page and the date and time of the
+            download
 </dd>
 </dl><dl>
 <dt>Return Type:</dt>
 <dd>
-tuple of (QUrl, str, bool, QUrl, QDateTime)
+dict of {"URL": QUrl, "Location": str, "Done": bool,
+            "PageURL": QUrl, "Downloaded": QDateTime}
 </dd>
 </dl><a NAME="DownloadItem.getInfoData" ID="DownloadItem.getInfoData"></a>
 <h4>DownloadItem.getInfoData</h4>
@@ -396,7 +392,17 @@
 <b>on_openButton_clicked</b>(<i></i>)
 <p>
         Private slot to open the downloaded file.
-</p><a NAME="DownloadItem.on_stopButton_clicked" ID="DownloadItem.on_stopButton_clicked"></a>
+</p><a NAME="DownloadItem.on_pauseButton_clicked" ID="DownloadItem.on_pauseButton_clicked"></a>
+<h4>DownloadItem.on_pauseButton_clicked</h4>
+<b>on_pauseButton_clicked</b>(<i>checked</i>)
+<p>
+        Private slot to pause the download.
+</p><dl>
+<dt><i>checked</i> (bool)</dt>
+<dd>
+flag indicating the state of the button
+</dd>
+</dl><a NAME="DownloadItem.on_stopButton_clicked" ID="DownloadItem.on_stopButton_clicked"></a>
 <h4>DownloadItem.on_stopButton_clicked</h4>
 <b>on_stopButton_clicked</b>(<i></i>)
 <p>
@@ -427,11 +433,12 @@
 <p>
         Public method to set the relevant download data.
 </p><dl>
-<dt><i>data</i> (QUrl, str, bool, QUrl, QDateTime)</dt>
+<dt><i>data</i> (dict of {"URL": QUrl, "Location": str, "Done": bool,)</dt>
 <dd>
-tuple of URL, save location, flag, the
-            URL of the related web page and the date and time
-            of the download
+dictionary containing the URL, save location, done flag,
+            the URL of the related web page and the date and time of the
+            download
+            "PageURL": QUrl, "Downloaded": QDateTime}
 </dd>
 </dl><a NAME="DownloadItem.setIcon" ID="DownloadItem.setIcon"></a>
 <h4>DownloadItem.setIcon</h4>
--- a/Documentation/Source/eric6.WebBrowser.Download.DownloadManager.html	Thu Jan 18 11:10:57 2018 +0100
+++ b/Documentation/Source/eric6.WebBrowser.Download.DownloadManager.html	Thu Jan 18 18:57:40 2018 +0100
@@ -117,6 +117,9 @@
 <td><a href="#DownloadManager.cleanup">cleanup</a></td>
 <td>Public slot to cleanup the downloads.</td>
 </tr><tr>
+<td><a href="#DownloadManager.closeEvent">closeEvent</a></td>
+<td>Protected event handler for the close event.</td>
+</tr><tr>
 <td><a href="#DownloadManager.count">count</a></td>
 <td>Public method to get the number of downloads.</td>
 </tr><tr>
@@ -290,7 +293,17 @@
 <b>cleanup</b>(<i></i>)
 <p>
         Public slot to cleanup the downloads.
-</p><a NAME="DownloadManager.count" ID="DownloadManager.count"></a>
+</p><a NAME="DownloadManager.closeEvent" ID="DownloadManager.closeEvent"></a>
+<h4>DownloadManager.closeEvent</h4>
+<b>closeEvent</b>(<i>evt</i>)
+<p>
+        Protected event handler for the close event.
+</p><dl>
+<dt><i>evt</i> (QCloseEvent)</dt>
+<dd>
+reference to the close event
+</dd>
+</dl><a NAME="DownloadManager.count" ID="DownloadManager.count"></a>
 <h4>DownloadManager.count</h4>
 <b>count</b>(<i></i>)
 <p>
--- a/Documentation/Source/eric6.WebBrowser.SafeBrowsing.SafeBrowsingManager.html	Thu Jan 18 11:10:57 2018 +0100
+++ b/Documentation/Source/eric6.WebBrowser.SafeBrowsing.SafeBrowsingManager.html	Thu Jan 18 18:57:40 2018 +0100
@@ -58,13 +58,16 @@
 QObject
 <h3>Class Attributes</h3>
 <table>
-<tr><td>None</td></tr>
+<tr><td>enabled</td></tr>
 </table>
 <h3>Class Methods</h3>
 <table>
 <tr>
 <td><a href="#SafeBrowsingManager.getIgnoreSchemes">getIgnoreSchemes</a></td>
 <td>Class method to get the schemes not to be checked.</td>
+</tr><tr>
+<td><a href="#SafeBrowsingManager.isEnabled">isEnabled</a></td>
+<td>Class method to check, if safe browsing is enabled.</td>
 </tr>
 </table>
 <h3>Methods</h3>
@@ -121,9 +124,6 @@
 <td><a href="#SafeBrowsingManager.getThreatType">getThreatType</a></td>
 <td>Public method to get a display string for a given threat type.</td>
 </tr><tr>
-<td><a href="#SafeBrowsingManager.isEnabled">isEnabled</a></td>
-<td>Public method to check, if safe browsing is enabled.</td>
-</tr><tr>
 <td><a href="#SafeBrowsingManager.isUpdatingThreatLists">isUpdatingThreatLists</a></td>
 <td>Public method to check, if we are in the process of updating the threat lists.</td>
 </tr><tr>
@@ -156,6 +156,21 @@
 <dd>
 list of str
 </dd>
+</dl><a NAME="SafeBrowsingManager.isEnabled" ID="SafeBrowsingManager.isEnabled"></a>
+<h4>SafeBrowsingManager.isEnabled (class method)</h4>
+<b>isEnabled</b>(<i></i>)
+<p>
+        Class method to check, if safe browsing is enabled.
+</p><dl>
+<dt>Returns:</dt>
+<dd>
+flag indicating the enabled state
+</dd>
+</dl><dl>
+<dt>Return Type:</dt>
+<dd>
+bool
+</dd>
 </dl><a NAME="SafeBrowsingManager.__init__" ID="SafeBrowsingManager.__init__"></a>
 <h4>SafeBrowsingManager (Constructor)</h4>
 <b>SafeBrowsingManager</b>(<i></i>)
@@ -380,21 +395,6 @@
 <dd>
 str
 </dd>
-</dl><a NAME="SafeBrowsingManager.isEnabled" ID="SafeBrowsingManager.isEnabled"></a>
-<h4>SafeBrowsingManager.isEnabled</h4>
-<b>isEnabled</b>(<i></i>)
-<p>
-        Public method to check, if safe browsing is enabled.
-</p><dl>
-<dt>Returns:</dt>
-<dd>
-flag indicating the enabled state
-</dd>
-</dl><dl>
-<dt>Return Type:</dt>
-<dd>
-bool
-</dd>
 </dl><a NAME="SafeBrowsingManager.isUpdatingThreatLists" ID="SafeBrowsingManager.isUpdatingThreatLists"></a>
 <h4>SafeBrowsingManager.isUpdatingThreatLists</h4>
 <b>isUpdatingThreatLists</b>(<i></i>)
Binary file Documentation/eric6-plugin.odt has changed
Binary file Documentation/eric6-plugin.pdf has changed
--- a/E5Gui/E5TabWidget.py	Thu Jan 18 11:10:57 2018 +0100
+++ b/E5Gui/E5TabWidget.py	Thu Jan 18 18:57:40 2018 +0100
@@ -43,7 +43,7 @@
                 delta = event.delta()
             if delta > 0:
                 self._tabWidget.prevTab()
-            else:
+            elif delta < 0:
                 self._tabWidget.nextTab()
             
             event.accept()
--- a/E5XML/Config.py	Thu Jan 18 11:10:57 2018 +0100
+++ b/E5XML/Config.py	Thu Jan 18 18:57:40 2018 +0100
@@ -18,7 +18,7 @@
 userProjectFileFormatVersion = "4.0"
 
 # version number of the project session file
-sessionFileFormatVersion = "6.0"
+sessionFileFormatVersion = "6.1"
 
 # version number of the shortcuts file
 shortcutsFileFormatVersion = "3.6"
--- a/E5XML/SessionReader.py	Thu Jan 18 11:10:57 2018 +0100
+++ b/E5XML/SessionReader.py	Thu Jan 18 18:57:40 2018 +0100
@@ -19,14 +19,16 @@
     """
     Class for reading an XML session file.
     """
-    supportedVersions = ["4.3", "4.4", "5.0", "6.0"]
+    supportedVersions = ["4.3", "4.4", "5.0", "6.0", "6.1"]
     
     def __init__(self, device, isGlobal):
         """
         Constructor
         
-        @param device reference to the I/O device to read from (QIODevice)
-        @param isGlobal flag indicating to read the global session (boolean).
+        @param device reference to the I/O device to read from
+        @type QIODevice
+        @param isGlobal flag indicating to read the global session
+        @type bool
         """
         XMLStreamReaderBase.__init__(self, device)
         
@@ -56,7 +58,8 @@
         Public method to read and parse the XML document.
         
         @param quiet flag indicating quiet operations.
-                If this flag is true, no errors are reported.
+            If this flag is true, no errors are reported.
+        @type bool
         """
         while not self.atEnd():
             self.readNext()
@@ -92,6 +95,11 @@
                     self.__readBookmarks()
                 elif self.name() == "ProjectBrowserStates":
                     self.__readProjectBrowserStates()
+                elif self.name() == "ViewManagerSplits":
+                    splitCount = int(self.attribute("count", "0"))
+                    orientation = int(self.attribute("orientation", "1"))
+                    self.vm.setSplitOrientation(orientation)
+                    self.vm.setSplitCount(splitCount)
                 else:
                     self.raiseUnexpectedStartTag(self.name())
         
@@ -102,6 +110,7 @@
         """
         Private method to read the file name infos.
         """
+        editorDict = {}
         while not self.atEnd():
             self.readNext()
             if self.isEndElement() and self.name() == "Filenames":
@@ -117,10 +126,20 @@
                     else:
                         folds = []
                     zoom = int(self.attribute("zoom", "-9999"))
+                    cloned = bool(int(self.attribute("cloned", "0")))
+                    splitIndex = int(self.attribute("splitindex", "0"))
+                    editorIndex = int(self.attribute("editorindex", "-1"))
                     filename = self.readElementText()
                     
-                    self.vm.openFiles(filename)
-                    ed = self.vm.getOpenEditor(filename)
+                    if cloned and filename in editorDict:
+                        editor = editorDict[filename]
+                        ed = self.vm.newEditorView(
+                            filename, editor, editor.getFileType(),
+                            indexes=(splitIndex, editorIndex))
+                    else:
+                        ed = self.vm.openSourceFile(
+                            filename, indexes=(splitIndex, editorIndex))
+                        editorDict[filename] = ed
                     if ed is not None:
                         if zoom > -9999:
                             ed.zoomTo(zoom)
@@ -366,7 +385,8 @@
         """
         Private method to read the project browser state info.
         
-        @param browserName name of the project browser (string)
+        @param browserName name of the project browser
+        @type str
         """
         expandedNames = []
         
--- a/E5XML/SessionWriter.py	Thu Jan 18 11:10:57 2018 +0100
+++ b/E5XML/SessionWriter.py	Thu Jan 18 18:57:40 2018 +0100
@@ -27,9 +27,11 @@
         """
         Constructor
         
-        @param device reference to the I/O device to write to (QIODevice)
-        @param projectName name of the project (string) or None for the
+        @param device reference to the I/O device to write to
+        @type QIODevice
+        @param projectName name of the project or None for the
             global session
+        @type str or None
         """
         XMLStreamWriterBase.__init__(self, device)
         
@@ -75,36 +77,44 @@
                 self.writeTextElement("Project", self.project.getProjectFile())
         
         # step 1: save all open (project) filenames and the active window
-        allOpenFiles = self.vm.getOpenFilenames()
+        if self.vm.canSplit():
+            self.writeEmptyElement("ViewManagerSplits")
+            self.writeAttribute("count", str(self.vm.splitCount()))
+            self.writeAttribute("orientation",
+                                str(self.vm.getSplitOrientation()))
+        
+        allOpenEditorLists = self.vm.getOpenEditorsForSession()
+        editorDict = {}     # remember editors by file name to detect clones
         self.writeStartElement("Filenames")
-        for of in allOpenFiles:
-            if isGlobal or of.startswith(self.project.ppath):
-                ed = self.vm.getOpenEditor(of)
-                if ed is not None:
-                    line, index = ed.getCursorPosition()
+        for splitIndex, openEditorList in enumerate(allOpenEditorLists):
+            for editorIndex, editor in enumerate(openEditorList):
+                fileName = editor.getFileName()
+                if isGlobal or self.project.isProjectFile(fileName):
+                    line, index = editor.getCursorPosition()
                     folds = ','.join(
-                        [str(i + 1) for i in ed.contractedFolds()])
-                    zoom = ed.getZoom()
-                else:
-                    line, index = 0, 0
-                    folds = ''
-                    zoom = -9999
-                self.writeStartElement("Filename")
-                self.writeAttribute("cline", str(line))
-                self.writeAttribute("cindex", str(index))
-                self.writeAttribute("folds", folds)
-                self.writeAttribute("zoom", str(zoom))
-                self.writeCharacters(of)
-                self.writeEndElement()
+                        [str(i + 1) for i in editor.contractedFolds()])
+                    zoom = editor.getZoom()
+                    if fileName in editorDict:
+                        isClone = int(editorDict[fileName].isClone(editor))
+                    else:
+                        isClone = 0
+                        editorDict[fileName] = editor
+                    self.writeStartElement("Filename")
+                    self.writeAttribute("cline", str(line))
+                    self.writeAttribute("cindex", str(index))
+                    self.writeAttribute("folds", folds)
+                    self.writeAttribute("zoom", str(zoom))
+                    self.writeAttribute("cloned", str(isClone))
+                    self.writeAttribute("splitindex", str(splitIndex))
+                    self.writeAttribute("editorindex", str(editorIndex))
+                    self.writeCharacters(fileName)
+                    self.writeEndElement()
         self.writeEndElement()
         
         aw = self.vm.getActiveName()
-        if aw and aw.startswith(self.project.ppath):
+        if aw and self.project.isProjectFile(aw):
             ed = self.vm.getOpenEditor(aw)
-            if ed is not None:
-                line, index = ed.getCursorPosition()
-            else:
-                line, index = 0, 0
+            line, index = ed.getCursorPosition()
             self.writeStartElement("ActiveWindow")
             self.writeAttribute("cline", str(line))
             self.writeAttribute("cindex", str(index))
@@ -220,12 +230,12 @@
         
         # step 4: save bookmarks of all open (project) files
         self.writeStartElement("Bookmarks")
-        for of in allOpenFiles:
-            if isGlobal or of.startswith(self.project.ppath):
-                editor = self.vm.getOpenEditor(of)
+        for fileName in editorDict:
+            if isGlobal or self.project.isProjectFile(fileName):
+                editor = editorDict[fileName]
                 for bookmark in editor.getBookmarks():
                     self.writeStartElement("Bookmark")
-                    self.writeTextElement("BmFilename", of)
+                    self.writeTextElement("BmFilename", fileName)
                     self.writeEmptyElement("Linenumber")
                     self.writeAttribute("value", str(bookmark))
                     self.writeEndElement()
--- a/Graphics/PixmapDiagram.py	Thu Jan 18 11:10:57 2018 +0100
+++ b/Graphics/PixmapDiagram.py	Thu Jan 18 18:57:40 2018 +0100
@@ -194,7 +194,7 @@
                 delta = evt.delta()
             if delta < 0:
                 self.__zoomOut()
-            else:
+            elif delta > 0:
                 self.__zoomIn()
             evt.accept()
             return
--- a/Graphics/SvgDiagram.py	Thu Jan 18 11:10:57 2018 +0100
+++ b/Graphics/SvgDiagram.py	Thu Jan 18 18:57:40 2018 +0100
@@ -164,7 +164,7 @@
                 delta = evt.delta()
             if delta < 0:
                 self.__zoomOut()
-            else:
+            elif delta > 0:
                 self.__zoomIn()
             evt.accept()
             return
--- a/Graphics/UMLGraphicsView.py	Thu Jan 18 11:10:57 2018 +0100
+++ b/Graphics/UMLGraphicsView.py	Thu Jan 18 18:57:40 2018 +0100
@@ -608,7 +608,7 @@
                 delta = evt.delta()
             if delta < 0:
                 self.zoomOut()
-            else:
+            elif delta > 0:
                 self.zoomIn()
             evt.accept()
             return
--- a/Helpviewer/Download/DownloadItem.py	Thu Jan 18 11:10:57 2018 +0100
+++ b/Helpviewer/Download/DownloadItem.py	Thu Jan 18 18:57:40 2018 +0100
@@ -299,14 +299,6 @@
                     i += 1
         return name, origName
     
-    def __open(self):
-        """
-        Private slot to open the downloaded file.
-        """
-        info = QFileInfo(self.__output)
-        url = QUrl.fromLocalFile(info.absoluteFilePath())
-        QDesktopServices.openUrl(url)
-    
     @pyqtSlot()
     def on_tryAgainButton_clicked(self):
         """
@@ -642,7 +634,7 @@
         self.downloadFinished.emit()
         
         if self.__autoOpen:
-            self.__open()
+            self.openFile()
     
     def canceledFileSelect(self):
         """
--- a/Helpviewer/HelpBrowserWV.py	Thu Jan 18 11:10:57 2018 +0100
+++ b/Helpviewer/HelpBrowserWV.py	Thu Jan 18 18:57:40 2018 +0100
@@ -1880,7 +1880,7 @@
         if evt.modifiers() & Qt.ControlModifier:
             if delta < 0:
                 self.zoomOut()
-            else:
+            elif delta > 0:
                 self.zoomIn()
             evt.accept()
             return
@@ -1888,7 +1888,7 @@
         if evt.modifiers() & Qt.ShiftModifier:
             if delta < 0:
                 self.backward()
-            else:
+            elif delta > 0:
                 self.forward()
             evt.accept()
             return
--- a/IconEditor/IconEditorWindow.py	Thu Jan 18 11:10:57 2018 +0100
+++ b/IconEditor/IconEditorWindow.py	Thu Jan 18 18:57:40 2018 +0100
@@ -1359,7 +1359,7 @@
                 delta = evt.delta()
             if delta < 0:
                 self.__zoomOut()
-            else:
+            elif delta > 0:
                 self.__zoomIn()
             evt.accept()
             return
--- a/PluginManager/PluginInfoDialog.py	Thu Jan 18 11:10:57 2018 +0100
+++ b/PluginManager/PluginInfoDialog.py	Thu Jan 18 18:57:40 2018 +0100
@@ -68,18 +68,20 @@
         """
         Private method to create a list entry based on the provided info.
         
-        @param info tuple giving the info for the entry
+        @param info dictionary giving the info for the entry (as returned by
+            PluginManager.getPluginInfos())
+        @type dict
         """
         infoList = [
-            info[0],
-            info[1],
-            info[2],
-            (info[3] and self.tr("Yes") or self.tr("No")),
-            (info[4] and self.tr("Yes") or self.tr("No")),
-            info[5]
+            info["module_name"],
+            info["plugin_name"],
+            info["version"],
+            (info["auto_activate"] and self.tr("Yes") or self.tr("On-Demand")),
+            (info["active"] and self.tr("Yes") or self.tr("No")),
+            info["short_desc"]
         ]
         itm = QTreeWidgetItem(self.pluginList, infoList)
-        if info[6]:
+        if info["error"]:
             # plugin error
             for col in range(self.pluginList.columnCount()):
                 itm.setForeground(col, QBrush(Qt.red))
--- a/PluginManager/PluginManager.py	Thu Jan 18 11:10:57 2018 +0100
+++ b/PluginManager/PluginManager.py	Thu Jan 18 18:57:40 2018 +0100
@@ -735,38 +735,66 @@
     
     def getPluginInfos(self):
         """
-        Public method to get infos about all loaded plugins.
+        Public method to get infos about all loaded plug-ins.
         
-        @return list of tuples giving module name (string), plugin name
-            (string), version (string), autoactivate (boolean), active
-            (boolean), short description (string), error flag (boolean)
+        @return list of dictionaries with keys "module_name", "plugin_name",
+            "version", "auto_activate", "active", "short_desc", "error"
+        @rtype list of dict ("module_name": str, "plugin_name": str,
+            "version": str, "auto_activate": bool, "active": bool,
+            "short_desc": str, "error": bool)
         """
         infos = []
         
+        # 1. active, non-on-demand modules
         for name in list(self.__activeModules.keys()):
-            pname, shortDesc, error, version = \
-                self.__getShortInfo(self.__activeModules[name])
-            infos.append((name, pname, version, True, True, shortDesc, error))
+            info = self.__getShortInfo(self.__activeModules[name])
+            info.update({
+                "module_name": name,
+                "auto_activate": True,
+                "active": True,
+            })
+            infos.append(info)
+        
+        # 2. inactive, non-on-demand modules
         for name in list(self.__inactiveModules.keys()):
-            pname, shortDesc, error, version = \
-                self.__getShortInfo(self.__inactiveModules[name])
-            infos.append(
-                (name, pname, version, True, False, shortDesc, error))
+            info = self.__getShortInfo(self.__inactiveModules[name])
+            info.update({
+                "module_name": name,
+                "auto_activate": True,
+                "active": False,
+            })
+            infos.append(info)
+        
+        # 3. active, on-demand modules
         for name in list(self.__onDemandActiveModules.keys()):
-            pname, shortDesc, error, version = \
-                self.__getShortInfo(self.__onDemandActiveModules[name])
-            infos.append(
-                (name, pname, version, False, True, shortDesc, error))
+            info = self.__getShortInfo(self.__onDemandActiveModules[name])
+            info.update({
+                "module_name": name,
+                "auto_activate": False,
+                "active": True,
+            })
+            infos.append(info)
+        
+        # 4. inactive, non-on-demand modules
         for name in list(self.__onDemandInactiveModules.keys()):
-            pname, shortDesc, error, version = \
-                self.__getShortInfo(self.__onDemandInactiveModules[name])
-            infos.append(
-                (name, pname, version, False, False, shortDesc, error))
+            info = self.__getShortInfo(self.__onDemandInactiveModules[name])
+            info.update({
+                "module_name": name,
+                "auto_activate": False,
+                "active": False,
+            })
+            infos.append(info)
+        
+        # 5. failed modules
         for name in list(self.__failedModules.keys()):
-            pname, shortDesc, error, version = \
-                self.__getShortInfo(self.__failedModules[name])
-            infos.append(
-                (name, pname, version, False, False, shortDesc, error))
+            info = self.__getShortInfo(self.__failedModules[name])
+            info.update({
+                "module_name": name,
+                "auto_activate": False,
+                "active": False,
+            })
+            infos.append(info)
+        
         return infos
     
     def __getShortInfo(self, module):
@@ -774,15 +802,16 @@
         Private method to extract the short info from a module.
         
         @param module module to extract short info from
-        @return short info as a tuple giving plugin name (string),
-            short description (string), error flag (boolean) and
-            version (string)
+        @return dictionay containing plug-in data
+        @rtype dict ("plugin_name": str, "version": str, "short_desc": str,
+            "error": bool)
         """
-        name = getattr(module, "name", "")
-        shortDesc = getattr(module, "shortDescription", "")
-        version = getattr(module, "version", "")
-        error = getattr(module, "error", "") != ""
-        return name, shortDesc, error, version
+        return {
+            "plugin_name": getattr(module, "name", ""),
+            "version": getattr(module, "version", ""),
+            "short_desc": getattr(module, "shortDescription", ""),
+            "error": bool(getattr(module, "error", "")),
+        }
     
     def getPluginDetails(self, name):
         """
@@ -1169,16 +1198,20 @@
         request.setAttribute(QNetworkRequest.CacheLoadControlAttribute,
                              QNetworkRequest.AlwaysNetwork)
         reply = self.__networkManager.get(request)
-        reply.finished.connect(self.__downloadRepositoryFileDone)
+        reply.finished.connect(
+            lambda: self.__downloadRepositoryFileDone(reply))
         self.__replies.append(reply)
     
-    def __downloadRepositoryFileDone(self):
+    def __downloadRepositoryFileDone(self, reply):
         """
         Private method called after the repository file was downloaded.
+        
+        @param reply reference to the reply object of the download
+        @type QNetworkReply
         """
-        reply = self.sender()
         if reply in self.__replies:
             self.__replies.remove(reply)
+        
         if reply.error() != QNetworkReply.NoError:
             E5MessageBox.warning(
                 None,
--- a/PluginManager/PluginRepositoryDialog.py	Thu Jan 18 11:10:57 2018 +0100
+++ b/PluginManager/PluginRepositoryDialog.py	Thu Jan 18 18:57:40 2018 +0100
@@ -469,7 +469,7 @@
             request.setAttribute(QNetworkRequest.CacheLoadControlAttribute,
                                  QNetworkRequest.AlwaysNetwork)
             reply = self.__networkManager.get(request)
-            reply.finished.connect(self.__downloadFileDone)
+            reply.finished.connect(lambda: self.__downloadFileDone(reply))
             reply.downloadProgress.connect(self.__downloadProgress)
             self.__replies.append(reply)
         else:
@@ -481,17 +481,19 @@
                     """ from {0}.</p><p>Error: {1}</p>"""
                 ).format(url, self.tr("Computer is offline.")))
     
-    def __downloadFileDone(self):
+    def __downloadFileDone(self, reply):
         """
         Private method called, after the file has been downloaded
         from the Internet.
+        
+        @param reply reference to the reply object of the download
+        @type QNetworkReply
         """
         self.__updateButton.setEnabled(True)
         self.__downloadCancelButton.setEnabled(False)
         self.__onlineStateChanged(self.__isOnline())
         
         ok = True
-        reply = self.sender()
         if reply in self.__replies:
             self.__replies.remove(reply)
         if reply.error() != QNetworkReply.NoError:
--- a/Plugins/CheckerPlugins/CodeStyleChecker/DocStyleChecker.py	Thu Jan 18 11:10:57 2018 +0100
+++ b/Plugins/CheckerPlugins/CodeStyleChecker/DocStyleChecker.py	Thu Jan 18 18:57:40 2018 +0100
@@ -137,7 +137,7 @@
         "D130", "D131", "D132", "D133", "D134",
         "D141", "D142", "D143", "D144", "D145",
         
-        "D203", "D205",
+        "D203", "D205", "D206",
         "D221", "D222",
         "D231", "D232", "D234", "D235", "D236", "D237", "D238", "D239",
         "D242", "D243", "D244", "D245", "D246", "D247",
@@ -232,7 +232,7 @@
                 "functionDocstring": [
                 ],
                 "classDocstring": [
-                    (self.__checkClassDocstring, ("D104", "D205")),
+                    (self.__checkClassDocstring, ("D104", "D205", "D206")),
                     (self.__checkEricNoBlankBeforeAndAfterClassOrFunction,
                      ("D242", "D243")),
                     (self.__checkEricSignal, ("D260", "D261", "D262", "D263")),
@@ -750,6 +750,12 @@
         if (not docstring or not docstring.strip() or
                 not docstring.strip('\'"')):
             self.__error(context.start(), 0, code)
+            return
+        
+        if self.__docType == "eric" and \
+           docstring.strip('\'"').strip() == "Class documentation goes here.":
+            self.__error(context.start(), 0, "D206")
+            return
     
     def __checkTripleDoubleQuotes(self, docstringContext, context):
         """
--- a/Plugins/CheckerPlugins/CodeStyleChecker/translations.py	Thu Jan 18 11:10:57 2018 +0100
+++ b/Plugins/CheckerPlugins/CodeStyleChecker/translations.py	Thu Jan 18 18:57:40 2018 +0100
@@ -316,6 +316,8 @@
         "private function/method is missing a docstring"),
     "D205": QCoreApplication.translate(
         "DocStyleChecker", "private class is missing a docstring"),
+    "D206": QCoreApplication.translate(
+        "DocStyleChecker", "class docstring is still a default string"),
     "D221": QCoreApplication.translate(
         "DocStyleChecker",
         "leading quotes of docstring not on separate line"),
--- a/Plugins/PluginPipInterface.py	Thu Jan 18 11:10:57 2018 +0100
+++ b/Plugins/PluginPipInterface.py	Thu Jan 18 18:57:40 2018 +0100
@@ -12,7 +12,7 @@
 import os
 import platform
 
-from PyQt5.QtCore import pyqtSignal, QObject, QCoreApplication
+from PyQt5.QtCore import pyqtSignal, QObject, QCoreApplication, QProcess
 
 from E5Gui.E5Application import e5App
 
@@ -151,35 +151,34 @@
                 pass
             return exes
         
+        versionSuffixes = ["", "-32", "-64"]
         for minorVersion in minorVersions:
-            versionStr = '{0}.{1}'.format(majorVersion, minorVersion)
-            exePaths = getExePath(
-                winreg.HKEY_CURRENT_USER,
-                winreg.KEY_WOW64_32KEY | winreg.KEY_READ, versionStr)
-            if exePaths:
-                for exePath in exePaths:
-                    executables.add(exePath)
-            
-            exePaths = getExePath(
-                winreg.HKEY_LOCAL_MACHINE,
-                winreg.KEY_WOW64_32KEY | winreg.KEY_READ, versionStr)
-            if exePaths:
+            for versionSuffix in versionSuffixes:
+                versionStr = '{0}.{1}{2}'.format(majorVersion, minorVersion,
+                                                 versionSuffix)
+                exePaths = getExePath(
+                    winreg.HKEY_CURRENT_USER,
+                    winreg.KEY_WOW64_32KEY | winreg.KEY_READ, versionStr)
                 for exePath in exePaths:
                     executables.add(exePath)
-            
-            # Even on Intel 64-bit machines it's 'AMD64'
-            if platform.machine() == 'AMD64':
+                
                 exePaths = getExePath(
-                    winreg.HKEY_CURRENT_USER,
-                    winreg.KEY_WOW64_64KEY | winreg.KEY_READ, versionStr)
-                if exePaths:
+                    winreg.HKEY_LOCAL_MACHINE,
+                    winreg.KEY_WOW64_32KEY | winreg.KEY_READ, versionStr)
+                for exePath in exePaths:
+                    executables.add(exePath)
+                
+                # Even on Intel 64-bit machines it's 'AMD64'
+                if platform.machine() == 'AMD64':
+                    exePaths = getExePath(
+                        winreg.HKEY_CURRENT_USER,
+                        winreg.KEY_WOW64_64KEY | winreg.KEY_READ, versionStr)
                     for exePath in exePaths:
                         executables.add(exePath)
-                
-                exePath = getExePath(
-                    winreg.HKEY_LOCAL_MACHINE,
-                    winreg.KEY_WOW64_64KEY | winreg.KEY_READ, versionStr)
-                if exePaths:
+                    
+                    exePath = getExePath(
+                        winreg.HKEY_LOCAL_MACHINE,
+                        winreg.KEY_WOW64_64KEY | winreg.KEY_READ, versionStr)
                     for exePath in exePaths:
                         executables.add(exePath)
     else:
@@ -212,23 +211,23 @@
                     exes.append(exe)
         
         # step 2: determine the Python variant
-        if Utilities.isMacPlatform():
-            checkStrings = ["Python.framework/Versions/3".lower(),
-                            "python3"]
-        else:
-            checkStrings = ["python3"]
-        
         _exePy2 = set()
         _exePy3 = set()
+        versionArgs = ["-c", "import sys; print(sys.version_info[0])"]
         for exe in exes:
             try:
                 f = open(exe, "r")
                 line0 = f.readline()
-                for checkStr in checkStrings:
-                    if checkStr in line0.lower():
-                        _exePy3.add(exe)
-                        break
-                else:
+                program = line0.replace("#!", "").strip()
+                process = QProcess()
+                process.start(program, versionArgs)
+                process.waitForFinished(5000)
+                # get a QByteArray of the output
+                versionBytes = process.readAllStandardOutput()
+                versionStr = str(versionBytes, encoding='utf-8').strip()
+                if versionStr == "3":
+                    _exePy3.add(exe)
+                elif versionStr == "2":
                     _exePy2.add(exe)
             finally:
                 f.close()
--- a/Plugins/VcsPlugins/vcsGit/GitBranchDialog.py	Thu Jan 18 11:10:57 2018 +0100
+++ b/Plugins/VcsPlugins/vcsGit/GitBranchDialog.py	Thu Jan 18 18:57:40 2018 +0100
@@ -44,8 +44,10 @@
         self.okButton = self.buttonBox.button(QDialogButtonBox.Ok)
         self.okButton.setEnabled(False)
         
-        self.__remoteBranches = [b for b in branchlist if "/" in b]
-        self.__lokalBranches = [b for b in branchlist if "/" not in b]
+        self.__remoteBranches = [b for b in branchlist
+                                 if b.startswith("remotes/")]
+        self.__lokalBranches = [b for b in branchlist
+                                if not b.startswith("remotes/")]
         
         self.branchCombo.clear()
         self.branchCombo.addItem("")
--- a/Plugins/VcsPlugins/vcsGit/GitDialog.py	Thu Jan 18 11:10:57 2018 +0100
+++ b/Plugins/VcsPlugins/vcsGit/GitDialog.py	Thu Jan 18 18:57:40 2018 +0100
@@ -116,7 +116,8 @@
             self.statusLabel.setText(self.tr("Process crashed."))
         else:
             self.statusLabel.setText(
-                self.tr("Proces finished with exit code {0}").format(exitCode))
+                self.tr("Process finished with exit code {0}")
+                .format(exitCode))
         self.__finish()
     
     def startProcess(self, args, workingDir=None, showArgs=True,
--- a/Plugins/VcsPlugins/vcsGit/GitUtilities.py	Thu Jan 18 11:10:57 2018 +0100
+++ b/Plugins/VcsPlugins/vcsGit/GitUtilities.py	Thu Jan 18 18:57:40 2018 +0100
@@ -35,7 +35,7 @@
     """
     Public function to prepare the given process.
     
-    @param proc reference to the proces to be prepared (QProcess)
+    @param proc reference to the process to be prepared (QProcess)
     @param language language to be set (string)
     """
     env = QProcessEnvironment.systemEnvironment()
--- a/Plugins/VcsPlugins/vcsGit/git.py	Thu Jan 18 11:10:57 2018 +0100
+++ b/Plugins/VcsPlugins/vcsGit/git.py	Thu Jan 18 18:57:40 2018 +0100
@@ -23,8 +23,6 @@
 from E5Gui.E5Application import e5App
 from E5Gui import E5MessageBox, E5FileDialog
 
-from Globals.E5ConfigParser import E5ConfigParser
-
 from QScintilla.MiniEditor import MiniEditor
 
 from VCS.VersionControl import VersionControl
@@ -3774,23 +3772,33 @@
         if not os.path.exists(submodulesFile):
             return []
         
-        configParser = E5ConfigParser()
-        if configParser.read(submodulesFile):
-            submodules = []
-            for submodule in configParser:
-                if submodule.startswith("submodule"):
-                    submoduleDict = {"name": submodule.split(None, 1)[1][1:-1]}
-                    section = configParser[submodule]
-                    submoduleDict["path"] = section["path"]
-                    submoduleDict["url"] = section["url"]
-                    if "branch" in section:
-                        submoduleDict["branch"] = section["branch"]
-                    else:
+        try:
+            modulesFile = open(submodulesFile, "r")
+            contents = modulesFile.readlines()
+            modulesFile.close()
+        except OSError:
+            # silently ignore them
+            return []
+        
+        submodules = []
+        submoduleDict = None
+        for line in contents:
+            line = line.strip()
+            if line.startswith("[submodule"):
+                if submoduleDict:
+                    if "branch" not in submoduleDict:
                         submoduleDict["branch"] = ""
                     submodules.append(submoduleDict)
-            return submodules
-        
-        return []
+                submoduleDict = {"name": line.split(None, 1)[1][1:-2]}
+            elif "=" in line:
+                option, value = line.split("=", 1)
+                submoduleDict[option.strip()] = value.strip()
+        if submoduleDict:
+            if "branch" not in submoduleDict:
+                submoduleDict["branch"] = ""
+            submodules.append(submoduleDict)
+        
+        return submodules
     
     def gitSubmoduleList(self, projectDir):
         """
--- a/Plugins/VcsPlugins/vcsMercurial/HgUtilities.py	Thu Jan 18 11:10:57 2018 +0100
+++ b/Plugins/VcsPlugins/vcsMercurial/HgUtilities.py	Thu Jan 18 18:57:40 2018 +0100
@@ -39,7 +39,7 @@
     """
     Public function to prepare the given process.
     
-    @param proc reference to the proces to be prepared (QProcess)
+    @param proc reference to the process to be prepared (QProcess)
     @param encoding encoding to be used by the process (string)
     @param language language to be set (string)
     """
--- a/Plugins/ViewManagerPlugins/Listspace/Listspace.py	Thu Jan 18 11:10:57 2018 +0100
+++ b/Plugins/ViewManagerPlugins/Listspace/Listspace.py	Thu Jan 18 18:57:40 2018 +0100
@@ -11,7 +11,7 @@
 
 import os
 
-from PyQt5.QtCore import pyqtSignal, QFileInfo, QEvent, Qt
+from PyQt5.QtCore import pyqtSignal, pyqtSlot, QFileInfo, QEvent, Qt
 from PyQt5.QtWidgets import QStackedWidget, QSplitter, QListWidget, \
     QListWidgetItem, QSizePolicy, QMenu, QApplication
 
@@ -19,6 +19,7 @@
 
 import QScintilla.Editor
 from QScintilla.Editor import Editor
+from QScintilla.EditorAssembly import EditorAssembly
 
 import UI.PixmapCache
 
@@ -31,7 +32,8 @@
         """
         Constructor
         
-        @param parent parent widget (QWidget)
+        @param parent parent widget
+        @type QWidget
         """
         super(StackedWidget, self).__init__(parent)
         
@@ -42,7 +44,7 @@
         Public method to add a new widget.
         
         @param assembly editor assembly object to be added
-            (QScintilla.EditorAssembly.EditorAssembly)
+        @type QScintilla.EditorAssembly.EditorAssembly
         """
         editor = assembly.getEditor()
         super(StackedWidget, self).addWidget(assembly)
@@ -53,7 +55,8 @@
         """
         Public method to remove a widget.
         
-        @param widget widget to be removed (QWidget)
+        @param widget widget to be removed
+        @type QWidget
         """
         if isinstance(widget, QScintilla.Editor.Editor):
             self.editors.remove(widget)
@@ -64,7 +67,8 @@
         """
         Public method to get a reference to the current editor.
         
-        @return reference to the current editor (Editor)
+        @return reference to the current editor
+        @rtype Editor
         """
         widget = super(StackedWidget, self).currentWidget()
         if widget is not None:
@@ -75,7 +79,8 @@
         """
         Public method to set the current widget.
         
-        @param widget widget to be made current (QWidget)
+        @param widget widget to be made current
+        @type QWidget
         """
         if widget is not None:
             if isinstance(widget, QScintilla.Editor.Editor):
@@ -88,7 +93,8 @@
         """
         Public method to set the current widget by its index.
         
-        @param index index of widget to be made current (integer)
+        @param index index of widget to be made current
+        @type int
         """
         widget = self.widget(index)
         if widget is not None:
@@ -121,8 +127,10 @@
         Public method to check for an editor.
         
         @param editor editor object to check for
+        @type Editor
         @return flag indicating, whether the editor to be checked belongs
             to the list of editors managed by this stacked widget.
+        @rtype bool
         """
         return editor in self.editors
         
@@ -131,7 +139,8 @@
         Public method to retrieve the first editor in the list of managed
             editors.
         
-        @return first editor in list (QScintilla.Editor.Editor)
+        @return first editor in list
+        @rtype QScintilla.Editor.Editor
         """
         return len(self.editors) and self.editors[0] or None
 
@@ -195,7 +204,8 @@
         """
         Constructor
         
-        @param parent parent widget (QWidget)
+        @param parent parent widget
+        @type QWidget
         """
         self.stacks = []
         
@@ -273,7 +283,8 @@
         Private slot to handle the customContextMenuRequested signal of
         the viewlist.
         
-        @param point position to open the menu at (QPoint)
+        @param point position to open the menu at
+        @type QPoint
         """
         if self.editors:
             itm = self.viewlist.itemAt(point)
@@ -313,6 +324,7 @@
         Public method to signal if cascading of managed windows is available.
         
         @return flag indicating cascading of windows is available
+        @rtype bool
         """
         return False
         
@@ -321,6 +333,7 @@
         Public method to signal if tiling of managed windows is available.
         
         @return flag indicating tiling of windows is available
+        @rtype bool
         """
         return False
     
@@ -328,7 +341,8 @@
         """
         public method to signal if splitting of the view is available.
         
-        @return flag indicating splitting of the view is available.
+        @return flag indicating splitting of the view is available
+        @rtype bool
         """
         return True
         
@@ -361,6 +375,7 @@
         Protected method to remove a view (i.e. window).
         
         @param win editor window to be removed
+        @type Editor
         """
         self.__inRemoveView = True
         ind = self.editors.index(win)
@@ -393,15 +408,22 @@
             self.changeCaption.emit("")
         self.editorChangedEd.emit(aw)
         
-    def _addView(self, win, fn=None, noName="", addNext=False):
+    def _addView(self, win, fn=None, noName="", addNext=False, indexes=None):
         """
         Protected method to add a view (i.e. window).
         
         @param win editor assembly to be added
-        @param fn filename of this editor (string)
-        @param noName name to be used for an unnamed editor (string)
+        @type EditorAssembly
+        @param fn filename of this editor
+        @type str
+        @param noName name to be used for an unnamed editor
+        @type str
         @param addNext flag indicating to add the view next to the current
-            view (bool)
+            view
+        @type bool
+        @param indexes of the editor, first the split view index, second the
+            index within the view
+        @type tuple of two int
         """
         editor = win.getEditor()
         if not fn:
@@ -417,8 +439,15 @@
             itm = QListWidgetItem(txt)
             itm.setToolTip(fn)
             self.viewlist.addItem(itm)
-        self.currentStack.addWidget(win)
-        self.currentStack.setCurrentWidget(win)
+        if indexes:
+            if indexes[0] < len(self.stacks):
+                stack = self.stacks[indexes[0]]
+            else:
+                stack = self.stacks[-1]
+            stack.addWidget(win)
+        else:
+            self.currentStack.addWidget(win)
+            self.currentStack.setCurrentWidget(win)
         editor.captionChanged.connect(self.__captionChange)
         editor.cursorLineChanged.connect(self.__cursorLineChanged)
         
@@ -439,8 +468,10 @@
         
         Updates the listwidget text to reflect the new caption information.
         
-        @param cap Caption for the editor (string)
+        @param cap Caption for the editor
+        @type str
         @param editor Editor to update the caption for
+        @type Editor
         """
         fn = editor.getFileName()
         if fn:
@@ -451,6 +482,7 @@
         Private slot to handle a change of the current editor's cursor line.
         
         @param lineno line number of the current editor's cursor (zero based)
+        @type int
         """
         editor = self.sender()
         if editor:
@@ -463,7 +495,9 @@
         Protected method to show a view (i.e. window).
         
         @param win editor assembly to be shown
-        @param fn filename of this editor (string)
+        @type EditorAssembly
+        @param fn filename of this editor
+        @type string
         """
         editor = win.getEditor()
         for stack in self.stacks:
@@ -487,7 +521,8 @@
         """
         Private slot called to show a view selected in the list.
         
-        @param row row number of the item clicked on (integer)
+        @param row row number of the item clicked on
+        @type int
         """
         if row != -1:
             self._showView(self.editors[row].parent())
@@ -498,6 +533,7 @@
         Public method to return the active (i.e. current) window.
         
         @return reference to the active editor
+        @rtype EditorAssembly
         """
         return self.currentStack.currentWidget()
         
@@ -506,6 +542,7 @@
         Public method to set up the viewmanager part of the Window menu.
         
         @param windowMenu reference to the window menu
+        @type QMenu
         """
         pass
         
@@ -521,7 +558,9 @@
         Public method to change the displayed name of the editor.
         
         @param editor editor window to be changed
-        @param newName new name to be shown (string)
+        @type Editor
+        @param newName new name to be shown
+        @type str
         """
         if newName:
             currentRow = self.viewlist.currentRow()
@@ -540,8 +579,10 @@
         """
         Protected slot to handle the modificationStatusChanged signal.
         
-        @param m flag indicating the modification status (boolean)
+        @param m flag indicating the modification status
+        @type bool
         @param editor editor window changed
+        @type Editor
         """
         currentRow = self.viewlist.currentRow()
         index = self.editors.index(editor)
@@ -565,6 +606,7 @@
         Protected slot to handle the syntaxerrorToggled signal.
         
         @param editor editor that sent the signal
+        @type Editor
         """
         currentRow = self.viewlist.currentRow()
         index = self.editors.index(editor)
@@ -605,14 +647,26 @@
         self.nextSplitAct.setEnabled(True)
         self.prevSplitAct.setEnabled(True)
         
-    def removeSplit(self):
+    @pyqtSlot()
+    def removeSplit(self, index=-1):
         """
-        Public method used to remove the current split view.
+        Public method used to remove the current split view or a split view
+        by index.
         
-        @return flag indicating successfull removal
+        @param index index of the split to be removed (-1 means to
+            delete the current split)
+        @type int
+        @return flag indicating successful deletion
+        @rtype bool
         """
         if len(self.stacks) > 1:
-            stack = self.currentStack
+            if index == -1:
+                stack = self.currentStack
+            else:
+                if index < len(self.stacks):
+                    stack = self.stacks[index]
+                else:
+                    stack = self.stacks[-1]
             res = True
             savedEditors = stack.editors[:]
             for editor in savedEditors:
@@ -635,11 +689,36 @@
         
         return False
         
+    def splitCount(self):
+        """
+        Public method to get the number of splitted views.
+        
+        @return number of splitted views
+        @rtype int
+        """
+        return len(self.stacks)
+        
+    def setSplitCount(self, count):
+        """
+        Public method to set the number of split views.
+        
+        @param count number of split views
+        @type int
+        """
+        if count > self.splitCount():
+            while self.splitCount() < count:
+                self.addSplit()
+        elif count < self.splitCount():
+            while self.splitCount() > count:
+                # use an arbitrarily large index to remove the last one
+                self.removeSplit(index=100)
+        
     def getSplitOrientation(self):
         """
         Public method to get the orientation of the split view.
         
-        @return orientation of the split (Qt.Horizontal or Qt.Vertical)
+        @return orientation of the split
+        @rtype Qt.Horizontal or Qt.Vertical
         """
         return self.stackArea.orientation()
         
@@ -648,7 +727,7 @@
         Public method used to set the orientation of the split view.
         
         @param orientation orientation of the split
-                (Qt.Horizontal or Qt.Vertical)
+        @type Qt.Horizontal or Qt.Vertical
         """
         self.stackArea.setOrientation(orientation)
         
@@ -774,6 +853,7 @@
         Private slot to handle the currentChanged signal.
         
         @param index index of the current editor
+        @type int
         """
         if index == -1 or not self.editors:
             return
@@ -803,8 +883,11 @@
         Public method called to filter the event queue.
         
         @param watched the QObject being watched
+        @type QObject
         @param event the event that occurred
+        @type QEvent
         @return flag indicating, if we handled the event
+        @rtype bool
         """
         if event.type() == QEvent.MouseButtonPress and \
            not event.button() == Qt.RightButton:
@@ -839,3 +922,24 @@
                 self.editorChangedEd.emit(aw)
         
         return False
+        
+    def getOpenEditorsForSession(self):
+        """
+        Public method to get a lists of all open editors.
+        
+        The returned list contains one list per split view. If the view manager
+        cannot split the view, only one list of editors is returned.
+        
+        @return list of list of editor references
+        @rtype list of list of Editor
+        """
+        editorLists = []
+        for stack in self.stacks:
+            editors = []
+            for index in range(stack.count()):
+                widget = stack.widget(index)
+                if isinstance(widget, EditorAssembly):
+                    editor = widget.getEditor()
+                    editors.append(editor)
+            editorLists.append(editors)
+        return editorLists
--- a/Plugins/ViewManagerPlugins/Tabview/Tabview.py	Thu Jan 18 11:10:57 2018 +0100
+++ b/Plugins/ViewManagerPlugins/Tabview/Tabview.py	Thu Jan 18 18:57:40 2018 +0100
@@ -11,8 +11,8 @@
 
 import os
 
-from PyQt5.QtCore import QPoint, QFileInfo, pyqtSignal, QEvent, QByteArray, \
-    QMimeData, Qt, QSize
+from PyQt5.QtCore import pyqtSlot, QPoint, QFileInfo, pyqtSignal, QEvent, \
+    QByteArray, QMimeData, Qt, QSize
 from PyQt5.QtGui import QColor, QDrag, QPixmap
 from PyQt5.QtWidgets import QWidget, QHBoxLayout, QSplitter, QTabBar, \
     QApplication, QToolButton, QMenu, QLabel
@@ -23,6 +23,7 @@
 
 import QScintilla.Editor
 from QScintilla.Editor import Editor
+from QScintilla.EditorAssembly import EditorAssembly
 
 import UI.PixmapCache
 
@@ -58,7 +59,8 @@
         """
         Constructor
         
-        @param parent reference to the parent widget (QWidget)
+        @param parent reference to the parent widget
+        @type QWidget
         """
         super(TabBar, self).__init__(parent)
         self.setAcceptDrops(True)
@@ -69,7 +71,8 @@
         """
         Protected method to handle mouse press events.
         
-        @param event reference to the mouse press event (QMouseEvent)
+        @param event reference to the mouse press event
+        @type QMouseEvent
         """
         if event.button() == Qt.LeftButton:
             self.__dragStartPos = QPoint(event.pos())
@@ -79,7 +82,8 @@
         """
         Protected method to handle mouse move events.
         
-        @param event reference to the mouse move event (QMouseEvent)
+        @param event reference to the mouse move event
+        @type QMouseEvent
         """
         if event.buttons() == Qt.MouseButtons(Qt.LeftButton) and \
            (event.pos() - self.__dragStartPos).manhattanLength() > \
@@ -107,7 +111,8 @@
         """
         Protected method to handle drag enter events.
         
-        @param event reference to the drag enter event (QDragEnterEvent)
+        @param event reference to the drag enter event
+        @type QDragEnterEvent
         """
         mimeData = event.mimeData()
         formats = mimeData.formats()
@@ -123,7 +128,8 @@
         """
         Protected method to handle drop events.
         
-        @param event reference to the drop event (QDropEvent)
+        @param event reference to the drop event
+        @type QDropEvent
         """
         mimeData = event.mimeData()
         oldID = int(mimeData.data("tabbar-id"))
@@ -158,7 +164,8 @@
         """
         Constructor
         
-        @param vm view manager widget (Tabview)
+        @param vm view manager widget
+        @type Tabview
         """
         super(TabWidget, self).__init__()
         
@@ -286,8 +293,10 @@
         """
         Private slot to show the tab context menu.
         
-        @param coord the position of the mouse pointer (QPoint)
-        @param index index of the tab the menu is requested for (integer)
+        @param coord the position of the mouse pointer
+        @type QPoint
+        @param index index of the tab the menu is requested for
+        @type int
         """
         if self.editors:
             self.contextMenuEditor = self.widget(index).getEditor()
@@ -327,7 +336,8 @@
         """
         Private slot called to handle the navigation button menu selection.
         
-        @param act reference to the selected action (QAction)
+        @param act reference to the selected action
+        @type QAction
         """
         index = act.data()
         if index is not None:
@@ -337,7 +347,8 @@
         """
         Public slot to set the indicator on or off.
         
-        @param on flag indicating the dtate of the indicator (boolean)
+        @param on flag indicating the state of the indicator
+        @type bool
         """
         if on:
             self.indicator.setColor(QColor("green"))
@@ -349,8 +360,9 @@
         Public method to add a new tab.
         
         @param assembly editor assembly object to be added
-            (QScintilla.EditorAssembly.EditorAssembly)
-        @param title title for the new tab (string)
+        @type QScintilla.EditorAssembly.EditorAssembly
+        @param title title for the new tab
+        @type str
         """
         editor = assembly.getEditor()
         super(TabWidget, self).addTab(
@@ -374,11 +386,14 @@
         """
         Public method to insert a new tab.
         
-        @param index index position for the new tab (integer)
+        @param index index position for the new tab
+        @type int
         @param assembly editor assembly object to be added
-            (QScintilla.EditorAssembly.EditorAssembly)
-        @param title title for the new tab (string)
-        @return index of the inserted tab (integer)
+        @type QScintilla.EditorAssembly.EditorAssembly
+        @param title title for the new tab
+        @type str
+        @return index of the inserted tab
+        @rtype int
         """
         editor = assembly.getEditor()
         newIndex = super(TabWidget, self).insertTab(
@@ -409,7 +424,9 @@
         information.
         
         @param cap Caption for the editor
+        @type str
         @param editor Editor to update the caption for
+        @type Editor
         """
         fn = editor.getFileName()
         if fn:
@@ -436,6 +453,7 @@
         Private slot to handle a change of the current editor's cursor line.
         
         @param lineno line number of the current editor's cursor (zero based)
+        @type int
         """
         editor = self.sender()
         if editor and isinstance(editor, QScintilla.Editor.Editor):
@@ -447,7 +465,8 @@
         """
         Public method to remove a widget.
         
-        @param widget widget to be removed (QWidget)
+        @param widget widget to be removed
+        @type QWidget
         """
         if isinstance(widget, QScintilla.Editor.Editor):
             widget.cursorLineChanged.disconnect(self.__cursorLineChanged)
@@ -473,9 +492,12 @@
         """
         Private method to relocate an editor from another TabWidget.
         
-        @param sourceId id of the TabWidget to get the editor from (string)
-        @param sourceIndex index of the tab in the old tab widget (integer)
-        @param targetIndex index position to place it to (integer)
+        @param sourceId id of the TabWidget to get the editor from
+        @type str
+        @param sourceIndex index of the tab in the old tab widget
+        @type int
+        @param targetIndex index position to place it to
+        @type int
         """
         tw = self.vm.getTabWidgetById(int(sourceId))
         if tw is not None:
@@ -502,9 +524,12 @@
         """
         Private method to copy an editor from another TabWidget.
         
-        @param sourceId id of the TabWidget to get the editor from (string)
-        @param sourceIndex index of the tab in the old tab widget (integer)
-        @param targetIndex index position to place it to (integer)
+        @param sourceId id of the TabWidget to get the editor from
+        @type str
+        @param sourceIndex index of the tab in the old tab widget
+        @type int
+        @param targetIndex index position to place it to
+        @type int
         """
         tw = self.vm.getTabWidgetById(int(sourceId))
         if tw is not None:
@@ -518,8 +543,10 @@
         """
         Private method to copy an editor.
         
-        @param sourceIndex index of the tab (integer)
-        @param targetIndex index position to place it to (integer)
+        @param sourceIndex index of the tab
+        @type int
+        @param targetIndex index position to place it to
+        @type int
         """
         editor = self.widget(sourceIndex).getEditor()
         newEditor, assembly = self.vm.cloneEditor(
@@ -531,7 +558,8 @@
         """
         Public method to return a reference to the current page.
         
-        @return reference to the current page (Editor)
+        @return reference to the current page
+        @rtype Editor
         """
         if not self.editors:
             return None
@@ -543,7 +571,7 @@
         Public method to set the current tab by the given editor assembly.
         
         @param assembly editor assembly to determine current tab from
-            (EditorAssembly.EditorAssembly)
+        @type EditorAssembly.EditorAssembly
         """
         super(TabWidget, self).setCurrentWidget(assembly)
         
@@ -551,8 +579,10 @@
         """
         Public method to get the tab index of the given editor.
         
-        @param widget widget to get the index for (QLabel or Editor)
-        @return tab index of the editor (integer)
+        @param widget widget to get the index for
+        @type QLabel or Editor
+        @return tab index of the editor
+        @rtype int
         """
         if isinstance(widget, QScintilla.Editor.Editor):
             widget = widget.parent()
@@ -563,8 +593,10 @@
         Public method to check for an editor.
         
         @param editor editor object to check for
+        @type Editor
         @return flag indicating, whether the editor to be checked belongs
             to the list of editors managed by this tab widget.
+        @rtype bool
         """
         return editor in self.editors
         
@@ -573,6 +605,7 @@
         Public method to test, if any editor is managed.
         
         @return flag indicating editors are managed
+        @rtype bool
         """
         return len(self.editors) > 0
         
@@ -758,7 +791,8 @@
         """
         Constructor
         
-        @param parent parent widget (QWidget)
+        @param parent parent widget
+        @type QWidget
         """
         self.tabWidgets = []
         
@@ -796,6 +830,7 @@
         Public method to signal if cascading of managed windows is available.
         
         @return flag indicating cascading of windows is available
+        @rtype bool
         """
         return False
         
@@ -804,6 +839,7 @@
         Public method to signal if tiling of managed windows is available.
         
         @return flag indicating tiling of windows is available
+        @rtype bool
         """
         return False
         
@@ -812,6 +848,7 @@
         public method to signal if splitting of the view is available.
         
         @return flag indicating splitting of the view is available.
+        @rtype bool
         """
         return True
         
@@ -839,6 +876,7 @@
         Protected method to remove a view (i.e. window).
         
         @param win editor window to be removed
+        @type Editor
         """
         self.__inRemoveView = True
         for tw in self.tabWidgets:
@@ -870,15 +908,22 @@
             self.changeCaption.emit("")
         self.editorChangedEd.emit(aw)
         
-    def _addView(self, win, fn=None, noName="", addNext=False):
+    def _addView(self, win, fn=None, noName="", addNext=False, indexes=None):
         """
         Protected method to add a view (i.e. window).
         
         @param win editor assembly to be added
-        @param fn filename of this editor (string)
-        @param noName name to be used for an unnamed editor (string)
+        @type EditorAssembly
+        @param fn filename of this editor
+        @type str
+        @param noName name to be used for an unnamed editor
+        @type str
         @param addNext flag indicating to add the view next to the current
-            view (bool)
+            view
+        @type bool
+        @param indexes of the editor, first the split view index, second the
+            index within the view
+        @type tuple of two int
         """
         editor = win.getEditor()
         if not fn:
@@ -888,6 +933,12 @@
             if addNext:
                 index = self.currentTabWidget.currentIndex() + 1
                 self.currentTabWidget.insertWidget(index, win, noName)
+            elif indexes:
+                if indexes[0] < len(self.tabWidgets):
+                    tw = self.tabWidgets[indexes[0]]
+                else:
+                    tw = self.tabWidgets[-1]
+                tw.insertWidget(indexes[1], win, noName)
             else:
                 self.currentTabWidget.addTab(win, noName)
             editor.setNoName(noName)
@@ -903,6 +954,12 @@
             if addNext:
                 index = self.currentTabWidget.currentIndex() + 1
                 self.currentTabWidget.insertWidget(index, win, txt)
+            elif indexes:
+                if indexes[0] < len(self.tabWidgets):
+                    tw = self.tabWidgets[indexes[0]]
+                else:
+                    tw = self.tabWidgets[-1]
+                tw.insertWidget(indexes[1], win, txt)
             else:
                 self.currentTabWidget.addTab(win, txt)
             index = self.currentTabWidget.indexOf(win)
@@ -923,11 +980,15 @@
         Public method to add a view (i.e. window).
         
         @param win editor assembly to be inserted
+        @type EditorAssembly
         @param tabWidget reference to the tab widget to insert the editor into
-            (TabWidget)
-        @param index index position to insert at (integer)
-        @param fn filename of this editor (string)
-        @param noName name to be used for an unnamed editor (string)
+        @type TabWidget
+        @param index index position to insert at
+        @type int
+        @param fn filename of this editor
+        @type str
+        @param noName name to be used for an unnamed editor
+        @type str
         """
         editor = win.getEditor()
         if fn is None:
@@ -966,7 +1027,9 @@
         Protected method to show a view (i.e. window).
         
         @param win editor assembly to be shown
-        @param fn filename of this editor (string)
+        @type EditorAssembly
+        @param fn filename of this editor
+        @type str
         """
         win.show()
         editor = win.getEditor()
@@ -984,6 +1047,7 @@
         Public method to return the active (i.e. current) window.
         
         @return reference to the active editor
+        @rtype Editor
         """
         cw = self.currentTabWidget.currentWidget()
         if cw:
@@ -996,6 +1060,7 @@
         Public method to set up the viewmanager part of the Window menu.
         
         @param windowMenu reference to the window menu
+        @type QMenu
         """
         pass
         
@@ -1011,7 +1076,9 @@
         Public method to change the displayed name of the editor.
         
         @param editor editor window to be changed
-        @param newName new name to be shown (string)
+        @type Editor
+        @param newName new name to be shown
+        @type str
         """
         if newName:
             if self.filenameOnly:
@@ -1029,8 +1096,10 @@
         """
         Protected slot to handle the modificationStatusChanged signal.
         
-        @param m flag indicating the modification status (boolean)
+        @param m flag indicating the modification status
+        @type bool
         @param editor editor window changed
+        @type Editor
         """
         for tw in self.tabWidgets:
             if tw.hasEditor(editor):
@@ -1053,6 +1122,7 @@
         Protected slot to handle the syntaxerrorToggled signal.
         
         @param editor editor that sent the signal
+        @type Editor
         """
         for tw in self.tabWidgets:
             if tw.hasEditor(editor):
@@ -1095,14 +1165,26 @@
         self.nextSplitAct.setEnabled(True)
         self.prevSplitAct.setEnabled(True)
         
-    def removeSplit(self):
+    @pyqtSlot()
+    def removeSplit(self, index=-1):
         """
-        Public method used to remove the current split view.
+        Public method used to remove the current split view or a split view
+        by index.
         
-        @return flag indicating successfull removal
+        @param index index of the split to be removed (-1 means to
+            delete the current split)
+        @type int
+        @return flag indicating successful deletion
+        @rtype bool
         """
         if len(self.tabWidgets) > 1:
-            tw = self.currentTabWidget
+            if index == -1:
+                tw = self.currentTabWidget
+            else:
+                if index < len(self.tabWidgets):
+                    tw = self.tabWidgets[index]
+                else:
+                    tw = self.tabWidgets[-1]
             res = True
             savedEditors = tw.editors[:]
             for editor in savedEditors:
@@ -1133,11 +1215,36 @@
         
         return False
         
+    def splitCount(self):
+        """
+        Public method to get the number of splitted views.
+        
+        @return number of splitted views
+        @rtype int
+        """
+        return len(self.tabWidgets)
+        
+    def setSplitCount(self, count):
+        """
+        Public method to set the number of split views.
+        
+        @param count number of split views
+        @type int
+        """
+        if count > self.splitCount():
+            while self.splitCount() < count:
+                self.addSplit()
+        elif count < self.splitCount():
+            while self.splitCount() > count:
+                # use an arbitrarily large index to remove the last one
+                self.removeSplit(index=100)
+        
     def getSplitOrientation(self):
         """
         Public method to get the orientation of the split view.
         
-        @return orientation of the split (Qt.Horizontal or Qt.Vertical)
+        @return orientation of the split
+        @rtype Qt.Horizontal or Qt.Vertical
         """
         return self.__splitter.orientation()
         
@@ -1146,7 +1253,7 @@
         Public method used to set the orientation of the split view.
         
         @param orientation orientation of the split
-                (Qt.Horizontal or Qt.Vertical)
+        @type Qt.Horizontal or Qt.Vertical
         """
         self.__splitter.setOrientation(orientation)
         
@@ -1190,7 +1297,8 @@
         """
         Private slot to handle the currentChanged signal.
         
-        @param index index of the current tab (integer)
+        @param index index of the current tab
+        @type int
         """
         if index == -1 or not self.editors:
             return
@@ -1216,9 +1324,12 @@
         """
         Public method called to filter the event queue.
         
-        @param watched the QObject being watched (QObject)
-        @param event the event that occurred (QEvent)
+        @param watched the QObject being watched
+        @type QObject
+        @param event the event that occurred
+        @type QEvent
         @return always False
+        @rtype bool
         """
         if event.type() == QEvent.MouseButtonPress and \
            not event.button() == Qt.RightButton:
@@ -1290,10 +1401,33 @@
         """
         Public method to get a reference to a tab widget knowing its ID.
         
-        @param id_ id of the tab widget (long)
-        @return reference to the tab widget (TabWidget)
+        @param id_ id of the tab widget
+        @type int
+        @return reference to the tab widget
+        @rtype TabWidget
         """
         for tw in self.tabWidgets:
             if id(tw) == id_:
                 return tw
         return None
+        
+    def getOpenEditorsForSession(self):
+        """
+        Public method to get a lists of all open editors.
+        
+        The returned list contains one list per split view. If the view manager
+        cannot split the view, only one list of editors is returned.
+        
+        @return list of list of editor references
+        @rtype list of list of Editor
+        """
+        editorLists = []
+        for tabWidget in self.tabWidgets:
+            editors = []
+            for index in range(tabWidget.count()):
+                widget = tabWidget.widget(index)
+                if isinstance(widget, EditorAssembly):
+                    editor = widget.getEditor()
+                    editors.append(editor)
+            editorLists.append(editors)
+        return editorLists
--- a/Plugins/WizardPlugins/EricPluginWizard/Templates.py	Thu Jan 18 11:10:57 2018 +0100
+++ b/Plugins/WizardPlugins/EricPluginWizard/Templates.py	Thu Jan 18 18:57:40 2018 +0100
@@ -59,16 +59,18 @@
         """
         Constructor
         
-        @param ui reference to the user interface object (UI.UserInterface)
+        @param ui reference to the user interface object
+        @type UI.UserInterface
         """
         super({className}, self).__init__(ui)
         self.__ui = ui
     
     def activate(self):
         """
-        Public method to activate this plugin.
+        Public method to activate this plug-in.
         
-        @return tuple of None and activation status (boolean)
+        @return tuple of None and activation status
+        @rtype bool
         """
         global error
         error = ""     # clear previous error
@@ -77,7 +79,7 @@
     
     def deactivate(self):
         """
-        Public method to deactivate this plugin.
+        Public method to deactivate this plug-in.
         """
         pass
 {config3}'''
@@ -91,6 +93,7 @@
     Module function returning data as required by the configuration dialog.
     
     @return dictionary containing the relevant data
+    @rtype dict
     """
     return {{
         "<unique key>": ["<display string>", "<pixmap filename>",
@@ -100,7 +103,7 @@
 
 def prepareUninstall():
     """
-    Module function to prepare for an uninstallation.
+    Module function to prepare for an un-installation.
     """
     Preferences.Prefs.settings.remove({className}.PreferencesKey)
 
@@ -115,19 +118,23 @@
     
     def getPreferences(self, key):
         """
-        Public method to retrieve the various refactoring settings.
+        Public method to retrieve the various settings values.
         
         @param key the key of the value to get
-        @return the requested refactoring setting
+        @type str
+        @return the requested setting value
+        @rtype any
         """
         return None
     
     def setPreferences(self, key, value):
         """
-        Public method to store the various refactoring settings.
+        Public method to store the various settings values.
         
-        @param key the key of the setting to be set (string)
+        @param key the key of the setting to be set
+        @type str
         @param value the value to be set
+        @type any
         """
         pass
 '''
@@ -140,7 +147,8 @@
     """
     Module function to return a preview pixmap.
     
-    @return preview pixmap (QPixmap)
+    @return preview pixmap
+    @rtype QPixmap
     """
     from PyQt5.QtGui import QPixmap
     
@@ -156,6 +164,7 @@
     
     @return list of dictionaries containing the data to query the presence of
         the executable
+    @rtype list of dict
     """
     dataList = []
     data = {
@@ -164,6 +173,7 @@
         "exe": "dummyExe",
         "versionCommand": "--version",
         "versionStartsWith": "dummyExe",
+        "versionRe": "",
         "versionPosition": -1,
         "version": "",
         "versionCleanup": None,
@@ -183,6 +193,7 @@
     
     @return dictionary containing the data to query the presence of
         the executable
+    @rtype dict
     """
     data = {
         "programEntry": True,
@@ -190,6 +201,7 @@
         "exe": exe,
         "versionCommand": "--version",
         "versionStartsWith": "<identifier>",
+        "versionRe": "",
         "versionPosition": -1,
         "version": "",
         "versionCleanup": None,
@@ -211,10 +223,12 @@
 
 apiFilesTemplate = '''def apiFiles(language):
     """
-    Module function to return the API files made available by this plugin.
+    Module function to return the API files made available by this plug-in.
     
-    @param language language to get APIs for (string)
-    @return list of API filenames (list of string)
+    @param language language to get APIs for
+    @type str
+    @return list of API filenames
+    @rtype list of str
     """
     if language in ["Python3",  "Python2", "Python"]:
         apisDir = \\
--- a/Preferences/ConfigurationPages/WebBrowserAppearancePage.py	Thu Jan 18 11:10:57 2018 +0100
+++ b/Preferences/ConfigurationPages/WebBrowserAppearancePage.py	Thu Jan 18 18:57:40 2018 +0100
@@ -95,6 +95,12 @@
         self.warnOnMultipleCloseCheckBox.setChecked(
             Preferences.getWebBrowser("WarnOnMultipleClose"))
         
+        try:
+            # Qt 5.10
+            self.scrollbarsCheckBox.setChecked(
+                Preferences.getWebBrowser("ShowScrollBars"))
+        except KeyError:
+            self.scrollbarsCheckBox.setEnabled(False)
         self.toolbarsCheckBox.setChecked(
             Preferences.getWebBrowser("ShowToolbars"))
     
@@ -177,6 +183,11 @@
             "WarnOnMultipleClose",
             self.warnOnMultipleCloseCheckBox.isChecked())
         
+        if self.scrollbarsCheckBox.isEnabled():
+            Preferences.setWebBrowser(
+                "ShowScrollBars",
+                self.scrollbarsCheckBox.isChecked())
+        
         Preferences.setWebBrowser(
             "ShowToolbars",
             self.toolbarsCheckBox.isChecked())
--- a/Preferences/ConfigurationPages/WebBrowserAppearancePage.ui	Thu Jan 18 11:10:57 2018 +0100
+++ b/Preferences/ConfigurationPages/WebBrowserAppearancePage.ui	Thu Jan 18 18:57:40 2018 +0100
@@ -7,10 +7,10 @@
     <x>0</x>
     <y>0</y>
     <width>499</width>
-    <height>1014</height>
+    <height>1116</height>
    </rect>
   </property>
-  <layout class="QVBoxLayout" name="verticalLayout_4">
+  <layout class="QVBoxLayout" name="verticalLayout_5">
    <item>
     <widget class="QLabel" name="headerLabel">
      <property name="text">
@@ -396,6 +396,25 @@
     </widget>
    </item>
    <item>
+    <widget class="QGroupBox" name="groupBox_7">
+     <property name="title">
+      <string>Scrollbars</string>
+     </property>
+     <layout class="QVBoxLayout" name="verticalLayout_4">
+      <item>
+       <widget class="QCheckBox" name="scrollbarsCheckBox">
+        <property name="toolTip">
+         <string>Select to show scrollbars. Note: Scrolling is possible even without them.</string>
+        </property>
+        <property name="text">
+         <string>Show Scrollbars</string>
+        </property>
+       </widget>
+      </item>
+     </layout>
+    </widget>
+   </item>
+   <item>
     <widget class="Line" name="line9_2">
      <property name="frameShape">
       <enum>QFrame::HLine</enum>
@@ -474,6 +493,8 @@
   <tabstop>styleSheetPicker</tabstop>
   <tabstop>tabsCloseButtonCheckBox</tabstop>
   <tabstop>warnOnMultipleCloseCheckBox</tabstop>
+  <tabstop>scrollbarsCheckBox</tabstop>
+  <tabstop>toolbarsCheckBox</tabstop>
  </tabstops>
  <resources/>
  <connections/>
--- a/Preferences/ConfigurationPages/WebBrowserPage.py	Thu Jan 18 11:10:57 2018 +0100
+++ b/Preferences/ConfigurationPages/WebBrowserPage.py	Thu Jan 18 18:57:40 2018 +0100
@@ -76,6 +76,13 @@
         
         self.jsOpenWindowsCheckBox.setChecked(
             Preferences.getWebBrowser("JavaScriptCanOpenWindows"))
+        try:
+            # Qt 5.10
+            self.jsActivateWindowsCheckBox.setChecked(
+                Preferences.getWebBrowser(
+                    "AllowWindowActivationFromJavaScript"))
+        except KeyError:
+            self.jsActivateWindowsCheckBox.setEnabled(False)
         self.jsClipboardCheckBox.setChecked(
             Preferences.getWebBrowser("JavaScriptCanAccessClipboard"))
         self.pluginsCheckBox.setChecked(
@@ -173,6 +180,12 @@
                 Preferences.getWebBrowser("AllowRunningInsecureContent"))
         except KeyError:
             self.insecureContentsCheckBox.setEnabled(False)
+        try:
+            # Qt 5.9
+            self.insecureGeolocationCheckBox.setChecked(
+                Preferences.getWebBrowser("AllowGeolocationOnInsecureOrigins"))
+        except KeyError:
+            self.insecureGeolocationCheckBox.setEnabled(False)
         
         try:
             # Qt 5.8
@@ -228,6 +241,10 @@
         Preferences.setWebBrowser(
             "JavaScriptCanOpenWindows",
             self.jsOpenWindowsCheckBox.isChecked())
+        if self.jsActivateWindowsCheckBox.isEnabled():
+            Preferences.setWebBrowser(
+                "AllowWindowActivationFromJavaScript",
+                self.jsActivateWindowsCheckBox.isChecked())
         Preferences.setWebBrowser(
             "JavaScriptCanAccessClipboard",
             self.jsClipboardCheckBox.isChecked())
@@ -319,6 +336,10 @@
             Preferences.setWebBrowser(
                 "AllowRunningInsecureContent",
                 self.insecureContentsCheckBox.isChecked())
+        if self.insecureGeolocationCheckBox.isEnabled():
+            Preferences.setWebBrowser(
+                "AllowGeolocationOnInsecureOrigins",
+                self.insecureGeolocationCheckBox.isChecked())
         
         if self.printBackgroundCheckBox.isEnabled():
             Preferences.setWebBrowser(
--- a/Preferences/ConfigurationPages/WebBrowserPage.ui	Thu Jan 18 11:10:57 2018 +0100
+++ b/Preferences/ConfigurationPages/WebBrowserPage.ui	Thu Jan 18 18:57:40 2018 +0100
@@ -10,7 +10,7 @@
     <height>2000</height>
    </rect>
   </property>
-  <layout class="QVBoxLayout" name="verticalLayout_2">
+  <layout class="QVBoxLayout" name="verticalLayout_5">
    <item>
     <widget class="QLabel" name="headerLabel">
      <property name="text">
@@ -374,7 +374,7 @@
      <property name="title">
       <string>Privacy</string>
      </property>
-     <layout class="QVBoxLayout" name="verticalLayout_4">
+     <layout class="QVBoxLayout" name="verticalLayout_3">
       <item>
        <widget class="QGroupBox" name="javaScriptGroup">
         <property name="toolTip">
@@ -383,14 +383,24 @@
         <property name="title">
          <string>JavaScript</string>
         </property>
-        <layout class="QVBoxLayout" name="verticalLayout_5">
+        <layout class="QVBoxLayout" name="verticalLayout_2">
          <item>
           <widget class="QCheckBox" name="jsOpenWindowsCheckBox">
            <property name="toolTip">
             <string>Select to allow JavaScript to open windows</string>
            </property>
            <property name="text">
-            <string>JavaScript can open windows</string>
+            <string>Allow to open windows</string>
+           </property>
+          </widget>
+         </item>
+         <item>
+          <widget class="QCheckBox" name="jsActivateWindowsCheckBox">
+           <property name="toolTip">
+            <string>Select to allow JavaScript to activate windows</string>
+           </property>
+           <property name="text">
+            <string>Allow to activate windows</string>
            </property>
           </widget>
          </item>
@@ -400,7 +410,7 @@
             <string>Select to allow JavaScript to access the clipboard</string>
            </property>
            <property name="text">
-            <string>JavaScript can access clipboard</string>
+            <string>Allow to access the clipboard</string>
            </property>
           </widget>
          </item>
@@ -479,8 +489,8 @@
      <property name="title">
       <string>Security</string>
      </property>
-     <layout class="QGridLayout" name="gridLayout_9">
-      <item row="0" column="0">
+     <layout class="QVBoxLayout" name="verticalLayout_4">
+      <item>
        <widget class="QCheckBox" name="xssAuditingCheckBox">
         <property name="toolTip">
          <string>Select to enable XSS auditing</string>
@@ -494,7 +504,7 @@
         </property>
        </widget>
       </item>
-      <item row="0" column="1">
+      <item>
        <widget class="QCheckBox" name="insecureContentsCheckBox">
         <property name="toolTip">
          <string>Select to allow HTTPS pages to run JavaScript, CSS, plugins or web-sockets from HTTP URLs</string>
@@ -504,6 +514,16 @@
         </property>
        </widget>
       </item>
+      <item>
+       <widget class="QCheckBox" name="insecureGeolocationCheckBox">
+        <property name="toolTip">
+         <string>Select to allow insecure origins (i.e. those not having an https:// URL) to request Geolocation features.</string>
+        </property>
+        <property name="text">
+         <string>Allow insecure origins to access Geolocation</string>
+        </property>
+       </widget>
+      </item>
      </layout>
     </widget>
    </item>
@@ -941,6 +961,7 @@
   <tabstop>sessionTimerSpinBox</tabstop>
   <tabstop>defaultSchemeCombo</tabstop>
   <tabstop>jsOpenWindowsCheckBox</tabstop>
+  <tabstop>jsActivateWindowsCheckBox</tabstop>
   <tabstop>jsClipboardCheckBox</tabstop>
   <tabstop>pluginsCheckBox</tabstop>
   <tabstop>doNotTrackCheckBox</tabstop>
@@ -948,6 +969,7 @@
   <tabstop>refererWhitelistButton</tabstop>
   <tabstop>xssAuditingCheckBox</tabstop>
   <tabstop>insecureContentsCheckBox</tabstop>
+  <tabstop>insecureGeolocationCheckBox</tabstop>
   <tabstop>expireHistory</tabstop>
   <tabstop>diskCacheCheckBox</tabstop>
   <tabstop>cacheSizeSpinBox</tabstop>
--- a/Preferences/ProgramsDialog.py	Thu Jan 18 11:10:57 2018 +0100
+++ b/Preferences/ProgramsDialog.py	Thu Jan 18 18:57:40 2018 +0100
@@ -263,6 +263,8 @@
             if info["programEntry"]:
                 if "exeModule" not in info:
                     info["exeModule"] = None
+                if "versionRe" not in info:
+                    info["versionRe"] = None
                 self.__createProgramEntry(
                     info["header"],
                     info["exe"],
@@ -271,6 +273,7 @@
                     versionPosition=info["versionPosition"],
                     version=info["version"],
                     versionCleanup=info["versionCleanup"],
+                    versionRe=info["versionRe"],
                     exeModule=info["exeModule"],
                 )
             else:
@@ -345,23 +348,28 @@
                         output = str(proc.readAllStandardOutput(),
                                      Preferences.getSystem("IOEncoding"),
                                      'replace')
-                        if versionRe is None:
-                            versionRe = "^{0}".format(
-                                re.escape(versionStartsWith))
-                        versionRe = re.compile(versionRe, re.UNICODE)
-                        for line in output.splitlines():
-                            if versionRe.search(line):
-                                try:
-                                    version = line.split()[versionPosition]
-                                    if versionCleanup:
-                                        version = version[
-                                            versionCleanup[0]:versionCleanup[1]
-                                        ]
-                                    break
-                                except IndexError:
-                                    version = self.tr("(unknown)")
+                        if exeModule and exeModule[0] == "-m" and \
+                                "ImportError:" in output:
+                            version = self.tr("(module not found)")
                         else:
-                            version = self.tr("(unknown)")
+                            if versionRe is None:
+                                versionRe = "^{0}".format(
+                                    re.escape(versionStartsWith))
+                            versionRe = re.compile(versionRe, re.UNICODE)
+                            for line in output.splitlines():
+                                if versionRe.search(line):
+                                    try:
+                                        version = line.split()[versionPosition]
+                                        if versionCleanup:
+                                            version = version[
+                                                versionCleanup[0]:
+                                                versionCleanup[1]
+                                            ]
+                                        break
+                                    except IndexError:
+                                        version = self.tr("(unknown)")
+                            else:
+                                version = self.tr("(unknown)")
                     else:
                         version = self.tr("(not executable)")
                 if exeModule:
--- a/Preferences/__init__.py	Thu Jan 18 11:10:57 2018 +0100
+++ b/Preferences/__init__.py	Thu Jan 18 18:57:40 2018 +0100
@@ -1240,6 +1240,27 @@
             })
         except AttributeError:
             pass
+        try:
+            # Qt 5.9+
+            cls.webBrowserDefaults.update({
+                "AllowGeolocationOnInsecureOrigins":
+                    webEngineSettings.testAttribute(
+                        QWebEngineSettings.AllowGeolocationOnInsecureOrigins),
+            })
+        except AttributeError:
+            pass
+        try:
+            # Qt 5.10+
+            cls.webBrowserDefaults.update({
+                "AllowWindowActivationFromJavaScript": 
+                    webEngineSettings.testAttribute(
+                        QWebEngineSettings.AllowWindowActivationFromJavaScript
+                    ),
+                "ShowScrollBars": webEngineSettings.testAttribute(
+                    QWebEngineSettings.ShowScrollBars),
+            })
+        except AttributeError:
+            pass
         
         cls.webEngineSettingsIntitialized = True
     
@@ -2707,8 +2728,9 @@
             keywords.append((keyword, engineName))
         prefClass.settings.endArray()
         return keywords
-    elif key in ["DownloadManagerDownloads"]:
-        # return a list of tuples of (URL, save location, done flag, page url)
+    elif key == "DownloadManagerDownloads":
+        # return a list of tuples of (URL, save location, done flag, page url,
+        # date/time downloaded)
         downloads = []
         length = prefClass.settings.beginReadArray("Help/" + key)
         for index in range(length):
@@ -2722,6 +2744,9 @@
             downloaded = prefClass.settings.value("Downloaded")
             if downloaded is None:
                 downloaded = QDateTime()
+            else:
+                downloaded = QDateTime.fromString(
+                    downloaded, "yyyy-MM-dd hh:mm:ss")
             downloads.append((url, location, done, pageUrl, downloaded))
         prefClass.settings.endArray()
         return downloads
@@ -2818,7 +2843,8 @@
             index += 1
         prefClass.settings.endArray()
     elif key == "DownloadManagerDownloads":
-        # value is list of tuples of (URL, save location, done flag, page url)
+        # value is list of tuples of (URL, save location, done flag, page url,
+        # date/time downloaded)
         prefClass.settings.remove("Help/" + key)
         prefClass.settings.beginWriteArray("Help/" + key, len(value))
         index = 0
@@ -2828,6 +2854,8 @@
             prefClass.settings.setValue("Location", v[1])
             prefClass.settings.setValue("Done", v[2])
             prefClass.settings.setValue("PageURL", v[3])
+            prefClass.settings.setValue(
+                "Downloaded", v[4].toString("yyyy-MM-dd hh:mm:ss"))
             index += 1
         prefClass.settings.endArray()
     elif key == "RssFeeds":
@@ -2898,22 +2926,27 @@
             keywords.append((keyword, engineName))
         prefClass.settings.endArray()
         return keywords
-    elif key in ["DownloadManagerDownloads"]:
-        # return a list of tuples of (URL, save location, done flag, page url)
+    elif key == "DownloadManagerDownloads":
+        # return a list of dicts containing the URL, save location, done flag,
+        # page URL, date/time downloaded
         downloads = []
         length = prefClass.settings.beginReadArray("WebBrowser/" + key)
         for index in range(length):
+            download = {}
             prefClass.settings.setArrayIndex(index)
-            url = prefClass.settings.value("URL")
-            location = prefClass.settings.value("Location")
-            done = toBool(prefClass.settings.value("Done"))
-            pageUrl = prefClass.settings.value("PageURL")
-            if pageUrl is None:
-                pageUrl = QUrl()
-            downloaded = prefClass.settings.value("Downloaded")
-            if downloaded is None:
-                downloaded = QDateTime()
-            downloads.append((url, location, done, pageUrl, downloaded))
+            download["URL"] = prefClass.settings.value("URL")
+            download["Location"] = prefClass.settings.value("Location")
+            download["Done"] = toBool(prefClass.settings.value("Done"))
+            download["PageURL"] = prefClass.settings.value("PageURL")
+            if download["PageURL"] is None:
+                download["PageURL"] = QUrl()
+            download["Downloaded"] = prefClass.settings.value("Downloaded")
+            if download["Downloaded"] is None:
+                download["Downloaded"] = QDateTime()
+            else:
+                download["Downloaded"] = QDateTime.fromString(
+                    download["Downloaded"], "yyyy-MM-dd hh:mm:ss")
+            downloads.append(download)
         prefClass.settings.endArray()
         return downloads
     elif key == "RssFeeds":
@@ -2974,7 +3007,8 @@
                  "BookmarksToolBarVisible", "StatusBarVisible",
                  "SessionAutoSave", "LoadTabOnActivation",
                  "SafeBrowsingEnabled", "SafeBrowsingFilterPlatform",
-                 "SafeBrowsingAutoUpdate",
+                 "SafeBrowsingAutoUpdate", "AllowGeolocationOnInsecureOrigins",
+                 "AllowWindowActivationFromJavaScript", "ShowScrollBars",
                  ]:
         return toBool(prefClass.settings.value(
             "WebBrowser/" + key, prefClass.webBrowserDefaults[key]))
@@ -3027,17 +3061,19 @@
             index += 1
         prefClass.settings.endArray()
     elif key == "DownloadManagerDownloads":
-        # value is list of tuples of (URL, save location, done flag, page url)
+        # value is list of dicts containing the URL, save location, done flag,
+        # page URL, date/time downloaded
         prefClass.settings.remove("Help/" + key)
         prefClass.settings.beginWriteArray("WebBrowser/" + key, len(value))
         index = 0
         for v in value:
             prefClass.settings.setArrayIndex(index)
-            prefClass.settings.setValue("URL", v[0])
-            prefClass.settings.setValue("Location", v[1])
-            prefClass.settings.setValue("Done", v[2])
-            prefClass.settings.setValue("PageURL", v[3])
-            prefClass.settings.setValue("Downloaded", v[4])
+            prefClass.settings.setValue("URL", v["URL"])
+            prefClass.settings.setValue("Location", v["Location"])
+            prefClass.settings.setValue("Done", v["Done"])
+            prefClass.settings.setValue("PageURL", v["PageURL"])
+            prefClass.settings.setValue(
+                "Downloaded", v["Downloaded"].toString("yyyy-MM-dd hh:mm:ss"))
             index += 1
         prefClass.settings.endArray()
     elif key == "RssFeeds":
--- a/QScintilla/Editor.py	Thu Jan 18 11:10:57 2018 +0100
+++ b/QScintilla/Editor.py	Thu Jan 18 18:57:40 2018 +0100
@@ -547,7 +547,8 @@
         """
         Public method to add a clone to our list.
         
-        @param editor reference to the cloned editor (Editor)
+        @param editor reference to the cloned editor
+        @type Editor
         """
         self.__clones.append(editor)
         
@@ -560,7 +561,8 @@
         """
         Public method to remove a clone from our list.
         
-        @param editor reference to the cloned editor (Editor)
+        @param editor reference to the cloned editor
+        @type Editor
         """
         if editor in self.__clones:
             editor.editorRenamed.disconnect(self.fileRenamed)
@@ -569,6 +571,17 @@
             editor.encodingChanged.disconnect(self.__encodingChanged)
             self.__clones.remove(editor)
         
+    def isClone(self, editor):
+        """
+        Public method to test, if the given editor is a clone.
+        
+        @param editor reference to the cloned editor
+        @type Editor
+        @return flag indicating a clone
+        @rtype bool
+        """
+        return editor in self.__clones
+        
     def __bindName(self, line0):
         """
         Private method to generate a dummy filename for binding a lexer.
@@ -616,6 +629,15 @@
             elif "python" in line0:
                 bindName = "dummy.py"
                 self.filetype = "Python2"
+            elif "pypy3" in line0:
+                bindName = "dummy.py"
+                self.filetype = "Python3"
+            elif "pypy2" in line0:
+                bindName = "dummy.py"
+                self.filetype = "Python2"
+            elif "pypy" in line0:
+                bindName = "dummy.py"
+                self.filetype = "Python2"
             elif ("/bash" in line0 or "/sh" in line0):
                 bindName = "dummy.sh"
             elif "ruby" in line0:
@@ -630,6 +652,28 @@
                 self.filetype = "D"
         
         if not bindName:
+            # mode line detection: -*- mode: python -*-
+            match = re.search(r"mode[:=]\s*([-\w_.]+)", line0)
+            if match:
+                mode = match.group(1).lower()
+                if mode in ["python3", "pypy3"]:
+                    bindName = "dummy.py"
+                    self.filetype = "Python3"
+                elif mode in ["python2", "pypy2", "python", "pypy"]:
+                    bindName = "dummy.py"
+                    self.filetype = "Python2"
+                elif mode == "ruby":
+                    bindName = "dummy.rb"
+                    self.filetype = "Ruby"
+                elif mode == "perl":
+                    bindName = "dummy.pl"
+                elif mode == "lua":
+                    bindName = "dummy.lua"
+                elif mode in ["dmd", "d"]:
+                    bindName = "dummy.d"
+                    self.filetype = "D"
+        
+        if not bindName:
             bindName = self.fileName
         
         return bindName
@@ -705,10 +749,13 @@
         self.menuActs["Copy"] = self.menu.addAction(
             UI.PixmapCache.getIcon("editCopy.png"),
             self.tr('Copy'), self.copy)
-        self.menu.addAction(
+        self.menuActs["Paste"] = self.menu.addAction(
             UI.PixmapCache.getIcon("editPaste.png"),
             self.tr('Paste'), self.paste)
         if not self.miniMenu:
+            self.menuActs["ExecuteSelection"] = self.menu.addAction(
+                self.tr("Execute Selection In Console"),
+                self.__executeSelection)
             self.menu.addSeparator()
             self.menu.addAction(
                 UI.PixmapCache.getIcon("editIndent.png"),
@@ -734,7 +781,9 @@
             self.menu.addAction(self.tr('Select all'), self.__selectAll)
             self.menu.addAction(
                 self.tr('Deselect all'), self.__deselectAll)
-            self.menu.addSeparator()
+        else:
+            self.menuActs["ExecuteSelection"] = None
+        self.menu.addSeparator()
         self.menuActs["SpellCheck"] = self.menu.addAction(
             UI.PixmapCache.getIcon("spellchecking.png"),
             self.tr('Check spelling...'), self.checkSpelling)
@@ -1182,7 +1231,7 @@
                 self.tr('Previous change'), self.previousChange)
         self.marginMenuActs["ClearChangeMarkers"] = \
             self.indicMarginMenu.addAction(
-                self.tr('Clear changes'), self.__deleteAllChangeMarkers)
+                self.tr('Clear changes'), self.__reinitOnlineChangeTrace)
         
         self.indicMarginMenu.aboutToShow.connect(self.__showContextMenuMargin)
         
@@ -1253,7 +1302,7 @@
                 self.tr('Previous change'), self.previousChange)
         self.marginMenuActs["ClearChangeMarkers"] = \
             self.marginMenu.addAction(
-                self.tr('Clear changes'), self.__deleteAllChangeMarkers)
+                self.tr('Clear changes'), self.__reinitOnlineChangeTrace)
         self.marginMenu.addSeparator()
         self.marginMenuActs["LMBbookmarks"] = self.marginMenu.addAction(
             self.tr('LMB toggles bookmarks'), self.__lmBbookmarks)
@@ -5126,9 +5175,12 @@
         self.menuActs["Undo"].setEnabled(self.isUndoAvailable())
         self.menuActs["Redo"].setEnabled(self.isRedoAvailable())
         self.menuActs["Revert"].setEnabled(self.isModified())
-        if not self.miniMenu:
-            self.menuActs["Cut"].setEnabled(self.hasSelectedText())
-            self.menuActs["Copy"].setEnabled(self.hasSelectedText())
+        self.menuActs["Cut"].setEnabled(self.hasSelectedText())
+        self.menuActs["Copy"].setEnabled(self.hasSelectedText())
+        if self.menuActs["ExecuteSelection"] is not None:
+            self.menuActs["ExecuteSelection"].setEnabled(
+                self.hasSelectedText())
+        self.menuActs["Paste"].setEnabled(self.canPaste())
         if not self.isResourcesFile:
             if self.fileName and self.isPyFile():
                 self.menuActs["Show"].setEnabled(True)
@@ -6675,7 +6727,7 @@
         if evt.modifiers() & Qt.ControlModifier:
             if delta < 0:
                 self.zoomOut()
-            else:
+            elif delta > 0:
                 self.zoomIn()
             evt.accept()
             return
@@ -6683,7 +6735,7 @@
         if evt.modifiers() & Qt.ShiftModifier:
             if delta < 0:
                 self.gotoMethodClass(False)
-            else:
+            elif delta > 0:
                 self.gotoMethodClass(True)
             evt.accept()
             return
@@ -7136,7 +7188,7 @@
             self.completer.setEnabled(False)
     
     #######################################################################
-    ## Autocompleting templates
+    ## Auto-completing templates
     #######################################################################
     
     def editorCommand(self, cmd):
@@ -7957,3 +8009,10 @@
                 keys.append(key)
         for key in keys:
             del self.__mouseClickHandlers[key]
+    
+    def __executeSelection(self):
+        """
+        Private slot to execute the selected text in the shell window.
+        """
+        txt = self.selectedText()
+        e5App().getObject("Shell").executeLines(txt)
--- a/QScintilla/Lexers/__init__.py	Thu Jan 18 11:10:57 2018 +0100
+++ b/QScintilla/Lexers/__init__.py	Thu Jan 18 18:57:40 2018 +0100
@@ -96,6 +96,8 @@
                   "lexerCMake.png"],
         "CSS": [QCoreApplication.translate('Lexers', "CSS"), 'dummy.css',
                 "lexerCSS.png"],
+        "Cython": [QCoreApplication.translate('Lexers', "Cython"), 'dummy.pyx',
+                   "lexerCython.png"],
         "D": [QCoreApplication.translate('Lexers', "D"), 'dummy.d',
               "lexerD.png"],
         "Diff": [QCoreApplication.translate('Lexers', "Diff"), 'dummy.diff',
@@ -339,6 +341,8 @@
             
             elif language == "Protocol":
                 return __getPygmentsLexer(parent, name="Protocol Buffer")
+            elif language == "Cython":
+                return __getPygmentsLexer(parent, name="Cython")
             
             elif language in LexerRegistry:
                 return LexerRegistry[language][2](parent)
@@ -389,7 +393,7 @@
             'Python GUI Files (*.pyw *.pyw2 *.pyw3)'),
         QCoreApplication.translate(
             'Lexers',
-            'Pyrex Files (*.pyx)'),
+            'Cython Files (*.pyx *.pxd *.pxi)'),
         QCoreApplication.translate(
             'Lexers',
             'Quixote Template Files (*.ptl)'),
@@ -576,7 +580,13 @@
             "Python3 GUI Files (*.pyw)"),
         QCoreApplication.translate(
             'Lexers',
-            "Pyrex Files (*.pyx)"),
+            "Cython Files (*.pyx)"),
+        QCoreApplication.translate(
+            'Lexers',
+            "Cython Declaration Files (*.pxd)"),
+        QCoreApplication.translate(
+            'Lexers',
+            "Cython Include Files (*.pxi)"),
         QCoreApplication.translate(
             'Lexers',
             "Quixote Template Files (*.ptl)"),
@@ -833,7 +843,9 @@
         '*.pyw2': "Python",
         '*.py3': "Python",
         '*.pyw3': "Python",
-        '*.pyx': "Python",
+        '*.pyx': "Cython",
+        '*.pxd': "Cython",
+        '*.pxi': "Cython",
         '*.ptl': "Python",
         '*.rb': "Ruby",
         '*.rbw': "Ruby",
--- a/QScintilla/MiniEditor.py	Thu Jan 18 11:10:57 2018 +0100
+++ b/QScintilla/MiniEditor.py	Thu Jan 18 18:57:40 2018 +0100
@@ -3037,6 +3037,28 @@
             elif "dmd" in line0:
                 bindName = "dummy.d"
                 self.filetype = "D"
+        
+        # mode line detection: -*- mode: python -*-
+        match = re.search(r"mode[:=]\s*([-\w_.]+)", line0)
+        if match:
+            mode = match.group(1).lower()
+            if mode in ["python3", "pypy3"]:
+                bindName = "dummy.py"
+                self.filetype = "Python3"
+            elif mode in ["python2", "pypy2", "python", "pypy"]:
+                bindName = "dummy.py"
+                self.filetype = "Python2"
+            elif mode == "ruby":
+                bindName = "dummy.rb"
+                self.filetype = "Ruby"
+            elif mode == "perl":
+                bindName = "dummy.pl"
+            elif mode == "lua":
+                bindName = "dummy.lua"
+            elif mode in ["dmd", "d"]:
+                bindName = "dummy.d"
+                self.filetype = "D"
+        
         return bindName
     
     ##########################################################
--- a/QScintilla/QsciScintillaCompat.py	Thu Jan 18 11:10:57 2018 +0100
+++ b/QScintilla/QsciScintillaCompat.py	Thu Jan 18 18:57:40 2018 +0100
@@ -744,6 +744,16 @@
         except AttributeError:
             pass
     
+    def canPaste(self):
+        """
+        Public method to test, if the paste action is available (i.e. if the
+        clipboard contains some text).
+        
+        @return flag indicating the availability of 'paste'
+        @rtype bool
+        """
+        return self.SendScintilla(QsciScintilla.SCI_CANPASTE)
+    
     ###########################################################################
     ## methods to perform searches in target range
     ###########################################################################
--- a/QScintilla/Shell.py	Thu Jan 18 11:10:57 2018 +0100
+++ b/QScintilla/Shell.py	Thu Jan 18 18:57:40 2018 +0100
@@ -1125,7 +1125,7 @@
                 delta = evt.delta()
             if delta < 0:
                 self.zoomOut()
-            else:
+            elif delta > 0:
                 self.zoomIn()
             evt.accept()
             return
@@ -1660,7 +1660,7 @@
                     self.__setHistoryIndex(index=-1)
                 elif self.__historyStyle == ShellHistoryStyle.WindowsStyle:
                     if historyIndex is None:
-                        if bool(self.__histidx - 1) and \
+                        if self.__histidx - 1 > 0 and \
                            cmd != self.__history[self.__histidx - 1]:
                             self.__setHistoryIndex(index=-1)
                     else:
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Styles/Chinese_Dark-Python.e4h	Thu Jan 18 18:57:40 2018 +0100
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE HighlightingStyles SYSTEM "HighlightingStyles-4.3.dtd">
+<!-- Eric6 highlighting styles -->
+<!-- Saved: 2017-11-17, 10:26:26-->
+<!-- Author:  -->
+<HighlightingStyles version="4.3">
+  <Lexer name="Python3">
+    <Style style="0" color="#839496" paper="#002b36" font="Noto Mono,9,-1,5,50,0,0,0,0,0" eolfill="False">Default</Style>
+    <Style style="1" color="#586e75" paper="#002b36" font="Noto Mono,9,-1,5,50,0,0,0,0,0" eolfill="False">Comment</Style>
+    <Style style="2" color="#839496" paper="#002b36" font="Noto Mono,9,-1,5,50,0,0,0,0,0" eolfill="False">Number</Style>
+    <Style style="3" color="#2aa198" paper="#002b36" font="Noto Mono,9,-1,5,50,0,0,0,0,0" eolfill="False">Double-quoted string</Style>
+    <Style style="4" color="#2aa198" paper="#002b36" font="Noto Mono,9,-1,5,50,0,0,0,0,0" eolfill="False">Single-quoted string</Style>
+    <Style style="5" color="#859900" paper="#002b36" font="Noto Mono,9,-1,5,75,0,0,0,0,0" eolfill="False">Keyword</Style>
+    <Style style="6" color="#2aa198" paper="#002b36" font="Noto Mono,9,-1,5,50,0,0,0,0,0" eolfill="False">Triple single-quoted string</Style>
+    <Style style="7" color="#2aa198" paper="#002b36" font="Noto Mono,9,-1,5,50,0,0,0,0,0" eolfill="False">Triple double-quoted string</Style>
+    <Style style="8" color="#859900" paper="#002b36" font="Noto Mono,9,-1,5,75,0,0,0,0,0" eolfill="False">Class name</Style>
+    <Style style="9" color="#859900" paper="#002b36" font="Noto Mono,9,-1,5,75,0,0,0,0,0" eolfill="False">Function or method name</Style>
+    <Style style="10" color="#839496" paper="#002b36" font="Noto Mono,9,-1,5,75,0,0,0,0,0" eolfill="False">Operator</Style>
+    <Style style="11" color="#839496" paper="#002b36" font="Noto Mono,9,-1,5,50,0,0,0,0,0" eolfill="False">Identifier</Style>
+    <Style style="12" color="#586e75" paper="#002b36" font="Noto Mono,9,-1,5,50,0,0,0,0,0" eolfill="False">Comment block</Style>
+    <Style style="13" color="#000000" paper="#e0c0e0" font="Noto Mono,9,-1,5,50,0,0,0,0,0" eolfill="False">Unclosed string</Style>
+    <Style style="14" color="#407090" paper="#002b36" font="Noto Mono,9,-1,5,50,0,0,0,0,0" eolfill="False">Highlighted identifier</Style>
+    <Style style="15" color="#657b83" paper="#002b36" font="Noto Mono,9,-1,5,50,0,0,0,0,0" eolfill="False">Decorator</Style>
+  </Lexer>
+  <Lexer name="Python2">
+    <Style style="0" color="#839496" paper="#002b36" font="Noto Mono,9,-1,5,50,0,0,0,0,0" eolfill="False">Default</Style>
+    <Style style="1" color="#586e75" paper="#002b36" font="Noto Mono,9,-1,5,50,0,0,0,0,0" eolfill="False">Comment</Style>
+    <Style style="2" color="#839496" paper="#002b36" font="Noto Mono,9,-1,5,50,0,0,0,0,0" eolfill="False">Number</Style>
+    <Style style="3" color="#2aa198" paper="#002b36" font="Noto Mono,9,-1,5,50,0,0,0,0,0" eolfill="False">Double-quoted string</Style>
+    <Style style="4" color="#2aa198" paper="#002b36" font="Noto Mono,9,-1,5,50,0,0,0,0,0" eolfill="False">Single-quoted string</Style>
+    <Style style="5" color="#859900" paper="#002b36" font="Noto Mono,9,-1,5,75,0,0,0,0,0" eolfill="False">Keyword</Style>
+    <Style style="6" color="#2aa198" paper="#002b36" font="Noto Mono,9,-1,5,50,0,0,0,0,0" eolfill="False">Triple single-quoted string</Style>
+    <Style style="7" color="#2aa198" paper="#002b36" font="Noto Mono,9,-1,5,50,0,0,0,0,0" eolfill="False">Triple double-quoted string</Style>
+    <Style style="8" color="#859900" paper="#002b36" font="Noto Mono,9,-1,5,75,0,0,0,0,0" eolfill="False">Class name</Style>
+    <Style style="9" color="#859900" paper="#002b36" font="Noto Mono,9,-1,5,75,0,0,0,0,0" eolfill="False">Function or method name</Style>
+    <Style style="10" color="#839496" paper="#002b36" font="Noto Mono,9,-1,5,75,0,0,0,0,0" eolfill="False">Operator</Style>
+    <Style style="11" color="#839496" paper="#002b36" font="Noto Mono,9,-1,5,50,0,0,0,0,0" eolfill="False">Identifier</Style>
+    <Style style="12" color="#586e75" paper="#002b36" font="Noto Mono,9,-1,5,50,0,0,0,0,0" eolfill="False">Comment block</Style>
+    <Style style="13" color="#000000" paper="#e0c0e0" font="Noto Mono,9,-1,5,50,0,0,0,0,0" eolfill="False">Unclosed string</Style>
+    <Style style="14" color="#407090" paper="#002b36" font="Noto Mono,9,-1,5,50,0,0,0,0,0" eolfill="False">Highlighted identifier</Style>
+    <Style style="15" color="#657b83" paper="#002b36" font="Noto Mono,9,-1,5,50,0,0,0,0,0" eolfill="False">Decorator</Style>
+  </Lexer>
+</HighlightingStyles>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Styles/Chinese_Dark.qss	Thu Jan 18 18:57:40 2018 +0100
@@ -0,0 +1,464 @@
+QPalette{
+    background:#444444;
+    }
+
+*{
+    outline:0px;color:#DCDCDC;
+    } 
+
+QWidget QStatusBar, QSvgWidget, QToolBar,
+QGroupBox, QHelpSearchQueryWidget, QHelpSearchResultWidget,
+QDesignerPropertyEditorInterface, QDesignerWidgetBoxInterface, QDesktopWidget, QDialog, QDialogButtonBox, 
+QDesignerActionEditorInterface, QDesignerFormWindowInterface, QDesignerObjectInspectorInterface, 
+QAbstractButton, QAbstractSlider, QAbstractSpinBox, QAxWidget, QCalendarWidget, QComboBox,
+QMdiSubWindow, QMenu,QMenuBar,QDockWidget, QFocusFrame, QGLWidget,QToolBox, QLCDNumber , 
+QSplitter, QStackedWidget,
+QMainWindow,
+QWidget#SearchWidgetLine,
+QScrollArea
+{
+background:#484848;
+}
+
+QMenu *
+{
+background:#484848;
+}
+
+QMenuBar *,QTabWidget >*
+ {
+background:#484848; 
+}
+
+QScrollArea *
+{
+background:#484848;
+}
+
+
+    
+/* ===================== QComboxBox======================== */
+QComboBox::down-arrow,QDateEdit::down-arrow,QTimeEdit::down-arrow,QDateTimeEdit::down-arrow{
+
+width:10px;
+height:10px;
+right:2px;
+}
+
+QComboBox::drop-down,QDateEdit::drop-down,QTimeEdit::drop-down,QDateTimeEdit::drop-down{
+subcontrol-origin:padding;
+subcontrol-position:top right;
+width:15px;
+border-left-width:0px;
+border-left-style:solid;
+border-top-right-radius:3px;
+border-bottom-right-radius:3px;
+border-left-color:#242424;
+}
+
+QComboBox::drop-down:on{
+top:1px;
+}
+/* ===================== QMenu======================== */
+QMenuBar::item{
+color:#DCDCDC;
+background-color:#484848;
+margin:0px;
+padding:3px 10px;
+}
+
+QMenu,QMenuBar,QMenu:disabled,QMenuBar:disabled{
+color:#DCDCDC;
+background-color:#484848;
+border:1px solid #242424;
+margin:0px;
+}
+
+QMenu::item{
+padding:3px 20px;
+}
+
+QMenu::indicator{
+width:13px;
+height:13px;
+}
+
+QMenu::item:selected,QMenuBar::item:selected{
+color:#DCDCDC;
+border:0px solid #242424;
+background:#646464;
+}
+
+QMenu::separator{
+height:1px;
+background:#242424;
+}
+/* ===================== QProgressBar======================== */
+QProgressBar{
+min-height:10px;
+background:#484848;
+border-radius:5px;
+text-align:center;
+border:1px solid #484848;
+}
+
+QProgressBar:chunk{
+border-radius:5px;
+background-color:#242424;
+}
+/* ===================== QSlider QScrollArea ======================== */
+QSlider::groove:horizontal{
+background:#484848;
+height:8px;
+border-radius:4px;
+}
+
+QSlider::add-page:horizontal{
+background:#484848;
+height:8px;
+border-radius:4px;
+}
+
+QSlider::sub-page:horizontal{
+background:#242424;
+height:8px;
+border-radius:4px;
+}
+
+QSlider::handle:horizontal{
+width:13px;
+margin-top:-3px;
+margin-bottom:-3px;
+border-radius:6px;
+background:qradialgradient(spread:pad,cx:0.5,cy:0.5,radius:0.5,fx:0.5,fy:0.5,stop:0.6 #444444,stop:0.8 #242424);
+}
+
+QSlider::groove:vertical{
+width:8px;
+border-radius:4px;
+background:#484848;
+}
+
+QSlider::add-page:vertical{
+width:8px;
+border-radius:4px;
+background:#484848;
+}
+
+QSlider::sub-page:vertical{
+width:8px;
+border-radius:4px;
+background:#242424;
+}
+
+QSlider::handle:vertical{
+height:14px;
+margin-left:-3px;
+margin-right:-3px;
+border-radius:6px;
+background:qradialgradient(spread:pad,cx:0.5,cy:0.5,radius:0.5,fx:0.5,fy:0.5,stop:0.6 #444444,stop:0.8 #242424);
+}
+
+QScrollBar:horizontal{
+background:#484848;
+padding:0px;
+border-radius:6px;
+max-height:12px;
+}
+
+QScrollBar::handle:horizontal{
+background:#242424;
+min-width:50px;
+border-radius:6px;
+}
+
+QScrollBar::handle:horizontal:hover{
+background:#242424;
+}
+
+QScrollBar::handle:horizontal:pressed{
+background:#242424;
+}
+
+QScrollBar::add-page:horizontal{
+background:none;
+}
+
+QScrollBar::sub-page:horizontal{
+background:none;
+}
+
+QScrollBar::add-line:horizontal{
+background:none;
+}
+
+QScrollBar::sub-line:horizontal{
+background:none;
+}
+
+QScrollBar:vertical{
+background:#484848;
+padding:0px;
+border-radius:6px;
+max-width:12px;
+}
+
+QScrollBar::handle:vertical{
+background:#242424;
+min-height:50px;
+border-radius:6px;
+}
+
+QScrollBar::handle:vertical:hover{
+background:#242424;
+}
+
+QScrollBar::handle:vertical:pressed{
+background:#242424;
+}
+
+QScrollBar::add-page:vertical{
+background:none;
+}
+
+QScrollBar::sub-page:vertical{
+background:none;
+}
+
+QScrollBar::add-line:vertical{
+background:none;
+}
+
+QScrollBar::sub-line:vertical{
+background:none;
+}
+
+QScrollArea{
+border:0px;
+}
+
+
+/* ===================== QTreeView======================== */
+QTreeView,QListView,QTableView,QTabWidget::pane{
+border:1px solid #242424;
+selection-background-color:#646464;
+selection-color:#000000;
+alternate-background-color:#525252;
+gridline-color:#242424;
+background:#444444;
+}
+
+/* QTreeView,QListView,QTableView,QSplitter::handle,QTreeView::branch{ */
+/* background:#444444; */
+/* } */
+
+QTableView::item:selected,QListView::item:selected,QTreeView::item:selected{
+color:#000000;
+background:qlineargradient(spread:pad,x1:0,y1:0,x2:0,y2:1,stop:0 #FFFFFF,stop:1 #FFFFFF);
+}
+
+QTableView::item:hover,QListView::item:hover,QTreeView::item:hover{
+color:#DCDCDC;
+background:qlineargradient(spread:pad,x1:0,y1:0,x2:0,y2:1,stop:0 #000000,stop:1 #000000);
+}
+
+QTableView::item,QListView::item,QTreeView::item{
+padding:1px;
+margin:0px;
+}
+
+QTreeView::branch:closed:has-children{
+margin:4px;
+/* border-image:url(D:\Personal\Desktop\QSS-Skin-Builder-master\other\qss\blue\branch_open.png);  */
+}
+
+QTreeView::branch:open:has-children{
+margin:4px;
+/* border-image:url(:/qss/psblack/branch_close.png);  */
+}
+
+
+/* ===================== QHeaderView======================== */
+QHeaderView::section,QTableCornerButton:section{
+padding:3px;
+margin:0px;
+color:#DCDCDC;
+border:1px solid #242424;
+border-left-width:0px;
+border-right-width:1px;
+border-top-width:0px;
+border-bottom-width:1px;
+background:qlineargradient(spread:pad,x1:0,y1:0,x2:0,y2:1,stop:0 #646464,stop:1 #525252);
+}
+/* ===================== QTabBar======================== */
+QTabBar::tab{
+border:1px solid #242424;
+color:#DCDCDC;
+margin:0px;
+background:qlineargradient(spread:pad,x1:0,y1:0,x2:0,y2:1,stop:0 #646464,stop:1 #525252);
+}
+
+QTabBar::tab:selected,QTabBar::tab:hover{
+border-style:solid;
+border-color:#00BB9E;
+background:qlineargradient(spread:pad,x1:0,y1:0,x2:0,y2:1,stop:0 #484848,stop:1 #383838);
+}
+
+QTabBar::tab:top,QTabBar::tab:bottom{
+padding:3px 8px 3px 8px;
+}
+
+QTabBar::tab:left,QTabBar::tab:right{
+padding:8px 3px 8px 3px;
+}
+
+QTabBar::tab:top:selected,QTabBar::tab:top:hover{
+border-width:2px 0px 0px 0px;
+}
+
+QTabBar::tab:right:selected,QTabBar::tab:right:hover{
+border-width:0px 0px 0px 2px;
+}
+
+QTabBar::tab:bottom:selected,QTabBar::tab:bottom:hover{
+border-width:0px 0px 2px 0px;
+}
+
+QTabBar::tab:left:selected,QTabBar::tab:left:hover{
+border-width:0px 2px 0px 0px;
+}
+
+QTabBar::tab:first:top:selected,QTabBar::tab:first:top:hover,QTabBar::tab:first:bottom:selected,QTabBar::tab:first:bottom:hover{
+border-left-width:1px;
+border-left-color:#242424;
+}
+
+QTabBar::tab:first:left:selected,QTabBar::tab:first:left:hover,QTabBar::tab:first:right:selected,QTabBar::tab:first:right:hover{
+border-top-width:1px;
+border-top-color:#242424;
+}
+
+QTabBar::tab:last:top:selected,QTabBar::tab:last:top:hover,QTabBar::tab:last:bottom:selected,QTabBar::tab:last:bottom:hover{
+border-right-width:1px;
+border-right-color:#242424;
+}
+
+QTabBar::tab:last:left:selected,QTabBar::tab:last:left:hover,QTabBar::tab:last:right:selected,QTabBar::tab:last:right:hover{
+border-bottom-width:1px;
+border-bottom-color:#242424;
+}
+
+QStatusBar::item{
+border:0px solid #484848;
+border-radius:3px;
+}
+/* ===================== QToolBox======================== */
+QToolBox::tab,QGroupBox#gboxDevicePanel,QGroupBox#gboxDeviceTitle,QFrame#gboxDevicePanel,QFrame#gboxDeviceTitle{
+dding:3px;
+border-radius:5px;
+color:#DCDCDC;
+background:qlineargradient(spread:pad,x1:0,y1:0,x2:0,y2:1,stop:0 #484848,stop:1 #383838);
+}
+
+QToolTip{
+border:0px solid #DCDCDC;
+padding:1px;
+color:#FFFFFF;
+background:qlineargradient(spread:pad,x1:0,y1:0,x2:0,y2:1,stop:0 #484848,stop:1 #383838);
+}
+
+QToolBox::tab:selected{
+background:qlineargradient(spread:pad,x1:0,y1:0,x2:0,y2:1,stop:0 #646464,stop:1 #525252);
+} 
+/* ============================================= */
+QPrintPreviewDialog QToolButton{
+border:0px solid #DCDCDC;
+border-radius:0px;
+margin:0px;
+padding:3px;
+background:none;
+}
+
+QColorDialog QPushButton,QFileDialog QPushButton{
+min-width:80px;
+}
+/* ============= QToolButton==================== */
+QToolButton#qt_calendar_prevmonth{
+icon-size:0px;
+min-width:20px;
+/* image:url(:/qss/psblack/calendar_prevmonth.png); */
+}
+
+QToolButton#qt_calendar_nextmonth{
+icon-size:0px;
+min-width:20px;
+/* image:url(:/qss/psblack/calendar_nextmonth.png); */
+}
+
+QToolButton#qt_calendar_prevmonth,QToolButton#qt_calendar_nextmonth,QToolButton#qt_calendar_monthbutton,QToolButton#qt_calendar_yearbutton{
+border:0px solid #DCDCDC;
+border-radius:3px;
+margin:3px 3px 3px 3px;
+padding:3px;
+background:none;
+}
+
+QToolButton#qt_calendar_prevmonth:hover,QToolButton#qt_calendar_nextmonth:hover,QToolButton#qt_calendar_monthbutton:hover,QToolButton#qt_calendar_yearbutton:hover,QToolButton#qt_calendar_prevmonth:pressed,QToolButton#qt_calendar_nextmonth:pressed,QToolButton#qt_calendar_monthbutton:pressed,QToolButton#qt_calendar_yearbutton:pressed{
+border:1px solid #242424;
+}
+/* ============= QCalendarWidget==================== */
+QCalendarWidget QSpinBox#qt_calendar_yearedit{
+margin:2px;
+}
+
+QCalendarWidget QToolButton::menu-indicator{
+image:None;
+}
+
+QCalendarWidget QTableView{
+border-width:0px;
+}
+
+QCalendarWidget QWidget#qt_calendar_navigationbar{
+border:1px solid #242424;
+border-width:1px 1px 0px 1px;
+background:qlineargradient(spread:pad,x1:0,y1:0,x2:0,y2:1,stop:0 #484848,stop:1 #383838);
+}
+
+QComboBox QAbstractItemView::item{
+min-height:20px;
+min-width:10px;
+}
+
+QTableView::item{
+padding:0px;
+margin:0px;
+}
+
+QTableView QLineEdit,QTableView QComboBox,QTableView QSpinBox,QTableView QDoubleSpinBox,QTableView QDateEdit,QTableView QTimeEdit,QTableView QDateTimeEdit{
+border-width:0px;
+border-radius:0px;
+}
+
+QTableView QLineEdit:focus,QTableView QComboBox:focus,QTableView QSpinBox:focus,QTableView QDoubleSpinBox:focus,QTableView QDateEdit:focus,QTableView QTimeEdit:focus,QTableView QDateTimeEdit:focus{
+border-width:0px;
+border-radius:0px;
+}
+
+QLineEdit,QTextEdit,QPlainTextEdit,QSpinBox,QDoubleSpinBox,QComboBox,QDateEdit,QTimeEdit,QDateTimeEdit{
+background:#444444;
+}
+
+/* *:disabled{ */
+/* background:#444444; */
+/* border-color:#484848; */
+/* } */
+
+/* TextColor:#DCDCDC */
+/* PanelColor:#444444 */
+/* BorderColor:#242424 */
+/* NormalColorStart:#484848 */
+/* NormalColorEnd:#383838 */
+/* DarkColorStart:#646464 */
+/* DarkColorEnd:#525252 */
+/* HighColor:#00BB9E */
--- a/Utilities/__init__.py	Thu Jan 18 11:10:57 2018 +0100
+++ b/Utilities/__init__.py	Thu Jan 18 18:57:40 2018 +0100
@@ -81,11 +81,11 @@
 configDir = None
 
 codingBytes_regexps = [
-    (2, re.compile(br'''coding[:=]\s*([-\w_.]+)''')),
+    (5, re.compile(br'''coding[:=]\s*([-\w_.]+)''')),
     (1, re.compile(br'''<\?xml.*\bencoding\s*=\s*['"]([-\w_.]+)['"]\?>''')),
 ]
 coding_regexps = [
-    (2, re.compile(r'''coding[:=]\s*([-\w_.]+)''')),
+    (5, re.compile(r'''coding[:=]\s*([-\w_.]+)''')),
     (1, re.compile(r'''<\?xml.*\bencoding\s*=\s*['"]([-\w_.]+)['"]\?>''')),
 ]
 
@@ -1844,12 +1844,12 @@
             pm = app.getObject("PluginManager")
             versions = {}
             for info in pm.getPluginInfos():
-                versions[info[0]] = info[2]
+                versions[info["module_name"]] = info["version"]
             
             infoStr = "Plugins Version Numbers:{0}".format(linesep)
-            for pluginName in sorted(versions.keys()):
+            for pluginModuleName in sorted(versions.keys()):
                 infoStr += "  {0} {1}{2}".format(
-                           pluginName, versions[pluginName], linesep)
+                    pluginModuleName, versions[pluginModuleName], linesep)
         except KeyError:
             pass
     
--- a/ViewManager/ViewManager.py	Thu Jan 18 11:10:57 2018 +0100
+++ b/ViewManager/ViewManager.py	Thu Jan 18 18:57:40 2018 +0100
@@ -11,7 +11,7 @@
 
 import os
 
-from PyQt5.QtCore import pyqtSignal, QSignalMapper, QTimer, \
+from PyQt5.QtCore import pyqtSignal, pyqtSlot, QSignalMapper, QTimer, \
     QFileInfo, QRegExp, Qt, QCoreApplication
 from PyQt5.QtGui import QColor, QKeySequence, QPalette, QPixmap
 from PyQt5.QtWidgets import QLineEdit, QToolBar, QWidgetAction, QDialog, \
@@ -383,15 +383,22 @@
         """
         raise RuntimeError('Not implemented')
         
-    def _addView(self, win, fn=None, noName="", addNext=False):
+    def _addView(self, win, fn=None, noName="", addNext=False, indexes=None):
         """
         Protected method to add a view (i.e. window).
         
         @param win editor assembly to be added
+        @type EditorAssembly
         @param fn filename of this editor
-        @param noName name to be used for an unnamed editor (string)
+        @type str
+        @param noName name to be used for an unnamed editor
+        @type str
         @param addNext flag indicating to add the view next to the current
-            view (bool)
+            view
+        @type bool
+        @param indexes of the editor, first the split view index, second the
+            index within the view
+        @type tuple of two int
         @exception RuntimeError Not implemented
         """
         raise RuntimeError('Not implemented')
@@ -471,14 +478,38 @@
         """
         pass
         
-    def removeSplit(self):
-        """
-        Public method used to remove the current split view.
-        
-        @return Flag indicating successful deletion
+    @pyqtSlot()
+    def removeSplit(self, index=-1):
+        """
+        Public method used to remove the current split view or a split view
+        by index.
+        
+        @param index index of the split to be removed (-1 means to
+            delete the current split)
+        @type int
+        @return flag indicating successful deletion
+        @rtype bool
         """
         return False
         
+    def splitCount(self):
+        """
+        Public method to get the number of split views.
+        
+        @return number of split views
+        @rtype int
+        """
+        return 0
+        
+    def setSplitCount(self, count):
+        """
+        Public method to set the number of split views.
+        
+        @param count number of split views
+        @type int
+        """
+        pass
+        
     def getSplitOrientation(self):
         """
         Public method to get the orientation of the split view.
@@ -4537,24 +4568,37 @@
         self.__setSbFile()
         
     def openSourceFile(self, fn, lineno=-1, filetype="",
-                       selStart=0, selEnd=0, pos=0, addNext=False):
+                       selStart=0, selEnd=0, pos=0, addNext=False,
+                       indexes=None):
         """
         Public slot to display a file in an editor.
         
-        @param fn name of file to be opened (string)
-        @param lineno line number to place the cursor at (integer) or
-            list of line numbers (list of integers) (cursor will be
-            placed at the next line greater than the current one)
-        @param filetype type of the source file (string)
-        @param selStart start of an area to be selected (integer)
-        @param selEnd end of an area to be selected (integer)
-        @param pos position within the line to place the cursor at (integer)
+        @param fn name of file to be opened
+        @type str
+        @param lineno line number to place the cursor at or list of line
+            numbers (cursor will be placed at the next line greater than
+            the current one)
+        @type int or list of int
+        @param filetype type of the source file
+        @type str
+        @param selStart start of an area to be selected
+        @type int
+        @param selEnd end of an area to be selected
+        @type int
+        @param pos position within the line to place the cursor at
+        @type int
         @param addNext flag indicating to add the file next to the current
-            editor (bool)
+            editor
+        @type bool
+        @param indexes of the editor, first the split view index, second the
+            index within the view
+        @type tuple of two int
+        @return reference to the opened editor
+        @rtype Editor
         """
         try:
             newWin, editor = self.getEditor(fn, filetype=filetype,
-                                            addNext=addNext)
+                                            addNext=addNext, indexes=indexes)
         except (IOError, UnicodeDecodeError):
             return
         
@@ -4588,6 +4632,8 @@
         # insert filename into list of recently opened files
         self.addToRecentList(fn)
         
+        return editor
+        
     def __connectEditor(self, editor):
         """
         Private method to establish all editor connections.
@@ -4623,19 +4669,29 @@
             lambda: self.editorLanguageChanged.emit(editor))
         editor.textChanged.connect(lambda: self.editorTextChanged.emit(editor))
 
-    def newEditorView(self, fn, caller, filetype=""):
+    def newEditorView(self, fn, caller, filetype="", indexes=None):
         """
         Public method to create a new editor displaying the given document.
         
         @param fn filename of this view
+        @type str
         @param caller reference to the editor calling this method
-        @param filetype type of the source file (string)
+        @type Editor
+        @param filetype type of the source file
+        @type str
+        @param indexes of the editor, first the split view index, second the
+            index within the view
+        @type tuple of two int
+        @return reference to the new editor object
+        @rtype Editor
         """
         editor, assembly = self.cloneEditor(caller, filetype, fn)
         
-        self._addView(assembly, fn, caller.getNoName())
+        self._addView(assembly, fn, caller.getNoName(), indexes=indexes)
         self._modificationStatusChanged(editor.isModified(), editor)
         self._checkActions(editor)
+        
+        return editor
 
     def cloneEditor(self, caller, filetype, fn):
         """
@@ -4839,7 +4895,7 @@
         
         return filenames
         
-    def getEditor(self, fn, filetype="", addNext=False):
+    def getEditor(self, fn, filetype="", addNext=False, indexes=None):
         """
         Public method to return the editor displaying the given file.
         
@@ -4847,11 +4903,18 @@
         created.
         
         @param fn filename to look for
-        @param filetype type of the source file (string)
+        @type str
+        @param filetype type of the source file
+        @type str
         @param addNext flag indicating that if a new editor needs to be
-            created, it should be added next to the current editor (bool)
+            created, it should be added next to the current editor
+        @type bool
+        @param indexes of the editor, first the split view index, second the
+            index within the view
+        @type tuple of two int
         @return tuple of two values giving a flag indicating a new window
             creation and a reference to the editor displaying this file
+        @rtype tuple of (bool, Editor)
         """
         newWin = False
         editor = self.activeWindow()
@@ -4873,7 +4936,7 @@
                 newWin = True
         
         if newWin:
-            self._addView(assembly, fn, addNext=addNext)
+            self._addView(assembly, fn, addNext=addNext, indexes=indexes)
         else:
             self._showView(editor.parent(), fn)
         
@@ -4923,6 +4986,20 @@
                 count += 1
         return count
         
+    def getOpenEditorsForSession(self):
+        """
+        Public method to get a lists of all open editors.
+        
+        The returned list contains one list per split view. If the view manager
+        cannot split the view, only one list of editors is returned.
+        
+        Note: This method should be implemented by subclasses.
+        
+        @return list of list of editor references
+        @rtype list of list of Editor
+        """
+        return [self.editors]
+        
     def getActiveName(self):
         """
         Public method to retrieve the filename of the active window.
--- a/WebBrowser/Download/DownloadItem.py	Thu Jan 18 11:10:57 2018 +0100
+++ b/WebBrowser/Download/DownloadItem.py	Thu Jan 18 18:57:40 2018 +0100
@@ -64,10 +64,15 @@
         
         self.progressBar.setMaximum(0)
         
+        self.pauseButton.setIcon(UI.PixmapCache.getIcon("pause.png"))
         self.stopButton.setIcon(UI.PixmapCache.getIcon("stopLoading.png"))
         self.openButton.setIcon(UI.PixmapCache.getIcon("open.png"))
         self.openButton.setEnabled(False)
         self.openButton.setVisible(False)
+        if not hasattr(QWebEngineDownloadItem, "pause"):
+            # pause/resume was defined in Qt 5.10.0 / PyQt 5.10.0
+            self.pauseButton.setEnabled(False)
+            self.pauseButton.setVisible(False)
         
         self.__state = DownloadItem.Downloading
         
@@ -314,13 +319,18 @@
             name += '.' + endName
         return name, origName
     
-    def __open(self):
-        """
-        Private slot to open the downloaded file.
+    @pyqtSlot(bool)
+    def on_pauseButton_clicked(self, checked):
         """
-        info = QFileInfo(self.__fileName)
-        url = QUrl.fromLocalFile(info.absoluteFilePath())
-        QDesktopServices.openUrl(url)
+        Private slot to pause the download.
+        
+        @param checked flag indicating the state of the button
+        @type bool
+        """
+        if checked:
+            self.__downloadItem.pause()
+        else:
+            self.__downloadItem.resume()
     
     @pyqtSlot()
     def on_stopButton_clicked(self):
@@ -338,6 +348,8 @@
         self.stopButton.setVisible(False)
         self.openButton.setEnabled(False)
         self.openButton.setVisible(False)
+        self.pauseButton.setEnabled(False)
+        self.pauseButton.setVisible(False)
         self.setUpdatesEnabled(True)
         self.__state = DownloadItem.DownloadCancelled
         self.__downloadItem.cancel()
@@ -508,6 +520,8 @@
                    QWebEngineDownloadItem.DownloadCompleted)
         
         self.progressBar.setVisible(False)
+        self.pauseButton.setEnabled(False)
+        self.pauseButton.setVisible(False)
         self.stopButton.setEnabled(False)
         self.stopButton.setVisible(False)
         self.openButton.setEnabled(noError)
@@ -522,7 +536,7 @@
         self.downloadFinished.emit()
         
         if self.__autoOpen:
-            self.__open()
+            self.openFile()
     
     def canceledFileSelect(self):
         """
@@ -560,41 +574,49 @@
         """
         Public method to get the relevant download data.
         
-        @return tuple of URL, save location, flag, the
-            URL of the related web page and the date and time
-            of the download
-        @rtype tuple of (QUrl, str, bool, QUrl, QDateTime)
+        @return dictionary containing the URL, save location, done flag,
+            the URL of the related web page and the date and time of the
+            download
+        @rtype dict of {"URL": QUrl, "Location": str, "Done": bool,
+            "PageURL": QUrl, "Downloaded": QDateTime}
         """
-        return (self.__url, QFileInfo(self.__fileName).filePath(),
-                self.downloadedSuccessfully(), self.__pageUrl,
-                self.__downloadedDateTime)
+        return {
+            "URL": self.__url,
+            "Location": QFileInfo(self.__fileName).filePath(),
+            "Done": self.downloadedSuccessfully(),
+            "PageURL": self.__pageUrl,
+            "Downloaded": self.__downloadedDateTime
+        }
     
     def setData(self, data):
         """
         Public method to set the relevant download data.
         
-        @param data tuple of URL, save location, flag, the
-            URL of the related web page and the date and time
-            of the download
-        @type QUrl, str, bool, QUrl, QDateTime
+        @param data dictionary containing the URL, save location, done flag,
+            the URL of the related web page and the date and time of the
+            download
+        @type dict of {"URL": QUrl, "Location": str, "Done": bool,
+            "PageURL": QUrl, "Downloaded": QDateTime}
         """
-        self.__url = data[0]
-        self.__fileName = data[1]
-        self.__pageUrl = data[3]
+        self.__url = data["URL"]
+        self.__fileName = data["Location"]
+        self.__pageUrl = data["PageURL"]
         
         self.filenameLabel.setText(QFileInfo(self.__fileName).fileName())
         self.infoLabel.setText(self.__fileName)
         
-        if len(data) == 5:
-            self.__setDateTime(data[4])
-        else:
+        try:
+            self.__setDateTime(data["Downloaded"])
+        except KeyError:
             self.__setDateTime(QDateTime())
         
+        self.pauseButton.setEnabled(False)
+        self.pauseButton.setVisible(False)
         self.stopButton.setEnabled(False)
         self.stopButton.setVisible(False)
-        self.openButton.setEnabled(data[2])
-        self.openButton.setVisible(data[2])
-        if data[2]:
+        self.openButton.setEnabled(data["Done"])
+        self.openButton.setVisible(data["Done"])
+        if data["Done"]:
             self.__state = DownloadItem.DownloadSuccessful
         else:
             self.__state = DownloadItem.DownloadCancelled
--- a/WebBrowser/Download/DownloadItem.ui	Thu Jan 18 11:10:57 2018 +0100
+++ b/WebBrowser/Download/DownloadItem.ui	Thu Jan 18 18:57:40 2018 +0100
@@ -7,7 +7,7 @@
     <x>0</x>
     <y>0</y>
     <width>397</width>
-    <height>104</height>
+    <height>93</height>
    </rect>
   </property>
   <property name="sizePolicy">
@@ -20,17 +20,20 @@
    <string/>
   </property>
   <layout class="QHBoxLayout" name="horizontalLayout">
+   <property name="spacing">
+    <number>3</number>
+   </property>
    <property name="leftMargin">
-    <number>2</number>
+    <number>1</number>
    </property>
    <property name="topMargin">
-    <number>2</number>
+    <number>1</number>
    </property>
    <property name="rightMargin">
-    <number>2</number>
+    <number>1</number>
    </property>
    <property name="bottomMargin">
-    <number>2</number>
+    <number>1</number>
    </property>
    <item>
     <widget class="QLabel" name="fileIcon">
@@ -41,6 +44,9 @@
    </item>
    <item>
     <layout class="QVBoxLayout" name="verticalLayout">
+     <property name="spacing">
+      <number>3</number>
+     </property>
      <item>
       <widget class="QLabel" name="datetimeLabel">
        <property name="text">
@@ -98,6 +104,19 @@
     </layout>
    </item>
    <item>
+    <widget class="QToolButton" name="pauseButton">
+     <property name="toolTip">
+      <string>Press to pause the download</string>
+     </property>
+     <property name="text">
+      <string/>
+     </property>
+     <property name="checkable">
+      <bool>true</bool>
+     </property>
+    </widget>
+   </item>
+   <item>
     <widget class="QToolButton" name="stopButton">
      <property name="toolTip">
       <string>Press to cancel the download</string>
@@ -120,6 +139,7 @@
   </layout>
  </widget>
  <tabstops>
+  <tabstop>pauseButton</tabstop>
   <tabstop>stopButton</tabstop>
   <tabstop>openButton</tabstop>
  </tabstops>
--- a/WebBrowser/Download/DownloadManager.py	Thu Jan 18 11:10:57 2018 +0100
+++ b/WebBrowser/Download/DownloadManager.py	Thu Jan 18 18:57:40 2018 +0100
@@ -125,8 +125,7 @@
         """
         Public method to stop the download manager.
         """
-        self.__saveTimer.changeOccurred()
-        self.__saveTimer.saveIfNeccessary()
+        self.save()
         self.close()
     
     def activeDownloads(self):
@@ -174,23 +173,26 @@
             return
         
         # Safe Browsing
-        threatLists = WebBrowserWindow.safeBrowsingManager().lookupUrl(url)
-        if threatLists:
-            threatMessages = WebBrowserWindow.safeBrowsingManager()\
-                .getThreatMessages(threatLists)
-            res = E5MessageBox.warning(
-                WebBrowserWindow.getWindow(),
-                self.tr("Suspicuous URL detected"),
-                self.tr("<p>The URL <b>{0}</b> was found in the Safe Browsing"
-                        " database.</p>{1}").format(url.toString(),
-                                                    "".join(threatMessages)),
-                E5MessageBox.StandardButtons(
-                    E5MessageBox.Abort |
-                    E5MessageBox.Ignore),
-                E5MessageBox.Abort)
-            if res == E5MessageBox.Abort:
-                downloadItem.cancel()
-                return
+        from WebBrowser.SafeBrowsing.SafeBrowsingManager import \
+            SafeBrowsingManager
+        if SafeBrowsingManager.isEnabled():
+            threatLists = WebBrowserWindow.safeBrowsingManager().lookupUrl(url)
+            if threatLists:
+                threatMessages = WebBrowserWindow.safeBrowsingManager()\
+                    .getThreatMessages(threatLists)
+                res = E5MessageBox.warning(
+                    WebBrowserWindow.getWindow(),
+                    self.tr("Suspicuous URL detected"),
+                    self.tr("<p>The URL <b>{0}</b> was found in the Safe"
+                            " Browsing database.</p>{1}").format(
+                        url.toString(), "".join(threatMessages)),
+                    E5MessageBox.StandardButtons(
+                        E5MessageBox.Abort |
+                        E5MessageBox.Ignore),
+                    E5MessageBox.Abort)
+                if res == E5MessageBox.Abort:
+                    downloadItem.cancel()
+                    return
         
         from .DownloadItem import DownloadItem
         itm = DownloadItem(downloadItem, parent=self)
@@ -339,20 +341,31 @@
         pos = Preferences.getWebBrowser("DownloadManagerPosition")
         self.move(pos)
         
-        downloads = Preferences.getWebBrowser("DownloadManagerDownloads")
-        for download in downloads:
-            if not download[0].isEmpty() and \
-               download[1] != "":
-                from .DownloadItem import DownloadItem
-                itm = DownloadItem(parent=self)
-                itm.setData(download)
-                self.__addItem(itm, append=True)
-        self.cleanupButton.setEnabled(
-            (len(self.__downloads) - self.activeDownloads()) > 0)
+        from WebBrowser.WebBrowserWindow import WebBrowserWindow
+        if not WebBrowserWindow.isPrivate():
+            downloads = Preferences.getWebBrowser("DownloadManagerDownloads")
+            for download in downloads:
+                if not download["URL"].isEmpty() and \
+                   bool(download["Location"]):
+                    from .DownloadItem import DownloadItem
+                    itm = DownloadItem(parent=self)
+                    itm.setData(download)
+                    self.__addItem(itm, append=True)
+            self.cleanupButton.setEnabled(
+                (len(self.__downloads) - self.activeDownloads()) > 0)
         
         self.__loaded = True
         self.__updateActiveItemCount()
     
+    def closeEvent(self, evt):
+        """
+        Protected event handler for the close event.
+        
+        @param evt reference to the close event
+        @type QCloseEvent
+        """
+        self.save()
+    
     def cleanup(self):
         """
         Public slot to cleanup the downloads.
--- a/WebBrowser/Download/DownloadManager.ui	Thu Jan 18 11:10:57 2018 +0100
+++ b/WebBrowser/Download/DownloadManager.ui	Thu Jan 18 18:57:40 2018 +0100
@@ -6,8 +6,8 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>400</width>
-    <height>300</height>
+    <width>600</width>
+    <height>400</height>
    </rect>
   </property>
   <property name="windowTitle">
--- a/WebBrowser/FeaturePermissions/FeaturePermissionBar.py	Thu Jan 18 11:10:57 2018 +0100
+++ b/WebBrowser/FeaturePermissions/FeaturePermissionBar.py	Thu Jan 18 18:57:40 2018 +0100
@@ -56,6 +56,18 @@
             QWebEnginePage.MouseLock:
                 self.tr("{0} wants to lock your mouse."),
         }
+        try:
+            # these are defined as of Qt 5.10.0/PyQt 5.10.0
+            self.__permissionFeatureTexts.update({
+                QWebEnginePage.DesktopVideoCapture:
+                    self.tr("{0} wants to capture video of your screen."),
+                QWebEnginePage.DesktopAudioVideoCapture:
+                    self.tr("{0} wants to capture audio and video of your"
+                            " screen."),
+            })
+        except AttributeError:
+            pass
+        
         self.__permissionFeatureIconNames = {
             QWebEnginePage.Geolocation: "geolocation.png",
             QWebEnginePage.MediaAudioCapture: "audiocapture.png",
@@ -63,6 +75,15 @@
             QWebEnginePage.MediaAudioVideoCapture: "audio-video.png",
             QWebEnginePage.MouseLock: "mouse.png",
         }
+        try:
+            # these are defined as of Qt 5.10.0/PyQt 5.10.0
+            self.__permissionFeatureIconNames.update({
+                QWebEnginePage.DesktopVideoCapture: "desktopVideoCapture.png",
+                QWebEnginePage.DesktopAudioVideoCapture:
+                    "desktopAudioVideoCapture.png",
+            })
+        except AttributeError:
+            pass
         
         self.setAutoFillBackground(True)
         self.__layout = QHBoxLayout()
--- a/WebBrowser/FeaturePermissions/FeaturePermissionManager.py	Thu Jan 18 11:10:57 2018 +0100
+++ b/WebBrowser/FeaturePermissions/FeaturePermissionManager.py	Thu Jan 18 18:57:40 2018 +0100
@@ -54,6 +54,21 @@
                 QWebEnginePage.PermissionDeniedByUser: [],
             },
         }
+        try:
+            # these are defined as of Qt 5.10.0/PyQt 5.10.0
+            self.__featurePermissions.update({
+                QWebEnginePage.DesktopVideoCapture: {
+                    QWebEnginePage.PermissionGrantedByUser: [],
+                    QWebEnginePage.PermissionDeniedByUser: [],
+                },
+                QWebEnginePage.DesktopAudioVideoCapture: {
+                    QWebEnginePage.PermissionGrantedByUser: [],
+                    QWebEnginePage.PermissionDeniedByUser: [],
+                },
+            })
+        except AttributeError:
+            pass
+        
         self.__featurePermissionsKeys = {
             (QWebEnginePage.Geolocation,
              QWebEnginePage.PermissionGrantedByUser):
@@ -86,6 +101,24 @@
              QWebEnginePage.PermissionDeniedByUser):
             "MouseLockDenied",
         }
+        try:
+            # these are defined as of Qt 5.10.0/PyQt 5.10.0
+            self.__featurePermissionsKeys.update({
+                (QWebEnginePage.DesktopVideoCapture,
+                 QWebEnginePage.PermissionGrantedByUser):
+                "DesktopVideoCaptureGranted",
+                (QWebEnginePage.DesktopVideoCapture,
+                 QWebEnginePage.PermissionDeniedByUser):
+                "DesktopVideoCaptureDenied",
+                (QWebEnginePage.DesktopAudioVideoCapture,
+                 QWebEnginePage.PermissionGrantedByUser):
+                "DesktopAudioVideoCaptureGranted",
+                (QWebEnginePage.DesktopAudioVideoCapture,
+                 QWebEnginePage.PermissionDeniedByUser):
+                "DesktopAudioVideoCaptureDenied",
+            })
+        except AttributeError:
+            pass
         
         self.__loaded = False
 
--- a/WebBrowser/FeaturePermissions/FeaturePermissionsDialog.py	Thu Jan 18 11:10:57 2018 +0100
+++ b/WebBrowser/FeaturePermissions/FeaturePermissionsDialog.py	Thu Jan 18 18:57:40 2018 +0100
@@ -114,12 +114,51 @@
             UI.PixmapCache.getIcon("mouse.png"),
             self.tr("Mouse Lock"))
         
+        if hasattr(QWebEnginePage, "DesktopVideoCapture"):
+            # these are shown as of Qt 5.10.0/PyQt 5.10.0
+            self.deskVidList = QTreeWidget()
+            self.deskVidList.setAlternatingRowColors(True)
+            self.deskVidList.setSelectionMode(
+                QAbstractItemView.ExtendedSelection)
+            self.deskVidList.setRootIsDecorated(False)
+            self.deskVidList.setItemsExpandable(False)
+            self.deskVidList.setAllColumnsShowFocus(True)
+            self.deskVidList.setObjectName("deskVidList")
+            self.deskVidList.setSortingEnabled(True)
+            self.deskVidList.headerItem().setText(0, self.tr("Host"))
+            self.deskVidList.headerItem().setText(1, self.tr("Permission"))
+            self.tabWidget.addTab(
+                self.deskVidList,
+                UI.PixmapCache.getIcon("desktopVideoCapture.png"),
+                self.tr("Desktop Video"))
+            
+            self.deskAudVidList = QTreeWidget()
+            self.deskAudVidList.setAlternatingRowColors(True)
+            self.deskAudVidList.setSelectionMode(
+                QAbstractItemView.ExtendedSelection)
+            self.deskAudVidList.setRootIsDecorated(False)
+            self.deskAudVidList.setItemsExpandable(False)
+            self.deskAudVidList.setAllColumnsShowFocus(True)
+            self.deskAudVidList.setObjectName("deskAudVidList")
+            self.deskAudVidList.setSortingEnabled(True)
+            self.deskAudVidList.headerItem().setText(0, self.tr("Host"))
+            self.deskAudVidList.headerItem().setText(1, self.tr("Permission"))
+            self.tabWidget.addTab(
+                self.deskAudVidList,
+                UI.PixmapCache.getIcon("desktopAudioVideoCapture.png"),
+                self.tr("Desktop Audio && Video"))
+        
         self.setTabOrder(self.tabWidget, self.geoList)
         self.setTabOrder(self.geoList, self.micList)
         self.setTabOrder(self.micList, self.camList)
         self.setTabOrder(self.camList, self.micCamList)
         self.setTabOrder(self.micCamList, self.mouseLockList)
-        self.setTabOrder(self.mouseLockList, self.removeButton)
+        if hasattr(QWebEnginePage, "DesktopVideoCapture"):
+            self.setTabOrder(self.mouseLockList, self.deskVidList)
+            self.setTabOrder(self.deskVidList, self.deskAudVidList)
+            self.setTabOrder(self.deskAudVidList, self.removeButton)
+        else:
+            self.setTabOrder(self.mouseLockList, self.removeButton)
         self.setTabOrder(self.removeButton, self.removeAllButton)
         
         self.__permissionStrings = {
@@ -134,6 +173,11 @@
             QWebEnginePage.MediaAudioVideoCapture: self.micCamList,
             QWebEnginePage.MouseLock: self.mouseLockList,
         }
+        if hasattr(QWebEnginePage, "DesktopVideoCapture"):
+            self.__permissionsLists.update({
+                QWebEnginePage.DesktopVideoCapture: self.deskVidList,
+                QWebEnginePage.DesktopAudioVideoCapture: self.deskAudVidList,
+            })
         
         for feature, permissionsList in self.__permissionsLists.items():
             for permission in featurePermissions[feature]:
--- a/WebBrowser/SafeBrowsing/SafeBrowsingManager.py	Thu Jan 18 11:10:57 2018 +0100
+++ b/WebBrowser/SafeBrowsing/SafeBrowsingManager.py	Thu Jan 18 18:57:40 2018 +0100
@@ -44,6 +44,11 @@
     progressMessage = pyqtSignal(str, int)
     progress = pyqtSignal(int)
     
+    enabled = (
+        Preferences.getWebBrowser("SafeBrowsingEnabled") and
+        bool(Preferences.getWebBrowser("SafeBrowsingApiKey"))
+    )
+    
     def __init__(self):
         """
         Constructor
@@ -57,10 +62,6 @@
         else:
             self.__apiClient = None
         
-        self.__enabled = (
-            Preferences.getWebBrowser("SafeBrowsingEnabled") and
-            bool(self.__apiKey))
-        
         gsbCachePath = os.path.join(
             Utilities.getConfigDir(), "web_browser", "safe_browsing")
         self.__cache = SafeBrowsingCache(gsbCachePath, self)
@@ -89,7 +90,7 @@
                     self.__apiClient = SafeBrowsingAPIClient(self.__apiKey,
                                                              parent=self)
         
-        self.__enabled = (
+        SafeBrowsingManager.enabled = (
             Preferences.getWebBrowser("SafeBrowsingEnabled") and
             bool(self.__apiKey))
         
@@ -111,14 +112,15 @@
                 platform = "linux"
             self.__platforms = SafeBrowsingAPIClient.getPlatformTypes(platform)
     
-    def isEnabled(self):
+    @classmethod
+    def isEnabled(cls):
         """
-        Public method to check, if safe browsing is enabled.
+        Class method to check, if safe browsing is enabled.
         
         @return flag indicating the enabled state
         @rtype bool
         """
-        return self.__enabled
+        return cls.enabled
     
     def close(self):
         """
@@ -133,7 +135,7 @@
         @return flag indicating expiration
         @rtype bool
         """
-        return self.__enabled and self.__apiClient.fairUseDelayExpired()
+        return self.isEnabled() and self.__apiClient.fairUseDelayExpired()
     
     def __showNotificationMessage(self, message, timeout=5):
         """
@@ -168,7 +170,7 @@
         Private method to set auto update for the threat lists.
         """
         autoUpdateEnabled = Preferences.getWebBrowser("SafeBrowsingAutoUpdate")
-        if autoUpdateEnabled and self.__enabled:
+        if autoUpdateEnabled and self.isEnabled():
             nextUpdateDateTime = Preferences.getWebBrowser(
                 "SafeBrowsingUpdateDateTime")
             if nextUpdateDateTime.isValid():
@@ -193,7 +195,7 @@
         Private slot to perform the auto update of the threat lists.
         """
         ok = False
-        if self.__enabled:
+        if self.isEnabled():
             self.__showNotificationMessage(
                 self.tr("Updating threat lists..."), 0)
             ok = self.updateHashPrefixCache()[0]
@@ -224,7 +226,7 @@
         @return flag indicating success and an error message
         @rtype tuple of (bool, str)
         """
-        if not self.__enabled:
+        if not self.isEnabled():
             return False, self.tr("Safe Browsing is disabled.")
         
         if not self.__apiClient.fairUseDelayExpired():
@@ -369,7 +371,7 @@
         @rtype list of ThreatList
         @exception ValueError raised for an invalid URL
         """
-        if self.__enabled:
+        if self.isEnabled():
             if isinstance(url, QUrl):
                 urlStr = url.toString().strip()
             else:
--- a/WebBrowser/WebBrowserPage.py	Thu Jan 18 11:10:57 2018 +0100
+++ b/WebBrowser/WebBrowserPage.py	Thu Jan 18 18:57:40 2018 +0100
@@ -110,8 +110,11 @@
         
         # Safe Browsing
         self.__badSite = False
-        if url.scheme() not in \
-           WebBrowserWindow.safeBrowsingManager().getIgnoreSchemes():
+        from WebBrowser.SafeBrowsing.SafeBrowsingManager import \
+            SafeBrowsingManager
+        if SafeBrowsingManager.isEnabled() and \
+            url.scheme() not in \
+                SafeBrowsingManager.getIgnoreSchemes():
             threatLists = WebBrowserWindow.safeBrowsingManager().lookupUrl(url)
             if threatLists:
                 threatMessages = WebBrowserWindow.safeBrowsingManager()\
--- a/WebBrowser/WebBrowserView.py	Thu Jan 18 11:10:57 2018 +0100
+++ b/WebBrowser/WebBrowserView.py	Thu Jan 18 18:57:40 2018 +0100
@@ -1329,14 +1329,14 @@
         if evt.modifiers() & Qt.ControlModifier:
             if delta < 0:
                 self.zoomOut()
-            else:
+            elif delta > 0:
                 self.zoomIn()
             evt.accept()
         
         elif evt.modifiers() & Qt.ShiftModifier:
             if delta < 0:
                 self.backward()
-            else:
+            elif delta > 0:
                 self.forward()
             evt.accept()
     
--- a/WebBrowser/WebBrowserWindow.py	Thu Jan 18 11:10:57 2018 +0100
+++ b/WebBrowser/WebBrowserWindow.py	Thu Jan 18 18:57:40 2018 +0100
@@ -458,11 +458,6 @@
             
             self.flashCookieManager()
             
-            if WebBrowserWindow._useQtHelp:
-                QTimer.singleShot(0, self.__lookForNewDocumentation)
-                if self.__searchWord is not None:
-                    QTimer.singleShot(0, self.__searchForWord)
-            
             e5App().focusChanged.connect(self.__appFocusChanged)
             
             self.__toolbarStates = self.saveState()
@@ -481,6 +476,11 @@
             self.sessionManager().activateTimer()
             
             QTimer.singleShot(0, syncMgr.loadSettings)
+            
+            if WebBrowserWindow._useQtHelp:
+                QTimer.singleShot(50, self.__lookForNewDocumentation)
+                if self.__searchWord is not None:
+                    QTimer.singleShot(0, self.__searchForWord)
     
     def __del__(self):
         """
@@ -644,6 +644,26 @@
                 Preferences.getWebBrowser("AllowRunningInsecureContent"))
         except (AttributeError, KeyError):
             pass
+        
+        try:
+            # Qt 5.9
+            settings.setAttribute(
+                QWebEngineSettings.AllowGeolocationOnInsecureOrigins,
+                Preferences.getWebBrowser("AllowGeolocationOnInsecureOrigins"))
+        except (AttributeError, KeyError):
+            pass
+        
+        try:
+            # Qt 5.10
+            settings.setAttribute(
+                QWebEngineSettings.AllowWindowActivationFromJavaScript,
+                Preferences.getWebBrowser(
+                    "AllowWindowActivationFromJavaScript"))
+            settings.setAttribute(
+                QWebEngineSettings.ShowScrollBars,
+                Preferences.getWebBrowser("ShowScrollBars"))
+        except (AttributeError, KeyError):
+            pass
     
     def __initActions(self):
         """
@@ -2873,7 +2893,7 @@
         if not self.__fromEric:
             Preferences.syncPreferences()
             if not WebBrowserWindow._performingShutdown and \
-                    len(WebBrowserWindow.BrowserWindows) == 0:
+                    len(WebBrowserWindow.BrowserWindows) == 1:
                 # shut down the browser in case the last window was
                 # simply closed
                 self.shutdown()
@@ -2926,14 +2946,16 @@
         if not self.__shallShutDown():
             return False
         
-        if not self.downloadManager().allowQuit():
+        if WebBrowserWindow._downloadManager is not None and \
+                not self.downloadManager().allowQuit():
             return False
         
         WebBrowserWindow._performingShutdown = True
         
         self.sessionManager().shutdown()
         
-        self.downloadManager().shutdown()
+        if WebBrowserWindow._downloadManager is not None:
+            self.downloadManager().shutdown()
         
         self.cookieJar().close()
         
@@ -2963,7 +2985,8 @@
         
         self.networkManager().shutdown()
         
-        self.safeBrowsingManager().close()
+        if WebBrowserWindow._safeBrowsingManager:
+            self.safeBrowsingManager().close()
         
         for browser in WebBrowserWindow.BrowserWindows:
             if browser != self:
--- a/changelog	Thu Jan 18 11:10:57 2018 +0100
+++ b/changelog	Thu Jan 18 18:57:40 2018 +0100
@@ -1,5 +1,20 @@
 Change Log
 ----------
+Version 18.02:
+- bug fixes
+- General
+  -- extended the session to store/retrieve the split views and the order of
+     the editors (**Note**: The new session file format is not backward
+     compatible and cannot be read by eric releases prior to 18.02)
+  -- added basic support for Cython
+- Editor
+  -- added a context menu entry to "Execute Selection In Console"
+- Web Browser (NG)
+  -- added support for HTML5 "Desktop Video Capture" and "Desktop Audio and
+     Video Capture" as of Qt 5.10.0/PyQt 5.10.0
+  -- added the capability to pause/resume download (Qt 5.10.0/PyQt 5.10.0)
+  -- added support for attributes introduced by Qt 5.9 and Qt 5.10
+
 Version 18.01:
 - bug fixes
 - Debugger / Breakpoint Viewer
--- a/eric6.py	Thu Jan 18 11:10:57 2018 +0100
+++ b/eric6.py	Thu Jan 18 18:57:40 2018 +0100
@@ -37,7 +37,6 @@
 except AttributeError:
     pass
 
-
 import os
 import traceback
 import time
--- a/i18n/eric6_cs.ts	Thu Jan 18 11:10:57 2018 +0100
+++ b/i18n/eric6_cs.ts	Thu Jan 18 18:57:40 2018 +0100
@@ -3807,147 +3807,147 @@
 <context>
     <name>CodeStyleFixer</name>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="552"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="554"/>
         <source>Triple single quotes converted to triple double quotes.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="555"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="557"/>
         <source>Introductory quotes corrected to be {0}&quot;&quot;&quot;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="558"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="560"/>
         <source>Single line docstring put on one line.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="561"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="563"/>
         <source>Period added to summary line.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="588"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="590"/>
         <source>Blank line before function/method docstring removed.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="567"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="569"/>
         <source>Blank line inserted before class docstring.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="570"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="572"/>
         <source>Blank line inserted after class docstring.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="573"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="575"/>
         <source>Blank line inserted after docstring summary.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="576"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="578"/>
         <source>Blank line inserted after last paragraph of docstring.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="579"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="581"/>
         <source>Leading quotes put on separate line.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="582"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="584"/>
         <source>Trailing quotes put on separate line.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="585"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="587"/>
         <source>Blank line before class docstring removed.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="591"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="593"/>
         <source>Blank line after class docstring removed.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="594"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="596"/>
         <source>Blank line after function/method docstring removed.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="597"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="599"/>
         <source>Blank line after last paragraph removed.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="600"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="602"/>
         <source>Tab converted to 4 spaces.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="603"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="605"/>
         <source>Indentation adjusted to be a multiple of four.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="606"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="608"/>
         <source>Indentation of continuation line corrected.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="609"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="611"/>
         <source>Indentation of closing bracket corrected.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="612"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="614"/>
         <source>Missing indentation of continuation line corrected.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="615"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="617"/>
         <source>Closing bracket aligned to opening bracket.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="618"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="620"/>
         <source>Indentation level changed.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="621"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="623"/>
         <source>Indentation level of hanging indentation changed.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="624"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="626"/>
         <source>Visual indentation corrected.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="639"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="641"/>
         <source>Extraneous whitespace removed.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="636"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="638"/>
         <source>Missing whitespace added.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="642"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="644"/>
         <source>Whitespace around comment sign corrected.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="645"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="647"/>
         <source>One blank line inserted.</source>
         <translation type="unfinished"></translation>
     </message>
     <message numerus="yes">
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="649"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="651"/>
         <source>%n blank line(s) inserted.</source>
         <translation type="unfinished">
             <numerusform></numerusform>
@@ -3956,7 +3956,7 @@
         </translation>
     </message>
     <message numerus="yes">
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="652"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="654"/>
         <source>%n superfluous lines removed</source>
         <translation type="unfinished">
             <numerusform></numerusform>
@@ -3965,77 +3965,77 @@
         </translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="656"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="658"/>
         <source>Superfluous blank lines removed.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="659"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="661"/>
         <source>Superfluous blank lines after function decorator removed.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="662"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="664"/>
         <source>Imports were put on separate lines.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="665"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="667"/>
         <source>Long lines have been shortened.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="668"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="670"/>
         <source>Redundant backslash in brackets removed.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="674"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="676"/>
         <source>Compound statement corrected.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="677"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="679"/>
         <source>Comparison to None/True/False corrected.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="680"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="682"/>
         <source>&apos;{0}&apos; argument added.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="683"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="685"/>
         <source>&apos;{0}&apos; argument removed.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="686"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="688"/>
         <source>Whitespace stripped from end of line.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="689"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="691"/>
         <source>newline added to end of file.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="692"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="694"/>
         <source>Superfluous trailing blank lines removed from end of file.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="695"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="697"/>
         <source>&apos;&lt;&gt;&apos; replaced by &apos;!=&apos;.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="699"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="701"/>
         <source>Could not save the file! Skipping it. Reason: {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="779"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="781"/>
         <source> no message defined for code &apos;{0}&apos;</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4529,22 +4529,22 @@
 <context>
     <name>ComplexityChecker</name>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="441"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="443"/>
         <source>&apos;{0}&apos; is too complex ({1})</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="443"/>
-        <source>source code line is too complex ({0})</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="445"/>
+        <source>source code line is too complex ({0})</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="447"/>
         <source>overall source code line complexity is too high ({0})</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="448"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="450"/>
         <source>{0}: {1}</source>
         <translation type="unfinished"></translation>
     </message>
@@ -7817,7 +7817,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="325"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="327"/>
         <source>docstring summary does not end with a period</source>
         <translation type="unfinished"></translation>
     </message>
@@ -7852,7 +7852,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="359"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="361"/>
         <source>docstring summary is not followed by a blank line</source>
         <translation type="unfinished"></translation>
     </message>
@@ -7872,82 +7872,82 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="319"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="321"/>
         <source>leading quotes of docstring not on separate line</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="322"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="324"/>
         <source>trailing quotes of docstring not on separate line</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="329"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="331"/>
         <source>docstring does not contain a @return line but function/method returns something</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="333"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="335"/>
         <source>docstring contains a @return line but function/method doesn&apos;t return anything</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="337"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="339"/>
         <source>docstring does not contain enough @param/@keyparam lines</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="340"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="342"/>
         <source>docstring contains too many @param/@keyparam lines</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="343"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="345"/>
         <source>keyword only arguments must be documented with @keyparam lines</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="346"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="348"/>
         <source>order of @param/@keyparam lines does not match the function/method signature</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="349"/>
-        <source>class docstring is preceded by a blank line</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="351"/>
-        <source>class docstring is followed by a blank line</source>
+        <source>class docstring is preceded by a blank line</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="353"/>
+        <source>class docstring is followed by a blank line</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="355"/>
         <source>function/method docstring is preceded by a blank line</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="356"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="358"/>
         <source>function/method docstring is followed by a blank line</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="362"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="364"/>
         <source>last paragraph of docstring is followed by a blank line</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="365"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="367"/>
         <source>docstring does not contain a @exception line but function/method raises an exception</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="369"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="371"/>
         <source>docstring contains a @exception line but function/method doesn&apos;t raise an exception</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="392"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="394"/>
         <source>{0}: {1}</source>
         <translation type="unfinished"></translation>
     </message>
@@ -7957,40 +7957,45 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="327"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="329"/>
         <source>docstring summary does not start with &apos;{0}&apos;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="373"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="375"/>
         <source>raised exception &apos;{0}&apos; is not documented in docstring</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="376"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="378"/>
         <source>documented exception &apos;{0}&apos; is not raised</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="379"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="381"/>
         <source>docstring does not contain a @signal line but class defines signals</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="382"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="384"/>
         <source>docstring contains a @signal line but class doesn&apos;t define signals</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="385"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="387"/>
         <source>defined signal &apos;{0}&apos; is not documented in docstring</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="388"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="390"/>
         <source>documented signal &apos;{0}&apos; is not defined</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="319"/>
+        <source>class docstring is still a default string</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>DotDesktopListSelectionDialog</name>
@@ -8457,12 +8462,12 @@
 <context>
     <name>DownloadItem</name>
     <message>
-        <location filename="../WebBrowser/Download/DownloadItem.ui" line="38"/>
+        <location filename="../WebBrowser/Download/DownloadItem.ui" line="41"/>
         <source>Icon</source>
         <translation type="unfinished">Ikona</translation>
     </message>
     <message>
-        <location filename="../WebBrowser/Download/DownloadItem.ui" line="66"/>
+        <location filename="../WebBrowser/Download/DownloadItem.ui" line="72"/>
         <source>Filename</source>
         <translation type="unfinished">Jméno souboru</translation>
     </message>
@@ -8472,27 +8477,27 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../WebBrowser/Download/DownloadItem.ui" line="103"/>
+        <location filename="../WebBrowser/Download/DownloadItem.ui" line="122"/>
         <source>Press to cancel the download</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../WebBrowser/Download/DownloadItem.ui" line="113"/>
+        <location filename="../WebBrowser/Download/DownloadItem.ui" line="132"/>
         <source>Press to open the downloaded file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../WebBrowser/Download/DownloadItem.py" line="261"/>
+        <location filename="../WebBrowser/Download/DownloadItem.py" line="266"/>
         <source>Download canceled: {0}</source>
         <translation type="unfinished">Download zrušen: {0}</translation>
     </message>
     <message>
-        <location filename="../WebBrowser/Download/DownloadItem.py" line="207"/>
+        <location filename="../WebBrowser/Download/DownloadItem.py" line="212"/>
         <source>Save File</source>
         <translation type="unfinished">Uložit soubor</translation>
     </message>
     <message>
-        <location filename="../WebBrowser/Download/DownloadItem.py" line="290"/>
+        <location filename="../WebBrowser/Download/DownloadItem.py" line="295"/>
         <source>Download directory ({0}) couldn&apos;t be created.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -8512,27 +8517,27 @@
         <translation type="unfinished">Chyba sítě: {0}</translation>
     </message>
     <message>
-        <location filename="../WebBrowser/Download/DownloadItem.py" line="465"/>
+        <location filename="../WebBrowser/Download/DownloadItem.py" line="485"/>
         <source>?</source>
         <translation type="unfinished">?</translation>
     </message>
     <message>
-        <location filename="../WebBrowser/Download/DownloadItem.py" line="476"/>
+        <location filename="../WebBrowser/Download/DownloadItem.py" line="496"/>
         <source>{0} of {1} - Stopped</source>
         <translation type="unfinished">{0} z {1} - zastaveno</translation>
     </message>
     <message>
-        <location filename="../WebBrowser/Download/DownloadItem.py" line="192"/>
+        <location filename="../WebBrowser/Download/DownloadItem.py" line="197"/>
         <source>VirusTotal scan scheduled: {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Helpviewer/Download/DownloadItem.ui" line="113"/>
+        <location filename="../WebBrowser/Download/DownloadItem.ui" line="109"/>
         <source>Press to pause the download</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../WebBrowser/Download/DownloadItem.py" line="464"/>
+        <location filename="../WebBrowser/Download/DownloadItem.py" line="484"/>
         <source>{0} of {1} ({2}/sec)
 {3}</source>
         <translation type="unfinished"></translation>
@@ -8545,32 +8550,32 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../WebBrowser/Download/DownloadItem.py" line="473"/>
+        <location filename="../WebBrowser/Download/DownloadItem.py" line="493"/>
         <source>{0} downloaded</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../WebBrowser/Download/DownloadItem.py" line="218"/>
+        <location filename="../WebBrowser/Download/DownloadItem.py" line="223"/>
         <source>Web Archive (*.mhtml *.mht)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../WebBrowser/Download/DownloadItem.py" line="219"/>
+        <location filename="../WebBrowser/Download/DownloadItem.py" line="224"/>
         <source>HTML File (*.html *.htm)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../WebBrowser/Download/DownloadItem.py" line="220"/>
+        <location filename="../WebBrowser/Download/DownloadItem.py" line="225"/>
         <source>HTML File with all resources (*.html *.htm)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../WebBrowser/Download/DownloadItem.py" line="230"/>
+        <location filename="../WebBrowser/Download/DownloadItem.py" line="235"/>
         <source>Save Web Page</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../WebBrowser/Download/DownloadItem.ui" line="47"/>
+        <location filename="../WebBrowser/Download/DownloadItem.ui" line="53"/>
         <source>Date and Time</source>
         <translation type="unfinished"></translation>
     </message>
@@ -8578,7 +8583,7 @@
 <context>
     <name>DownloadManager</name>
     <message>
-        <location filename="../WebBrowser/Download/DownloadManager.py" line="395"/>
+        <location filename="../WebBrowser/Download/DownloadManager.py" line="405"/>
         <source>Downloads</source>
         <translation type="unfinished"></translation>
     </message>
@@ -8593,7 +8598,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message numerus="yes">
-        <location filename="../WebBrowser/Download/DownloadManager.py" line="384"/>
+        <location filename="../WebBrowser/Download/DownloadManager.py" line="394"/>
         <source>%n Download(s)</source>
         <translation type="unfinished">
             <numerusform></numerusform>
@@ -8602,7 +8607,7 @@
         </translation>
     </message>
     <message numerus="yes">
-        <location filename="../WebBrowser/Download/DownloadManager.py" line="153"/>
+        <location filename="../WebBrowser/Download/DownloadManager.py" line="152"/>
         <source>There are %n downloads in progress.
 Do you want to quit anyway?</source>
         <translation type="unfinished">
@@ -8657,7 +8662,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message numerus="yes">
-        <location filename="../WebBrowser/Download/DownloadManager.py" line="392"/>
+        <location filename="../WebBrowser/Download/DownloadManager.py" line="402"/>
         <source>Downloading %n file(s)</source>
         <translation type="unfinished">
             <numerusform></numerusform>
@@ -8666,12 +8671,12 @@
         </translation>
     </message>
     <message>
-        <location filename="../WebBrowser/Download/DownloadManager.py" line="182"/>
+        <location filename="../WebBrowser/Download/DownloadManager.py" line="181"/>
         <source>Suspicuous URL detected</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../WebBrowser/Download/DownloadManager.py" line="182"/>
+        <location filename="../WebBrowser/Download/DownloadManager.py" line="181"/>
         <source>&lt;p&gt;The URL &lt;b&gt;{0}&lt;/b&gt; was found in the Safe Browsing database.&lt;/p&gt;{1}</source>
         <translation type="unfinished"></translation>
     </message>
@@ -10190,97 +10195,97 @@
 <context>
     <name>Editor</name>
     <message>
-        <location filename="../QScintilla/Editor.py" line="2937"/>
+        <location filename="../QScintilla/Editor.py" line="2986"/>
         <source>Open File</source>
         <translation>Otevřít soubor</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="698"/>
+        <location filename="../QScintilla/Editor.py" line="742"/>
         <source>Undo</source>
         <translation>Vrátit</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="701"/>
+        <location filename="../QScintilla/Editor.py" line="745"/>
         <source>Redo</source>
         <translation>Znovu použít</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="704"/>
+        <location filename="../QScintilla/Editor.py" line="748"/>
         <source>Revert to last saved state</source>
         <translation>Vrátit k poslednímu uloženému stavu</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="708"/>
+        <location filename="../QScintilla/Editor.py" line="752"/>
         <source>Cut</source>
         <translation>Vyjmout</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="711"/>
-        <source>Copy</source>
-        <translation>Kopírovat</translation>
-    </message>
-    <message>
-        <location filename="../QScintilla/Editor.py" line="714"/>
-        <source>Paste</source>
-        <translation>Vložit</translation>
-    </message>
-    <message>
-        <location filename="../QScintilla/Editor.py" line="719"/>
-        <source>Indent</source>
-        <translation>Odsadit</translation>
-    </message>
-    <message>
-        <location filename="../QScintilla/Editor.py" line="722"/>
-        <source>Unindent</source>
-        <translation>Zrušit odsazení</translation>
-    </message>
-    <message>
-        <location filename="../QScintilla/Editor.py" line="725"/>
-        <source>Comment</source>
-        <translation>Vytvořit komentář</translation>
-    </message>
-    <message>
-        <location filename="../QScintilla/Editor.py" line="728"/>
-        <source>Uncomment</source>
-        <translation>Zrušit komentář</translation>
-    </message>
-    <message>
-        <location filename="../QScintilla/Editor.py" line="731"/>
-        <source>Stream Comment</source>
-        <translation>Proudový komentář</translation>
-    </message>
-    <message>
-        <location filename="../QScintilla/Editor.py" line="734"/>
-        <source>Box Comment</source>
-        <translation>Obdélníkový komentář</translation>
-    </message>
-    <message>
-        <location filename="../QScintilla/Editor.py" line="738"/>
-        <source>Select to brace</source>
-        <translation>Vybrat až po závorku</translation>
-    </message>
-    <message>
-        <location filename="../QScintilla/Editor.py" line="740"/>
-        <source>Select all</source>
-        <translation>Vybrat vše</translation>
-    </message>
-    <message>
-        <location filename="../QScintilla/Editor.py" line="741"/>
-        <source>Deselect all</source>
-        <translation>Zrušit celý výběr</translation>
-    </message>
-    <message>
         <location filename="../QScintilla/Editor.py" line="755"/>
+        <source>Copy</source>
+        <translation>Kopírovat</translation>
+    </message>
+    <message>
+        <location filename="../QScintilla/Editor.py" line="758"/>
+        <source>Paste</source>
+        <translation>Vložit</translation>
+    </message>
+    <message>
+        <location filename="../QScintilla/Editor.py" line="766"/>
+        <source>Indent</source>
+        <translation>Odsadit</translation>
+    </message>
+    <message>
+        <location filename="../QScintilla/Editor.py" line="769"/>
+        <source>Unindent</source>
+        <translation>Zrušit odsazení</translation>
+    </message>
+    <message>
+        <location filename="../QScintilla/Editor.py" line="772"/>
+        <source>Comment</source>
+        <translation>Vytvořit komentář</translation>
+    </message>
+    <message>
+        <location filename="../QScintilla/Editor.py" line="775"/>
+        <source>Uncomment</source>
+        <translation>Zrušit komentář</translation>
+    </message>
+    <message>
+        <location filename="../QScintilla/Editor.py" line="778"/>
+        <source>Stream Comment</source>
+        <translation>Proudový komentář</translation>
+    </message>
+    <message>
+        <location filename="../QScintilla/Editor.py" line="781"/>
+        <source>Box Comment</source>
+        <translation>Obdélníkový komentář</translation>
+    </message>
+    <message>
+        <location filename="../QScintilla/Editor.py" line="785"/>
+        <source>Select to brace</source>
+        <translation>Vybrat až po závorku</translation>
+    </message>
+    <message>
+        <location filename="../QScintilla/Editor.py" line="787"/>
+        <source>Select all</source>
+        <translation>Vybrat vše</translation>
+    </message>
+    <message>
+        <location filename="../QScintilla/Editor.py" line="788"/>
+        <source>Deselect all</source>
+        <translation>Zrušit celý výběr</translation>
+    </message>
+    <message>
+        <location filename="../QScintilla/Editor.py" line="804"/>
         <source>Shorten empty lines</source>
         <translation>Zkrátit prázdné řádky</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="762"/>
+        <location filename="../QScintilla/Editor.py" line="811"/>
         <source>Use Monospaced Font</source>
         <translation>Použít neporoporcionální font</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="767"/>
+        <location filename="../QScintilla/Editor.py" line="816"/>
         <source>Autosave enabled</source>
         <translation>Zapnout autosave</translation>
     </message>
@@ -10290,22 +10295,22 @@
         <translation type="obsolete">Zapnout autodoplňování</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="810"/>
+        <location filename="../QScintilla/Editor.py" line="859"/>
         <source>Close</source>
         <translation>Zavřít</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="816"/>
+        <location filename="../QScintilla/Editor.py" line="865"/>
         <source>Save</source>
         <translation>Uložit</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="819"/>
+        <location filename="../QScintilla/Editor.py" line="868"/>
         <source>Save As...</source>
         <translation>Uložit jako...</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="835"/>
+        <location filename="../QScintilla/Editor.py" line="884"/>
         <source>Print</source>
         <translation>Tisk</translation>
     </message>
@@ -10315,447 +10320,447 @@
         <translation type="obsolete">Autodoplňování</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="864"/>
+        <location filename="../QScintilla/Editor.py" line="913"/>
         <source>Complete from Document</source>
         <translation type="unfinished">z dokumentu</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="866"/>
+        <location filename="../QScintilla/Editor.py" line="915"/>
         <source>Complete from APIs</source>
         <translation type="unfinished">z API</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="868"/>
+        <location filename="../QScintilla/Editor.py" line="917"/>
         <source>Complete from Document and APIs</source>
         <translation type="unfinished">z dokumentu a API</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="882"/>
+        <location filename="../QScintilla/Editor.py" line="931"/>
         <source>Check</source>
         <translation>Zkontrolovat</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="902"/>
+        <location filename="../QScintilla/Editor.py" line="951"/>
         <source>Show</source>
         <translation>Zobrazit</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="904"/>
+        <location filename="../QScintilla/Editor.py" line="953"/>
         <source>Code metrics...</source>
         <translation>Metrika kódu...</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="905"/>
+        <location filename="../QScintilla/Editor.py" line="954"/>
         <source>Code coverage...</source>
         <translation>Pokrytí kódu...</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="907"/>
+        <location filename="../QScintilla/Editor.py" line="956"/>
         <source>Show code coverage annotations</source>
         <translation>Zobrazit poznámky pokrytí kódu</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="910"/>
+        <location filename="../QScintilla/Editor.py" line="959"/>
         <source>Hide code coverage annotations</source>
         <translation>Skrýt poznámky pokrytí kódu</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="913"/>
+        <location filename="../QScintilla/Editor.py" line="962"/>
         <source>Profile data...</source>
         <translation>Profilovat data...</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="926"/>
+        <location filename="../QScintilla/Editor.py" line="975"/>
         <source>Diagrams</source>
         <translation>Diagramy</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="928"/>
+        <location filename="../QScintilla/Editor.py" line="977"/>
         <source>Class Diagram...</source>
         <translation>Diagram třídy...</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="930"/>
+        <location filename="../QScintilla/Editor.py" line="979"/>
         <source>Package Diagram...</source>
         <translation>Diagram balíčku...</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="932"/>
+        <location filename="../QScintilla/Editor.py" line="981"/>
         <source>Imports Diagram...</source>
         <translation>Diagram importů...</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="934"/>
+        <location filename="../QScintilla/Editor.py" line="983"/>
         <source>Application Diagram...</source>
         <translation>Diagram aplikace...</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="952"/>
+        <location filename="../QScintilla/Editor.py" line="1001"/>
         <source>Languages</source>
         <translation>Jazyky</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="955"/>
+        <location filename="../QScintilla/Editor.py" line="1004"/>
         <source>No Language</source>
         <translation>Žádný jazyk</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="1201"/>
-        <source>Toggle bookmark</source>
-        <translation>Přepnout záložku</translation>
-    </message>
-    <message>
-        <location filename="../QScintilla/Editor.py" line="1203"/>
-        <source>Next bookmark</source>
-        <translation>Následující záložka</translation>
-    </message>
-    <message>
-        <location filename="../QScintilla/Editor.py" line="1205"/>
-        <source>Previous bookmark</source>
-        <translation>Předchozí záložka</translation>
-    </message>
-    <message>
-        <location filename="../QScintilla/Editor.py" line="1207"/>
-        <source>Clear all bookmarks</source>
-        <translation>Zrušit všechny záložky</translation>
-    </message>
-    <message>
-        <location filename="../QScintilla/Editor.py" line="1210"/>
-        <source>Goto syntax error</source>
-        <translation>Jít na chybu syntaxe</translation>
-    </message>
-    <message>
-        <location filename="../QScintilla/Editor.py" line="1212"/>
-        <source>Show syntax error message</source>
-        <translation>Zobrazit hlášení syntaktické chyby</translation>
-    </message>
-    <message>
-        <location filename="../QScintilla/Editor.py" line="1214"/>
-        <source>Clear syntax error</source>
-        <translation>Zrušit chybu syntaxe</translation>
-    </message>
-    <message>
-        <location filename="../QScintilla/Editor.py" line="1227"/>
-        <source>Toggle breakpoint</source>
-        <translation>Přepnout breakpoint</translation>
-    </message>
-    <message>
-        <location filename="../QScintilla/Editor.py" line="1229"/>
-        <source>Toggle temporary breakpoint</source>
-        <translation>Přepnout dočasný breakpoint</translation>
-    </message>
-    <message>
-        <location filename="../QScintilla/Editor.py" line="1232"/>
-        <source>Edit breakpoint...</source>
-        <translation>Editovat breakpoint...</translation>
-    </message>
-    <message>
-        <location filename="../QScintilla/Editor.py" line="5313"/>
-        <source>Enable breakpoint</source>
-        <translation>Aktivovat breakpoint</translation>
-    </message>
-    <message>
-        <location filename="../QScintilla/Editor.py" line="1237"/>
-        <source>Next breakpoint</source>
-        <translation>Následující breakpoint</translation>
-    </message>
-    <message>
-        <location filename="../QScintilla/Editor.py" line="1239"/>
-        <source>Previous breakpoint</source>
-        <translation>Předchozí breakpoint</translation>
-    </message>
-    <message>
-        <location filename="../QScintilla/Editor.py" line="1241"/>
-        <source>Clear all breakpoints</source>
-        <translation>Zrušit všechny breakpointy</translation>
-    </message>
-    <message>
-        <location filename="../QScintilla/Editor.py" line="1244"/>
-        <source>Next uncovered line</source>
-        <translation>Následující odkrytá řádka</translation>
-    </message>
-    <message>
-        <location filename="../QScintilla/Editor.py" line="1247"/>
-        <source>Previous uncovered line</source>
-        <translation>Předchozí odkrytá řádka</translation>
-    </message>
-    <message>
         <location filename="../QScintilla/Editor.py" line="1250"/>
-        <source>Next task</source>
-        <translation>Následující úloha</translation>
+        <source>Toggle bookmark</source>
+        <translation>Přepnout záložku</translation>
     </message>
     <message>
         <location filename="../QScintilla/Editor.py" line="1252"/>
+        <source>Next bookmark</source>
+        <translation>Následující záložka</translation>
+    </message>
+    <message>
+        <location filename="../QScintilla/Editor.py" line="1254"/>
+        <source>Previous bookmark</source>
+        <translation>Předchozí záložka</translation>
+    </message>
+    <message>
+        <location filename="../QScintilla/Editor.py" line="1256"/>
+        <source>Clear all bookmarks</source>
+        <translation>Zrušit všechny záložky</translation>
+    </message>
+    <message>
+        <location filename="../QScintilla/Editor.py" line="1259"/>
+        <source>Goto syntax error</source>
+        <translation>Jít na chybu syntaxe</translation>
+    </message>
+    <message>
+        <location filename="../QScintilla/Editor.py" line="1261"/>
+        <source>Show syntax error message</source>
+        <translation>Zobrazit hlášení syntaktické chyby</translation>
+    </message>
+    <message>
+        <location filename="../QScintilla/Editor.py" line="1263"/>
+        <source>Clear syntax error</source>
+        <translation>Zrušit chybu syntaxe</translation>
+    </message>
+    <message>
+        <location filename="../QScintilla/Editor.py" line="1276"/>
+        <source>Toggle breakpoint</source>
+        <translation>Přepnout breakpoint</translation>
+    </message>
+    <message>
+        <location filename="../QScintilla/Editor.py" line="1278"/>
+        <source>Toggle temporary breakpoint</source>
+        <translation>Přepnout dočasný breakpoint</translation>
+    </message>
+    <message>
+        <location filename="../QScintilla/Editor.py" line="1281"/>
+        <source>Edit breakpoint...</source>
+        <translation>Editovat breakpoint...</translation>
+    </message>
+    <message>
+        <location filename="../QScintilla/Editor.py" line="5365"/>
+        <source>Enable breakpoint</source>
+        <translation>Aktivovat breakpoint</translation>
+    </message>
+    <message>
+        <location filename="../QScintilla/Editor.py" line="1286"/>
+        <source>Next breakpoint</source>
+        <translation>Následující breakpoint</translation>
+    </message>
+    <message>
+        <location filename="../QScintilla/Editor.py" line="1288"/>
+        <source>Previous breakpoint</source>
+        <translation>Předchozí breakpoint</translation>
+    </message>
+    <message>
+        <location filename="../QScintilla/Editor.py" line="1290"/>
+        <source>Clear all breakpoints</source>
+        <translation>Zrušit všechny breakpointy</translation>
+    </message>
+    <message>
+        <location filename="../QScintilla/Editor.py" line="1293"/>
+        <source>Next uncovered line</source>
+        <translation>Následující odkrytá řádka</translation>
+    </message>
+    <message>
+        <location filename="../QScintilla/Editor.py" line="1296"/>
+        <source>Previous uncovered line</source>
+        <translation>Předchozí odkrytá řádka</translation>
+    </message>
+    <message>
+        <location filename="../QScintilla/Editor.py" line="1299"/>
+        <source>Next task</source>
+        <translation>Následující úloha</translation>
+    </message>
+    <message>
+        <location filename="../QScintilla/Editor.py" line="1301"/>
         <source>Previous task</source>
         <translation>Předchozí úloha</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="1264"/>
+        <location filename="../QScintilla/Editor.py" line="1313"/>
         <source>LMB toggles bookmarks</source>
         <translation>LMB přepínač záložek</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="1268"/>
+        <location filename="../QScintilla/Editor.py" line="1317"/>
         <source>LMB toggles breakpoints</source>
         <translation>LMB přepínač breakpointů</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="1811"/>
+        <location filename="../QScintilla/Editor.py" line="1860"/>
         <source>Modification of Read Only file</source>
         <translation>Modifikace souboru otevřeného jen pro čtení</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="1811"/>
+        <location filename="../QScintilla/Editor.py" line="1860"/>
         <source>You are attempting to change a read only file. Please save to a different file first.</source>
         <translation>Pokoušíte se změnit soubor, který je otevřen jen pro čtení. Prosím, uložte jej nejdříve do jiného souboru.</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="2502"/>
+        <location filename="../QScintilla/Editor.py" line="2551"/>
         <source>Printing...</source>
         <translation>Tisk...</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="2519"/>
+        <location filename="../QScintilla/Editor.py" line="2568"/>
         <source>Printing completed</source>
         <translation>Tisk je hotov</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="2521"/>
+        <location filename="../QScintilla/Editor.py" line="2570"/>
         <source>Error while printing</source>
         <translation>Chyba během tisku</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="2524"/>
+        <location filename="../QScintilla/Editor.py" line="2573"/>
         <source>Printing aborted</source>
         <translation>Tisk byl zrušen</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="3100"/>
+        <location filename="../QScintilla/Editor.py" line="3149"/>
         <source>Save File</source>
         <translation>Uložit soubor</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="2882"/>
+        <location filename="../QScintilla/Editor.py" line="2931"/>
         <source>File Modified</source>
         <translation>Soubor je modifikován</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="4512"/>
+        <location filename="../QScintilla/Editor.py" line="4561"/>
         <source>Autocompletion</source>
         <translation>Autodoplňování</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="4512"/>
+        <location filename="../QScintilla/Editor.py" line="4561"/>
         <source>Autocompletion is not available because there is no autocompletion source set.</source>
         <translation>Autodoplňování není dostupné protože zdrojová část autodoplňování nebyla nalezena.</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="5316"/>
+        <location filename="../QScintilla/Editor.py" line="5368"/>
         <source>Disable breakpoint</source>
         <translation>Deaktivovat breakpoint</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="5693"/>
+        <location filename="../QScintilla/Editor.py" line="5745"/>
         <source>Code Coverage</source>
         <translation>Pokrytí kódu</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="5693"/>
+        <location filename="../QScintilla/Editor.py" line="5745"/>
         <source>Please select a coverage file</source>
         <translation>Prosím, vyberte soubor s pokrytím kódu</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="5756"/>
+        <location filename="../QScintilla/Editor.py" line="5808"/>
         <source>Show Code Coverage Annotations</source>
         <translation>Zobrazit poznámky pokrytí kódu</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="5749"/>
+        <location filename="../QScintilla/Editor.py" line="5801"/>
         <source>All lines have been covered.</source>
         <translation>Všechny řádky byly pokryty.</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="5756"/>
+        <location filename="../QScintilla/Editor.py" line="5808"/>
         <source>There is no coverage file available.</source>
         <translation>Soubor s pokrytím není dostupný.</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="5871"/>
+        <location filename="../QScintilla/Editor.py" line="5923"/>
         <source>Profile Data</source>
         <translation>Profilovat data</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="5871"/>
+        <location filename="../QScintilla/Editor.py" line="5923"/>
         <source>Please select a profile file</source>
         <translation>Prosím, vyberte soubor s profilem</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6031"/>
+        <location filename="../QScintilla/Editor.py" line="6083"/>
         <source>Syntax Error</source>
         <translation>Chyba syntaxe</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6031"/>
+        <location filename="../QScintilla/Editor.py" line="6083"/>
         <source>No syntax error message available.</source>
         <translation>Hlášení syntaktické chyby není dostupné.</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6346"/>
+        <location filename="../QScintilla/Editor.py" line="6398"/>
         <source>Macro Name</source>
         <translation>Název makra</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6346"/>
+        <location filename="../QScintilla/Editor.py" line="6398"/>
         <source>Select a macro name:</source>
         <translation>Vyberte název makra:</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6374"/>
+        <location filename="../QScintilla/Editor.py" line="6426"/>
         <source>Load macro file</source>
         <translation>Načíst soubor makra</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6417"/>
+        <location filename="../QScintilla/Editor.py" line="6469"/>
         <source>Macro files (*.macro)</source>
         <translation>Macro soubory (*.macro)</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6397"/>
+        <location filename="../QScintilla/Editor.py" line="6449"/>
         <source>Error loading macro</source>
         <translation>Chyba při načítání makra</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6417"/>
+        <location filename="../QScintilla/Editor.py" line="6469"/>
         <source>Save macro file</source>
         <translation>Uložit soubor s makrem</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6434"/>
+        <location filename="../QScintilla/Editor.py" line="6486"/>
         <source>Save macro</source>
         <translation>Uložit makro</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6450"/>
+        <location filename="../QScintilla/Editor.py" line="6502"/>
         <source>Error saving macro</source>
         <translation>Chyba při ukládání makra</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6463"/>
+        <location filename="../QScintilla/Editor.py" line="6515"/>
         <source>Start Macro Recording</source>
         <translation>Spustit záznam makra</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6463"/>
+        <location filename="../QScintilla/Editor.py" line="6515"/>
         <source>Macro recording is already active. Start new?</source>
         <translation>Nahrávání makra již probíhá. Spustit nové?</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6489"/>
+        <location filename="../QScintilla/Editor.py" line="6541"/>
         <source>Macro Recording</source>
         <translation>Záznam makra</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6489"/>
+        <location filename="../QScintilla/Editor.py" line="6541"/>
         <source>Enter name of the macro:</source>
         <translation>Vložte název makra:</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6627"/>
+        <location filename="../QScintilla/Editor.py" line="6679"/>
         <source>File changed</source>
         <translation>Soubor změněn</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6931"/>
+        <location filename="../QScintilla/Editor.py" line="6983"/>
         <source>Drop Error</source>
         <translation>Zahodit chybu</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6952"/>
+        <location filename="../QScintilla/Editor.py" line="7004"/>
         <source>Resources</source>
         <translation>Zdroje</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6954"/>
+        <location filename="../QScintilla/Editor.py" line="7006"/>
         <source>Add file...</source>
         <translation>Přidat soubor...</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6956"/>
+        <location filename="../QScintilla/Editor.py" line="7008"/>
         <source>Add files...</source>
         <translation>Přidat soubory...</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6958"/>
+        <location filename="../QScintilla/Editor.py" line="7010"/>
         <source>Add aliased file...</source>
         <translation>Přidat zástupce souboru...</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6961"/>
+        <location filename="../QScintilla/Editor.py" line="7013"/>
         <source>Add localized resource...</source>
         <translation>Přidat lokalizované resource...</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6965"/>
+        <location filename="../QScintilla/Editor.py" line="7017"/>
         <source>Add resource frame</source>
         <translation>Přidat resource frame</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6984"/>
+        <location filename="../QScintilla/Editor.py" line="7036"/>
         <source>Add file resource</source>
         <translation>Přidat soubor resource</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="7000"/>
+        <location filename="../QScintilla/Editor.py" line="7052"/>
         <source>Add file resources</source>
         <translation>Přidat soubory resource</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="7028"/>
+        <location filename="../QScintilla/Editor.py" line="7080"/>
         <source>Add aliased file resource</source>
         <translation>Přidat zástupce souboru resource</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="7092"/>
+        <location filename="../QScintilla/Editor.py" line="7144"/>
         <source>Package Diagram</source>
         <translation>Diagram balíčku</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="7092"/>
+        <location filename="../QScintilla/Editor.py" line="7144"/>
         <source>Include class attributes?</source>
         <translation>Včetně atributů třídy?</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="7126"/>
+        <location filename="../QScintilla/Editor.py" line="7178"/>
         <source>Application Diagram</source>
         <translation>Diagram aplikace</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="7126"/>
+        <location filename="../QScintilla/Editor.py" line="7178"/>
         <source>Include module names?</source>
         <translation>Včetně jmen modulů?</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="1075"/>
+        <location filename="../QScintilla/Editor.py" line="1124"/>
         <source>Export as</source>
         <translation>Exportovat jako</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="1304"/>
+        <location filename="../QScintilla/Editor.py" line="1353"/>
         <source>Export source</source>
         <translation>Export zdroj</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="1304"/>
+        <location filename="../QScintilla/Editor.py" line="1353"/>
         <source>No export format given. Aborting...</source>
         <translation>Nebyl zadán forám exportu. Zrušeno....</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="7112"/>
+        <location filename="../QScintilla/Editor.py" line="7164"/>
         <source>Imports Diagram</source>
         <translation>Importovat diagram</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="7112"/>
+        <location filename="../QScintilla/Editor.py" line="7164"/>
         <source>Include imports from external modules?</source>
         <translation>Zahrnout importy z externích modulů?</translation>
     </message>
@@ -10765,12 +10770,12 @@
         <translation type="obsolete">dynamický</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="786"/>
+        <location filename="../QScintilla/Editor.py" line="835"/>
         <source>Calltip</source>
         <translation>Rychlé tipy</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="832"/>
+        <location filename="../QScintilla/Editor.py" line="881"/>
         <source>Print Preview</source>
         <translation>Náhled tisku</translation>
     </message>
@@ -10780,77 +10785,77 @@
         <translation>&lt;b&gt;Okno editoru zdrojového kódu&lt;/b&gt;&lt;p&gt;V tomto okně se zobrazuje a edituje soubor se zdrojovým kódem. Můžete otevřít oken podle libosti. Jméno souboru se zobrazuje v titlebaru okna.&lt;/p&gt;&lt;p&gt;Kliknutím do prostoru mezi čísly řádku a značkami skládání nastavíte breakpoint. Přes kontextové menu je pak lze editovat.&lt;/p&gt;&lt;p&gt;Záložka se vkládá kliknutím na stejné místo se stisknutou klávesou Shift.&lt;/p&gt;&lt;p&gt;Tyto akce mohou být navráceny zpět i opětovným kliknutím nebo přes kontextové menu.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="771"/>
+        <location filename="../QScintilla/Editor.py" line="820"/>
         <source>Typing aids enabled</source>
         <translation>Pomůcky při psaní zapnuty</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="1039"/>
+        <location filename="../QScintilla/Editor.py" line="1088"/>
         <source>End-of-Line Type</source>
         <translation>Typ Konec-řádku</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="1043"/>
+        <location filename="../QScintilla/Editor.py" line="1092"/>
         <source>Unix</source>
         <translation>Unix</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="1050"/>
+        <location filename="../QScintilla/Editor.py" line="1099"/>
         <source>Windows</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="1057"/>
+        <location filename="../QScintilla/Editor.py" line="1106"/>
         <source>Macintosh</source>
         <translation>Macintosh</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="998"/>
+        <location filename="../QScintilla/Editor.py" line="1047"/>
         <source>Encodings</source>
         <translation>Kódování</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="978"/>
+        <location filename="../QScintilla/Editor.py" line="1027"/>
         <source>Guessed</source>
         <translation>Odhadem</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="1319"/>
+        <location filename="../QScintilla/Editor.py" line="1368"/>
         <source>Alternatives</source>
         <translation>Alternativy</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="1335"/>
+        <location filename="../QScintilla/Editor.py" line="1384"/>
         <source>Pygments Lexer</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="1335"/>
+        <location filename="../QScintilla/Editor.py" line="1384"/>
         <source>Select the Pygments lexer to apply.</source>
         <translation>Použít Pygments lexer.</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="7404"/>
+        <location filename="../QScintilla/Editor.py" line="7456"/>
         <source>Check spelling...</source>
         <translation>Zatrhnout kontrolu...</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="747"/>
+        <location filename="../QScintilla/Editor.py" line="796"/>
         <source>Check spelling of selection...</source>
         <translation>Zatrhnout výběr kontroly...</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="7407"/>
+        <location filename="../QScintilla/Editor.py" line="7459"/>
         <source>Add to dictionary</source>
         <translation>Přidat do slovníku</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="7409"/>
+        <location filename="../QScintilla/Editor.py" line="7461"/>
         <source>Ignore All</source>
         <translation>Ignorovat vše</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="751"/>
+        <location filename="../QScintilla/Editor.py" line="800"/>
         <source>Remove from dictionary</source>
         <translation>Odebrat ze slovníku</translation>
     </message>
@@ -10860,235 +10865,240 @@
         <translation>&lt;p&gt;Velikost souboru &lt;b&gt;{0}&lt;/b&gt; je &lt;b&gt;{1} KB&lt;/b&gt;. Opravdu jej chcete načíst?&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="1296"/>
+        <location filename="../QScintilla/Editor.py" line="1345"/>
         <source>&lt;p&gt;No exporter available for the export format &lt;b&gt;{0}&lt;/b&gt;. Aborting...&lt;/p&gt;</source>
         <translation>&lt;p&gt;Pro formát exportu &lt;b&gt;{0}&lt;/b&gt; není exportér dostupný. Zrušeno.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="1315"/>
+        <location filename="../QScintilla/Editor.py" line="1364"/>
         <source>Alternatives ({0})</source>
         <translation>Alternativy ({0})</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="2882"/>
+        <location filename="../QScintilla/Editor.py" line="2931"/>
         <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; has unsaved changes.&lt;/p&gt;</source>
         <translation>&lt;p&gt;Soubor &lt;b&gt;{0}&lt;/b&gt; obsahuje neuložené změny.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="2937"/>
+        <location filename="../QScintilla/Editor.py" line="2986"/>
         <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; could not be opened.&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
         <translation>&lt;p&gt;Soubor &lt;b&gt;{0}&lt;/b&gt; nemůže být přejmenován.&lt;br /&gt;Důvod: {1}&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="3041"/>
+        <location filename="../QScintilla/Editor.py" line="3090"/>
         <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; could not be saved.&lt;br/&gt;Reason: {1}&lt;/p&gt;</source>
         <translation>&lt;p&gt;Soubor &lt;b&gt;{0}&lt;/b&gt; nemůže být přejmenován.&lt;br /&gt;Důvod: {1}&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6388"/>
+        <location filename="../QScintilla/Editor.py" line="6440"/>
         <source>&lt;p&gt;The macro file &lt;b&gt;{0}&lt;/b&gt; could not be read.&lt;/p&gt;</source>
         <translation>&lt;p&gt;Soubor s makrem &lt;b&gt;{0}&lt;/b&gt; nelze načíst.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6397"/>
+        <location filename="../QScintilla/Editor.py" line="6449"/>
         <source>&lt;p&gt;The macro file &lt;b&gt;{0}&lt;/b&gt; is corrupt.&lt;/p&gt;</source>
         <translation>&lt;p&gt;Soubor s makrem &lt;b&gt;{0}&lt;/b&gt; je poškozen.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6450"/>
+        <location filename="../QScintilla/Editor.py" line="6502"/>
         <source>&lt;p&gt;The macro file &lt;b&gt;{0}&lt;/b&gt; could not be written.&lt;/p&gt;</source>
         <translation>&lt;p&gt;So souboru s makrem &lt;b&gt;{0}&lt;/b&gt; nelze zapisovat.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6791"/>
+        <location filename="../QScintilla/Editor.py" line="6843"/>
         <source>{0} (ro)</source>
         <translation>{0} (ro)</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6931"/>
+        <location filename="../QScintilla/Editor.py" line="6983"/>
         <source>&lt;p&gt;&lt;b&gt;{0}&lt;/b&gt; is not a file.&lt;/p&gt;</source>
         <translation>&lt;p&gt;&lt;b&gt;{0}&lt;/b&gt; není soubor.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="7028"/>
+        <location filename="../QScintilla/Editor.py" line="7080"/>
         <source>Alias for file &lt;b&gt;{0}&lt;/b&gt;:</source>
         <translation>Zástupce pro soubor &lt;b&gt;{0}&lt;/b&gt;:</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="1217"/>
+        <location filename="../QScintilla/Editor.py" line="1266"/>
         <source>Next warning</source>
         <translation>Následující varování</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="1220"/>
+        <location filename="../QScintilla/Editor.py" line="1269"/>
         <source>Previous warning</source>
         <translation>Předchozí varování</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="1222"/>
+        <location filename="../QScintilla/Editor.py" line="1271"/>
         <source>Show warning message</source>
         <translation>Zobrazit varování</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="1224"/>
+        <location filename="../QScintilla/Editor.py" line="1273"/>
         <source>Clear warnings</source>
         <translation>Vyčistit varování</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="3100"/>
+        <location filename="../QScintilla/Editor.py" line="3149"/>
         <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; already exists. Overwrite it?&lt;/p&gt;</source>
         <translation type="unfinished">&lt;p&gt;Soubor &lt;b&gt;{0}&lt;/b&gt; již existuje.&lt;/p&gt;&lt;p&gt;Má se přepsat?&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6434"/>
+        <location filename="../QScintilla/Editor.py" line="6486"/>
         <source>&lt;p&gt;The macro file &lt;b&gt;{0}&lt;/b&gt; already exists. Overwrite it?&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6285"/>
+        <location filename="../QScintilla/Editor.py" line="6337"/>
         <source>Warning: {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6292"/>
+        <location filename="../QScintilla/Editor.py" line="6344"/>
         <source>Error: {0}</source>
         <translation type="unfinished">Chyby: {0}</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6623"/>
+        <location filename="../QScintilla/Editor.py" line="6675"/>
         <source>&lt;br&gt;&lt;b&gt;Warning:&lt;/b&gt; You will lose your changes upon reopening it.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="828"/>
+        <location filename="../QScintilla/Editor.py" line="877"/>
         <source>Open &apos;rejection&apos; file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="938"/>
+        <location filename="../QScintilla/Editor.py" line="987"/>
         <source>Load Diagram...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="1255"/>
+        <location filename="../QScintilla/Editor.py" line="1304"/>
         <source>Next change</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="1258"/>
+        <location filename="../QScintilla/Editor.py" line="1307"/>
         <source>Previous change</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="7821"/>
+        <location filename="../QScintilla/Editor.py" line="7873"/>
         <source>Sort Lines</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="7821"/>
+        <location filename="../QScintilla/Editor.py" line="7873"/>
         <source>The selection contains illegal data for a numerical sort.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6221"/>
+        <location filename="../QScintilla/Editor.py" line="6273"/>
         <source>Warning</source>
         <translation type="unfinished">Varování</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6221"/>
+        <location filename="../QScintilla/Editor.py" line="6273"/>
         <source>No warning messages available.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6282"/>
+        <location filename="../QScintilla/Editor.py" line="6334"/>
         <source>Style: {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="802"/>
+        <location filename="../QScintilla/Editor.py" line="851"/>
         <source>New Document View</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="805"/>
+        <location filename="../QScintilla/Editor.py" line="854"/>
         <source>New Document View (with new split)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="892"/>
+        <location filename="../QScintilla/Editor.py" line="941"/>
         <source>Tools</source>
         <translation type="unfinished">Nástroje</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="1020"/>
+        <location filename="../QScintilla/Editor.py" line="1069"/>
         <source>Re-Open With Encoding</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6617"/>
+        <location filename="../QScintilla/Editor.py" line="6669"/>
         <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; has been changed while it was opened in eric6. Reread it?&lt;/p&gt;</source>
         <translation type="unfinished">&lt;p&gt;Soubor &lt;b&gt;{0}&lt;/b&gt; byl změněn po té co již byl načten do eric5. Znovu načíst?&lt;/p&gt; {0}?} {6.?}</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="778"/>
+        <location filename="../QScintilla/Editor.py" line="827"/>
         <source>Automatic Completion enabled</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="858"/>
+        <location filename="../QScintilla/Editor.py" line="907"/>
         <source>Complete</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="4637"/>
+        <location filename="../QScintilla/Editor.py" line="4686"/>
         <source>Auto-Completion Provider</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="4637"/>
+        <location filename="../QScintilla/Editor.py" line="4686"/>
         <source>The completion list provider &apos;{0}&apos; was already registered. Ignoring duplicate request.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="4899"/>
+        <location filename="../QScintilla/Editor.py" line="4948"/>
         <source>Call-Tips Provider</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="4899"/>
+        <location filename="../QScintilla/Editor.py" line="4948"/>
         <source>The call-tips provider &apos;{0}&apos; was already registered. Ignoring duplicate request.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="7908"/>
+        <location filename="../QScintilla/Editor.py" line="7960"/>
         <source>Register Mouse Click Handler</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="7908"/>
+        <location filename="../QScintilla/Editor.py" line="7960"/>
         <source>A mouse click handler for &quot;{0}&quot; was already registered by &quot;{1}&quot;. Aborting request by &quot;{2}&quot;...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="822"/>
+        <location filename="../QScintilla/Editor.py" line="871"/>
         <source>Save Copy...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="861"/>
+        <location filename="../QScintilla/Editor.py" line="910"/>
         <source>Clear Completions Cache</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="788"/>
+        <location filename="../QScintilla/Editor.py" line="837"/>
         <source>Code Info</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="1261"/>
+        <location filename="../QScintilla/Editor.py" line="1310"/>
         <source>Clear changes</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../QScintilla/Editor.py" line="762"/>
+        <source>Execute Selection In Console</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>EditorAPIsPage</name>
@@ -16275,22 +16285,22 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../WebBrowser/FeaturePermissions/FeaturePermissionBar.py" line="78"/>
+        <location filename="../WebBrowser/FeaturePermissions/FeaturePermissionBar.py" line="99"/>
         <source>Allow</source>
         <translation type="unfinished">Povolit</translation>
     </message>
     <message>
-        <location filename="../WebBrowser/FeaturePermissions/FeaturePermissionBar.py" line="79"/>
+        <location filename="../WebBrowser/FeaturePermissions/FeaturePermissionBar.py" line="100"/>
         <source>Deny</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../WebBrowser/FeaturePermissions/FeaturePermissionBar.py" line="101"/>
+        <location filename="../WebBrowser/FeaturePermissions/FeaturePermissionBar.py" line="122"/>
         <source>{0} wants to use an unknown feature.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../WebBrowser/FeaturePermissions/FeaturePermissionBar.py" line="76"/>
+        <location filename="../WebBrowser/FeaturePermissions/FeaturePermissionBar.py" line="97"/>
         <source>Remember</source>
         <translation type="unfinished"></translation>
     </message>
@@ -16314,6 +16324,16 @@
         <source>{0} wants to lock your mouse.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../WebBrowser/FeaturePermissions/FeaturePermissionBar.py" line="61"/>
+        <source>{0} wants to capture video of your screen.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/FeaturePermissions/FeaturePermissionBar.py" line="61"/>
+        <source>{0} wants to capture audio and video of your screen.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>FeaturePermissionsDialog</name>
@@ -16328,12 +16348,12 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../WebBrowser/FeaturePermissions/FeaturePermissionsDialog.py" line="110"/>
+        <location filename="../WebBrowser/FeaturePermissions/FeaturePermissionsDialog.py" line="144"/>
         <source>Host</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../WebBrowser/FeaturePermissions/FeaturePermissionsDialog.py" line="111"/>
+        <location filename="../WebBrowser/FeaturePermissions/FeaturePermissionsDialog.py" line="145"/>
         <source>Permission</source>
         <translation type="unfinished"></translation>
     </message>
@@ -16353,12 +16373,12 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../WebBrowser/FeaturePermissions/FeaturePermissionsDialog.py" line="126"/>
+        <location filename="../WebBrowser/FeaturePermissions/FeaturePermissionsDialog.py" line="165"/>
         <source>Allow</source>
         <translation type="unfinished">Povolit</translation>
     </message>
     <message>
-        <location filename="../WebBrowser/FeaturePermissions/FeaturePermissionsDialog.py" line="127"/>
+        <location filename="../WebBrowser/FeaturePermissions/FeaturePermissionsDialog.py" line="166"/>
         <source>Deny</source>
         <translation type="unfinished"></translation>
     </message>
@@ -16392,6 +16412,16 @@
         <source>Mouse Lock</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../WebBrowser/FeaturePermissions/FeaturePermissionsDialog.py" line="130"/>
+        <source>Desktop Video</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../WebBrowser/FeaturePermissions/FeaturePermissionsDialog.py" line="146"/>
+        <source>Desktop Audio &amp;&amp; Video</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>FeedEditDialog</name>
@@ -17864,182 +17894,182 @@
 <context>
     <name>Git</name>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="211"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="209"/>
         <source>The git process finished with the exit code {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="1565"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="1563"/>
         <source>The git process did not finish within 30s.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="218"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="216"/>
         <source>Could not start the git executable.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="246"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="244"/>
         <source>Create project repository</source>
         <translation type="unfinished">Vytvořit repozitář projektu</translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="246"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="244"/>
         <source>The project repository could not be created.</source>
         <translation type="unfinished">Úložiště projektu nelze vytvořit.</translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="274"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="272"/>
         <source>Creating Git repository</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="289"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="287"/>
         <source>Adding files to Git repository</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="300"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="298"/>
         <source>Initial commit to Git repository</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="330"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="328"/>
         <source>Cloning project from a Git repository</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="419"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="417"/>
         <source>Commit Changes</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="419"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="417"/>
         <source>The commit affects files, that have unsaved changes. Shall the commit be continued?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="478"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="476"/>
         <source>Committing changes to Git repository</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="501"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="499"/>
         <source>Switch</source>
         <translation type="unfinished">Přepnout</translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="501"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="499"/>
         <source>&lt;p&gt;Do you really want to switch to &lt;b&gt;{0}&lt;/b&gt;?&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="532"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="530"/>
         <source>Synchronizing with the Git repository</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="579"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="577"/>
         <source>Adding files/directories to the Git repository</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="653"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="651"/>
         <source>Removing files/directories from the Git repository</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="710"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="708"/>
         <source>Renaming {0}</source>
         <translation type="unfinished">Přejmenování {0}</translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="833"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="831"/>
         <source>Unstage files/directories</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="884"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="882"/>
         <source>Revert changes</source>
         <translation type="unfinished">Vrátit změny</translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="875"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="873"/>
         <source>Do you really want to revert all changes to these files or directories?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="884"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="882"/>
         <source>Do you really want to revert all changes of the project?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="890"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="888"/>
         <source>Reverting changes</source>
         <translation type="unfinished">Navrácení změn</translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="942"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="940"/>
         <source>Merging</source>
         <translation type="unfinished">Merging</translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="967"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="965"/>
         <source>Master branch head</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="1200"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="1198"/>
         <source>Git Command</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="1287"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="1285"/>
         <source>&lt;tr&gt;&lt;td&gt;&lt;b&gt;Commit&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="1291"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="1289"/>
         <source>&lt;tr&gt;&lt;td&gt;&lt;b&gt;Parents&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;</source>
         <translation type="unfinished">&lt;tr&gt;&lt;td&gt;&lt;b&gt;Rodiče&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;</translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="1295"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="1293"/>
         <source>&lt;tr&gt;&lt;td&gt;&lt;b&gt;Tags&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;</source>
         <translation type="unfinished">&lt;tr&gt;&lt;td&gt;&lt;b&gt;Tagy&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;</translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="1299"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="1297"/>
         <source>&lt;tr&gt;&lt;td&gt;&lt;b&gt;Branches&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;</source>
         <translation type="unfinished">&lt;tr&gt;&lt;td&gt;&lt;b&gt;Větve&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;</translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="1302"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="1300"/>
         <source>&lt;tr&gt;&lt;td&gt;&lt;b&gt;Author&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{0} &amp;lt;{1}&amp;gt;&lt;/td&gt;&lt;/tr&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="1305"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="1303"/>
         <source>&lt;tr&gt;&lt;td&gt;&lt;b&gt;Date&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="1308"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="1306"/>
         <source>&lt;tr&gt;&lt;td&gt;&lt;b&gt;Committer&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{0} &amp;lt;{1}&amp;gt;&lt;/td&gt;&lt;/tr&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="1311"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="1309"/>
         <source>&lt;tr&gt;&lt;td&gt;&lt;b&gt;Committed Date&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="1314"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="1312"/>
         <source>&lt;tr&gt;&lt;td&gt;&lt;b&gt;Subject&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="1322"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="1320"/>
         <source>&lt;h3&gt;Repository information&lt;/h3&gt;
 &lt;p&gt;&lt;table&gt;
 &lt;tr&gt;&lt;td&gt;&lt;b&gt;Git V.&lt;/b&gt;&lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;
@@ -18049,432 +18079,432 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="1390"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="1388"/>
         <source>Create {0} file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="1390"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="1388"/>
         <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; exists already. Overwrite it?&lt;/p&gt;</source>
         <translation type="unfinished">&lt;p&gt;Soubor &lt;b&gt;{0}&lt;/b&gt; již existuje.&lt;/p&gt;&lt;p&gt;Má se přepsat?&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="1449"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="1447"/>
         <source>Git Copy</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="1434"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="1432"/>
         <source>&lt;p&gt;Copying the directory &lt;b&gt;{0}&lt;/b&gt; failed.&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="1449"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="1447"/>
         <source>&lt;p&gt;Copying the file &lt;b&gt;{0}&lt;/b&gt; failed.&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="2634"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="2632"/>
         <source>The process {0} could not be started. Ensure, that it is in the search path.</source>
         <translation type="unfinished">Proces {0} nelze spustit. Ověřte, že je umístěn v požadované cestě.</translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="1636"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="1634"/>
         <source>Git Side-by-Side Difference</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="1636"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="1634"/>
         <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; could not be read.&lt;/p&gt;</source>
         <translation type="unfinished">&lt;p&gt;Soubor &lt;b&gt;{0}&lt;/b&gt; nelze přečíst.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="1685"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="1683"/>
         <source>Fetching from a remote Git repository</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="1723"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="1721"/>
         <source>Pulling from a remote Git repository</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="1764"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="1762"/>
         <source>Pushing to a remote Git repository</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="1792"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="1790"/>
         <source>Committing failed merge</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="1819"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="1817"/>
         <source>Aborting uncommitted/failed merge</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="1852"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="1850"/>
         <source>Applying patch</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="1884"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="1882"/>
         <source>Check patch files</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="1887"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="1885"/>
         <source>Apply patch files</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="1969"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="1967"/>
         <source>Tagging in the Git repository</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="2200"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="2198"/>
         <source>Branching in the Git repository</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="2240"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="2238"/>
         <source>Delete Remote Branch</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="2261"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="2259"/>
         <source>Current Branch</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="2261"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="2259"/>
         <source>&lt;p&gt;The current branch is &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="2325"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="2323"/>
         <source>Create Bundle</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="2290"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="2288"/>
         <source>Git Bundle Files (*.bundle)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="2307"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="2305"/>
         <source>&lt;p&gt;The Git bundle file &lt;b&gt;{0}&lt;/b&gt; already exists. Overwrite it?&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="2355"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="2353"/>
         <source>Verify Bundle</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="2485"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="2483"/>
         <source>Git Bundle Files (*.bundle);;All Files (*)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="2385"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="2383"/>
         <source>List Bundle Heads</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="2485"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="2483"/>
         <source>Apply Bundle</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="2508"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="2506"/>
         <source>Applying a bundle file (fetch)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="2535"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="2533"/>
         <source>Bisect subcommand ({0}) invalid.</source>
         <translation type="unfinished">Neplatný bisect podpříkaz ({0}).</translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="2738"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="2736"/>
         <source>Git Bisect ({0})</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="2634"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="2632"/>
         <source>Process Generation Error</source>
         <translation type="unfinished">Chyba v procesu generování</translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="2678"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="2676"/>
         <source>Create Bisect Replay File</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="2644"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="2642"/>
         <source>Git Bisect Replay Files (*.replay)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="2661"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="2659"/>
         <source>&lt;p&gt;The Git bisect replay file &lt;b&gt;{0}&lt;/b&gt; already exists. Overwrite it?&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="2678"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="2676"/>
         <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; could not be written.&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="2699"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="2697"/>
         <source>Edit Bisect Replay File</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="2726"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="2724"/>
         <source>Git Bisect Replay Files (*.replay);;All Files (*)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="2726"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="2724"/>
         <source>Bisect Replay</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="2980"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="2978"/>
         <source>Show Remote Info</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="2927"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="2925"/>
         <source>Rename Remote Repository</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="2927"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="2925"/>
         <source>Enter new name for remote repository:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="3004"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="3002"/>
         <source>Show Shortlog</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="3062"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="3060"/>
         <source>Cherry-pick</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="3092"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="3090"/>
         <source>Copy Changesets (Continue)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="3117"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="3115"/>
         <source>Copy Changesets (Quit)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="3143"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="3141"/>
         <source>Copy Changesets (Cancel)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="3223"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="3221"/>
         <source>Saving stash</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="3422"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="3420"/>
         <source>Show Stash</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="3422"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="3420"/>
         <source>Select a stash (empty for latest stash):</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="3334"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="3332"/>
         <source>Restore Stash</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="3348"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="3346"/>
         <source>Restoring stash</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="3382"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="3380"/>
         <source>Create Branch</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="3372"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="3370"/>
         <source>Enter a branch name to restore a stash to:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="3397"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="3395"/>
         <source>Creating branch</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="3431"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="3429"/>
         <source>Delete Stash</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="3431"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="3429"/>
         <source>Do you really want to delete the stash &lt;b&gt;{0}&lt;/b&gt;?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="3442"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="3440"/>
         <source>Deleting stash</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="3462"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="3460"/>
         <source>Delete All Stashes</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="3462"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="3460"/>
         <source>Do you really want to delete all stashes?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="3470"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="3468"/>
         <source>Deleting all stashes</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="3542"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="3540"/>
         <source>Showing the combined configuration settings</source>
         <translation type="unfinished">Zobrazení nastavení kombinovaných konfigurací</translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="3568"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="3566"/>
         <source>Verifying the integrity of the Git repository</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="3593"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="3591"/>
         <source>Performing Repository Housekeeping</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="3637"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="3635"/>
         <source>&lt;tr&gt;&lt;td&gt;&lt;b&gt;Statistics&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="3638"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="3636"/>
         <source>&lt;tr&gt;&lt;td&gt;Number of loose objects: &lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="3642"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="3640"/>
         <source>&lt;tr&gt;&lt;td&gt;Disk space used by loose objects: &lt;/td&gt;&lt;td&gt;{0} KiB&lt;/td&gt;&lt;/tr&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="3646"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="3644"/>
         <source>&lt;tr&gt;&lt;td&gt;Number of packed objects: &lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="3650"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="3648"/>
         <source>&lt;tr&gt;&lt;td&gt;Number of packs: &lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="3654"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="3652"/>
         <source>&lt;tr&gt;&lt;td&gt;Disk space used by packed objects: &lt;/td&gt;&lt;td&gt;{0} KiB&lt;/td&gt;&lt;/tr&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="3658"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="3656"/>
         <source>&lt;tr&gt;&lt;td&gt;Packed objects waiting for pruning: &lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="3662"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="3660"/>
         <source>&lt;tr&gt;&lt;td&gt;Garbage files: &lt;/td&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;/tr&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="3666"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="3664"/>
         <source>&lt;tr&gt;&lt;td&gt;Disk space used by garbage files: &lt;/td&gt;&lt;td&gt;{0} KiB&lt;/td&gt;&lt;/tr&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="3672"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="3670"/>
         <source>&lt;p&gt;&lt;b&gt;No statistics available.&lt;/b&gt;&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="3738"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="3736"/>
         <source>Creating Archive</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="3781"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="3779"/>
         <source>Add Submodule</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="3840"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="3849"/>
         <source>List Submodules</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="3840"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="3849"/>
         <source>No submodules defined for the project.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="3855"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="3864"/>
         <source>All</source>
         <translation type="unfinished">Vše</translation>
     </message>
     <message>
-        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="3858"/>
+        <location filename="../Plugins/VcsPlugins/vcsGit/git.py" line="3867"/>
         <source>Submodule Path</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plug