Extended the session to store/retrieve the split views and the order of the editors.

Mon, 01 Jan 2018 19:06:33 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Mon, 01 Jan 2018 19:06:33 +0100
changeset 6052
8b49d3e0b4c8
parent 6051
6e09a9a73cb7
child 6053
c2d1566692d3

Extended the session to store/retrieve the split views and the order of the editors.

APIs/Python3/eric6.api file | annotate | diff | comparison | revisions
DTDs/Session-6.1.dtd 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.E5XML.SessionReader.html file | annotate | diff | comparison | revisions
Documentation/Source/eric6.E5XML.SessionWriter.html file | annotate | diff | comparison | revisions
Documentation/Source/eric6.Plugins.ViewManagerPlugins.Listspace.Listspace.html file | annotate | diff | comparison | revisions
Documentation/Source/eric6.Plugins.ViewManagerPlugins.Tabview.Tabview.html file | annotate | diff | comparison | revisions
Documentation/Source/eric6.QScintilla.Editor.html file | annotate | diff | comparison | revisions
Documentation/Source/eric6.ViewManager.ViewManager.html file | annotate | diff | comparison | revisions
E5XML/Config.py file | annotate | diff | comparison | revisions
E5XML/SessionReader.py file | annotate | diff | comparison | revisions
E5XML/SessionWriter.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
QScintilla/Editor.py file | annotate | diff | comparison | revisions
ViewManager/ViewManager.py file | annotate | diff | comparison | revisions
changelog file | annotate | diff | comparison | revisions
--- a/APIs/Python3/eric6.api	Sun Dec 31 18:54:06 2017 +0100
+++ b/APIs/Python3/eric6.api	Mon Jan 01 19:06:33 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()
@@ -10388,7 +10395,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 +10450,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 +10481,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 +10496,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 +10515,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 +10524,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)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DTDs/Session-6.1.dtd	Mon Jan 01 19:06:33 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	Sun Dec 31 18:54:06 2017 +0100
+++ b/Documentation/Help/source.qhp	Mon Jan 01 19:06:33 2018 +0100
@@ -5400,6 +5400,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 +10708,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" />
@@ -15840,6 +15844,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 +15854,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 +17194,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 +17250,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 +17259,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	Sun Dec 31 18:54:06 2017 +0100
+++ b/Documentation/Source/eric6.E5XML.SessionReader.html	Mon Jan 01 19:06:33 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	Sun Dec 31 18:54:06 2017 +0100
+++ b/Documentation/Source/eric6.E5XML.SessionWriter.html	Mon Jan 01 19:06:33 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.Plugins.ViewManagerPlugins.Listspace.Listspace.html	Sun Dec 31 18:54:06 2017 +0100
+++ b/Documentation/Source/eric6.Plugins.ViewManagerPlugins.Listspace.Listspace.html	Mon Jan 01 19:06:33 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	Sun Dec 31 18:54:06 2017 +0100
+++ b/Documentation/Source/eric6.Plugins.ViewManagerPlugins.Tabview.Tabview.html	Mon Jan 01 19:06:33 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	Sun Dec 31 18:54:06 2017 +0100
+++ b/Documentation/Source/eric6.QScintilla.Editor.html	Mon Jan 01 19:06:33 2018 +0100
@@ -939,6 +939,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>
@@ -2691,9 +2694,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 +3755,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 +4099,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.ViewManager.ViewManager.html	Sun Dec 31 18:54:06 2017 +0100
+++ b/Documentation/Source/eric6.ViewManager.ViewManager.html	Mon Jan 01 19:06:33 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/E5XML/Config.py	Sun Dec 31 18:54:06 2017 +0100
+++ b/E5XML/Config.py	Mon Jan 01 19:06:33 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	Sun Dec 31 18:54:06 2017 +0100
+++ b/E5XML/SessionReader.py	Mon Jan 01 19:06:33 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	Sun Dec 31 18:54:06 2017 +0100
+++ b/E5XML/SessionWriter.py	Mon Jan 01 19:06:33 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/Plugins/ViewManagerPlugins/Listspace/Listspace.py	Sun Dec 31 18:54:06 2017 +0100
+++ b/Plugins/ViewManagerPlugins/Listspace/Listspace.py	Mon Jan 01 19:06:33 2018 +0100
@@ -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 fn is None:
@@ -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,25 @@
         self.nextSplitAct.setEnabled(True)
         self.prevSplitAct.setEnabled(True)
         
-    def removeSplit(self):
+    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 +688,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 +726,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 +852,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 +882,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 +921,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	Sun Dec 31 18:54:06 2017 +0100
+++ b/Plugins/ViewManagerPlugins/Tabview/Tabview.py	Mon Jan 01 19:06:33 2018 +0100
@@ -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 fn is None:
@@ -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,25 @@
         self.nextSplitAct.setEnabled(True)
         self.prevSplitAct.setEnabled(True)
         
-    def removeSplit(self):
+    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 +1214,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 +1252,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 +1296,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 +1323,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 +1400,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/QScintilla/Editor.py	Sun Dec 31 18:54:06 2017 +0100
+++ b/QScintilla/Editor.py	Mon Jan 01 19:06:33 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.
--- a/ViewManager/ViewManager.py	Sun Dec 31 18:54:06 2017 +0100
+++ b/ViewManager/ViewManager.py	Mon Jan 01 19:06:33 2018 +0100
@@ -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,37 @@
         """
         pass
         
-    def removeSplit(self):
-        """
-        Public method used to remove the current split view.
-        
-        @return Flag indicating successful deletion
+    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.
@@ -4535,24 +4565,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
         
@@ -4586,6 +4629,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.
@@ -4621,19 +4666,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):
         """
@@ -4837,7 +4892,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.
         
@@ -4845,11 +4900,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()
@@ -4871,7 +4933,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)
         
@@ -4921,6 +4983,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/changelog	Sun Dec 31 18:54:06 2017 +0100
+++ b/changelog	Mon Jan 01 19:06:33 2018 +0100
@@ -1,5 +1,11 @@
 Change Log
 ----------
+Version 18.02:
+- bug fixes
+- 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)
+
 Version 18.01:
 - bug fixes
 - Debugger / Breakpoint Viewer

eric ide

mercurial