Merged with default branch. maintenance

Fri, 03 Nov 2017 12:10:16 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Fri, 03 Nov 2017 12:10:16 +0100
branch
maintenance
changeset 5948
6f958d5765f4
parent 5937
cc296ba99a3f
child 5949
22657f04f332

Merged with default branch.

APIs/Python3/eric6.api file | annotate | diff | comparison | revisions
APIs/Python3/eric6.bas file | annotate | diff | comparison | revisions
DTDs/Session-5.0.dtd file | annotate | diff | comparison | revisions
DebugClients/Python/AsyncFile.py file | annotate | diff | comparison | revisions
DebugClients/Python/ThreadExtension.py file | annotate | diff | comparison | revisions
Debugger/DebugServer.py file | annotate | diff | comparison | revisions
Debugger/DebugUI.py file | annotate | diff | comparison | revisions
Debugger/DebuggerInterfaceNone.py file | annotate | diff | comparison | revisions
Debugger/DebuggerInterfacePython.py file | annotate | diff | comparison | revisions
Debugger/StartCoverageDialog.ui file | annotate | diff | comparison | revisions
Debugger/StartDebugDialog.ui file | annotate | diff | comparison | revisions
Debugger/StartDialog.py file | annotate | diff | comparison | revisions
Debugger/StartProfileDialog.ui file | annotate | diff | comparison | revisions
Debugger/StartRunDialog.ui 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.Debugger.DebugServer.html file | annotate | diff | comparison | revisions
Documentation/Source/eric6.Debugger.DebugUI.html file | annotate | diff | comparison | revisions
Documentation/Source/eric6.Debugger.DebuggerInterfaceNone.html file | annotate | diff | comparison | revisions
Documentation/Source/eric6.Debugger.DebuggerInterfacePython.html file | annotate | diff | comparison | revisions
Documentation/Source/eric6.Debugger.StartDialog.html file | annotate | diff | comparison | revisions
Documentation/Source/eric6.E5Gui.E5TextEditSearchWidget.html file | annotate | diff | comparison | revisions
Documentation/Source/eric6.Helpviewer.Download.DownloadItem.html file | annotate | diff | comparison | revisions
Documentation/Source/eric6.Helpviewer.Download.DownloadManager.html file | annotate | diff | comparison | revisions
Documentation/Source/eric6.MultiProject.MultiProject.html file | annotate | diff | comparison | revisions
Documentation/Source/eric6.MultiProject.MultiProjectBrowser.html file | annotate | diff | comparison | revisions
Documentation/Source/eric6.Preferences.__init__.html file | annotate | diff | comparison | revisions
Documentation/Source/eric6.Project.Project.html file | annotate | diff | comparison | revisions
Documentation/Source/eric6.QScintilla.Editor.html file | annotate | diff | comparison | revisions
Documentation/Source/eric6.UI.Previewers.PreviewerHTML.html file | annotate | diff | comparison | revisions
Documentation/Source/eric6.UI.UserInterface.html file | annotate | diff | comparison | revisions
Documentation/Source/eric6.ViewManager.ViewManager.html file | annotate | diff | comparison | revisions
Documentation/Source/eric6.WebBrowser.Download.DownloadItem.html file | annotate | diff | comparison | revisions
Documentation/Source/eric6.WebBrowser.Download.DownloadManager.html file | annotate | diff | comparison | revisions
Documentation/Source/index-eric6.Preferences.ConfigurationPages.html file | annotate | diff | comparison | revisions
Documentation/Source/index-eric6.UI.html file | annotate | diff | comparison | revisions
Documentation/Source/index-eric6.html file | annotate | diff | comparison | revisions
E5Gui/E5TextEditSearchWidget.py file | annotate | diff | comparison | revisions
E5Gui/E5TextEditSearchWidget.ui file | annotate | diff | comparison | revisions
E5XML/Config.py file | annotate | diff | comparison | revisions
E5XML/MultiProjectReader.py file | annotate | diff | comparison | revisions
E5XML/SessionReader.py file | annotate | diff | comparison | revisions
E5XML/SessionWriter.py file | annotate | diff | comparison | revisions
Helpviewer/Download/DownloadItem.py file | annotate | diff | comparison | revisions
Helpviewer/Download/DownloadItem.ui file | annotate | diff | comparison | revisions
Helpviewer/Download/DownloadManager.py file | annotate | diff | comparison | revisions
MultiProject/MultiProject.py file | annotate | diff | comparison | revisions
MultiProject/MultiProjectBrowser.py file | annotate | diff | comparison | revisions
PluginManager/PluginManager.py file | annotate | diff | comparison | revisions
Plugins/CheckerPlugins/CodeStyleChecker/DocStyleChecker.py file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsMercurial/HgLogBrowserDialog.py file | annotate | diff | comparison | revisions
Preferences/ConfigurationDialog.py file | annotate | diff | comparison | revisions
Preferences/ConfigurationPages/EditorAutocompletionPage.py file | annotate | diff | comparison | revisions
Preferences/ConfigurationPages/EditorAutocompletionPage.ui file | annotate | diff | comparison | revisions
Preferences/__init__.py file | annotate | diff | comparison | revisions
Project/Project.py file | annotate | diff | comparison | revisions
QScintilla/Editor.py file | annotate | diff | comparison | revisions
README-MacOSX.rst file | annotate | diff | comparison | revisions
UI/Previewers/PreviewerHTML.py file | annotate | diff | comparison | revisions
UI/UserInterface.py file | annotate | diff | comparison | revisions
Utilities/BackgroundService.py file | annotate | diff | comparison | revisions
ViewManager/ViewManager.py file | annotate | diff | comparison | revisions
WebBrowser/AdBlock/AdBlockRule.py file | annotate | diff | comparison | revisions
WebBrowser/Download/DownloadItem.py file | annotate | diff | comparison | revisions
WebBrowser/Download/DownloadItem.ui file | annotate | diff | comparison | revisions
WebBrowser/Download/DownloadManager.py file | annotate | diff | comparison | revisions
WebBrowser/WebBrowserView.py file | annotate | diff | comparison | revisions
WebBrowser/WebBrowserWindow.py file | annotate | diff | comparison | revisions
changelog file | annotate | diff | comparison | revisions
eric6.e4p file | annotate | diff | comparison | revisions
i18n/eric6_cs.ts file | annotate | diff | comparison | revisions
i18n/eric6_de.qm file | annotate | diff | comparison | revisions
i18n/eric6_de.ts file | annotate | diff | comparison | revisions
i18n/eric6_empty.ts file | annotate | diff | comparison | revisions
i18n/eric6_en.ts file | annotate | diff | comparison | revisions
i18n/eric6_es.qm file | annotate | diff | comparison | revisions
i18n/eric6_es.ts file | annotate | diff | comparison | revisions
i18n/eric6_fr.ts file | annotate | diff | comparison | revisions
i18n/eric6_it.qm file | annotate | diff | comparison | revisions
i18n/eric6_pt.ts file | annotate | diff | comparison | revisions
i18n/eric6_ru.qm file | annotate | diff | comparison | revisions
i18n/eric6_ru.ts file | annotate | diff | comparison | revisions
i18n/eric6_tr.ts file | annotate | diff | comparison | revisions
i18n/eric6_zh_CN.ts file | annotate | diff | comparison | revisions
--- a/APIs/Python3/eric6.api	Wed Nov 01 19:22:02 2017 +0100
+++ b/APIs/Python3/eric6.api	Fri Nov 03 12:10:16 2017 +0100
@@ -439,13 +439,13 @@
 eric6.Debugger.DebugServer.DebugServer.remoteClientVariables?4(scope, filterList, framenr=0)
 eric6.Debugger.DebugServer.DebugServer.remoteCompletion?4(text)
 eric6.Debugger.DebugServer.DebugServer.remoteContinue?4(special=False)
-eric6.Debugger.DebugServer.DebugServer.remoteCoverage?4(fn, argv, wd, env, autoClearShell=True, erase=False, forProject=False, runInConsole=False, clientType="")
+eric6.Debugger.DebugServer.DebugServer.remoteCoverage?4(interpreter, fn, argv, wd, env, autoClearShell=True, erase=False, forProject=False, runInConsole=False, clientType="")
 eric6.Debugger.DebugServer.DebugServer.remoteEnvironment?4(env)
-eric6.Debugger.DebugServer.DebugServer.remoteLoad?4(fn, argv, wd, env, autoClearShell=True, tracePython=False, autoContinue=True, forProject=False, runInConsole=False, autoFork=False, forkChild=False, clientType="", enableCallTrace=False)
+eric6.Debugger.DebugServer.DebugServer.remoteLoad?4(interpreter, fn, argv, wd, env, autoClearShell=True, tracePython=False, autoContinue=True, forProject=False, runInConsole=False, autoFork=False, forkChild=False, clientType="", enableCallTrace=False)
 eric6.Debugger.DebugServer.DebugServer.remoteMoveIP?4(line)
-eric6.Debugger.DebugServer.DebugServer.remoteProfile?4(fn, argv, wd, env, autoClearShell=True, erase=False, forProject=False, runInConsole=False, clientType="")
+eric6.Debugger.DebugServer.DebugServer.remoteProfile?4(interpreter, fn, argv, wd, env, autoClearShell=True, erase=False, forProject=False, runInConsole=False, clientType="")
 eric6.Debugger.DebugServer.DebugServer.remoteRawInput?4(s)
-eric6.Debugger.DebugServer.DebugServer.remoteRun?4(fn, argv, wd, env, autoClearShell=True, forProject=False, runInConsole=False, autoFork=False, forkChild=False, clientType="")
+eric6.Debugger.DebugServer.DebugServer.remoteRun?4(interpreter, fn, argv, wd, env, autoClearShell=True, forProject=False, runInConsole=False, autoFork=False, forkChild=False, clientType="")
 eric6.Debugger.DebugServer.DebugServer.remoteSetThread?4(tid)
 eric6.Debugger.DebugServer.DebugServer.remoteStatement?4(stmt)
 eric6.Debugger.DebugServer.DebugServer.remoteStep?4()
@@ -479,7 +479,7 @@
 eric6.Debugger.DebugServer.DebugServer.signalClientVariable?4(scope, variables)
 eric6.Debugger.DebugServer.DebugServer.signalClientVariables?4(scope, variables)
 eric6.Debugger.DebugServer.DebugServer.signalClientWatchConditionError?4(condition)
-eric6.Debugger.DebugServer.DebugServer.startClient?4(unplanned=True, clType=None, forProject=False, runInConsole=False)
+eric6.Debugger.DebugServer.DebugServer.startClient?4(unplanned=True, clType=None, forProject=False, runInConsole=False, interpreter="")
 eric6.Debugger.DebugServer.DebugServer.unregisterDebuggerInterface?4(interfaceName)
 eric6.Debugger.DebugServer.DebugServer.utFinished?7
 eric6.Debugger.DebugServer.DebugServer.utPrepared?7
@@ -511,6 +511,7 @@
 eric6.Debugger.DebugUI.DebugUI.setExcIgnoreList?4(excIgnoreList)
 eric6.Debugger.DebugUI.DebugUI.setExcList?4(excList)
 eric6.Debugger.DebugUI.DebugUI.setExceptionReporting?4(exceptions)
+eric6.Debugger.DebugUI.DebugUI.setInterpreterHistory?4(interpreterStr, clearHistories=False, history=None)
 eric6.Debugger.DebugUI.DebugUI.setTracePython?4(tracePython)
 eric6.Debugger.DebugUI.DebugUI.setWdHistory?4(wdStr, clearHistories=False, history=None)
 eric6.Debugger.DebugUI.DebugUI.shutdown?4()
@@ -578,8 +579,8 @@
 eric6.Debugger.DebuggerInterfaceNone.DebuggerInterfaceNone.remoteWatchpointIgnore?4(cond, count)
 eric6.Debugger.DebuggerInterfaceNone.DebuggerInterfaceNone.setCallTraceEnabled?4(on)
 eric6.Debugger.DebuggerInterfaceNone.DebuggerInterfaceNone.shutdown?4()
-eric6.Debugger.DebuggerInterfaceNone.DebuggerInterfaceNone.startRemote?4(port, runInConsole)
-eric6.Debugger.DebuggerInterfaceNone.DebuggerInterfaceNone.startRemoteForProject?4(port, runInConsole)
+eric6.Debugger.DebuggerInterfaceNone.DebuggerInterfaceNone.startRemote?4(port, runInConsole, interpreter)
+eric6.Debugger.DebuggerInterfaceNone.DebuggerInterfaceNone.startRemoteForProject?4(port, runInConsole, interpreter)
 eric6.Debugger.DebuggerInterfaceNone.DebuggerInterfaceNone?1(debugServer, passive)
 eric6.Debugger.DebuggerInterfaceNone.createDebuggerInterfaceNone?4(debugServer, passive)
 eric6.Debugger.DebuggerInterfaceNone.getRegistryData?4()
@@ -620,8 +621,8 @@
 eric6.Debugger.DebuggerInterfacePython.DebuggerInterfacePython.remoteWatchpointIgnore?4(cond, count)
 eric6.Debugger.DebuggerInterfacePython.DebuggerInterfacePython.setCallTraceEnabled?4(on)
 eric6.Debugger.DebuggerInterfacePython.DebuggerInterfacePython.shutdown?4()
-eric6.Debugger.DebuggerInterfacePython.DebuggerInterfacePython.startRemote?4(port, runInConsole)
-eric6.Debugger.DebuggerInterfacePython.DebuggerInterfacePython.startRemoteForProject?4(port, runInConsole)
+eric6.Debugger.DebuggerInterfacePython.DebuggerInterfacePython.startRemote?4(port, runInConsole, interpreter)
+eric6.Debugger.DebuggerInterfacePython.DebuggerInterfacePython.startRemoteForProject?4(port, runInConsole, interpreter)
 eric6.Debugger.DebuggerInterfacePython.DebuggerInterfacePython?1(debugServer, passive, pythonVariant)
 eric6.Debugger.DebuggerInterfacePython.createDebuggerInterfacePython2?4(debugServer, passive)
 eric6.Debugger.DebuggerInterfacePython.createDebuggerInterfacePython3?4(debugServer, passive)
@@ -653,7 +654,7 @@
 eric6.Debugger.StartDialog.StartDialog.historiesModified?4()
 eric6.Debugger.StartDialog.StartDialog.on_buttonBox_clicked?4(button)
 eric6.Debugger.StartDialog.StartDialog.on_modFuncCombo_editTextChanged?4()
-eric6.Debugger.StartDialog.StartDialog?1(caption, argvList, wdList, envList, exceptions, parent=None, dialogType=0, modfuncList=None, tracePython=False, autoClearShell=True, autoContinue=True, autoFork=False, forkChild=False)
+eric6.Debugger.StartDialog.StartDialog?1(caption, interpreterList, argvList, wdList, envList, exceptions, parent=None, dialogType=0, modfuncList=None, tracePython=False, autoClearShell=True, autoContinue=True, autoFork=False, forkChild=False)
 eric6.Debugger.StartHistoryEditDialog.StartHistoryEditDialog.getHistory?4()
 eric6.Debugger.StartHistoryEditDialog.StartHistoryEditDialog.on_deleteAllButton_clicked?4()
 eric6.Debugger.StartHistoryEditDialog.StartHistoryEditDialog.on_deleteButton_clicked?4()
@@ -1250,7 +1251,7 @@
 eric6.E5Gui.E5TableView.E5TableView.keyPressEvent?4(evt)
 eric6.E5Gui.E5TableView.E5TableView.removeAll?4()
 eric6.E5Gui.E5TableView.E5TableView.removeSelected?4()
-eric6.E5Gui.E5TextEditSearchWidget.E5TextEditSearchWidget.attachTextEdit?4(textedit)
+eric6.E5Gui.E5TextEditSearchWidget.E5TextEditSearchWidget.attachTextEdit?4(textedit, editType="QTextEdit")
 eric6.E5Gui.E5TextEditSearchWidget.E5TextEditSearchWidget.keyPressEvent?4(event)
 eric6.E5Gui.E5TextEditSearchWidget.E5TextEditSearchWidget.on_findNextButton_clicked?4()
 eric6.E5Gui.E5TextEditSearchWidget.E5TextEditSearchWidget.on_findPrevButton_clicked?4()
@@ -1537,6 +1538,18 @@
 eric6.E5Network.isValidAddress?4(address)
 eric6.E5Network.isValidIPv4Address?4(address)
 eric6.E5Network.isValidIPv6Address?4(address)
+eric6.E5Utilities.E5Cache.E5Cache.add?4(key, item)
+eric6.E5Utilities.E5Cache.E5Cache.clear?4()
+eric6.E5Utilities.E5Cache.E5Cache.get?4(key)
+eric6.E5Utilities.E5Cache.E5Cache.getMaximumCacheTime?4()
+eric6.E5Utilities.E5Cache.E5Cache.getSize?4()
+eric6.E5Utilities.E5Cache.E5Cache.info?4()
+eric6.E5Utilities.E5Cache.E5Cache.length?4()
+eric6.E5Utilities.E5Cache.E5Cache.remove?4(key)
+eric6.E5Utilities.E5Cache.E5Cache.reset?4()
+eric6.E5Utilities.E5Cache.E5Cache.setMaximumCacheTime?4(time)
+eric6.E5Utilities.E5Cache.E5Cache.setSize?4(newSize)
+eric6.E5Utilities.E5Cache.E5Cache?1(size=100)
 eric6.E5XML.Config.debuggerPropertiesFileFormatVersion?7
 eric6.E5XML.Config.dictionariesListFileFormatVersion?7
 eric6.E5XML.Config.highlightingStylesFileFormatVersion?7
@@ -3546,7 +3559,8 @@
 eric6.MultiProject.AddProjectDialog.AddProjectDialog.on_nameEdit_textChanged?4(txt)
 eric6.MultiProject.AddProjectDialog.AddProjectDialog?1(parent=None, startdir=None, project=None, categories=None)
 eric6.MultiProject.MultiProject.MultiProject.addE5Actions?4(actions)
-eric6.MultiProject.MultiProject.MultiProject.addProject?4(startdir=None)
+eric6.MultiProject.MultiProject.MultiProject.addNewProject?4(startdir=None)
+eric6.MultiProject.MultiProject.MultiProject.addProject?4(project)
 eric6.MultiProject.MultiProject.MultiProject.changeProjectProperties?4(pro)
 eric6.MultiProject.MultiProject.MultiProject.checkDirty?4()
 eric6.MultiProject.MultiProject.MultiProject.clearRecent?4()
@@ -3560,7 +3574,7 @@
 eric6.MultiProject.MultiProject.MultiProject.getMostRecent?4()
 eric6.MultiProject.MultiProject.MultiProject.getMultiProjectFile?4()
 eric6.MultiProject.MultiProject.MultiProject.getMultiProjectPath?4()
-eric6.MultiProject.MultiProject.MultiProject.getProject?4(fn)
+eric6.MultiProject.MultiProject.MultiProject.getProject?4(uid)
 eric6.MultiProject.MultiProject.MultiProject.getProjects?4()
 eric6.MultiProject.MultiProject.MultiProject.initActions?4()
 eric6.MultiProject.MultiProject.MultiProject.initMenu?4()
@@ -3578,12 +3592,14 @@
 eric6.MultiProject.MultiProject.MultiProject.projectOpened?7
 eric6.MultiProject.MultiProject.MultiProject.projectRemoved?7
 eric6.MultiProject.MultiProject.MultiProject.removeE5Actions?4(actions)
-eric6.MultiProject.MultiProject.MultiProject.removeProject?4(fn)
+eric6.MultiProject.MultiProject.MultiProject.removeProject?4(uid)
 eric6.MultiProject.MultiProject.MultiProject.saveMultiProject?4()
 eric6.MultiProject.MultiProject.MultiProject.saveMultiProjectAs?4()
 eric6.MultiProject.MultiProject.MultiProject.setDirty?4(b)
 eric6.MultiProject.MultiProject.MultiProject.showMenu?7
 eric6.MultiProject.MultiProject.MultiProject?1(project, parent=None, filename=None)
+eric6.MultiProject.MultiProjectBrowser.MultiProjectBrowser.ProjectFileNameRole?7
+eric6.MultiProject.MultiProjectBrowser.MultiProjectBrowser.ProjectUidRole?7
 eric6.MultiProject.MultiProjectBrowser.MultiProjectBrowser?1(multiProject, project, parent=None)
 eric6.MultiProject.PropertiesDialog.PropertiesDialog.storeData?4()
 eric6.MultiProject.PropertiesDialog.PropertiesDialog?1(multiProject, new=True, parent=None)
@@ -6295,6 +6311,9 @@
 eric6.Preferences.ConfigurationPages.EditorCalltipsQScintillaPage.EditorCalltipsQScintillaPage.save?4()
 eric6.Preferences.ConfigurationPages.EditorCalltipsQScintillaPage.EditorCalltipsQScintillaPage?1()
 eric6.Preferences.ConfigurationPages.EditorCalltipsQScintillaPage.create?4(dlg)
+eric6.Preferences.ConfigurationPages.EditorDocViewerPage.EditorDocViewerPage.save?4()
+eric6.Preferences.ConfigurationPages.EditorDocViewerPage.EditorDocViewerPage?1(parent=None)
+eric6.Preferences.ConfigurationPages.EditorDocViewerPage.create?4(dlg)
 eric6.Preferences.ConfigurationPages.EditorExportersPage.EditorExportersPage.on_exportersCombo_activated?4(exporter)
 eric6.Preferences.ConfigurationPages.EditorExportersPage.EditorExportersPage.on_rtfFontButton_clicked?4()
 eric6.Preferences.ConfigurationPages.EditorExportersPage.EditorExportersPage.save?4()
@@ -6576,6 +6595,7 @@
 eric6.Preferences.Prefs.corbaDefaults?7
 eric6.Preferences.Prefs.debuggerDefaults?7
 eric6.Preferences.Prefs.diffColourDefaults?7
+eric6.Preferences.Prefs.docuViewerDefaults?7
 eric6.Preferences.Prefs.editorColourDefaults?7
 eric6.Preferences.Prefs.editorDefaults?7
 eric6.Preferences.Prefs.editorExporterDefaults?7
@@ -6672,6 +6692,7 @@
 eric6.Preferences.getCorba?4(key, prefClass=Prefs)
 eric6.Preferences.getDebugger?4(key, prefClass=Prefs)
 eric6.Preferences.getDiffColour?4(key, prefClass=Prefs)
+eric6.Preferences.getDocuViewer?4(key, prefClass=Prefs)
 eric6.Preferences.getEditor?4(key, prefClass=Prefs)
 eric6.Preferences.getEditorAPI?4(language, projectType="", prefClass=Prefs)
 eric6.Preferences.getEditorColour?4(key, prefClass=Prefs)
@@ -6726,6 +6747,7 @@
 eric6.Preferences.setCorba?4(key, value, prefClass=Prefs)
 eric6.Preferences.setDebugger?4(key, value, prefClass=Prefs)
 eric6.Preferences.setDiffColour?4(key, value, prefClass=Prefs)
+eric6.Preferences.setDocuViewer?4(key, value, prefClass=Prefs)
 eric6.Preferences.setEditor?4(key, value, prefClass=Prefs)
 eric6.Preferences.setEditorAPI?4(language, projectType, apilist, prefClass=Prefs)
 eric6.Preferences.setEditorColour?4(key, value, prefClass=Prefs)
@@ -6966,7 +6988,7 @@
 eric6.Project.Project.Project.saveProject?4()
 eric6.Project.Project.Project.saveProjectAs?4()
 eric6.Project.Project.Project.setData?4(category, key, data)
-eric6.Project.Project.Project.setDbgInfo?4(argv, wd, env, excReporting, excList, excIgnoreList, autoClearShell, tracePython=None, autoContinue=None)
+eric6.Project.Project.Project.setDbgInfo?4(interpreter, argv, wd, env, excReporting, excList, excIgnoreList, autoClearShell, tracePython=None, autoContinue=None)
 eric6.Project.Project.Project.setDirty?4(b)
 eric6.Project.Project.Project.setStatusMonitorAutoUpdate?4(auto)
 eric6.Project.Project.Project.setStatusMonitorInterval?4(interval)
@@ -7236,9 +7258,11 @@
 eric6.QScintilla.Editor.Editor.EndEditToken?7
 eric6.QScintilla.Editor.Editor.EnumID?7
 eric6.QScintilla.Editor.Editor.FromDocumentID?7
+eric6.QScintilla.Editor.Editor.KeywordsID?7
 eric6.QScintilla.Editor.Editor.MethodID?7
 eric6.QScintilla.Editor.Editor.MethodPrivateID?7
 eric6.QScintilla.Editor.Editor.MethodProtectedID?7
+eric6.QScintilla.Editor.Editor.ModuleID?7
 eric6.QScintilla.Editor.Editor.RequestSyncToken?7
 eric6.QScintilla.Editor.Editor.Separator?7
 eric6.QScintilla.Editor.Editor.StartEditToken?7
@@ -7248,7 +7272,7 @@
 eric6.QScintilla.Editor.Editor.WarningStyle?7
 eric6.QScintilla.Editor.Editor.addCallTipHook?4(key, func)
 eric6.QScintilla.Editor.Editor.addClone?4(editor)
-eric6.QScintilla.Editor.Editor.addCompletionListHook?4(key, func)
+eric6.QScintilla.Editor.Editor.addCompletionListHook?4(key, func, async=False)
 eric6.QScintilla.Editor.Editor.addedToProject?4()
 eric6.QScintilla.Editor.Editor.autoComplete?4(auto=False, context=True)
 eric6.QScintilla.Editor.Editor.autoCompleteQScintilla?4()
@@ -7283,6 +7307,7 @@
 eric6.QScintilla.Editor.Editor.commentLine?4()
 eric6.QScintilla.Editor.Editor.commentLineOrSelection?4()
 eric6.QScintilla.Editor.Editor.commentSelection?4()
+eric6.QScintilla.Editor.Editor.completionsListReady?4(completions, acText)
 eric6.QScintilla.Editor.Editor.contextMenuEvent?4(evt)
 eric6.QScintilla.Editor.Editor.coverageMarkersShown?7
 eric6.QScintilla.Editor.Editor.curLineHasBreakpoint?4()
@@ -8652,6 +8677,29 @@
 eric6.UI.BrowserSortFilterProxyModel.BrowserSortFilterProxyModel?1(parent=None)
 eric6.UI.ClearPrivateDataDialog.ClearPrivateDataDialog.getData?4()
 eric6.UI.ClearPrivateDataDialog.ClearPrivateDataDialog?1(parent=None)
+eric6.UI.CodeDocumentationViewer.CodeDocumentationViewer.documentationReady?4(documentationInfo, isWarning=False, isDocWarning=False)
+eric6.UI.CodeDocumentationViewer.CodeDocumentationViewer.finalizeSetup?4()
+eric6.UI.CodeDocumentationViewer.CodeDocumentationViewer.getProviders?4()
+eric6.UI.CodeDocumentationViewer.CodeDocumentationViewer.isSupportedLanguage?4(language)
+eric6.UI.CodeDocumentationViewer.CodeDocumentationViewer.on_providerComboBox_currentIndexChanged?4(index)
+eric6.UI.CodeDocumentationViewer.CodeDocumentationViewer.preferencesChanged?4()
+eric6.UI.CodeDocumentationViewer.CodeDocumentationViewer.providerAdded?7
+eric6.UI.CodeDocumentationViewer.CodeDocumentationViewer.providerRemoved?7
+eric6.UI.CodeDocumentationViewer.CodeDocumentationViewer.registerProvider?4(providerName, providerDisplay, provider, supported)
+eric6.UI.CodeDocumentationViewer.CodeDocumentationViewer.showInfo?4(editor)
+eric6.UI.CodeDocumentationViewer.CodeDocumentationViewer.shutdown?4()
+eric6.UI.CodeDocumentationViewer.CodeDocumentationViewer.unregisterProvider?4(providerName)
+eric6.UI.CodeDocumentationViewer.CodeDocumentationViewer?1(parent=None)
+eric6.UI.CodeDocumentationViewer.PlainTextDocumentationViewer.clear?4()
+eric6.UI.CodeDocumentationViewer.PlainTextDocumentationViewer.preferencesChanged?4()
+eric6.UI.CodeDocumentationViewer.PlainTextDocumentationViewer.setText?4(text)
+eric6.UI.CodeDocumentationViewer.PlainTextDocumentationViewer?1(parent=None)
+eric6.UI.CodeDocumentationViewer.WebViewDocumentationViewer.clear?4()
+eric6.UI.CodeDocumentationViewer.WebViewDocumentationViewer.setHtml?4(html)
+eric6.UI.CodeDocumentationViewer.WebViewDocumentationViewer?1(parent=None)
+eric6.UI.CodeDocumentationViewerTemplate.prepareDocumentationViewerHtmlDocWarningDocument?4(text)
+eric6.UI.CodeDocumentationViewerTemplate.prepareDocumentationViewerHtmlDocument?4(documentationInfo)
+eric6.UI.CodeDocumentationViewerTemplate.prepareDocumentationViewerHtmlWarningDocument?4(text)
 eric6.UI.CompareDialog.CompareDialog.compare?4(lines1, lines2, name1="", name2="")
 eric6.UI.CompareDialog.CompareDialog.on_buttonBox_clicked?4(button)
 eric6.UI.CompareDialog.CompareDialog.on_diffButton_clicked?4()
@@ -8857,6 +8905,7 @@
 eric6.UI.UserInterface.UserInterface.ErrorLogFileName?7
 eric6.UI.UserInterface.UserInterface.LeftSide?7
 eric6.UI.UserInterface.UserInterface.RightSide?7
+eric6.UI.UserInterface.UserInterface.activateCodeDocumentationViewer?4(switchFocus=True)
 eric6.UI.UserInterface.UserInterface.activateCooperationViewer?4()
 eric6.UI.UserInterface.UserInterface.addE5Actions?4(actions, actionType)
 eric6.UI.UserInterface.UserInterface.addSideWidget?4(side, widget, icon, label)
@@ -8871,6 +8920,7 @@
 eric6.UI.UserInterface.UserInterface.checkProjectsWorkspace?4()
 eric6.UI.UserInterface.UserInterface.closeEvent?4(event)
 eric6.UI.UserInterface.UserInterface.createPopupMenu?4()
+eric6.UI.UserInterface.UserInterface.documentationViewer?4()
 eric6.UI.UserInterface.UserInterface.dragEnterEvent?4(event)
 eric6.UI.UserInterface.UserInterface.dragLeaveEvent?4(event)
 eric6.UI.UserInterface.UserInterface.dragMoveEvent?4(event)
@@ -9490,6 +9540,7 @@
 eric6.ViewManager.ViewManager.ViewManager.insertNumber?4(txt)
 eric6.ViewManager.ViewManager.ViewManager.insertSymbol?4(txt)
 eric6.ViewManager.ViewManager.ViewManager.isConnected?4()
+eric6.ViewManager.ViewManager.ViewManager.isEditorInfoSupported?4(language)
 eric6.ViewManager.ViewManager.ViewManager.lastEditorClosed?7
 eric6.ViewManager.ViewManager.ViewManager.mainWidget?4()
 eric6.ViewManager.ViewManager.ViewManager.newEditor?4()
@@ -9531,6 +9582,7 @@
 eric6.ViewManager.ViewManager.ViewManager.shareConnected?4(connected)
 eric6.ViewManager.ViewManager.ViewManager.shareEditor?4(share)
 eric6.ViewManager.ViewManager.ViewManager.showDebugSource?4(fn, line)
+eric6.ViewManager.ViewManager.ViewManager.showEditorInfo?4(editor)
 eric6.ViewManager.ViewManager.ViewManager.showReplaceWidget?4()
 eric6.ViewManager.ViewManager.ViewManager.showSearchWidget?4()
 eric6.ViewManager.ViewManager.ViewManager.showWindowMenu?4(windowMenu)
--- a/APIs/Python3/eric6.bas	Wed Nov 01 19:22:02 2017 +0100
+++ b/APIs/Python3/eric6.bas	Fri Nov 03 12:10:16 2017 +0100
@@ -76,6 +76,7 @@
 ClickToFlashPlugin WebPluginInterface
 ClickToFlashWhitelistDialog QDialog Ui_ClickToFlashWhitelistDialog
 ClosedTabsManager QObject
+CodeDocumentationViewer QWidget
 CodeMetricsDialog QDialog Ui_CodeMetricsDialog
 CodeStyleAddBuiltinIgnoreDialog QDialog Ui_CodeStyleAddBuiltinIgnoreDialog
 CodeStyleCheckerDialog QDialog Ui_CodeStyleCheckerDialog
@@ -225,6 +226,7 @@
 EditorButtonsWidget QWidget
 EditorCalltipsPage ConfigurationPageBase Ui_EditorCalltipsPage
 EditorCalltipsQScintillaPage ConfigurationPageBase Ui_EditorCalltipsQScintillaPage
+EditorDocViewerPage ConfigurationPageBase Ui_EditorDocViewerPage
 EditorExportersPage ConfigurationPageBase Ui_EditorExportersPage
 EditorFilePage ConfigurationPageBase Ui_EditorFilePage
 EditorGeneralPage ConfigurationPageBase Ui_EditorGeneralPage
@@ -580,6 +582,7 @@
 PersonalInformationManager QObject
 PixmapDiagram E5MainWindow
 PlainStrList list
+PlainTextDocumentationViewer QWidget
 PluginActivationError PluginError
 PluginClassFormatError PluginError
 PluginDetailsDialog QDialog Ui_PluginDetailsDialog
@@ -897,6 +900,7 @@
 WebIconProvider QObject
 WebInspector QWebEngineView
 WebPluginFactory QWebPluginFactory
+WebViewDocumentationViewer QWidget
 WidgetArea QMdiArea
 WidgetView QWidget
 XMLStreamReaderBase QXmlStreamReader
--- a/DTDs/Session-5.0.dtd	Wed Nov 01 19:22:02 2017 +0100
+++ b/DTDs/Session-5.0.dtd	Fri Nov 03 12:10:16 2017 +0100
@@ -1,4 +1,4 @@
-<!-- This is the DTD for eric's (project) session file version 4.4 -->
+<!-- This is the DTD for eric's (project) session file version 5.0 -->
 
 <!ELEMENT   MultiProject    (#PCDATA)>
 
--- a/DebugClients/Python/AsyncFile.py	Wed Nov 01 19:22:02 2017 +0100
+++ b/DebugClients/Python/AsyncFile.py	Fri Nov 03 12:10:16 2017 +0100
@@ -60,6 +60,9 @@
         self.name = name
         self.nWriteErrors = 0
         self.encoding = "utf-8"
+        self.errors = None
+        self.newlines = None
+        self.line_buffering = False
         
         self.wpending = []
 
--- a/DebugClients/Python/ThreadExtension.py	Wed Nov 01 19:22:02 2017 +0100
+++ b/DebugClients/Python/ThreadExtension.py	Fri Nov 03 12:10:16 2017 +0100
@@ -291,8 +291,6 @@
             if hasattr(module, 'settrace'):
                 self.greenlet = True
                 DebugBase.pollTimerEnabled = False
-            
-            # TODO: Implement the debugger extension for greenlets
         
         # Add hook for threading.run()
         elif (fullname == "threading" and self.threadingAttached is False):
@@ -330,7 +328,7 @@
                     # intercept the thread creation by threading.Thread
                     self.run = lambda s=self, run=self.run: _bootstrap(s, run)
                     
-                    super(ThreadWrapper, self).__init__(*args, **kwargs)
+                    module.Thread.__init__(self, *args, **kwargs)
             
             module.Thread = ThreadWrapper
         
--- a/Debugger/DebugServer.py	Wed Nov 01 19:22:02 2017 +0100
+++ b/Debugger/DebugServer.py	Fri Nov 03 12:10:16 2017 +0100
@@ -445,7 +445,7 @@
                 'DebugClient/Type', self.clientType)
         
     def startClient(self, unplanned=True, clType=None, forProject=False,
-                    runInConsole=False):
+                    runInConsole=False, interpreter=""):
         """
         Public method to start a debug client.
         
@@ -454,6 +454,8 @@
         @keyparam forProject flag indicating a project related action (boolean)
         @keyparam runInConsole flag indicating to start the debugger in a
             console window (boolean)
+        @keyparam interpreter interpreter to be used to execute the remote
+            side (string)
         """
         self.running = False
         
@@ -478,16 +480,16 @@
                 project = e5App().getObject("Project")
                 if not project.isDebugPropertiesLoaded():
                     self.clientProcess, isNetworked, clientInterpreter = \
-                        self.debuggerInterface.startRemote(self.serverPort(),
-                                                           runInConsole)
+                        self.debuggerInterface.startRemote(
+                            self.serverPort(), runInConsole, interpreter)
                 else:
                     self.clientProcess, isNetworked, clientInterpreter = \
                         self.debuggerInterface.startRemoteForProject(
-                            self.serverPort(), runInConsole)
+                            self.serverPort(), runInConsole, interpreter)
             else:
                 self.clientProcess, isNetworked, clientInterpreter = \
                     self.debuggerInterface.startRemote(
-                        self.serverPort(), runInConsole)
+                        self.serverPort(), runInConsole, interpreter)
             
             if self.clientProcess:
                 self.clientProcess.readyReadStandardError.connect(
@@ -798,13 +800,15 @@
                 pass
         self.debuggerInterface.remoteEnvironment(envdict)
         
-    def remoteLoad(self, fn, argv, wd, env, autoClearShell=True,
+    def remoteLoad(self, interpreter, fn, argv, wd, env, autoClearShell=True,
                    tracePython=False, autoContinue=True, forProject=False,
                    runInConsole=False, autoFork=False, forkChild=False,
                    clientType="", enableCallTrace=False):
         """
         Public method to load a new program to debug.
         
+        @param interpreter interpreter to be used to execute the remote
+            side (string)
         @param fn the filename to debug (string)
         @param argv the commandline arguments to pass to the program (string)
         @param wd the working directory for the program (string)
@@ -838,7 +842,7 @@
         except KeyError:
             self.__setClientType('Python3')    # assume it is a Python3 file
         self.startClient(False, forProject=forProject,
-                         runInConsole=runInConsole)
+                         runInConsole=runInConsole, interpreter=interpreter)
         
         self.setCallTraceEnabled(enableCallTrace)
         self.remoteEnvironment(env)
@@ -850,13 +854,14 @@
         self.__restoreBreakpoints()
         self.__restoreWatchpoints()
 
-    def remoteRun(self, fn, argv, wd, env, autoClearShell=True,
-                  forProject=False, runInConsole=False,
-                  autoFork=False, forkChild=False,
-                  clientType=""):
+    def remoteRun(self, interpreter, fn, argv, wd, env, autoClearShell=True,
+                  forProject=False, runInConsole=False, autoFork=False,
+                  forkChild=False, clientType=""):
         """
         Public method to load a new program to run.
         
+        @param interpreter interpreter to be used to execute the remote
+            side (string)
         @param fn the filename to run (string)
         @param argv the commandline arguments to pass to the program (string)
         @param wd the working directory for the program (string)
@@ -883,7 +888,7 @@
         except KeyError:
             self.__setClientType('Python3')    # assume it is a Python3 file
         self.startClient(False, forProject=forProject,
-                         runInConsole=runInConsole)
+                         runInConsole=runInConsole, interpreter=interpreter)
         
         self.remoteEnvironment(env)
         
@@ -891,12 +896,14 @@
         self.debugging = False
         self.running = True
 
-    def remoteCoverage(self, fn, argv, wd, env, autoClearShell=True,
-                       erase=False, forProject=False, runInConsole=False,
-                       clientType=""):
+    def remoteCoverage(self, interpreter, fn, argv, wd, env,
+                       autoClearShell=True, erase=False, forProject=False,
+                       runInConsole=False, clientType=""):
         """
         Public method to load a new program to collect coverage data.
         
+        @param interpreter interpreter to be used to execute the remote
+            side (string)
         @param fn the filename to run (string)
         @param argv the commandline arguments to pass to the program (string)
         @param wd the working directory for the program (string)
@@ -922,7 +929,7 @@
         except KeyError:
             self.__setClientType('Python3')    # assume it is a Python3 file
         self.startClient(False, forProject=forProject,
-                         runInConsole=runInConsole)
+                         runInConsole=runInConsole, interpreter=interpreter)
         
         self.remoteEnvironment(env)
         
@@ -930,13 +937,14 @@
         self.debugging = False
         self.running = True
 
-    def remoteProfile(self, fn, argv, wd, env, autoClearShell=True,
-                      erase=False, forProject=False,
-                      runInConsole=False,
-                      clientType=""):
+    def remoteProfile(self, interpreter, fn, argv, wd, env,
+                      autoClearShell=True, erase=False, forProject=False,
+                      runInConsole=False, clientType=""):
         """
         Public method to load a new program to collect profiling data.
         
+        @param interpreter interpreter to be used to execute the remote
+            side (string)
         @param fn the filename to run (string)
         @param argv the commandline arguments to pass to the program (string)
         @param wd the working directory for the program (string)
@@ -962,7 +970,7 @@
         except KeyError:
             self.__setClientType('Python3')    # assume it is a Python3 file
         self.startClient(False, forProject=forProject,
-                         runInConsole=runInConsole)
+                         runInConsole=runInConsole, interpreter=interpreter)
         
         self.remoteEnvironment(env)
         
--- a/Debugger/DebugUI.py	Wed Nov 01 19:22:02 2017 +0100
+++ b/Debugger/DebugUI.py	Fri Nov 03 12:10:16 2017 +0100
@@ -77,6 +77,8 @@
         self.editorOpen = False
         
         # read the saved debug info values
+        self.interpreterHistory = Preferences.toList(
+            Preferences.Prefs.settings.value('DebugInfo/InterpreterHistory'))
         self.argvHistory = Preferences.toList(
             Preferences.Prefs.settings.value('DebugInfo/ArgumentsHistory'))
         self.wdHistory = Preferences.toList(
@@ -669,7 +671,26 @@
                                  starttb.windowTitle())
         
         return [starttb, debugtb]
+
+    def setInterpreterHistory(self, interpreterStr, clearHistories=False,
+                              history=None):
+        """
+        Public slot to initialize the interpreter history.
         
+        @param interpreterStr interpreter (string)
+        @param clearHistories flag indicating, that the list should
+            be cleared (boolean)
+        @param history list of history entries to be set (list of strings)
+        """
+        if clearHistories:
+            del self.interpreterHistory[1:]
+        elif history is not None:
+            self.interpreterHistory = history[:]
+        else:
+            if interpreterStr in self.interpreterHistory:
+                self.interpreterHistory.remove(interpreterStr)
+            self.interpreterHistory.insert(0, interpreterStr)
+    
     def setArgvHistory(self, argsStr, clearHistories=False, history=None):
         """
         Public slot to initialize the argv history.
@@ -910,11 +931,14 @@
         """
         Public method to clear the various debug histories.
         """
+        self.interpreterHistory = []
         self.argvHistory = []
         self.wdHistory = []
         self.envHistory = []
         
         Preferences.Prefs.settings.setValue(
+            'DebugInfo/InterpreterHistory', self.interpreterHistory)
+        Preferences.Prefs.settings.setValue(
             'DebugInfo/ArgumentsHistory', self.argvHistory)
         Preferences.Prefs.settings.setValue(
             'DebugInfo/WorkingDirectoryHistory', self.wdHistory)
@@ -926,11 +950,14 @@
         Public method to perform shutdown actions.
         """
         # Just save the 10 most recent entries
+        del self.interpreterHistory[10:]
         del self.argvHistory[10:]
         del self.wdHistory[10:]
         del self.envHistory[10:]
         
         Preferences.Prefs.settings.setValue(
+            'DebugInfo/InterpreterHistory', self.interpreterHistory)
+        Preferences.Prefs.settings.setValue(
             'DebugInfo/ArgumentsHistory', self.argvHistory)
         Preferences.Prefs.settings.setValue(
             'DebugInfo/WorkingDirectoryHistory', self.wdHistory)
@@ -1545,11 +1572,12 @@
         else:
             cap = self.tr("Coverage of Script")
         dlg = StartDialog(
-            cap, self.argvHistory, self.wdHistory,
+            cap, self.interpreterHistory, self.argvHistory, self.wdHistory,
             self.envHistory, self.exceptions, self.ui, 2,
             autoClearShell=self.autoClearShell)
         if dlg.exec_() == QDialog.Accepted:
-            argv, wd, env, exceptions, clearShell, console = dlg.getData()
+            interpreter, argv, wd, env, exceptions, clearShell, console = \
+                dlg.getData()
             eraseCoverage = dlg.getCoverageData()
             
             if runProject:
@@ -1569,7 +1597,7 @@
                 
                 # save the info for later use
                 self.project.setDbgInfo(
-                    argv, wd, env, exceptions, self.excList,
+                    interpreter, argv, wd, env, exceptions, self.excList,
                     self.excIgnoreList, clearShell)
                 
                 self.lastStartAction = 6
@@ -1595,6 +1623,7 @@
             
             # This moves any previous occurrence of these arguments to the head
             # of the list.
+            self.setInterpreterHistory(interpreter)
             self.setArgvHistory(argv)
             self.setWdHistory(wd)
             self.setEnvHistory(env)
@@ -1624,7 +1653,7 @@
                 
                 # Ask the client to open the new program.
                 self.debugServer.remoteCoverage(
-                    fn, argv, wd, env,
+                    interpreter, fn, argv, wd, env,
                     autoClearShell=self.autoClearShell, erase=eraseCoverage,
                     forProject=runProject, runInConsole=console,
                     clientType=self.clientType)
@@ -1632,11 +1661,14 @@
                 self.stopAct.setEnabled(True)
         
         if dlg.clearHistories():
+            self.setInterpreterHistory("", clearHistories=True)
             self.setArgvHistory("", clearHistories=True)
             self.setWdHistory("", clearHistories=True)
             self.setEnvHistory("", clearHistories=True)
         elif dlg.historiesModified():
-            argvHistory, wdHistory, envHistory = dlg.getHistories()
+            argvHistory, wdHistory, envHistory, interpreterHistory = \
+                dlg.getHistories()
+            self.setInterpreterHistory("", history=interpreterHistory)
             self.setArgvHistory("", history=argvHistory)
             self.setWdHistory("", history=wdHistory)
             self.setEnvHistory("", history=envHistory)
@@ -1673,11 +1705,12 @@
         else:
             cap = self.tr("Profile of Script")
         dlg = StartDialog(
-            cap, self.argvHistory, self.wdHistory, self.envHistory,
-            self.exceptions, self.ui, 3,
+            cap, self.interpreterHistory, self.argvHistory, self.wdHistory,
+            self.envHistory, self.exceptions, self.ui, 3,
             autoClearShell=self.autoClearShell)
         if dlg.exec_() == QDialog.Accepted:
-            argv, wd, env, exceptions, clearShell, console = dlg.getData()
+            interpreter, argv, wd, env, exceptions, clearShell, console = \
+                dlg.getData()
             eraseTimings = dlg.getProfilingData()
             
             if runProject:
@@ -1697,7 +1730,7 @@
                 
                 # save the info for later use
                 self.project.setDbgInfo(
-                    argv, wd, env, exceptions, self.excList,
+                    interpreter, argv, wd, env, exceptions, self.excList,
                     self.excIgnoreList, clearShell)
                 
                 self.lastStartAction = 8
@@ -1723,6 +1756,7 @@
             
             # This moves any previous occurrence of these arguments to the head
             # of the list.
+            self.setInterpreterHistory(interpreter)
             self.setArgvHistory(argv)
             self.setWdHistory(wd)
             self.setEnvHistory(env)
@@ -1752,7 +1786,7 @@
                 
                 # Ask the client to open the new program.
                 self.debugServer.remoteProfile(
-                    fn, argv, wd, env,
+                    interpreter, fn, argv, wd, env,
                     autoClearShell=self.autoClearShell, erase=eraseTimings,
                     forProject=runProject, runInConsole=console,
                     clientType=self.clientType)
@@ -1760,11 +1794,14 @@
                 self.stopAct.setEnabled(True)
         
         if dlg.clearHistories():
+            self.setInterpreterHistory("", clearHistories=True)
             self.setArgvHistory("", clearHistories=True)
             self.setWdHistory("", clearHistories=True)
             self.setEnvHistory("", clearHistories=True)
         elif dlg.historiesModified():
-            argvHistory, wdHistory, envHistory = dlg.getHistories()
+            argvHistory, wdHistory, envHistory, interpreterHistory = \
+                dlg.getHistories()
+            self.setInterpreterHistory("", history=interpreterHistory)
             self.setArgvHistory("", history=argvHistory)
             self.setWdHistory("", history=wdHistory)
             self.setEnvHistory("", history=envHistory)
@@ -1801,13 +1838,14 @@
         else:
             cap = self.tr("Run Script")
         dlg = StartDialog(
-            cap, self.argvHistory, self.wdHistory, self.envHistory,
-            self.exceptions, self.ui, 1,
+            cap, self.interpreterHistory, self.argvHistory, self.wdHistory,
+            self.envHistory, self.exceptions, self.ui, 1,
             autoClearShell=self.autoClearShell,
             autoFork=self.forkAutomatically,
             forkChild=self.forkIntoChild)
         if dlg.exec_() == QDialog.Accepted:
-            argv, wd, env, exceptions, clearShell, console = dlg.getData()
+            interpreter, argv, wd, env, exceptions, clearShell, console = \
+                dlg.getData()
             forkAutomatically, forkIntoChild = dlg.getRunData()
             
             if runProject:
@@ -1827,7 +1865,7 @@
                 
                 # save the info for later use
                 self.project.setDbgInfo(
-                    argv, wd, env, exceptions, self.excList,
+                    interpreter, argv, wd, env, exceptions, self.excList,
                     self.excIgnoreList, clearShell)
                 
                 self.lastStartAction = 4
@@ -1853,6 +1891,7 @@
             
             # This moves any previous occurrence of these arguments to the head
             # of the list.
+            self.setInterpreterHistory(interpreter)
             self.setArgvHistory(argv)
             self.setWdHistory(wd)
             self.setEnvHistory(env)
@@ -1883,7 +1922,7 @@
                 
                 # Ask the client to open the new program.
                 self.debugServer.remoteRun(
-                    fn, argv, wd, env,
+                    interpreter, fn, argv, wd, env,
                     autoClearShell=self.autoClearShell, forProject=runProject,
                     runInConsole=console, autoFork=forkAutomatically,
                     forkChild=forkIntoChild, clientType=self.clientType)
@@ -1891,11 +1930,14 @@
                 self.stopAct.setEnabled(True)
         
         if dlg.clearHistories():
+            self.setInterpreterHistory("", clearHistories=True)
             self.setArgvHistory("", clearHistories=True)
             self.setWdHistory("", clearHistories=True)
             self.setEnvHistory("", clearHistories=True)
         elif dlg.historiesModified():
-            argvHistory, wdHistory, envHistory = dlg.getHistories()
+            argvHistory, wdHistory, envHistory, interpreterHistory = \
+                dlg.getHistories()
+            self.setInterpreterHistory("", history=interpreterHistory)
             self.setArgvHistory("", history=argvHistory)
             self.setWdHistory("", history=wdHistory)
             self.setEnvHistory("", history=envHistory)
@@ -1932,12 +1974,14 @@
         else:
             cap = self.tr("Debug Script")
         dlg = StartDialog(
-            cap, self.argvHistory, self.wdHistory, self.envHistory,
-            self.exceptions, self.ui, 0, tracePython=self.tracePython,
-            autoClearShell=self.autoClearShell, autoContinue=self.autoContinue,
-            autoFork=self.forkAutomatically, forkChild=self.forkIntoChild)
+            cap, self.interpreterHistory, self.argvHistory, self.wdHistory,
+            self.envHistory, self.exceptions, self.ui, 0,
+            tracePython=self.tracePython, autoClearShell=self.autoClearShell,
+            autoContinue=self.autoContinue, autoFork=self.forkAutomatically,
+            forkChild=self.forkIntoChild)
         if dlg.exec_() == QDialog.Accepted:
-            argv, wd, env, exceptions, clearShell, console = dlg.getData()
+            interpreter, argv, wd, env, exceptions, clearShell, console = \
+                dlg.getData()
             tracePython, autoContinue, forkAutomatically, forkIntoChild = \
                 dlg.getDebugData()
             
@@ -1958,7 +2002,7 @@
                 
                 # save the info for later use
                 self.project.setDbgInfo(
-                    argv, wd, env, exceptions, self.excList,
+                    interpreter, argv, wd, env, exceptions, self.excList,
                     self.excIgnoreList, clearShell, tracePython=tracePython,
                     autoContinue=self.autoContinue)
                 
@@ -1985,6 +2029,7 @@
             
             # This moves any previous occurrence of these arguments to the head
             # of the list.
+            self.setInterpreterHistory(interpreter)
             self.setArgvHistory(argv)
             self.setWdHistory(wd)
             self.setEnvHistory(env)
@@ -2027,7 +2072,7 @@
                 
                 # Ask the client to open the new program.
                 self.debugServer.remoteLoad(
-                    fn, argv, wd, env,
+                    interpreter, fn, argv, wd, env,
                     autoClearShell=self.autoClearShell,
                     tracePython=tracePython,
                     autoContinue=autoContinue, forProject=debugProject,
@@ -2041,11 +2086,14 @@
                 self.stopAct.setEnabled(True)
         
         if dlg.clearHistories():
+            self.setInterpreterHistory("", clearHistories=True)
             self.setArgvHistory("", clearHistories=True)
             self.setWdHistory("", clearHistories=True)
             self.setEnvHistory("", clearHistories=True)
         elif dlg.historiesModified():
-            argvHistory, wdHistory, envHistory = dlg.getHistories()
+            argvHistory, wdHistory, envHistory, interpreterHistory = \
+                dlg.getHistories()
+            self.setInterpreterHistory("", history=interpreterHistory)
             self.setArgvHistory("", history=argvHistory)
             self.setWdHistory("", history=wdHistory)
             self.setEnvHistory("", history=envHistory)
@@ -2076,6 +2124,7 @@
             return      # should not happen
                     
         # get the saved stuff
+        interpreter = self.interpreterHistory[0]
         wd = self.wdHistory[0]
         argv = self.argvHistory[0]
         fn = self.lastDebuggedFile
@@ -2100,7 +2149,7 @@
                 
                 # Ask the client to debug the new program.
                 self.debugServer.remoteLoad(
-                    fn, argv, wd, env,
+                    interpreter, fn, argv, wd, env,
                     autoClearShell=self.autoClearShell,
                     tracePython=self.tracePython,
                     autoContinue=self.autoContinue,
@@ -2117,7 +2166,7 @@
             elif self.lastStartAction in [3, 4]:
                 # Ask the client to run the new program.
                 self.debugServer.remoteRun(
-                    fn, argv, wd, env,
+                    interpreter, fn, argv, wd, env,
                     autoClearShell=self.autoClearShell,
                     forProject=forProject,
                     runInConsole=self.runInConsole,
@@ -2128,7 +2177,7 @@
             elif self.lastStartAction in [5, 6]:
                 # Ask the client to coverage run the new program.
                 self.debugServer.remoteCoverage(
-                    fn, argv, wd, env,
+                    interpreter, fn, argv, wd, env,
                     autoClearShell=self.autoClearShell,
                     erase=self.eraseCoverage,
                     forProject=forProject,
@@ -2138,7 +2187,7 @@
             elif self.lastStartAction in [7, 8]:
                 # Ask the client to profile run the new program.
                 self.debugServer.remoteProfile(
-                    fn, argv, wd, env,
+                    interpreter, fn, argv, wd, env,
                     autoClearShell=self.autoClearShell,
                     erase=self.eraseTimings,
                     forProject=forProject,
--- a/Debugger/DebuggerInterfaceNone.py	Wed Nov 01 19:22:02 2017 +0100
+++ b/Debugger/DebuggerInterfaceNone.py	Fri Nov 03 12:10:16 2017 +0100
@@ -38,26 +38,30 @@
         # set default values for capabilities of clients
         self.clientCapabilities = ClientDefaultCapabilities
         
-    def startRemote(self, port, runInConsole):
+    def startRemote(self, port, runInConsole, interpreter):
         """
         Public method to start a remote Python interpreter.
         
-        @param port portnumber the debug server is listening on (integer)
+        @param port port number the debug server is listening on (integer)
         @param runInConsole flag indicating to start the debugger in a
             console window (boolean)
+        @param interpreter interpreter to be used to execute the remote
+            side (string)
         @return client process object (QProcess), a flag to indicate
             a network connection (boolean) and the name of the interpreter
             in case of a local execution (string)
         """
         return None, True, ""
 
-    def startRemoteForProject(self, port, runInConsole):
+    def startRemoteForProject(self, port, runInConsole, interpreter):
         """
         Public method to start a remote Python interpreter for a project.
         
-        @param port portnumber the debug server is listening on (integer)
+        @param port port number the debug server is listening on (integer)
         @param runInConsole flag indicating to start the debugger in a
             console window (boolean)
+        @param interpreter interpreter to be used to execute the remote
+            side (string)
         @return client process object (QProcess), a flag to indicate
             a network connection (boolean) and the name of the interpreter
             in case of a local execution (string)
--- a/Debugger/DebuggerInterfacePython.py	Wed Nov 01 19:22:02 2017 +0100
+++ b/Debugger/DebuggerInterfacePython.py	Fri Nov 03 12:10:16 2017 +0100
@@ -132,21 +132,24 @@
         
         return proc
         
-    def startRemote(self, port, runInConsole):
+    def startRemote(self, port, runInConsole, interpreter):
         """
         Public method to start a remote Python interpreter.
         
-        @param port portnumber the debug server is listening on (integer)
+        @param port port number the debug server is listening on (integer)
         @param runInConsole flag indicating to start the debugger in a
             console window (boolean)
+        @param interpreter interpreter to be used to execute the remote
+            side (string)
         @return client process object (QProcess), a flag to indicate
             a network connection (boolean) and the name of the interpreter
             in case of a local execution (string)
         """
-        if self.__variant == "Python2":
-            interpreter = Preferences.getDebugger("PythonInterpreter")
-        else:
-            interpreter = Preferences.getDebugger("Python3Interpreter")
+        if not interpreter:
+            if self.__variant == "Python2":
+                interpreter = Preferences.getDebugger("PythonInterpreter")
+            else:
+                interpreter = Preferences.getDebugger("Python3Interpreter")
         if interpreter == "":
             E5MessageBox.critical(
                 None,
@@ -263,13 +266,15 @@
                     """<p>The debugger backend could not be started.</p>"""))
         return process, self.__isNetworked, interpreter
 
-    def startRemoteForProject(self, port, runInConsole):
+    def startRemoteForProject(self, port, runInConsole, interpreter):
         """
         Public method to start a remote Python interpreter for a project.
         
-        @param port portnumber the debug server is listening on (integer)
+        @param port port number the debug server is listening on (integer)
         @param runInConsole flag indicating to start the debugger in a
             console window (boolean)
+        @param interpreter interpreter to be used to execute the remote
+            side (string)
         @return client process object (QProcess), a flag to indicate
             a network connection (boolean) and the name of the interpreter
             in case of a local execution (string)
@@ -279,7 +284,8 @@
             return None, self.__isNetworked, ""
         
         # start debugger with project specific settings
-        interpreter = project.getDebugProperty("INTERPRETER")
+        if not interpreter:
+            interpreter = project.getDebugProperty("INTERPRETER")
         debugClient = project.getDebugProperty("DEBUGCLIENT")
         
         redirect = str(project.getDebugProperty("REDIRECT"))
--- a/Debugger/StartCoverageDialog.ui	Wed Nov 01 19:22:02 2017 +0100
+++ b/Debugger/StartCoverageDialog.ui	Fri Nov 03 12:10:16 2017 +0100
@@ -7,7 +7,7 @@
     <x>0</x>
     <y>0</y>
     <width>488</width>
-    <height>186</height>
+    <height>185</height>
    </rect>
   </property>
   <property name="windowTitle">
@@ -20,6 +20,36 @@
    <item>
     <layout class="QGridLayout" name="gridLayout">
      <item row="0" column="0">
+      <widget class="QLabel" name="TextLabel2_2">
+       <property name="text">
+        <string>Interpreter:</string>
+       </property>
+       <property name="buddy">
+        <cstring>workdirPicker</cstring>
+       </property>
+      </widget>
+     </item>
+     <item row="0" column="1">
+      <widget class="E5ComboPathPicker" name="interpreterPicker" native="true">
+       <property name="sizePolicy">
+        <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
+         <horstretch>0</horstretch>
+         <verstretch>0</verstretch>
+        </sizepolicy>
+       </property>
+       <property name="focusPolicy">
+        <enum>Qt::WheelFocus</enum>
+       </property>
+       <property name="toolTip">
+        <string>Enter the interpreter to be used</string>
+       </property>
+       <property name="whatsThis">
+        <string>&lt;b&gt;Interpreter&lt;/b&gt;
+&lt;p&gt;Enter the interpreter to be used. Leave it empty to use the default interprter, i.e. the one configured globally or per project.&lt;/p&gt;</string>
+       </property>
+      </widget>
+     </item>
+     <item row="1" column="0">
       <widget class="QLabel" name="TextLabel1">
        <property name="text">
         <string>Command&amp;line:</string>
@@ -29,7 +59,7 @@
        </property>
       </widget>
      </item>
-     <item row="0" column="1">
+     <item row="1" column="1">
       <widget class="QComboBox" name="cmdlineCombo">
        <property name="sizePolicy">
         <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
@@ -58,7 +88,7 @@
        </property>
       </widget>
      </item>
-     <item row="1" column="0">
+     <item row="2" column="0">
       <widget class="QLabel" name="TextLabel2">
        <property name="text">
         <string>&amp;Working directory:</string>
@@ -68,7 +98,7 @@
        </property>
       </widget>
      </item>
-     <item row="1" column="1">
+     <item row="2" column="1">
       <widget class="E5ComboPathPicker" name="workdirPicker" native="true">
        <property name="sizePolicy">
         <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
@@ -88,7 +118,7 @@
        </property>
       </widget>
      </item>
-     <item row="2" column="0">
+     <item row="3" column="0">
       <widget class="QLabel" name="textLabel1">
        <property name="text">
         <string>&amp;Environment:</string>
@@ -98,7 +128,7 @@
        </property>
       </widget>
      </item>
-     <item row="2" column="1">
+     <item row="3" column="1">
       <widget class="QComboBox" name="environmentCombo">
        <property name="sizePolicy">
         <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
@@ -223,6 +253,7 @@
   </customwidget>
  </customwidgets>
  <tabstops>
+  <tabstop>interpreterPicker</tabstop>
   <tabstop>cmdlineCombo</tabstop>
   <tabstop>workdirPicker</tabstop>
   <tabstop>environmentCombo</tabstop>
--- a/Debugger/StartDebugDialog.ui	Wed Nov 01 19:22:02 2017 +0100
+++ b/Debugger/StartDebugDialog.ui	Fri Nov 03 12:10:16 2017 +0100
@@ -7,7 +7,7 @@
     <x>0</x>
     <y>0</y>
     <width>488</width>
-    <height>284</height>
+    <height>264</height>
    </rect>
   </property>
   <property name="windowTitle">
@@ -20,6 +20,36 @@
    <item>
     <layout class="QGridLayout" name="gridLayout">
      <item row="0" column="0">
+      <widget class="QLabel" name="TextLabel2_2">
+       <property name="text">
+        <string>Interpreter:</string>
+       </property>
+       <property name="buddy">
+        <cstring>workdirPicker</cstring>
+       </property>
+      </widget>
+     </item>
+     <item row="0" column="1">
+      <widget class="E5ComboPathPicker" name="interpreterPicker" native="true">
+       <property name="sizePolicy">
+        <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
+         <horstretch>0</horstretch>
+         <verstretch>0</verstretch>
+        </sizepolicy>
+       </property>
+       <property name="focusPolicy">
+        <enum>Qt::WheelFocus</enum>
+       </property>
+       <property name="toolTip">
+        <string>Enter the interpreter to be used</string>
+       </property>
+       <property name="whatsThis">
+        <string>&lt;b&gt;Interpreter&lt;/b&gt;
+&lt;p&gt;Enter the interpreter to be used. Leave it empty to use the default interprter, i.e. the one configured globally or per project.&lt;/p&gt;</string>
+       </property>
+      </widget>
+     </item>
+     <item row="1" column="0">
       <widget class="QLabel" name="TextLabel1">
        <property name="text">
         <string>Command&amp;line:</string>
@@ -29,7 +59,7 @@
        </property>
       </widget>
      </item>
-     <item row="0" column="1">
+     <item row="1" column="1">
       <widget class="QComboBox" name="cmdlineCombo">
        <property name="sizePolicy">
         <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
@@ -58,7 +88,7 @@
        </property>
       </widget>
      </item>
-     <item row="1" column="0">
+     <item row="2" column="0">
       <widget class="QLabel" name="TextLabel2">
        <property name="text">
         <string>&amp;Working directory:</string>
@@ -68,7 +98,7 @@
        </property>
       </widget>
      </item>
-     <item row="1" column="1">
+     <item row="2" column="1">
       <widget class="E5ComboPathPicker" name="workdirPicker" native="true">
        <property name="sizePolicy">
         <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
@@ -88,7 +118,7 @@
        </property>
       </widget>
      </item>
-     <item row="2" column="0">
+     <item row="3" column="0">
       <widget class="QLabel" name="textLabel1">
        <property name="text">
         <string>&amp;Environment:</string>
@@ -98,7 +128,7 @@
        </property>
       </widget>
      </item>
-     <item row="2" column="1">
+     <item row="3" column="1">
       <widget class="QComboBox" name="environmentCombo">
        <property name="sizePolicy">
         <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
@@ -275,6 +305,7 @@
   </customwidget>
  </customwidgets>
  <tabstops>
+  <tabstop>interpreterPicker</tabstop>
   <tabstop>cmdlineCombo</tabstop>
   <tabstop>workdirPicker</tabstop>
   <tabstop>environmentCombo</tabstop>
--- a/Debugger/StartDialog.py	Wed Nov 01 19:22:02 2017 +0100
+++ b/Debugger/StartDialog.py	Fri Nov 03 12:10:16 2017 +0100
@@ -25,7 +25,8 @@
     the commandline parameters, the working directory and
     whether exception reporting should be disabled.
     """
-    def __init__(self, caption, argvList, wdList, envList, exceptions,
+    def __init__(self, caption, interpreterList, argvList, wdList, envList,
+                 exceptions,
                  parent=None, dialogType=0, modfuncList=None,
                  tracePython=False, autoClearShell=True, autoContinue=True,
                  autoFork=False, forkChild=False):
@@ -33,6 +34,7 @@
         Constructor
         
         @param caption the caption to be displayed (string)
+        @param interpreterList list of interpreters (list of string)
         @param argvList history list of commandline arguments (list of strings)
         @param wdList history list of working directories (list of strings)
         @param envList history list of environment settings (list of strings)
@@ -74,6 +76,12 @@
             from .Ui_StartProfileDialog import Ui_StartProfileDialog
             self.ui = Ui_StartProfileDialog()
         self.ui.setupUi(self)
+        
+        self.ui.interpreterPicker.setMode(E5PathPickerModes.OpenFileMode)
+        self.ui.interpreterPicker.setInsertPolicy(QComboBox.InsertAtTop)
+        self.ui.interpreterPicker.setSizeAdjustPolicy(
+            QComboBox.AdjustToMinimumContentsLength)
+        
         self.ui.workdirPicker.setMode(E5PathPickerModes.DirectoryMode)
         self.ui.workdirPicker.setDefaultDirectory(
             Preferences.getMultiProject("Workspace"))
@@ -102,6 +110,10 @@
         self.ui.consoleCheckBox.setEnabled(
             Preferences.getDebugger("ConsoleDbgCommand") != "")
         self.ui.consoleCheckBox.setChecked(False)
+        self.ui.interpreterPicker.clear()
+        self.ui.interpreterPicker.addItems(interpreterList)
+        if len(interpreterList) > 0:
+            self.ui.interpreterPicker.setCurrentIndex(0)
         
         if dialogType == 0:        # start debug dialog
             self.ui.tracePythonCheckBox.setChecked(tracePython)
@@ -134,20 +146,23 @@
         """
         Public method to retrieve the data entered into this dialog.
         
-        @return a tuple of argv (string), workdir (string), environment
-            (string), exceptions flag (boolean), clear interpreter flag
-            (boolean) and run in console flag (boolean)
+        @return a tuple of interpreter (string), argv (string), workdir
+            (string), environment (string), exceptions flag (boolean),
+            clear interpreter flag (boolean) and run in console flag (boolean)
         """
         cmdLine = self.ui.cmdlineCombo.currentText()
         workdir = self.ui.workdirPicker.currentText()
         environment = self.ui.environmentCombo.currentText()
+        interpreter = self.ui.interpreterPicker.currentText()
         
-        return (cmdLine,
+        return (interpreter,
+                cmdLine,
                 workdir,
                 environment,
                 self.ui.exceptionCheckBox.isChecked(),
                 self.ui.clearShellCheckBox.isChecked(),
-                self.ui.consoleCheckBox.isChecked())
+                self.ui.consoleCheckBox.isChecked(),
+                )
         
     def getDebugData(self):
         """
@@ -212,14 +227,17 @@
         cmdLine = self.ui.cmdlineCombo.currentText()
         workdir = self.ui.workdirPicker.currentText()
         environment = self.ui.environmentCombo.currentText()
+        interpreter = self.ui.interpreterPicker.currentText()
         
         self.ui.cmdlineCombo.clear()
         self.ui.workdirPicker.clear()
         self.ui.environmentCombo.clear()
+        self.ui.interpreterPicker.clear()
         
         self.ui.cmdlineCombo.addItem(cmdLine)
         self.ui.workdirPicker.addItem(workdir)
         self.ui.environmentCombo.addItem(environment)
+        self.ui.interpreterPicker.addItem(interpreter)
     
     def __editHistory(self):
         """
@@ -227,6 +245,7 @@
         """
         histories = [
             "",
+            self.tr("Interpreter"),
             self.tr("Command Line"),
             self.tr("Working Directory"),
             self.tr("Environment"),
@@ -239,11 +258,13 @@
             0, False)
         if ok and historyKind:
             historiesIndex = histories.index(historyKind)
-            if historiesIndex == 2:
+            if historiesIndex == 3:
                 history = self.ui.workdirPicker.getPathItems()
+            elif historiesIndex == 1:
+                history = self.ui.interpreterPicker.getPathItems()
             else:
                 history = []
-                if historiesIndex == 1:
+                if historiesIndex == 2:
                     combo = self.ui.cmdlineCombo
                 else:
                     combo = self.ui.environmentCombo
@@ -255,8 +276,10 @@
             if dlg.exec_() == QDialog.Accepted:
                 history = dlg.getHistory()
                 if historiesIndex == 1:
+                    combo = self.ui.interpreterPicker
+                elif historiesIndex == 2:
                     combo = self.ui.cmdlineCombo
-                elif historiesIndex == 2:
+                elif historiesIndex == 3:
                     combo = self.ui.workdirPicker
                 else:
                     combo = self.ui.environmentCombo
@@ -288,8 +311,8 @@
         Public method to get the lists of histories.
         
         @return tuple containing the histories of command line arguments,
-            working directories and environment settings
-        @rtype tuple of three list of str
+            working directories, environment settings and interpreters
+        @rtype tuple of four list of str
         """
         return (
             [self.ui.cmdlineCombo.itemText(index) for index in range(
@@ -297,6 +320,7 @@
             self.ui.workdirPicker.getPathItems(),
             [self.ui.environmentCombo.itemText(index) for index in range(
                 self.ui.environmentCombo.count())],
+            self.ui.interpreterPicker.getPathItems(),
         )
     
     def on_buttonBox_clicked(self, button):
--- a/Debugger/StartProfileDialog.ui	Wed Nov 01 19:22:02 2017 +0100
+++ b/Debugger/StartProfileDialog.ui	Fri Nov 03 12:10:16 2017 +0100
@@ -7,7 +7,7 @@
     <x>0</x>
     <y>0</y>
     <width>488</width>
-    <height>186</height>
+    <height>185</height>
    </rect>
   </property>
   <property name="windowTitle">
@@ -20,6 +20,36 @@
    <item>
     <layout class="QGridLayout" name="gridLayout">
      <item row="0" column="0">
+      <widget class="QLabel" name="TextLabel2_2">
+       <property name="text">
+        <string>Interpreter:</string>
+       </property>
+       <property name="buddy">
+        <cstring>workdirPicker</cstring>
+       </property>
+      </widget>
+     </item>
+     <item row="0" column="1">
+      <widget class="E5ComboPathPicker" name="interpreterPicker" native="true">
+       <property name="sizePolicy">
+        <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
+         <horstretch>0</horstretch>
+         <verstretch>0</verstretch>
+        </sizepolicy>
+       </property>
+       <property name="focusPolicy">
+        <enum>Qt::WheelFocus</enum>
+       </property>
+       <property name="toolTip">
+        <string>Enter the interpreter to be used</string>
+       </property>
+       <property name="whatsThis">
+        <string>&lt;b&gt;Interpreter&lt;/b&gt;
+&lt;p&gt;Enter the interpreter to be used. Leave it empty to use the default interprter, i.e. the one configured globally or per project.&lt;/p&gt;</string>
+       </property>
+      </widget>
+     </item>
+     <item row="1" column="0">
       <widget class="QLabel" name="TextLabel1">
        <property name="text">
         <string>Command&amp;line:</string>
@@ -29,7 +59,7 @@
        </property>
       </widget>
      </item>
-     <item row="0" column="1">
+     <item row="1" column="1">
       <widget class="QComboBox" name="cmdlineCombo">
        <property name="sizePolicy">
         <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
@@ -58,7 +88,7 @@
        </property>
       </widget>
      </item>
-     <item row="1" column="0">
+     <item row="2" column="0">
       <widget class="QLabel" name="TextLabel2">
        <property name="text">
         <string>&amp;Working directory:</string>
@@ -68,7 +98,7 @@
        </property>
       </widget>
      </item>
-     <item row="1" column="1">
+     <item row="2" column="1">
       <widget class="E5ComboPathPicker" name="workdirPicker" native="true">
        <property name="sizePolicy">
         <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
@@ -88,7 +118,7 @@
        </property>
       </widget>
      </item>
-     <item row="2" column="0">
+     <item row="3" column="0">
       <widget class="QLabel" name="textLabel1">
        <property name="text">
         <string>&amp;Environment:</string>
@@ -98,7 +128,7 @@
        </property>
       </widget>
      </item>
-     <item row="2" column="1">
+     <item row="3" column="1">
       <widget class="QComboBox" name="environmentCombo">
        <property name="sizePolicy">
         <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
@@ -223,6 +253,7 @@
   </customwidget>
  </customwidgets>
  <tabstops>
+  <tabstop>interpreterPicker</tabstop>
   <tabstop>cmdlineCombo</tabstop>
   <tabstop>workdirPicker</tabstop>
   <tabstop>environmentCombo</tabstop>
--- a/Debugger/StartRunDialog.ui	Wed Nov 01 19:22:02 2017 +0100
+++ b/Debugger/StartRunDialog.ui	Fri Nov 03 12:10:16 2017 +0100
@@ -7,7 +7,7 @@
     <x>0</x>
     <y>0</y>
     <width>488</width>
-    <height>257</height>
+    <height>241</height>
    </rect>
   </property>
   <property name="windowTitle">
@@ -20,6 +20,36 @@
    <item>
     <layout class="QGridLayout" name="gridLayout_2">
      <item row="0" column="0">
+      <widget class="QLabel" name="TextLabel2_2">
+       <property name="text">
+        <string>Interpreter:</string>
+       </property>
+       <property name="buddy">
+        <cstring>workdirPicker</cstring>
+       </property>
+      </widget>
+     </item>
+     <item row="0" column="1">
+      <widget class="E5ComboPathPicker" name="interpreterPicker" native="true">
+       <property name="sizePolicy">
+        <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
+         <horstretch>0</horstretch>
+         <verstretch>0</verstretch>
+        </sizepolicy>
+       </property>
+       <property name="focusPolicy">
+        <enum>Qt::WheelFocus</enum>
+       </property>
+       <property name="toolTip">
+        <string>Enter the interpreter to be used</string>
+       </property>
+       <property name="whatsThis">
+        <string>&lt;b&gt;Interpreter&lt;/b&gt;
+&lt;p&gt;Enter the interpreter to be used. Leave it empty to use the default interprter, i.e. the one configured globally or per project.&lt;/p&gt;</string>
+       </property>
+      </widget>
+     </item>
+     <item row="1" column="0">
       <widget class="QLabel" name="TextLabel1">
        <property name="text">
         <string>Command&amp;line:</string>
@@ -29,7 +59,7 @@
        </property>
       </widget>
      </item>
-     <item row="0" column="1">
+     <item row="1" column="1">
       <widget class="QComboBox" name="cmdlineCombo">
        <property name="sizePolicy">
         <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
@@ -58,7 +88,7 @@
        </property>
       </widget>
      </item>
-     <item row="1" column="0">
+     <item row="2" column="0">
       <widget class="QLabel" name="TextLabel2">
        <property name="text">
         <string>&amp;Working directory:</string>
@@ -68,7 +98,7 @@
        </property>
       </widget>
      </item>
-     <item row="1" column="1">
+     <item row="2" column="1">
       <widget class="E5ComboPathPicker" name="workdirPicker" native="true">
        <property name="sizePolicy">
         <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
@@ -88,7 +118,7 @@
        </property>
       </widget>
      </item>
-     <item row="2" column="0">
+     <item row="3" column="0">
       <widget class="QLabel" name="textLabel1">
        <property name="text">
         <string>&amp;Environment:</string>
@@ -98,7 +128,7 @@
        </property>
       </widget>
      </item>
-     <item row="2" column="1">
+     <item row="3" column="1">
       <widget class="QComboBox" name="environmentCombo">
        <property name="sizePolicy">
         <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
@@ -246,6 +276,7 @@
   </customwidget>
  </customwidgets>
  <tabstops>
+  <tabstop>interpreterPicker</tabstop>
   <tabstop>cmdlineCombo</tabstop>
   <tabstop>workdirPicker</tabstop>
   <tabstop>environmentCombo</tabstop>
Binary file Documentation/Help/source.qch has changed
--- a/Documentation/Help/source.qhp	Wed Nov 01 19:22:02 2017 +0100
+++ b/Documentation/Help/source.qhp	Fri Nov 03 12:10:16 2017 +0100
@@ -144,6 +144,9 @@
             <section title="eric6.E5Network.E5XmlRpcClient" ref="eric6.E5Network.E5XmlRpcClient.html" />
             <section title="eric6.E5Network.__init__" ref="eric6.E5Network.__init__.html" />
           </section>
+          <section title="eric6.E5Utilities" ref="index-eric6.E5Utilities.html">
+            <section title="eric6.E5Utilities.E5Cache" ref="eric6.E5Utilities.E5Cache.html" />
+          </section>
           <section title="eric6.E5XML" ref="index-eric6.E5XML.html">
             <section title="eric6.E5XML.Config" ref="eric6.E5XML.Config.html" />
             <section title="eric6.E5XML.DebuggerPropertiesReader" ref="eric6.E5XML.DebuggerPropertiesReader.html" />
@@ -782,6 +785,7 @@
               <section title="eric6.Preferences.ConfigurationPages.EditorAutocompletionQScintillaPage" ref="eric6.Preferences.ConfigurationPages.EditorAutocompletionQScintillaPage.html" />
               <section title="eric6.Preferences.ConfigurationPages.EditorCalltipsPage" ref="eric6.Preferences.ConfigurationPages.EditorCalltipsPage.html" />
               <section title="eric6.Preferences.ConfigurationPages.EditorCalltipsQScintillaPage" ref="eric6.Preferences.ConfigurationPages.EditorCalltipsQScintillaPage.html" />
+              <section title="eric6.Preferences.ConfigurationPages.EditorDocViewerPage" ref="eric6.Preferences.ConfigurationPages.EditorDocViewerPage.html" />
               <section title="eric6.Preferences.ConfigurationPages.EditorExportersPage" ref="eric6.Preferences.ConfigurationPages.EditorExportersPage.html" />
               <section title="eric6.Preferences.ConfigurationPages.EditorFilePage" ref="eric6.Preferences.ConfigurationPages.EditorFilePage.html" />
               <section title="eric6.Preferences.ConfigurationPages.EditorGeneralPage" ref="eric6.Preferences.ConfigurationPages.EditorGeneralPage.html" />
@@ -1005,11 +1009,15 @@
               <section title="eric6.UI.Previewers.PreviewerHTML" ref="eric6.UI.Previewers.PreviewerHTML.html" />
               <section title="eric6.UI.Previewers.PreviewerQSS" ref="eric6.UI.Previewers.PreviewerQSS.html" />
             </section>
+            <section title="eric6.UI.data" ref="index-eric6.UI.data.html">
+            </section>
             <section title="eric6.UI.AuthenticationDialog" ref="eric6.UI.AuthenticationDialog.html" />
             <section title="eric6.UI.Browser" ref="eric6.UI.Browser.html" />
             <section title="eric6.UI.BrowserModel" ref="eric6.UI.BrowserModel.html" />
             <section title="eric6.UI.BrowserSortFilterProxyModel" ref="eric6.UI.BrowserSortFilterProxyModel.html" />
             <section title="eric6.UI.ClearPrivateDataDialog" ref="eric6.UI.ClearPrivateDataDialog.html" />
+            <section title="eric6.UI.CodeDocumentationViewer" ref="eric6.UI.CodeDocumentationViewer.html" />
+            <section title="eric6.UI.CodeDocumentationViewerTemplate" ref="eric6.UI.CodeDocumentationViewerTemplate.html" />
             <section title="eric6.UI.CompareDialog" ref="eric6.UI.CompareDialog.html" />
             <section title="eric6.UI.Config" ref="eric6.UI.Config.html" />
             <section title="eric6.UI.DeleteFilesConfirmationDialog" ref="eric6.UI.DeleteFilesConfirmationDialog.html" />
@@ -2777,6 +2785,25 @@
       <keyword name="ClosedTabsManager.isClosedTabAvailable" id="ClosedTabsManager.isClosedTabAvailable" ref="eric6.WebBrowser.ClosedTabsManager.html#ClosedTabsManager.isClosedTabAvailable" />
       <keyword name="ClosedTabsManager.recordBrowser" id="ClosedTabsManager.recordBrowser" ref="eric6.Helpviewer.ClosedTabsManager.html#ClosedTabsManager.recordBrowser" />
       <keyword name="ClosedTabsManager.recordBrowser" id="ClosedTabsManager.recordBrowser" ref="eric6.WebBrowser.ClosedTabsManager.html#ClosedTabsManager.recordBrowser" />
+      <keyword name="CodeDocumentationViewer" id="CodeDocumentationViewer" ref="eric6.UI.CodeDocumentationViewer.html#CodeDocumentationViewer" />
+      <keyword name="CodeDocumentationViewer (Constructor)" id="CodeDocumentationViewer (Constructor)" ref="eric6.UI.CodeDocumentationViewer.html#CodeDocumentationViewer.__init__" />
+      <keyword name="CodeDocumentationViewer (Module)" id="CodeDocumentationViewer (Module)" ref="eric6.UI.CodeDocumentationViewer.html" />
+      <keyword name="CodeDocumentationViewer.__setHtml" id="CodeDocumentationViewer.__setHtml" ref="eric6.UI.CodeDocumentationViewer.html#CodeDocumentationViewer.__setHtml" />
+      <keyword name="CodeDocumentationViewer.__setHtmlWarning" id="CodeDocumentationViewer.__setHtmlWarning" ref="eric6.UI.CodeDocumentationViewer.html#CodeDocumentationViewer.__setHtmlWarning" />
+      <keyword name="CodeDocumentationViewer.__setupUi" id="CodeDocumentationViewer.__setupUi" ref="eric6.UI.CodeDocumentationViewer.html#CodeDocumentationViewer.__setupUi" />
+      <keyword name="CodeDocumentationViewer.__showDisabledMessage" id="CodeDocumentationViewer.__showDisabledMessage" ref="eric6.UI.CodeDocumentationViewer.html#CodeDocumentationViewer.__showDisabledMessage" />
+      <keyword name="CodeDocumentationViewer.__showTextViewer" id="CodeDocumentationViewer.__showTextViewer" ref="eric6.UI.CodeDocumentationViewer.html#CodeDocumentationViewer.__showTextViewer" />
+      <keyword name="CodeDocumentationViewer.documentationReady" id="CodeDocumentationViewer.documentationReady" ref="eric6.UI.CodeDocumentationViewer.html#CodeDocumentationViewer.documentationReady" />
+      <keyword name="CodeDocumentationViewer.finalizeSetup" id="CodeDocumentationViewer.finalizeSetup" ref="eric6.UI.CodeDocumentationViewer.html#CodeDocumentationViewer.finalizeSetup" />
+      <keyword name="CodeDocumentationViewer.getProviders" id="CodeDocumentationViewer.getProviders" ref="eric6.UI.CodeDocumentationViewer.html#CodeDocumentationViewer.getProviders" />
+      <keyword name="CodeDocumentationViewer.isSupportedLanguage" id="CodeDocumentationViewer.isSupportedLanguage" ref="eric6.UI.CodeDocumentationViewer.html#CodeDocumentationViewer.isSupportedLanguage" />
+      <keyword name="CodeDocumentationViewer.on_providerComboBox_currentIndexChanged" id="CodeDocumentationViewer.on_providerComboBox_currentIndexChanged" ref="eric6.UI.CodeDocumentationViewer.html#CodeDocumentationViewer.on_providerComboBox_currentIndexChanged" />
+      <keyword name="CodeDocumentationViewer.preferencesChanged" id="CodeDocumentationViewer.preferencesChanged" ref="eric6.UI.CodeDocumentationViewer.html#CodeDocumentationViewer.preferencesChanged" />
+      <keyword name="CodeDocumentationViewer.registerProvider" id="CodeDocumentationViewer.registerProvider" ref="eric6.UI.CodeDocumentationViewer.html#CodeDocumentationViewer.registerProvider" />
+      <keyword name="CodeDocumentationViewer.showInfo" id="CodeDocumentationViewer.showInfo" ref="eric6.UI.CodeDocumentationViewer.html#CodeDocumentationViewer.showInfo" />
+      <keyword name="CodeDocumentationViewer.shutdown" id="CodeDocumentationViewer.shutdown" ref="eric6.UI.CodeDocumentationViewer.html#CodeDocumentationViewer.shutdown" />
+      <keyword name="CodeDocumentationViewer.unregisterProvider" id="CodeDocumentationViewer.unregisterProvider" ref="eric6.UI.CodeDocumentationViewer.html#CodeDocumentationViewer.unregisterProvider" />
+      <keyword name="CodeDocumentationViewerTemplate (Module)" id="CodeDocumentationViewerTemplate (Module)" ref="eric6.UI.CodeDocumentationViewerTemplate.html" />
       <keyword name="CodeMetrics (Module)" id="CodeMetrics (Module)" ref="eric6.DataViews.CodeMetrics.html" />
       <keyword name="CodeMetricsDialog" id="CodeMetricsDialog" ref="eric6.DataViews.CodeMetricsDialog.html#CodeMetricsDialog" />
       <keyword name="CodeMetricsDialog (Constructor)" id="CodeMetricsDialog (Constructor)" ref="eric6.DataViews.CodeMetricsDialog.html#CodeMetricsDialog.__init__" />
@@ -3602,6 +3629,7 @@
       <keyword name="DebugUI.setExcIgnoreList" id="DebugUI.setExcIgnoreList" ref="eric6.Debugger.DebugUI.html#DebugUI.setExcIgnoreList" />
       <keyword name="DebugUI.setExcList" id="DebugUI.setExcList" ref="eric6.Debugger.DebugUI.html#DebugUI.setExcList" />
       <keyword name="DebugUI.setExceptionReporting" id="DebugUI.setExceptionReporting" ref="eric6.Debugger.DebugUI.html#DebugUI.setExceptionReporting" />
+      <keyword name="DebugUI.setInterpreterHistory" id="DebugUI.setInterpreterHistory" ref="eric6.Debugger.DebugUI.html#DebugUI.setInterpreterHistory" />
       <keyword name="DebugUI.setTracePython" id="DebugUI.setTracePython" ref="eric6.Debugger.DebugUI.html#DebugUI.setTracePython" />
       <keyword name="DebugUI.setWdHistory" id="DebugUI.setWdHistory" ref="eric6.Debugger.DebugUI.html#DebugUI.setWdHistory" />
       <keyword name="DebugUI.shutdown" id="DebugUI.shutdown" ref="eric6.Debugger.DebugUI.html#DebugUI.shutdown" />
@@ -3921,6 +3949,8 @@
       <keyword name="DownloadItem (Constructor)" id="DownloadItem (Constructor)" ref="eric6.WebBrowser.Download.DownloadItem.html#DownloadItem.__init__" />
       <keyword name="DownloadItem (Module)" id="DownloadItem (Module)" ref="eric6.Helpviewer.Download.DownloadItem.html" />
       <keyword name="DownloadItem (Module)" id="DownloadItem (Module)" ref="eric6.WebBrowser.Download.DownloadItem.html" />
+      <keyword name="DownloadItem.__adjustSize" id="DownloadItem.__adjustSize" ref="eric6.Helpviewer.Download.DownloadItem.html#DownloadItem.__adjustSize" />
+      <keyword name="DownloadItem.__adjustSize" id="DownloadItem.__adjustSize" ref="eric6.WebBrowser.Download.DownloadItem.html#DownloadItem.__adjustSize" />
       <keyword name="DownloadItem.__downloadProgress" id="DownloadItem.__downloadProgress" ref="eric6.Helpviewer.Download.DownloadItem.html#DownloadItem.__downloadProgress" />
       <keyword name="DownloadItem.__downloadProgress" id="DownloadItem.__downloadProgress" ref="eric6.WebBrowser.Download.DownloadItem.html#DownloadItem.__downloadProgress" />
       <keyword name="DownloadItem.__finished" id="DownloadItem.__finished" ref="eric6.Helpviewer.Download.DownloadItem.html#DownloadItem.__finished" />
@@ -3936,6 +3966,8 @@
       <keyword name="DownloadItem.__readyRead" id="DownloadItem.__readyRead" ref="eric6.Helpviewer.Download.DownloadItem.html#DownloadItem.__readyRead" />
       <keyword name="DownloadItem.__saveFileName" id="DownloadItem.__saveFileName" ref="eric6.Helpviewer.Download.DownloadItem.html#DownloadItem.__saveFileName" />
       <keyword name="DownloadItem.__saveFileName" id="DownloadItem.__saveFileName" ref="eric6.WebBrowser.Download.DownloadItem.html#DownloadItem.__saveFileName" />
+      <keyword name="DownloadItem.__setDateTime" id="DownloadItem.__setDateTime" ref="eric6.Helpviewer.Download.DownloadItem.html#DownloadItem.__setDateTime" />
+      <keyword name="DownloadItem.__setDateTime" id="DownloadItem.__setDateTime" ref="eric6.WebBrowser.Download.DownloadItem.html#DownloadItem.__setDateTime" />
       <keyword name="DownloadItem.__setFileName" id="DownloadItem.__setFileName" ref="eric6.WebBrowser.Download.DownloadItem.html#DownloadItem.__setFileName" />
       <keyword name="DownloadItem.__updateInfoLabel" id="DownloadItem.__updateInfoLabel" ref="eric6.Helpviewer.Download.DownloadItem.html#DownloadItem.__updateInfoLabel" />
       <keyword name="DownloadItem.__updateInfoLabel" id="DownloadItem.__updateInfoLabel" ref="eric6.WebBrowser.Download.DownloadItem.html#DownloadItem.__updateInfoLabel" />
@@ -4102,6 +4134,23 @@
       <keyword name="E5ArrowItem.setEndPoint" id="E5ArrowItem.setEndPoint" ref="eric6.E5Graphics.E5ArrowItem.html#E5ArrowItem.setEndPoint" />
       <keyword name="E5ArrowItem.setPoints" id="E5ArrowItem.setPoints" ref="eric6.E5Graphics.E5ArrowItem.html#E5ArrowItem.setPoints" />
       <keyword name="E5ArrowItem.setStartPoint" id="E5ArrowItem.setStartPoint" ref="eric6.E5Graphics.E5ArrowItem.html#E5ArrowItem.setStartPoint" />
+      <keyword name="E5Cache" id="E5Cache" ref="eric6.E5Utilities.E5Cache.html#E5Cache" />
+      <keyword name="E5Cache (Constructor)" id="E5Cache (Constructor)" ref="eric6.E5Utilities.E5Cache.html#E5Cache.__init__" />
+      <keyword name="E5Cache (Module)" id="E5Cache (Module)" ref="eric6.E5Utilities.E5Cache.html" />
+      <keyword name="E5Cache.__adjustToSize" id="E5Cache.__adjustToSize" ref="eric6.E5Utilities.E5Cache.html#E5Cache.__adjustToSize" />
+      <keyword name="E5Cache.__moveLast" id="E5Cache.__moveLast" ref="eric6.E5Utilities.E5Cache.html#E5Cache.__moveLast" />
+      <keyword name="E5Cache.__pruneCache" id="E5Cache.__pruneCache" ref="eric6.E5Utilities.E5Cache.html#E5Cache.__pruneCache" />
+      <keyword name="E5Cache.add" id="E5Cache.add" ref="eric6.E5Utilities.E5Cache.html#E5Cache.add" />
+      <keyword name="E5Cache.clear" id="E5Cache.clear" ref="eric6.E5Utilities.E5Cache.html#E5Cache.clear" />
+      <keyword name="E5Cache.get" id="E5Cache.get" ref="eric6.E5Utilities.E5Cache.html#E5Cache.get" />
+      <keyword name="E5Cache.getMaximumCacheTime" id="E5Cache.getMaximumCacheTime" ref="eric6.E5Utilities.E5Cache.html#E5Cache.getMaximumCacheTime" />
+      <keyword name="E5Cache.getSize" id="E5Cache.getSize" ref="eric6.E5Utilities.E5Cache.html#E5Cache.getSize" />
+      <keyword name="E5Cache.info" id="E5Cache.info" ref="eric6.E5Utilities.E5Cache.html#E5Cache.info" />
+      <keyword name="E5Cache.length" id="E5Cache.length" ref="eric6.E5Utilities.E5Cache.html#E5Cache.length" />
+      <keyword name="E5Cache.remove" id="E5Cache.remove" ref="eric6.E5Utilities.E5Cache.html#E5Cache.remove" />
+      <keyword name="E5Cache.reset" id="E5Cache.reset" ref="eric6.E5Utilities.E5Cache.html#E5Cache.reset" />
+      <keyword name="E5Cache.setMaximumCacheTime" id="E5Cache.setMaximumCacheTime" ref="eric6.E5Utilities.E5Cache.html#E5Cache.setMaximumCacheTime" />
+      <keyword name="E5Cache.setSize" id="E5Cache.setSize" ref="eric6.E5Utilities.E5Cache.html#E5Cache.setSize" />
       <keyword name="E5ClearableComboBox" id="E5ClearableComboBox" ref="eric6.E5Gui.E5ComboBox.html#E5ClearableComboBox" />
       <keyword name="E5ClearableComboBox (Constructor)" id="E5ClearableComboBox (Constructor)" ref="eric6.E5Gui.E5ComboBox.html#E5ClearableComboBox.__init__" />
       <keyword name="E5ClearableLineEdit" id="E5ClearableLineEdit" ref="eric6.E5Gui.E5LineEdit.html#E5ClearableLineEdit" />
@@ -4647,6 +4696,11 @@
       <keyword name="E5TextEditSearchWidget (Module)" id="E5TextEditSearchWidget (Module)" ref="eric6.E5Gui.E5TextEditSearchWidget.html" />
       <keyword name="E5TextEditSearchWidget.__find" id="E5TextEditSearchWidget.__find" ref="eric6.E5Gui.E5TextEditSearchWidget.html#E5TextEditSearchWidget.__find" />
       <keyword name="E5TextEditSearchWidget.__findByReturnPressed" id="E5TextEditSearchWidget.__findByReturnPressed" ref="eric6.E5Gui.E5TextEditSearchWidget.html#E5TextEditSearchWidget.__findByReturnPressed" />
+      <keyword name="E5TextEditSearchWidget.__findNextPrevCallback" id="E5TextEditSearchWidget.__findNextPrevCallback" ref="eric6.E5Gui.E5TextEditSearchWidget.html#E5TextEditSearchWidget.__findNextPrevCallback" />
+      <keyword name="E5TextEditSearchWidget.__findPrevNextQTextEdit" id="E5TextEditSearchWidget.__findPrevNextQTextEdit" ref="eric6.E5Gui.E5TextEditSearchWidget.html#E5TextEditSearchWidget.__findPrevNextQTextEdit" />
+      <keyword name="E5TextEditSearchWidget.__findPrevNextQWebEngineView" id="E5TextEditSearchWidget.__findPrevNextQWebEngineView" ref="eric6.E5Gui.E5TextEditSearchWidget.html#E5TextEditSearchWidget.__findPrevNextQWebEngineView" />
+      <keyword name="E5TextEditSearchWidget.__findPrevNextQWebView" id="E5TextEditSearchWidget.__findPrevNextQWebView" ref="eric6.E5Gui.E5TextEditSearchWidget.html#E5TextEditSearchWidget.__findPrevNextQWebView" />
+      <keyword name="E5TextEditSearchWidget.__setFindtextComboBackground" id="E5TextEditSearchWidget.__setFindtextComboBackground" ref="eric6.E5Gui.E5TextEditSearchWidget.html#E5TextEditSearchWidget.__setFindtextComboBackground" />
       <keyword name="E5TextEditSearchWidget.__setSearchButtons" id="E5TextEditSearchWidget.__setSearchButtons" ref="eric6.E5Gui.E5TextEditSearchWidget.html#E5TextEditSearchWidget.__setSearchButtons" />
       <keyword name="E5TextEditSearchWidget.attachTextEdit" id="E5TextEditSearchWidget.attachTextEdit" ref="eric6.E5Gui.E5TextEditSearchWidget.html#E5TextEditSearchWidget.attachTextEdit" />
       <keyword name="E5TextEditSearchWidget.keyPressEvent" id="E5TextEditSearchWidget.keyPressEvent" ref="eric6.E5Gui.E5TextEditSearchWidget.html#E5TextEditSearchWidget.keyPressEvent" />
@@ -4814,6 +4868,7 @@
       <keyword name="E5UrlInfo.setSymLink" id="E5UrlInfo.setSymLink" ref="eric6.E5Network.E5UrlInfo.html#E5UrlInfo.setSymLink" />
       <keyword name="E5UrlInfo.setWritable" id="E5UrlInfo.setWritable" ref="eric6.E5Network.E5UrlInfo.html#E5UrlInfo.setWritable" />
       <keyword name="E5UrlInfo.size" id="E5UrlInfo.size" ref="eric6.E5Network.E5UrlInfo.html#E5UrlInfo.size" />
+      <keyword name="E5Utilities (Package)" id="E5Utilities (Package)" ref="index-eric6.E5Utilities.html" />
       <keyword name="E5VerticalToolBox" id="E5VerticalToolBox" ref="eric6.E5Gui.E5ToolBox.html#E5VerticalToolBox" />
       <keyword name="E5VerticalToolBox (Constructor)" id="E5VerticalToolBox (Constructor)" ref="eric6.E5Gui.E5ToolBox.html#E5VerticalToolBox.__init__" />
       <keyword name="E5WheelTabBar" id="E5WheelTabBar" ref="eric6.E5Gui.E5TabWidget.html#E5WheelTabBar" />
@@ -4879,6 +4934,7 @@
       <keyword name="Editor.__addToSpellingDictionary" id="Editor.__addToSpellingDictionary" ref="eric6.QScintilla.Editor.html#Editor.__addToSpellingDictionary" />
       <keyword name="Editor.__adjustedCallTipPosition" id="Editor.__adjustedCallTipPosition" ref="eric6.QScintilla.Editor.html#Editor.__adjustedCallTipPosition" />
       <keyword name="Editor.__applyTemplate" id="Editor.__applyTemplate" ref="eric6.QScintilla.Editor.html#Editor.__applyTemplate" />
+      <keyword name="Editor.__autoComplete" id="Editor.__autoComplete" ref="eric6.QScintilla.Editor.html#Editor.__autoComplete" />
       <keyword name="Editor.__autosaveEnable" id="Editor.__autosaveEnable" ref="eric6.QScintilla.Editor.html#Editor.__autosaveEnable" />
       <keyword name="Editor.__bindCompleter" id="Editor.__bindCompleter" ref="eric6.QScintilla.Editor.html#Editor.__bindCompleter" />
       <keyword name="Editor.__bindLexer" id="Editor.__bindLexer" ref="eric6.QScintilla.Editor.html#Editor.__bindLexer" />
@@ -4888,12 +4944,14 @@
       <keyword name="Editor.__callTip" id="Editor.__callTip" ref="eric6.QScintilla.Editor.html#Editor.__callTip" />
       <keyword name="Editor.__changeBreakPoints" id="Editor.__changeBreakPoints" ref="eric6.QScintilla.Editor.html#Editor.__changeBreakPoints" />
       <keyword name="Editor.__charAdded" id="Editor.__charAdded" ref="eric6.QScintilla.Editor.html#Editor.__charAdded" />
+      <keyword name="Editor.__charAddedPermanent" id="Editor.__charAddedPermanent" ref="eric6.QScintilla.Editor.html#Editor.__charAddedPermanent" />
       <keyword name="Editor.__checkEncoding" id="Editor.__checkEncoding" ref="eric6.QScintilla.Editor.html#Editor.__checkEncoding" />
       <keyword name="Editor.__checkEol" id="Editor.__checkEol" ref="eric6.QScintilla.Editor.html#Editor.__checkEol" />
       <keyword name="Editor.__checkLanguage" id="Editor.__checkLanguage" ref="eric6.QScintilla.Editor.html#Editor.__checkLanguage" />
       <keyword name="Editor.__checkSpellingSelection" id="Editor.__checkSpellingSelection" ref="eric6.QScintilla.Editor.html#Editor.__checkSpellingSelection" />
       <keyword name="Editor.__checkSpellingWord" id="Editor.__checkSpellingWord" ref="eric6.QScintilla.Editor.html#Editor.__checkSpellingWord" />
       <keyword name="Editor.__clearBreakpoints" id="Editor.__clearBreakpoints" ref="eric6.QScintilla.Editor.html#Editor.__clearBreakpoints" />
+      <keyword name="Editor.__clearCompletionsCache" id="Editor.__clearCompletionsCache" ref="eric6.QScintilla.Editor.html#Editor.__clearCompletionsCache" />
       <keyword name="Editor.__clearTypedWarning" id="Editor.__clearTypedWarning" ref="eric6.QScintilla.Editor.html#Editor.__clearTypedWarning" />
       <keyword name="Editor.__codeCoverageHideAnnotations" id="Editor.__codeCoverageHideAnnotations" ref="eric6.QScintilla.Editor.html#Editor.__codeCoverageHideAnnotations" />
       <keyword name="Editor.__completionListSelected" id="Editor.__completionListSelected" ref="eric6.QScintilla.Editor.html#Editor.__completionListSelected" />
@@ -4974,6 +5032,7 @@
       <keyword name="Editor.__removeFromSpellingDictionary" id="Editor.__removeFromSpellingDictionary" ref="eric6.QScintilla.Editor.html#Editor.__removeFromSpellingDictionary" />
       <keyword name="Editor.__removeTrailingWhitespace" id="Editor.__removeTrailingWhitespace" ref="eric6.QScintilla.Editor.html#Editor.__removeTrailingWhitespace" />
       <keyword name="Editor.__reopenWithEncodingMenuTriggered" id="Editor.__reopenWithEncodingMenuTriggered" ref="eric6.QScintilla.Editor.html#Editor.__reopenWithEncodingMenuTriggered" />
+      <keyword name="Editor.__replaceLeadingUnderscores" id="Editor.__replaceLeadingUnderscores" ref="eric6.QScintilla.Editor.html#Editor.__replaceLeadingUnderscores" />
       <keyword name="Editor.__resetLanguage" id="Editor.__resetLanguage" ref="eric6.QScintilla.Editor.html#Editor.__resetLanguage" />
       <keyword name="Editor.__resetOnlineChangeTraceInfo" id="Editor.__resetOnlineChangeTraceInfo" ref="eric6.QScintilla.Editor.html#Editor.__resetOnlineChangeTraceInfo" />
       <keyword name="Editor.__resetOnlineChangeTraceTimer" id="Editor.__resetOnlineChangeTraceTimer" ref="eric6.QScintilla.Editor.html#Editor.__resetOnlineChangeTraceTimer" />
@@ -4998,7 +5057,9 @@
       <keyword name="Editor.__showApplicationDiagram" id="Editor.__showApplicationDiagram" ref="eric6.QScintilla.Editor.html#Editor.__showApplicationDiagram" />
       <keyword name="Editor.__showClassDiagram" id="Editor.__showClassDiagram" ref="eric6.QScintilla.Editor.html#Editor.__showClassDiagram" />
       <keyword name="Editor.__showCodeCoverage" id="Editor.__showCodeCoverage" ref="eric6.QScintilla.Editor.html#Editor.__showCodeCoverage" />
+      <keyword name="Editor.__showCodeInfo" id="Editor.__showCodeInfo" ref="eric6.QScintilla.Editor.html#Editor.__showCodeInfo" />
       <keyword name="Editor.__showCodeMetrics" id="Editor.__showCodeMetrics" ref="eric6.QScintilla.Editor.html#Editor.__showCodeMetrics" />
+      <keyword name="Editor.__showCompletionsList" id="Editor.__showCompletionsList" ref="eric6.QScintilla.Editor.html#Editor.__showCompletionsList" />
       <keyword name="Editor.__showContextMenu" id="Editor.__showContextMenu" ref="eric6.QScintilla.Editor.html#Editor.__showContextMenu" />
       <keyword name="Editor.__showContextMenuAutocompletion" id="Editor.__showContextMenuAutocompletion" ref="eric6.QScintilla.Editor.html#Editor.__showContextMenuAutocompletion" />
       <keyword name="Editor.__showContextMenuChecks" id="Editor.__showContextMenuChecks" ref="eric6.QScintilla.Editor.html#Editor.__showContextMenuChecks" />
@@ -5056,6 +5117,7 @@
       <keyword name="Editor.commentLine" id="Editor.commentLine" ref="eric6.QScintilla.Editor.html#Editor.commentLine" />
       <keyword name="Editor.commentLineOrSelection" id="Editor.commentLineOrSelection" ref="eric6.QScintilla.Editor.html#Editor.commentLineOrSelection" />
       <keyword name="Editor.commentSelection" id="Editor.commentSelection" ref="eric6.QScintilla.Editor.html#Editor.commentSelection" />
+      <keyword name="Editor.completionsListReady" id="Editor.completionsListReady" ref="eric6.QScintilla.Editor.html#Editor.completionsListReady" />
       <keyword name="Editor.contextMenuEvent" id="Editor.contextMenuEvent" ref="eric6.QScintilla.Editor.html#Editor.contextMenuEvent" />
       <keyword name="Editor.curLineHasBreakpoint" id="Editor.curLineHasBreakpoint" ref="eric6.QScintilla.Editor.html#Editor.curLineHasBreakpoint" />
       <keyword name="Editor.determineFileType" id="Editor.determineFileType" ref="eric6.QScintilla.Editor.html#Editor.determineFileType" />
@@ -5278,6 +5340,10 @@
       <keyword name="EditorCalltipsQScintillaPage (Constructor)" id="EditorCalltipsQScintillaPage (Constructor)" ref="eric6.Preferences.ConfigurationPages.EditorCalltipsQScintillaPage.html#EditorCalltipsQScintillaPage.__init__" />
       <keyword name="EditorCalltipsQScintillaPage (Module)" id="EditorCalltipsQScintillaPage (Module)" ref="eric6.Preferences.ConfigurationPages.EditorCalltipsQScintillaPage.html" />
       <keyword name="EditorCalltipsQScintillaPage.save" id="EditorCalltipsQScintillaPage.save" ref="eric6.Preferences.ConfigurationPages.EditorCalltipsQScintillaPage.html#EditorCalltipsQScintillaPage.save" />
+      <keyword name="EditorDocViewerPage" id="EditorDocViewerPage" ref="eric6.Preferences.ConfigurationPages.EditorDocViewerPage.html#EditorDocViewerPage" />
+      <keyword name="EditorDocViewerPage (Constructor)" id="EditorDocViewerPage (Constructor)" ref="eric6.Preferences.ConfigurationPages.EditorDocViewerPage.html#EditorDocViewerPage.__init__" />
+      <keyword name="EditorDocViewerPage (Module)" id="EditorDocViewerPage (Module)" ref="eric6.Preferences.ConfigurationPages.EditorDocViewerPage.html" />
+      <keyword name="EditorDocViewerPage.save" id="EditorDocViewerPage.save" ref="eric6.Preferences.ConfigurationPages.EditorDocViewerPage.html#EditorDocViewerPage.save" />
       <keyword name="EditorExportersPage" id="EditorExportersPage" ref="eric6.Preferences.ConfigurationPages.EditorExportersPage.html#EditorExportersPage" />
       <keyword name="EditorExportersPage (Constructor)" id="EditorExportersPage (Constructor)" ref="eric6.Preferences.ConfigurationPages.EditorExportersPage.html#EditorExportersPage.__init__" />
       <keyword name="EditorExportersPage (Module)" id="EditorExportersPage (Module)" ref="eric6.Preferences.ConfigurationPages.EditorExportersPage.html" />
@@ -9926,6 +9992,7 @@
       <keyword name="MultiProject.__syncRecent" id="MultiProject.__syncRecent" ref="eric6.MultiProject.MultiProject.html#MultiProject.__syncRecent" />
       <keyword name="MultiProject.__writeMultiProject" id="MultiProject.__writeMultiProject" ref="eric6.MultiProject.MultiProject.html#MultiProject.__writeMultiProject" />
       <keyword name="MultiProject.addE5Actions" id="MultiProject.addE5Actions" ref="eric6.MultiProject.MultiProject.html#MultiProject.addE5Actions" />
+      <keyword name="MultiProject.addNewProject" id="MultiProject.addNewProject" ref="eric6.MultiProject.MultiProject.html#MultiProject.addNewProject" />
       <keyword name="MultiProject.addProject" id="MultiProject.addProject" ref="eric6.MultiProject.MultiProject.html#MultiProject.addProject" />
       <keyword name="MultiProject.changeProjectProperties" id="MultiProject.changeProjectProperties" ref="eric6.MultiProject.MultiProject.html#MultiProject.changeProjectProperties" />
       <keyword name="MultiProject.checkDirty" id="MultiProject.checkDirty" ref="eric6.MultiProject.MultiProject.html#MultiProject.checkDirty" />
@@ -10737,6 +10804,11 @@
       <keyword name="PlainStrList.__convert" id="PlainStrList.__convert" ref="eric6.Globals.compatibility_fixes.html#PlainStrList.__convert" />
       <keyword name="PlainStrList.__setitem__" id="PlainStrList.__setitem__" ref="eric6.Globals.compatibility_fixes.html#PlainStrList.__setitem__" />
       <keyword name="PlainStrList.insert" id="PlainStrList.insert" ref="eric6.Globals.compatibility_fixes.html#PlainStrList.insert" />
+      <keyword name="PlainTextDocumentationViewer" id="PlainTextDocumentationViewer" ref="eric6.UI.CodeDocumentationViewer.html#PlainTextDocumentationViewer" />
+      <keyword name="PlainTextDocumentationViewer (Constructor)" id="PlainTextDocumentationViewer (Constructor)" ref="eric6.UI.CodeDocumentationViewer.html#PlainTextDocumentationViewer.__init__" />
+      <keyword name="PlainTextDocumentationViewer.clear" id="PlainTextDocumentationViewer.clear" ref="eric6.UI.CodeDocumentationViewer.html#PlainTextDocumentationViewer.clear" />
+      <keyword name="PlainTextDocumentationViewer.preferencesChanged" id="PlainTextDocumentationViewer.preferencesChanged" ref="eric6.UI.CodeDocumentationViewer.html#PlainTextDocumentationViewer.preferencesChanged" />
+      <keyword name="PlainTextDocumentationViewer.setText" id="PlainTextDocumentationViewer.setText" ref="eric6.UI.CodeDocumentationViewer.html#PlainTextDocumentationViewer.setText" />
       <keyword name="PlistReader" id="PlistReader" ref="eric6.Utilities.binplistlib.html#PlistReader" />
       <keyword name="PlistReader (Constructor)" id="PlistReader (Constructor)" ref="eric6.Utilities.binplistlib.html#PlistReader.__init__" />
       <keyword name="PlistReader.getSizedInteger" id="PlistReader.getSizedInteger" ref="eric6.Utilities.binplistlib.html#PlistReader.getSizedInteger" />
@@ -15230,6 +15302,7 @@
       <keyword name="UserInterface.__writeCrashSession" id="UserInterface.__writeCrashSession" ref="eric6.UI.UserInterface.html#UserInterface.__writeCrashSession" />
       <keyword name="UserInterface.__writeSession" id="UserInterface.__writeSession" ref="eric6.UI.UserInterface.html#UserInterface.__writeSession" />
       <keyword name="UserInterface.__writeTasks" id="UserInterface.__writeTasks" ref="eric6.UI.UserInterface.html#UserInterface.__writeTasks" />
+      <keyword name="UserInterface.activateCodeDocumentationViewer" id="UserInterface.activateCodeDocumentationViewer" ref="eric6.UI.UserInterface.html#UserInterface.activateCodeDocumentationViewer" />
       <keyword name="UserInterface.activateCooperationViewer" id="UserInterface.activateCooperationViewer" ref="eric6.UI.UserInterface.html#UserInterface.activateCooperationViewer" />
       <keyword name="UserInterface.addE5Actions" id="UserInterface.addE5Actions" ref="eric6.UI.UserInterface.html#UserInterface.addE5Actions" />
       <keyword name="UserInterface.addSideWidget" id="UserInterface.addSideWidget" ref="eric6.UI.UserInterface.html#UserInterface.addSideWidget" />
@@ -15242,6 +15315,7 @@
       <keyword name="UserInterface.checkProjectsWorkspace" id="UserInterface.checkProjectsWorkspace" ref="eric6.UI.UserInterface.html#UserInterface.checkProjectsWorkspace" />
       <keyword name="UserInterface.closeEvent" id="UserInterface.closeEvent" ref="eric6.UI.UserInterface.html#UserInterface.closeEvent" />
       <keyword name="UserInterface.createPopupMenu" id="UserInterface.createPopupMenu" ref="eric6.UI.UserInterface.html#UserInterface.createPopupMenu" />
+      <keyword name="UserInterface.documentationViewer" id="UserInterface.documentationViewer" ref="eric6.UI.UserInterface.html#UserInterface.documentationViewer" />
       <keyword name="UserInterface.dragEnterEvent" id="UserInterface.dragEnterEvent" ref="eric6.UI.UserInterface.html#UserInterface.dragEnterEvent" />
       <keyword name="UserInterface.dragLeaveEvent" id="UserInterface.dragLeaveEvent" ref="eric6.UI.UserInterface.html#UserInterface.dragLeaveEvent" />
       <keyword name="UserInterface.dragMoveEvent" id="UserInterface.dragMoveEvent" ref="eric6.UI.UserInterface.html#UserInterface.dragMoveEvent" />
@@ -15539,6 +15613,7 @@
       <keyword name="ViewManager.__editSelectAll" id="ViewManager.__editSelectAll" ref="eric6.ViewManager.ViewManager.html#ViewManager.__editSelectAll" />
       <keyword name="ViewManager.__editSelectBrace" id="ViewManager.__editSelectBrace" ref="eric6.ViewManager.ViewManager.html#ViewManager.__editSelectBrace" />
       <keyword name="ViewManager.__editShowCallTips" id="ViewManager.__editShowCallTips" ref="eric6.ViewManager.ViewManager.html#ViewManager.__editShowCallTips" />
+      <keyword name="ViewManager.__editShowCodeInfo" id="ViewManager.__editShowCodeInfo" ref="eric6.ViewManager.ViewManager.html#ViewManager.__editShowCodeInfo" />
       <keyword name="ViewManager.__editSmartIndent" id="ViewManager.__editSmartIndent" ref="eric6.ViewManager.ViewManager.html#ViewManager.__editSmartIndent" />
       <keyword name="ViewManager.__editSortSelectedLines" id="ViewManager.__editSortSelectedLines" ref="eric6.ViewManager.ViewManager.html#ViewManager.__editSortSelectedLines" />
       <keyword name="ViewManager.__editSpellingDictionary" id="ViewManager.__editSpellingDictionary" ref="eric6.ViewManager.ViewManager.html#ViewManager.__editSpellingDictionary" />
@@ -15576,6 +15651,7 @@
       <keyword name="ViewManager.__initSearchActions" id="ViewManager.__initSearchActions" ref="eric6.ViewManager.ViewManager.html#ViewManager.__initSearchActions" />
       <keyword name="ViewManager.__initSpellingActions" id="ViewManager.__initSpellingActions" ref="eric6.ViewManager.ViewManager.html#ViewManager.__initSpellingActions" />
       <keyword name="ViewManager.__initViewActions" id="ViewManager.__initViewActions" ref="eric6.ViewManager.ViewManager.html#ViewManager.__initViewActions" />
+      <keyword name="ViewManager.__isEditorInfoSupportedEd" id="ViewManager.__isEditorInfoSupportedEd" ref="eric6.ViewManager.ViewManager.html#ViewManager.__isEditorInfoSupportedEd" />
       <keyword name="ViewManager.__lastEditPositionAvailable" id="ViewManager.__lastEditPositionAvailable" ref="eric6.ViewManager.ViewManager.html#ViewManager.__lastEditPositionAvailable" />
       <keyword name="ViewManager.__lastEditorClosed" id="ViewManager.__lastEditorClosed" ref="eric6.ViewManager.ViewManager.html#ViewManager.__lastEditorClosed" />
       <keyword name="ViewManager.__loadRecent" id="ViewManager.__loadRecent" ref="eric6.ViewManager.ViewManager.html#ViewManager.__loadRecent" />
@@ -15708,6 +15784,7 @@
       <keyword name="ViewManager.insertNumber" id="ViewManager.insertNumber" ref="eric6.ViewManager.ViewManager.html#ViewManager.insertNumber" />
       <keyword name="ViewManager.insertSymbol" id="ViewManager.insertSymbol" ref="eric6.ViewManager.ViewManager.html#ViewManager.insertSymbol" />
       <keyword name="ViewManager.isConnected" id="ViewManager.isConnected" ref="eric6.ViewManager.ViewManager.html#ViewManager.isConnected" />
+      <keyword name="ViewManager.isEditorInfoSupported" id="ViewManager.isEditorInfoSupported" ref="eric6.ViewManager.ViewManager.html#ViewManager.isEditorInfoSupported" />
       <keyword name="ViewManager.mainWidget" id="ViewManager.mainWidget" ref="eric6.ViewManager.ViewManager.html#ViewManager.mainWidget" />
       <keyword name="ViewManager.newEditor" id="ViewManager.newEditor" ref="eric6.ViewManager.ViewManager.html#ViewManager.newEditor" />
       <keyword name="ViewManager.newEditorView" id="ViewManager.newEditorView" ref="eric6.ViewManager.ViewManager.html#ViewManager.newEditorView" />
@@ -15747,6 +15824,7 @@
       <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" />
       <keyword name="ViewManager.showDebugSource" id="ViewManager.showDebugSource" ref="eric6.ViewManager.ViewManager.html#ViewManager.showDebugSource" />
+      <keyword name="ViewManager.showEditorInfo" id="ViewManager.showEditorInfo" ref="eric6.ViewManager.ViewManager.html#ViewManager.showEditorInfo" />
       <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" />
@@ -16476,6 +16554,11 @@
       <keyword name="WebPluginInterface.isAnonymous" id="WebPluginInterface.isAnonymous" ref="eric6.Helpviewer.WebPlugins.WebPluginInterface.html#WebPluginInterface.isAnonymous" />
       <keyword name="WebPluginInterface.metaPlugin" id="WebPluginInterface.metaPlugin" ref="eric6.Helpviewer.WebPlugins.WebPluginInterface.html#WebPluginInterface.metaPlugin" />
       <keyword name="WebPlugins (Package)" id="WebPlugins (Package)" ref="index-eric6.Helpviewer.WebPlugins.html" />
+      <keyword name="WebViewDocumentationViewer" id="WebViewDocumentationViewer" ref="eric6.UI.CodeDocumentationViewer.html#WebViewDocumentationViewer" />
+      <keyword name="WebViewDocumentationViewer (Constructor)" id="WebViewDocumentationViewer (Constructor)" ref="eric6.UI.CodeDocumentationViewer.html#WebViewDocumentationViewer.__init__" />
+      <keyword name="WebViewDocumentationViewer.__showLink" id="WebViewDocumentationViewer.__showLink" ref="eric6.UI.CodeDocumentationViewer.html#WebViewDocumentationViewer.__showLink" />
+      <keyword name="WebViewDocumentationViewer.clear" id="WebViewDocumentationViewer.clear" ref="eric6.UI.CodeDocumentationViewer.html#WebViewDocumentationViewer.clear" />
+      <keyword name="WebViewDocumentationViewer.setHtml" id="WebViewDocumentationViewer.setHtml" ref="eric6.UI.CodeDocumentationViewer.html#WebViewDocumentationViewer.setHtml" />
       <keyword name="Whitespace" id="Whitespace" ref="eric6.Plugins.CheckerPlugins.Tabnanny.Tabnanny.html#Whitespace" />
       <keyword name="Whitespace (Constructor)" id="Whitespace (Constructor)" ref="eric6.Plugins.CheckerPlugins.Tabnanny.Tabnanny.html#Whitespace.__init__" />
       <keyword name="Whitespace.equal" id="Whitespace.equal" ref="eric6.Plugins.CheckerPlugins.Tabnanny.Tabnanny.html#Whitespace.equal" />
@@ -16752,6 +16835,7 @@
       <keyword name="create" id="create" ref="eric6.Preferences.ConfigurationPages.EditorAutocompletionQScintillaPage.html#create" />
       <keyword name="create" id="create" ref="eric6.Preferences.ConfigurationPages.EditorCalltipsPage.html#create" />
       <keyword name="create" id="create" ref="eric6.Preferences.ConfigurationPages.EditorCalltipsQScintillaPage.html#create" />
+      <keyword name="create" id="create" ref="eric6.Preferences.ConfigurationPages.EditorDocViewerPage.html#create" />
       <keyword name="create" id="create" ref="eric6.Preferences.ConfigurationPages.EditorExportersPage.html#create" />
       <keyword name="create" id="create" ref="eric6.Preferences.ConfigurationPages.EditorFilePage.html#create" />
       <keyword name="create" id="create" ref="eric6.Preferences.ConfigurationPages.EditorGeneralPage.html#create" />
@@ -16840,6 +16924,7 @@
       <keyword name="cursors (Package)" id="cursors (Package)" ref="index-eric6.IconEditor.cursors.html" />
       <keyword name="data (Package)" id="data (Package)" ref="index-eric6.E5Network.data.html" />
       <keyword name="data (Package)" id="data (Package)" ref="index-eric6.Helpviewer.data.html" />
+      <keyword name="data (Package)" id="data (Package)" ref="index-eric6.UI.data.html" />
       <keyword name="data (Package)" id="data (Package)" ref="index-eric6.WebBrowser.data.html" />
       <keyword name="dataDecrypt" id="dataDecrypt" ref="eric6.Utilities.crypto.__init__.html#dataDecrypt" />
       <keyword name="dataEncrypt" id="dataEncrypt" ref="eric6.Utilities.crypto.__init__.html#dataEncrypt" />
@@ -16960,6 +17045,7 @@
       <keyword name="getDefaults" id="getDefaults" ref="eric6.Plugins.VcsPlugins.vcsMercurial.LargefilesExtension.__init__.html#getDefaults" />
       <keyword name="getDiffColour" id="getDiffColour" ref="eric6.Preferences.__init__.html#getDiffColour" />
       <keyword name="getDirs" id="getDirs" ref="eric6.Utilities.__init__.html#getDirs" />
+      <keyword name="getDocuViewer" id="getDocuViewer" ref="eric6.Preferences.__init__.html#getDocuViewer" />
       <keyword name="getEditor" id="getEditor" ref="eric6.Preferences.__init__.html#getEditor" />
       <keyword name="getEditorAPI" id="getEditorAPI" ref="eric6.Preferences.__init__.html#getEditorAPI" />
       <keyword name="getEditorColour" id="getEditorColour" ref="eric6.Preferences.__init__.html#getEditorColour" />
@@ -17225,6 +17311,9 @@
       <keyword name="pixmapFromByteArray" id="pixmapFromByteArray" ref="eric6.WebBrowser.Tools.WebBrowserTools.html#pixmapFromByteArray" />
       <keyword name="pixmapToByteArray" id="pixmapToByteArray" ref="eric6.WebBrowser.Tools.WebBrowserTools.html#pixmapToByteArray" />
       <keyword name="pixmapToDataUrl" id="pixmapToDataUrl" ref="eric6.WebBrowser.Tools.WebBrowserTools.html#pixmapToDataUrl" />
+      <keyword name="prepareDocumentationViewerHtmlDocWarningDocument" id="prepareDocumentationViewerHtmlDocWarningDocument" ref="eric6.UI.CodeDocumentationViewerTemplate.html#prepareDocumentationViewerHtmlDocWarningDocument" />
+      <keyword name="prepareDocumentationViewerHtmlDocument" id="prepareDocumentationViewerHtmlDocument" ref="eric6.UI.CodeDocumentationViewerTemplate.html#prepareDocumentationViewerHtmlDocument" />
+      <keyword name="prepareDocumentationViewerHtmlWarningDocument" id="prepareDocumentationViewerHtmlWarningDocument" ref="eric6.UI.CodeDocumentationViewerTemplate.html#prepareDocumentationViewerHtmlWarningDocument" />
       <keyword name="prepareInfoFile" id="prepareInfoFile" ref="eric6.install.html#prepareInfoFile" />
       <keyword name="prepareJsonCommand" id="prepareJsonCommand" ref="eric6.DebugClients.Python.DebugUtilities.html#prepareJsonCommand" />
       <keyword name="prepareProcess" id="prepareProcess" ref="eric6.Plugins.VcsPlugins.vcsMercurial.HgUtilities.html#prepareProcess" />
@@ -17319,6 +17408,7 @@
       <keyword name="setCss" id="setCss" ref="eric6.WebBrowser.Tools.Scripts.html#setCss" />
       <keyword name="setDebugger" id="setDebugger" ref="eric6.Preferences.__init__.html#setDebugger" />
       <keyword name="setDiffColour" id="setDiffColour" ref="eric6.Preferences.__init__.html#setDiffColour" />
+      <keyword name="setDocuViewer" id="setDocuViewer" ref="eric6.Preferences.__init__.html#setDocuViewer" />
       <keyword name="setEditor" id="setEditor" ref="eric6.Preferences.__init__.html#setEditor" />
       <keyword name="setEditorAPI" id="setEditorAPI" ref="eric6.Preferences.__init__.html#setEditorAPI" />
       <keyword name="setEditorColour" id="setEditorColour" ref="eric6.Preferences.__init__.html#setEditorColour" />
@@ -17568,6 +17658,7 @@
       <file>eric6.E5Network.E5UrlInfo.html</file>
       <file>eric6.E5Network.E5XmlRpcClient.html</file>
       <file>eric6.E5Network.__init__.html</file>
+      <file>eric6.E5Utilities.E5Cache.html</file>
       <file>eric6.E5XML.Config.html</file>
       <file>eric6.E5XML.DebuggerPropertiesReader.html</file>
       <file>eric6.E5XML.DebuggerPropertiesWriter.html</file>
@@ -18053,6 +18144,7 @@
       <file>eric6.Preferences.ConfigurationPages.EditorAutocompletionQScintillaPage.html</file>
       <file>eric6.Preferences.ConfigurationPages.EditorCalltipsPage.html</file>
       <file>eric6.Preferences.ConfigurationPages.EditorCalltipsQScintillaPage.html</file>
+      <file>eric6.Preferences.ConfigurationPages.EditorDocViewerPage.html</file>
       <file>eric6.Preferences.ConfigurationPages.EditorExportersPage.html</file>
       <file>eric6.Preferences.ConfigurationPages.EditorFilePage.html</file>
       <file>eric6.Preferences.ConfigurationPages.EditorGeneralPage.html</file>
@@ -18247,6 +18339,8 @@
       <file>eric6.UI.BrowserModel.html</file>
       <file>eric6.UI.BrowserSortFilterProxyModel.html</file>
       <file>eric6.UI.ClearPrivateDataDialog.html</file>
+      <file>eric6.UI.CodeDocumentationViewer.html</file>
+      <file>eric6.UI.CodeDocumentationViewerTemplate.html</file>
       <file>eric6.UI.CompareDialog.html</file>
       <file>eric6.UI.Config.html</file>
       <file>eric6.UI.DeleteFilesConfirmationDialog.html</file>
@@ -18528,6 +18622,7 @@
       <file>index-eric6.E5Gui.html</file>
       <file>index-eric6.E5Network.data.html</file>
       <file>index-eric6.E5Network.html</file>
+      <file>index-eric6.E5Utilities.html</file>
       <file>index-eric6.E5XML.html</file>
       <file>index-eric6.Globals.html</file>
       <file>index-eric6.Graphics.html</file>
@@ -18620,6 +18715,7 @@
       <file>index-eric6.Toolbox.html</file>
       <file>index-eric6.Tools.html</file>
       <file>index-eric6.UI.Previewers.html</file>
+      <file>index-eric6.UI.data.html</file>
       <file>index-eric6.UI.html</file>
       <file>index-eric6.Utilities.ClassBrowsers.html</file>
       <file>index-eric6.Utilities.crypto.html</file>
--- a/Documentation/Source/eric6.Debugger.DebugServer.html	Wed Nov 01 19:22:02 2017 +0100
+++ b/Documentation/Source/eric6.Debugger.DebugServer.html	Fri Nov 03 12:10:16 2017 +0100
@@ -1226,11 +1226,15 @@
 </dd>
 </dl><a NAME="DebugServer.remoteCoverage" ID="DebugServer.remoteCoverage"></a>
 <h4>DebugServer.remoteCoverage</h4>
-<b>remoteCoverage</b>(<i>fn, argv, wd, env, autoClearShell=True, erase=False, forProject=False, runInConsole=False, clientType=""</i>)
+<b>remoteCoverage</b>(<i>interpreter, fn, argv, wd, env, autoClearShell=True, erase=False, forProject=False, runInConsole=False, clientType=""</i>)
 <p>
         Public method to load a new program to collect coverage data.
 </p><dl>
-<dt><i>fn</i></dt>
+<dt><i>interpreter</i></dt>
+<dd>
+interpreter to be used to execute the remote
+            side (string)
+</dd><dt><i>fn</i></dt>
 <dd>
 the filename to run (string)
 </dd><dt><i>argv</i></dt>
@@ -1273,11 +1277,15 @@
 </dd>
 </dl><a NAME="DebugServer.remoteLoad" ID="DebugServer.remoteLoad"></a>
 <h4>DebugServer.remoteLoad</h4>
-<b>remoteLoad</b>(<i>fn, argv, wd, env, autoClearShell=True, tracePython=False, autoContinue=True, forProject=False, runInConsole=False, autoFork=False, forkChild=False, clientType="", enableCallTrace=False</i>)
+<b>remoteLoad</b>(<i>interpreter, fn, argv, wd, env, autoClearShell=True, tracePython=False, autoContinue=True, forProject=False, runInConsole=False, autoFork=False, forkChild=False, clientType="", enableCallTrace=False</i>)
 <p>
         Public method to load a new program to debug.
 </p><dl>
-<dt><i>fn</i></dt>
+<dt><i>interpreter</i></dt>
+<dd>
+interpreter to be used to execute the remote
+            side (string)
+</dd><dt><i>fn</i></dt>
 <dd>
 the filename to debug (string)
 </dd><dt><i>argv</i></dt>
@@ -1335,11 +1343,15 @@
 </dd>
 </dl><a NAME="DebugServer.remoteProfile" ID="DebugServer.remoteProfile"></a>
 <h4>DebugServer.remoteProfile</h4>
-<b>remoteProfile</b>(<i>fn, argv, wd, env, autoClearShell=True, erase=False, forProject=False, runInConsole=False, clientType=""</i>)
+<b>remoteProfile</b>(<i>interpreter, fn, argv, wd, env, autoClearShell=True, erase=False, forProject=False, runInConsole=False, clientType=""</i>)
 <p>
         Public method to load a new program to collect profiling data.
 </p><dl>
-<dt><i>fn</i></dt>
+<dt><i>interpreter</i></dt>
+<dd>
+interpreter to be used to execute the remote
+            side (string)
+</dd><dt><i>fn</i></dt>
 <dd>
 the filename to run (string)
 </dd><dt><i>argv</i></dt>
@@ -1382,11 +1394,15 @@
 </dd>
 </dl><a NAME="DebugServer.remoteRun" ID="DebugServer.remoteRun"></a>
 <h4>DebugServer.remoteRun</h4>
-<b>remoteRun</b>(<i>fn, argv, wd, env, autoClearShell=True, forProject=False, runInConsole=False, autoFork=False, forkChild=False, clientType=""</i>)
+<b>remoteRun</b>(<i>interpreter, fn, argv, wd, env, autoClearShell=True, forProject=False, runInConsole=False, autoFork=False, forkChild=False, clientType=""</i>)
 <p>
         Public method to load a new program to run.
 </p><dl>
-<dt><i>fn</i></dt>
+<dt><i>interpreter</i></dt>
+<dd>
+interpreter to be used to execute the remote
+            side (string)
+</dd><dt><i>fn</i></dt>
 <dd>
 the filename to run (string)
 </dd><dt><i>argv</i></dt>
@@ -1828,7 +1844,7 @@
 </dd>
 </dl><a NAME="DebugServer.startClient" ID="DebugServer.startClient"></a>
 <h4>DebugServer.startClient</h4>
-<b>startClient</b>(<i>unplanned=True, clType=None, forProject=False, runInConsole=False</i>)
+<b>startClient</b>(<i>unplanned=True, clType=None, forProject=False, runInConsole=False, interpreter=""</i>)
 <p>
         Public method to start a debug client.
 </p><dl>
@@ -1845,6 +1861,10 @@
 <dd>
 flag indicating to start the debugger in a
             console window (boolean)
+</dd><dt><i>interpreter=</i></dt>
+<dd>
+interpreter to be used to execute the remote
+            side (string)
 </dd>
 </dl><a NAME="DebugServer.unregisterDebuggerInterface" ID="DebugServer.unregisterDebuggerInterface"></a>
 <h4>DebugServer.unregisterDebuggerInterface</h4>
--- a/Documentation/Source/eric6.Debugger.DebugUI.html	Wed Nov 01 19:22:02 2017 +0100
+++ b/Documentation/Source/eric6.Debugger.DebugUI.html	Fri Nov 03 12:10:16 2017 +0100
@@ -292,6 +292,9 @@
 <td><a href="#DebugUI.setExceptionReporting">setExceptionReporting</a></td>
 <td>Public slot to initialize the exception reporting flag.</td>
 </tr><tr>
+<td><a href="#DebugUI.setInterpreterHistory">setInterpreterHistory</a></td>
+<td>Public slot to initialize the interpreter history.</td>
+</tr><tr>
 <td><a href="#DebugUI.setTracePython">setTracePython</a></td>
 <td>Public slot to initialize the trace Python flag.</td>
 </tr><tr>
@@ -909,6 +912,23 @@
 <dd>
 flag indicating exception reporting status (boolean)
 </dd>
+</dl><a NAME="DebugUI.setInterpreterHistory" ID="DebugUI.setInterpreterHistory"></a>
+<h4>DebugUI.setInterpreterHistory</h4>
+<b>setInterpreterHistory</b>(<i>interpreterStr, clearHistories=False, history=None</i>)
+<p>
+        Public slot to initialize the interpreter history.
+</p><dl>
+<dt><i>interpreterStr</i></dt>
+<dd>
+interpreter (string)
+</dd><dt><i>clearHistories</i></dt>
+<dd>
+flag indicating, that the list should
+            be cleared (boolean)
+</dd><dt><i>history</i></dt>
+<dd>
+list of history entries to be set (list of strings)
+</dd>
 </dl><a NAME="DebugUI.setTracePython" ID="DebugUI.setTracePython"></a>
 <h4>DebugUI.setTracePython</h4>
 <b>setTracePython</b>(<i>tracePython</i>)
--- a/Documentation/Source/eric6.Debugger.DebuggerInterfaceNone.html	Wed Nov 01 19:22:02 2017 +0100
+++ b/Documentation/Source/eric6.Debugger.DebuggerInterfaceNone.html	Fri Nov 03 12:10:16 2017 +0100
@@ -657,17 +657,21 @@
         the debug client. (Needed on Win OS)
 </p><a NAME="DebuggerInterfaceNone.startRemote" ID="DebuggerInterfaceNone.startRemote"></a>
 <h4>DebuggerInterfaceNone.startRemote</h4>
-<b>startRemote</b>(<i>port, runInConsole</i>)
+<b>startRemote</b>(<i>port, runInConsole, interpreter</i>)
 <p>
         Public method to start a remote Python interpreter.
 </p><dl>
 <dt><i>port</i></dt>
 <dd>
-portnumber the debug server is listening on (integer)
+port number the debug server is listening on (integer)
 </dd><dt><i>runInConsole</i></dt>
 <dd>
 flag indicating to start the debugger in a
             console window (boolean)
+</dd><dt><i>interpreter</i></dt>
+<dd>
+interpreter to be used to execute the remote
+            side (string)
 </dd>
 </dl><dl>
 <dt>Returns:</dt>
@@ -678,17 +682,21 @@
 </dd>
 </dl><a NAME="DebuggerInterfaceNone.startRemoteForProject" ID="DebuggerInterfaceNone.startRemoteForProject"></a>
 <h4>DebuggerInterfaceNone.startRemoteForProject</h4>
-<b>startRemoteForProject</b>(<i>port, runInConsole</i>)
+<b>startRemoteForProject</b>(<i>port, runInConsole, interpreter</i>)
 <p>
         Public method to start a remote Python interpreter for a project.
 </p><dl>
 <dt><i>port</i></dt>
 <dd>
-portnumber the debug server is listening on (integer)
+port number the debug server is listening on (integer)
 </dd><dt><i>runInConsole</i></dt>
 <dd>
 flag indicating to start the debugger in a
             console window (boolean)
+</dd><dt><i>interpreter</i></dt>
+<dd>
+interpreter to be used to execute the remote
+            side (string)
 </dd>
 </dl><dl>
 <dt>Returns:</dt>
--- a/Documentation/Source/eric6.Debugger.DebuggerInterfacePython.html	Wed Nov 01 19:22:02 2017 +0100
+++ b/Documentation/Source/eric6.Debugger.DebuggerInterfacePython.html	Fri Nov 03 12:10:16 2017 +0100
@@ -774,17 +774,21 @@
         the debug client. (Needed on Win OS)
 </p><a NAME="DebuggerInterfacePython.startRemote" ID="DebuggerInterfacePython.startRemote"></a>
 <h4>DebuggerInterfacePython.startRemote</h4>
-<b>startRemote</b>(<i>port, runInConsole</i>)
+<b>startRemote</b>(<i>port, runInConsole, interpreter</i>)
 <p>
         Public method to start a remote Python interpreter.
 </p><dl>
 <dt><i>port</i></dt>
 <dd>
-portnumber the debug server is listening on (integer)
+port number the debug server is listening on (integer)
 </dd><dt><i>runInConsole</i></dt>
 <dd>
 flag indicating to start the debugger in a
             console window (boolean)
+</dd><dt><i>interpreter</i></dt>
+<dd>
+interpreter to be used to execute the remote
+            side (string)
 </dd>
 </dl><dl>
 <dt>Returns:</dt>
@@ -795,17 +799,21 @@
 </dd>
 </dl><a NAME="DebuggerInterfacePython.startRemoteForProject" ID="DebuggerInterfacePython.startRemoteForProject"></a>
 <h4>DebuggerInterfacePython.startRemoteForProject</h4>
-<b>startRemoteForProject</b>(<i>port, runInConsole</i>)
+<b>startRemoteForProject</b>(<i>port, runInConsole, interpreter</i>)
 <p>
         Public method to start a remote Python interpreter for a project.
 </p><dl>
 <dt><i>port</i></dt>
 <dd>
-portnumber the debug server is listening on (integer)
+port number the debug server is listening on (integer)
 </dd><dt><i>runInConsole</i></dt>
 <dd>
 flag indicating to start the debugger in a
             console window (boolean)
+</dd><dt><i>interpreter</i></dt>
+<dd>
+interpreter to be used to execute the remote
+            side (string)
 </dd>
 </dl><dl>
 <dt>Returns:</dt>
--- a/Documentation/Source/eric6.Debugger.StartDialog.html	Wed Nov 01 19:22:02 2017 +0100
+++ b/Documentation/Source/eric6.Debugger.StartDialog.html	Fri Nov 03 12:10:16 2017 +0100
@@ -108,13 +108,16 @@
 </table>
 <a NAME="StartDialog.__init__" ID="StartDialog.__init__"></a>
 <h4>StartDialog (Constructor)</h4>
-<b>StartDialog</b>(<i>caption, argvList, wdList, envList, exceptions, parent=None, dialogType=0, modfuncList=None, tracePython=False, autoClearShell=True, autoContinue=True, autoFork=False, forkChild=False</i>)
+<b>StartDialog</b>(<i>caption, interpreterList, argvList, wdList, envList, exceptions, parent=None, dialogType=0, modfuncList=None, tracePython=False, autoClearShell=True, autoContinue=True, autoFork=False, forkChild=False</i>)
 <p>
         Constructor
 </p><dl>
 <dt><i>caption</i></dt>
 <dd>
 the caption to be displayed (string)
+</dd><dt><i>interpreterList</i></dt>
+<dd>
+list of interpreters (list of string)
 </dd><dt><i>argvList</i></dt>
 <dd>
 history list of commandline arguments (list of strings)
@@ -208,9 +211,9 @@
 </p><dl>
 <dt>Returns:</dt>
 <dd>
-a tuple of argv (string), workdir (string), environment
-            (string), exceptions flag (boolean), clear interpreter flag
-            (boolean) and run in console flag (boolean)
+a tuple of interpreter (string), argv (string), workdir
+            (string), environment (string), exceptions flag (boolean),
+            clear interpreter flag (boolean) and run in console flag (boolean)
 </dd>
 </dl><a NAME="StartDialog.getDebugData" ID="StartDialog.getDebugData"></a>
 <h4>StartDialog.getDebugData</h4>
@@ -237,12 +240,12 @@
 <dt>Returns:</dt>
 <dd>
 tuple containing the histories of command line arguments,
-            working directories and environment settings
+            working directories, environment settings and interpreters
 </dd>
 </dl><dl>
 <dt>Return Type:</dt>
 <dd>
-tuple of three list of str
+tuple of four list of str
 </dd>
 </dl><a NAME="StartDialog.getProfilingData" ID="StartDialog.getProfilingData"></a>
 <h4>StartDialog.getProfilingData</h4>
--- a/Documentation/Source/eric6.E5Gui.E5TextEditSearchWidget.html	Wed Nov 01 19:22:02 2017 +0100
+++ b/Documentation/Source/eric6.E5Gui.E5TextEditSearchWidget.html	Fri Nov 03 12:10:16 2017 +0100
@@ -66,6 +66,21 @@
 <td><a href="#E5TextEditSearchWidget.__findByReturnPressed">__findByReturnPressed</a></td>
 <td>Private slot to handle the returnPressed signal of the findtext combobox.</td>
 </tr><tr>
+<td><a href="#E5TextEditSearchWidget.__findNextPrevCallback">__findNextPrevCallback</a></td>
+<td>Private method to process the result of the last search.</td>
+</tr><tr>
+<td><a href="#E5TextEditSearchWidget.__findPrevNextQTextEdit">__findPrevNextQTextEdit</a></td>
+<td>Private method to to search the associated edit widget of type QTextEdit.</td>
+</tr><tr>
+<td><a href="#E5TextEditSearchWidget.__findPrevNextQWebEngineView">__findPrevNextQWebEngineView</a></td>
+<td>Private method to to search the associated edit widget of type QWebEngineView.</td>
+</tr><tr>
+<td><a href="#E5TextEditSearchWidget.__findPrevNextQWebView">__findPrevNextQWebView</a></td>
+<td>Private method to to search the associated edit widget of type QWebView.</td>
+</tr><tr>
+<td><a href="#E5TextEditSearchWidget.__setFindtextComboBackground">__setFindtextComboBackground</a></td>
+<td>Private slot to change the findtext combo background to indicate errors.</td>
+</tr><tr>
 <td><a href="#E5TextEditSearchWidget.__setSearchButtons">__setSearchButtons</a></td>
 <td>Private slot to set the state of the search buttons.</td>
 </tr><tr>
@@ -115,7 +130,81 @@
 <p>
         Private slot to handle the returnPressed signal of the findtext
         combobox.
-</p><a NAME="E5TextEditSearchWidget.__setSearchButtons" ID="E5TextEditSearchWidget.__setSearchButtons"></a>
+</p><a NAME="E5TextEditSearchWidget.__findNextPrevCallback" ID="E5TextEditSearchWidget.__findNextPrevCallback"></a>
+<h4>E5TextEditSearchWidget.__findNextPrevCallback</h4>
+<b>__findNextPrevCallback</b>(<i>found</i>)
+<p>
+        Private method to process the result of the last search.
+</p><dl>
+<dt><i>found</i> (bool)</dt>
+<dd>
+flag indicating if the last search succeeded
+</dd>
+</dl><a NAME="E5TextEditSearchWidget.__findPrevNextQTextEdit" ID="E5TextEditSearchWidget.__findPrevNextQTextEdit"></a>
+<h4>E5TextEditSearchWidget.__findPrevNextQTextEdit</h4>
+<b>__findPrevNextQTextEdit</b>(<i>backwards</i>)
+<p>
+        Private method to to search the associated edit widget of
+        type QTextEdit.
+</p><dl>
+<dt><i>backwards</i> (bool)</dt>
+<dd>
+flag indicating a backwards search
+</dd>
+</dl><dl>
+<dt>Returns:</dt>
+<dd>
+flag indicating the search result
+</dd>
+</dl><dl>
+<dt>Return Type:</dt>
+<dd>
+bool
+</dd>
+</dl><a NAME="E5TextEditSearchWidget.__findPrevNextQWebEngineView" ID="E5TextEditSearchWidget.__findPrevNextQWebEngineView"></a>
+<h4>E5TextEditSearchWidget.__findPrevNextQWebEngineView</h4>
+<b>__findPrevNextQWebEngineView</b>(<i>backwards</i>)
+<p>
+        Private method to to search the associated edit widget of
+        type QWebEngineView.
+</p><dl>
+<dt><i>backwards</i> (bool)</dt>
+<dd>
+flag indicating a backwards search
+</dd>
+</dl><a NAME="E5TextEditSearchWidget.__findPrevNextQWebView" ID="E5TextEditSearchWidget.__findPrevNextQWebView"></a>
+<h4>E5TextEditSearchWidget.__findPrevNextQWebView</h4>
+<b>__findPrevNextQWebView</b>(<i>backwards</i>)
+<p>
+        Private method to to search the associated edit widget of
+        type QWebView.
+</p><dl>
+<dt><i>backwards</i> (bool)</dt>
+<dd>
+flag indicating a backwards search
+</dd>
+</dl><dl>
+<dt>Returns:</dt>
+<dd>
+flag indicating the search result
+</dd>
+</dl><dl>
+<dt>Return Type:</dt>
+<dd>
+bool
+</dd>
+</dl><a NAME="E5TextEditSearchWidget.__setFindtextComboBackground" ID="E5TextEditSearchWidget.__setFindtextComboBackground"></a>
+<h4>E5TextEditSearchWidget.__setFindtextComboBackground</h4>
+<b>__setFindtextComboBackground</b>(<i>error</i>)
+<p>
+        Private slot to change the findtext combo background to indicate
+        errors.
+</p><dl>
+<dt><i>error</i></dt>
+<dd>
+flag indicating an error condition (boolean)
+</dd>
+</dl><a NAME="E5TextEditSearchWidget.__setSearchButtons" ID="E5TextEditSearchWidget.__setSearchButtons"></a>
 <h4>E5TextEditSearchWidget.__setSearchButtons</h4>
 <b>__setSearchButtons</b>(<i>enabled</i>)
 <p>
@@ -127,13 +216,16 @@
 </dd>
 </dl><a NAME="E5TextEditSearchWidget.attachTextEdit" ID="E5TextEditSearchWidget.attachTextEdit"></a>
 <h4>E5TextEditSearchWidget.attachTextEdit</h4>
-<b>attachTextEdit</b>(<i>textedit</i>)
+<b>attachTextEdit</b>(<i>textedit, editType="QTextEdit"</i>)
 <p>
         Public method to attach a QTextEdit widget.
 </p><dl>
-<dt><i>textedit</i></dt>
+<dt><i>textedit</i> (QTextEdit, QWebEngineView or QWebView)</dt>
 <dd>
-reference to the QTextEdit to be attached (QTextEdit)
+reference to the edit widget to be attached
+</dd><dt><i>editType</i> (str (one of "QTextEdit", "QWebEngineView" or "QWebView"))</dt>
+<dd>
+type of the attached edit widget
 </dd>
 </dl><a NAME="E5TextEditSearchWidget.keyPressEvent" ID="E5TextEditSearchWidget.keyPressEvent"></a>
 <h4>E5TextEditSearchWidget.keyPressEvent</h4>
--- a/Documentation/Source/eric6.Helpviewer.Download.DownloadItem.html	Wed Nov 01 19:22:02 2017 +0100
+++ b/Documentation/Source/eric6.Helpviewer.Download.DownloadItem.html	Fri Nov 03 12:10:16 2017 +0100
@@ -72,6 +72,9 @@
 <td><a href="#DownloadItem.__init__">DownloadItem</a></td>
 <td>Constructor</td>
 </tr><tr>
+<td><a href="#DownloadItem.__adjustSize">__adjustSize</a></td>
+<td>Private method to adjust the size of the download item.</td>
+</tr><tr>
 <td><a href="#DownloadItem.__downloadProgress">__downloadProgress</a></td>
 <td>Private method to show the download progress.</td>
 </tr><tr>
@@ -99,6 +102,9 @@
 <td><a href="#DownloadItem.__saveFileName">__saveFileName</a></td>
 <td>Private method to calculate a name for the file to download.</td>
 </tr><tr>
+<td><a href="#DownloadItem.__setDateTime">__setDateTime</a></td>
+<td>Private method to set the download date and time.</td>
+</tr><tr>
 <td><a href="#DownloadItem.__updateInfoLabel">__updateInfoLabel</a></td>
 <td>Private method to update the info label.</td>
 </tr><tr>
@@ -203,7 +209,12 @@
 <dd>
 reference to the main window (HelpWindow)
 </dd>
-</dl><a NAME="DownloadItem.__downloadProgress" ID="DownloadItem.__downloadProgress"></a>
+</dl><a NAME="DownloadItem.__adjustSize" ID="DownloadItem.__adjustSize"></a>
+<h4>DownloadItem.__adjustSize</h4>
+<b>__adjustSize</b>(<i></i>)
+<p>
+        Private method to adjust the size of the download item.
+</p><a NAME="DownloadItem.__downloadProgress" ID="DownloadItem.__downloadProgress"></a>
 <h4>DownloadItem.__downloadProgress</h4>
 <b>__downloadProgress</b>(<i>bytesReceived, bytesTotal</i>)
 <p>
@@ -271,6 +282,16 @@
 <dd>
 proposed filename and original filename (string, string)
 </dd>
+</dl><a NAME="DownloadItem.__setDateTime" ID="DownloadItem.__setDateTime"></a>
+<h4>DownloadItem.__setDateTime</h4>
+<b>__setDateTime</b>(<i>dateTime=None</i>)
+<p>
+        Private method to set the download date and time.
+</p><dl>
+<dt><i>dateTime</i> (QDateTime)</dt>
+<dd>
+date and time to be set
+</dd>
 </dl><a NAME="DownloadItem.__updateInfoLabel" ID="DownloadItem.__updateInfoLabel"></a>
 <h4>DownloadItem.__updateInfoLabel</h4>
 <b>__updateInfoLabel</b>(<i></i>)
@@ -379,8 +400,14 @@
 </p><dl>
 <dt>Returns:</dt>
 <dd>
-tuple of URL, save location, flag and the
-            URL of the related web page (QUrl, string, boolean,QUrl)
+tuple of URL, save location, flag, the
+            URL of the related web page and the date and time
+            of the download
+</dd>
+</dl><dl>
+<dt>Return Type:</dt>
+<dd>
+tuple of (QUrl, str, bool, QUrl, QDateTime)
 </dd>
 </dl><a NAME="DownloadItem.getInfoData" ID="DownloadItem.getInfoData"></a>
 <h4>DownloadItem.getInfoData</h4>
@@ -458,10 +485,11 @@
 <p>
         Public method to set the relevant download data.
 </p><dl>
-<dt><i>data</i></dt>
+<dt><i>data</i> (QUrl, str, bool, QUrl, QDateTime)</dt>
 <dd>
-tuple of URL, save location, flag and the
-            URL of the related web page (QUrl, string, boolean, QUrl)
+tuple of URL, save location, flag, the
+            URL of the related web page and the date and time
+            of the download
 </dd>
 </dl><a NAME="DownloadItem.setIcon" ID="DownloadItem.setIcon"></a>
 <h4>DownloadItem.setIcon</h4>
--- a/Documentation/Source/eric6.Helpviewer.Download.DownloadManager.html	Wed Nov 01 19:22:02 2017 +0100
+++ b/Documentation/Source/eric6.Helpviewer.Download.DownloadManager.html	Fri Nov 03 12:10:16 2017 +0100
@@ -170,13 +170,16 @@
 </dd>
 </dl><a NAME="DownloadManager.__addItem" ID="DownloadManager.__addItem"></a>
 <h4>DownloadManager.__addItem</h4>
-<b>__addItem</b>(<i>itm</i>)
+<b>__addItem</b>(<i>itm, append=False</i>)
 <p>
         Private method to add a download to the list of downloads.
 </p><dl>
-<dt><i>itm</i></dt>
+<dt><i>itm</i> (DownloadItem)</dt>
 <dd>
-reference to the download item (DownloadItem)
+reference to the download item
+</dd><dt><i>append</i> (bool)</dt>
+<dd>
+flag indicating to append the item
 </dd>
 </dl><a NAME="DownloadManager.__contextMenuCancel" ID="DownloadManager.__contextMenuCancel"></a>
 <h4>DownloadManager.__contextMenuCancel</h4>
--- a/Documentation/Source/eric6.MultiProject.MultiProject.html	Wed Nov 01 19:22:02 2017 +0100
+++ b/Documentation/Source/eric6.MultiProject.MultiProject.html	Fri Nov 03 12:10:16 2017 +0100
@@ -143,8 +143,11 @@
 <td><a href="#MultiProject.addE5Actions">addE5Actions</a></td>
 <td>Public method to add actions to the list of actions.</td>
 </tr><tr>
+<td><a href="#MultiProject.addNewProject">addNewProject</a></td>
+<td>Public slot used to add a new project to the multi-project.</td>
+</tr><tr>
 <td><a href="#MultiProject.addProject">addProject</a></td>
-<td>Public slot used to add files to the project.</td>
+<td>Public method to add a project to the multi-project.</td>
 </tr><tr>
 <td><a href="#MultiProject.changeProjectProperties">changeProjectProperties</a></td>
 <td>Public method to change the data of a project entry.</td>
@@ -370,16 +373,26 @@
 <dd>
 list of actions (list of E5Action)
 </dd>
-</dl><a NAME="MultiProject.addProject" ID="MultiProject.addProject"></a>
-<h4>MultiProject.addProject</h4>
-<b>addProject</b>(<i>startdir=None</i>)
+</dl><a NAME="MultiProject.addNewProject" ID="MultiProject.addNewProject"></a>
+<h4>MultiProject.addNewProject</h4>
+<b>addNewProject</b>(<i>startdir=None</i>)
 <p>
-        Public slot used to add files to the project.
+        Public slot used to add a new project to the multi-project.
 </p><dl>
 <dt><i>startdir</i></dt>
 <dd>
 start directory for the selection dialog (string)
 </dd>
+</dl><a NAME="MultiProject.addProject" ID="MultiProject.addProject"></a>
+<h4>MultiProject.addProject</h4>
+<b>addProject</b>(<i>project</i>)
+<p>
+        Public method to add a project to the multi-project.
+</p><dl>
+<dt><i>project</i> (dict)</dt>
+<dd>
+dictionary containing the project data to be added
+</dd>
 </dl><a NAME="MultiProject.changeProjectProperties" ID="MultiProject.changeProjectProperties"></a>
 <h4>MultiProject.changeProjectProperties</h4>
 <b>changeProjectProperties</b>(<i>pro</i>)
@@ -502,19 +515,24 @@
 </dd>
 </dl><a NAME="MultiProject.getProject" ID="MultiProject.getProject"></a>
 <h4>MultiProject.getProject</h4>
-<b>getProject</b>(<i>fn</i>)
+<b>getProject</b>(<i>uid</i>)
 <p>
         Public method to get a reference to a project entry.
 </p><dl>
-<dt><i>fn</i></dt>
+<dt><i>uid</i> (str)</dt>
 <dd>
-filename of the project (string)
+UID of the project to get
 </dd>
 </dl><dl>
 <dt>Returns:</dt>
 <dd>
 dictionary containing the project data
 </dd>
+</dl><dl>
+<dt>Return Type:</dt>
+<dd>
+dict
+</dd>
 </dl><a NAME="MultiProject.getProjects" ID="MultiProject.getProjects"></a>
 <h4>MultiProject.getProjects</h4>
 <b>getProjects</b>(<i></i>)
@@ -613,14 +631,14 @@
 </dd>
 </dl><a NAME="MultiProject.removeProject" ID="MultiProject.removeProject"></a>
 <h4>MultiProject.removeProject</h4>
-<b>removeProject</b>(<i>fn</i>)
+<b>removeProject</b>(<i>uid</i>)
 <p>
         Public slot to remove a project from the multi project.
 </p><dl>
-<dt><i>fn</i></dt>
+<dt><i>uid</i> (str)</dt>
 <dd>
-filename of the project to be removed from the multi
-            project (string)
+UID of the project to be removed from the multi
+            project
 </dd>
 </dl><a NAME="MultiProject.saveMultiProject" ID="MultiProject.saveMultiProject"></a>
 <h4>MultiProject.saveMultiProject</h4>
--- a/Documentation/Source/eric6.MultiProject.MultiProjectBrowser.html	Wed Nov 01 19:22:02 2017 +0100
+++ b/Documentation/Source/eric6.MultiProject.MultiProjectBrowser.html	Fri Nov 03 12:10:16 2017 +0100
@@ -48,7 +48,7 @@
 QTreeWidget
 <h3>Class Attributes</h3>
 <table>
-<tr><td>None</td></tr>
+<tr><td>ProjectFileNameRole</td></tr><tr><td>ProjectUidRole</td></tr>
 </table>
 <h3>Class Methods</h3>
 <table>
--- a/Documentation/Source/eric6.Preferences.__init__.html	Wed Nov 01 19:22:02 2017 +0100
+++ b/Documentation/Source/eric6.Preferences.__init__.html	Fri Nov 03 12:10:16 2017 +0100
@@ -64,6 +64,9 @@
 <td><a href="#getDiffColour">getDiffColour</a></td>
 <td>Module function to retrieve the colours for the diff highlighter.</td>
 </tr><tr>
+<td><a href="#getDocuViewer">getDocuViewer</a></td>
+<td>Module function to retrieve the Code Documentation Viewer related settings.</td>
+</tr><tr>
 <td><a href="#getEditor">getEditor</a></td>
 <td>Module function to retrieve the various editor settings.</td>
 </tr><tr>
@@ -226,6 +229,9 @@
 <td><a href="#setDiffColour">setDiffColour</a></td>
 <td>Module function to store the diff highlighter colours.</td>
 </tr><tr>
+<td><a href="#setDocuViewer">setDocuViewer</a></td>
+<td>Module function to store the Code Documentation Viewer related settings.</td>
+</tr><tr>
 <td><a href="#setEditor">setEditor</a></td>
 <td>Module function to store the various editor settings.</td>
 </tr><tr>
@@ -369,7 +375,7 @@
 object
 <h3>Class Attributes</h3>
 <table>
-<tr><td>cooperationDefaults</td></tr><tr><td>corbaDefaults</td></tr><tr><td>debuggerDefaults</td></tr><tr><td>diffColourDefaults</td></tr><tr><td>editorColourDefaults</td></tr><tr><td>editorDefaults</td></tr><tr><td>editorExporterDefaults</td></tr><tr><td>editorOtherFontsDefaults</td></tr><tr><td>editorTypingDefaults</td></tr><tr><td>geometryDefaults</td></tr><tr><td>graphicsDefaults</td></tr><tr><td>helpDefaults</td></tr><tr><td>hexEditorDefaults</td></tr><tr><td>iconEditorDefaults</td></tr><tr><td>iconsDefaults</td></tr><tr><td>ircDefaults</td></tr><tr><td>multiProjectDefaults</td></tr><tr><td>pluginManagerDefaults</td></tr><tr><td>printerDefaults</td></tr><tr><td>projectBrowserColourDefaults</td></tr><tr><td>projectBrowserFlagsDefaults</td></tr><tr><td>projectDefaults</td></tr><tr><td>pyflakesDefaults</td></tr><tr><td>qtDefaults</td></tr><tr><td>resetLayout</td></tr><tr><td>shellDefaults</td></tr><tr><td>sysDefaults</td></tr><tr><td>tasksDefaults</td></tr><tr><td>templatesDefaults</td></tr><tr><td>trayStarterDefaults</td></tr><tr><td>uiDefaults</td></tr><tr><td>userDefaults</td></tr><tr><td>varDefaults</td></tr><tr><td>vcsDefaults</td></tr><tr><td>webBrowserDefaults</td></tr><tr><td>webEngineSettingsIntitialized</td></tr><tr><td>webSettingsIntitialized</td></tr>
+<tr><td>cooperationDefaults</td></tr><tr><td>corbaDefaults</td></tr><tr><td>debuggerDefaults</td></tr><tr><td>diffColourDefaults</td></tr><tr><td>docuViewerDefaults</td></tr><tr><td>editorColourDefaults</td></tr><tr><td>editorDefaults</td></tr><tr><td>editorExporterDefaults</td></tr><tr><td>editorOtherFontsDefaults</td></tr><tr><td>editorTypingDefaults</td></tr><tr><td>geometryDefaults</td></tr><tr><td>graphicsDefaults</td></tr><tr><td>helpDefaults</td></tr><tr><td>hexEditorDefaults</td></tr><tr><td>iconEditorDefaults</td></tr><tr><td>iconsDefaults</td></tr><tr><td>ircDefaults</td></tr><tr><td>multiProjectDefaults</td></tr><tr><td>pluginManagerDefaults</td></tr><tr><td>printerDefaults</td></tr><tr><td>projectBrowserColourDefaults</td></tr><tr><td>projectBrowserFlagsDefaults</td></tr><tr><td>projectDefaults</td></tr><tr><td>pyflakesDefaults</td></tr><tr><td>qtDefaults</td></tr><tr><td>resetLayout</td></tr><tr><td>shellDefaults</td></tr><tr><td>sysDefaults</td></tr><tr><td>tasksDefaults</td></tr><tr><td>templatesDefaults</td></tr><tr><td>trayStarterDefaults</td></tr><tr><td>uiDefaults</td></tr><tr><td>userDefaults</td></tr><tr><td>varDefaults</td></tr><tr><td>vcsDefaults</td></tr><tr><td>webBrowserDefaults</td></tr><tr><td>webEngineSettingsIntitialized</td></tr><tr><td>webSettingsIntitialized</td></tr>
 </table>
 <h3>Class Methods</h3>
 <table>
@@ -513,6 +519,27 @@
 </dl><dl>
 <dt>Returns:</dt>
 <dd>
+the requested diff colour
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="getDocuViewer" ID="getDocuViewer"></a>
+<h2>getDocuViewer</h2>
+<b>getDocuViewer</b>(<i>key, prefClass=Prefs</i>)
+<p>
+    Module function to retrieve the Code Documentation Viewer related settings.
+</p><dl>
+<dt><i>key</i></dt>
+<dd>
+the key of the value to get
+</dd><dt><i>prefClass</i></dt>
+<dd>
+preferences class used as the storage area
+</dd>
+</dl><dl>
+<dt>Returns:</dt>
+<dd>
 the requested editor colour
 </dd>
 </dl>
@@ -1574,6 +1601,25 @@
 </dl>
 <div align="right"><a href="#top">Up</a></div>
 <hr /><hr />
+<a NAME="setDocuViewer" ID="setDocuViewer"></a>
+<h2>setDocuViewer</h2>
+<b>setDocuViewer</b>(<i>key, value, prefClass=Prefs</i>)
+<p>
+    Module function to store the Code Documentation Viewer related settings.
+</p><dl>
+<dt><i>key</i></dt>
+<dd>
+the key of the setting to be set
+</dd><dt><i>value</i></dt>
+<dd>
+the value to be set
+</dd><dt><i>prefClass</i></dt>
+<dd>
+preferences class used as the storage area
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
 <a NAME="setEditor" ID="setEditor"></a>
 <h2>setEditor</h2>
 <b>setEditor</b>(<i>key, value, prefClass=Prefs</i>)
--- a/Documentation/Source/eric6.Project.Project.html	Wed Nov 01 19:22:02 2017 +0100
+++ b/Documentation/Source/eric6.Project.Project.html	Fri Nov 03 12:10:16 2017 +0100
@@ -2536,11 +2536,14 @@
 </dd>
 </dl><a NAME="Project.setDbgInfo" ID="Project.setDbgInfo"></a>
 <h4>Project.setDbgInfo</h4>
-<b>setDbgInfo</b>(<i>argv, wd, env, excReporting, excList, excIgnoreList, autoClearShell, tracePython=None, autoContinue=None</i>)
+<b>setDbgInfo</b>(<i>interpreter, argv, wd, env, excReporting, excList, excIgnoreList, autoClearShell, tracePython=None, autoContinue=None</i>)
 <p>
         Public method to set the debugging information.
 </p><dl>
-<dt><i>argv</i></dt>
+<dt><i>interpreter</i></dt>
+<dd>
+interpreter to be used (string)
+</dd><dt><i>argv</i></dt>
 <dd>
 command line arguments to be used (string)
 </dd><dt><i>wd</i></dt>
--- a/Documentation/Source/eric6.QScintilla.Editor.html	Wed Nov 01 19:22:02 2017 +0100
+++ b/Documentation/Source/eric6.QScintilla.Editor.html	Fri Nov 03 12:10:16 2017 +0100
@@ -138,7 +138,7 @@
 QsciScintillaCompat
 <h3>Class Attributes</h3>
 <table>
-<tr><td>AttributeID</td></tr><tr><td>AttributePrivateID</td></tr><tr><td>AttributeProtectedID</td></tr><tr><td>CancelEditToken</td></tr><tr><td>ClassID</td></tr><tr><td>ClassPrivateID</td></tr><tr><td>ClassProtectedID</td></tr><tr><td>EndEditToken</td></tr><tr><td>EnumID</td></tr><tr><td>FromDocumentID</td></tr><tr><td>MethodID</td></tr><tr><td>MethodPrivateID</td></tr><tr><td>MethodProtectedID</td></tr><tr><td>RequestSyncToken</td></tr><tr><td>Separator</td></tr><tr><td>StartEditToken</td></tr><tr><td>SyncToken</td></tr><tr><td>TemplateImageID</td></tr><tr><td>WarningCode</td></tr><tr><td>WarningStyle</td></tr>
+<tr><td>AttributeID</td></tr><tr><td>AttributePrivateID</td></tr><tr><td>AttributeProtectedID</td></tr><tr><td>CancelEditToken</td></tr><tr><td>ClassID</td></tr><tr><td>ClassPrivateID</td></tr><tr><td>ClassProtectedID</td></tr><tr><td>EndEditToken</td></tr><tr><td>EnumID</td></tr><tr><td>FromDocumentID</td></tr><tr><td>KeywordsID</td></tr><tr><td>MethodID</td></tr><tr><td>MethodPrivateID</td></tr><tr><td>MethodProtectedID</td></tr><tr><td>ModuleID</td></tr><tr><td>RequestSyncToken</td></tr><tr><td>Separator</td></tr><tr><td>StartEditToken</td></tr><tr><td>SyncToken</td></tr><tr><td>TemplateImageID</td></tr><tr><td>WarningCode</td></tr><tr><td>WarningStyle</td></tr>
 </table>
 <h3>Class Methods</h3>
 <table>
@@ -180,6 +180,9 @@
 <td><a href="#Editor.__applyTemplate">__applyTemplate</a></td>
 <td>Private method to apply a template by name.</td>
 </tr><tr>
+<td><a href="#Editor.__autoComplete">__autoComplete</a></td>
+<td>Private method to start auto-completion via plug-ins.</td>
+</tr><tr>
 <td><a href="#Editor.__autosaveEnable">__autosaveEnable</a></td>
 <td>Private slot handling the autosave enable context menu action.</td>
 </tr><tr>
@@ -207,6 +210,9 @@
 <td><a href="#Editor.__charAdded">__charAdded</a></td>
 <td>Private slot called to handle the user entering a character.</td>
 </tr><tr>
+<td><a href="#Editor.__charAddedPermanent">__charAddedPermanent</a></td>
+<td>Private slot called to handle the user entering a character.</td>
+</tr><tr>
 <td><a href="#Editor.__checkEncoding">__checkEncoding</a></td>
 <td>Private method to check the selected encoding of the encodings submenu.</td>
 </tr><tr>
@@ -225,6 +231,9 @@
 <td><a href="#Editor.__clearBreakpoints">__clearBreakpoints</a></td>
 <td>Private slot to clear all breakpoints.</td>
 </tr><tr>
+<td><a href="#Editor.__clearCompletionsCache">__clearCompletionsCache</a></td>
+<td>Private method to clear the auto-completions cache.</td>
+</tr><tr>
 <td><a href="#Editor.__clearTypedWarning">__clearTypedWarning</a></td>
 <td>Private method to clear warnings of a specific kind.</td>
 </tr><tr>
@@ -465,6 +474,9 @@
 <td><a href="#Editor.__reopenWithEncodingMenuTriggered">__reopenWithEncodingMenuTriggered</a></td>
 <td>Private method to handle the rereading of the file with a selected encoding.</td>
 </tr><tr>
+<td><a href="#Editor.__replaceLeadingUnderscores">__replaceLeadingUnderscores</a></td>
+<td>Private method to replace the first two underlines for invers sorting.</td>
+</tr><tr>
 <td><a href="#Editor.__resetLanguage">__resetLanguage</a></td>
 <td>Private method used to reset the language selection.</td>
 </tr><tr>
@@ -537,9 +549,15 @@
 <td><a href="#Editor.__showCodeCoverage">__showCodeCoverage</a></td>
 <td>Private method to handle the code coverage context menu action.</td>
 </tr><tr>
+<td><a href="#Editor.__showCodeInfo">__showCodeInfo</a></td>
+<td>Private slot to handle the context menu action to show code info.</td>
+</tr><tr>
 <td><a href="#Editor.__showCodeMetrics">__showCodeMetrics</a></td>
 <td>Private method to handle the code metrics context menu action.</td>
 </tr><tr>
+<td><a href="#Editor.__showCompletionsList">__showCompletionsList</a></td>
+<td>Private method to show the completions list.</td>
+</tr><tr>
 <td><a href="#Editor.__showContextMenu">__showContextMenu</a></td>
 <td>Private slot handling the aboutToShow signal of the context menu.</td>
 </tr><tr>
@@ -628,7 +646,7 @@
 <td>Public method to signal, that this editor has been added to a project.</td>
 </tr><tr>
 <td><a href="#Editor.autoComplete">autoComplete</a></td>
-<td>Public method to start autocompletion.</td>
+<td>Public method to start auto-completion.</td>
 </tr><tr>
 <td><a href="#Editor.autoCompleteQScintilla">autoCompleteQScintilla</a></td>
 <td>Public method to perform an autocompletion using QScintilla methods.</td>
@@ -711,6 +729,9 @@
 <td><a href="#Editor.commentSelection">commentSelection</a></td>
 <td>Public slot to comment the current selection.</td>
 </tr><tr>
+<td><a href="#Editor.completionsListReady">completionsListReady</a></td>
+<td>Public method to show the completions determined by a completions provider.</td>
+</tr><tr>
 <td><a href="#Editor.contextMenuEvent">contextMenuEvent</a></td>
 <td>Protected method implementing the context menu event.</td>
 </tr><tr>
@@ -1315,6 +1336,20 @@
 name of the language (group) to get the template
             from (string)
 </dd>
+</dl><a NAME="Editor.__autoComplete" ID="Editor.__autoComplete"></a>
+<h4>Editor.__autoComplete</h4>
+<b>__autoComplete</b>(<i>auto=True, context=None</i>)
+<p>
+        Private method to start auto-completion via plug-ins.
+</p><dl>
+<dt><i>auto=</i></dt>
+<dd>
+flag indicating a call from the __charAdded method
+            (boolean)
+</dd><dt><i>context=</i> (bool or None)</dt>
+<dd>
+flag indicating to complete a context
+</dd>
 </dl><a NAME="Editor.__autosaveEnable" ID="Editor.__autosaveEnable"></a>
 <h4>Editor.__autosaveEnable</h4>
 <b>__autosaveEnable</b>(<i></i>)
@@ -1424,6 +1459,19 @@
 <dd>
 value of the character entered (integer)
 </dd>
+</dl><a NAME="Editor.__charAddedPermanent" ID="Editor.__charAddedPermanent"></a>
+<h4>Editor.__charAddedPermanent</h4>
+<b>__charAddedPermanent</b>(<i>charNumber</i>)
+<p>
+        Private slot called to handle the user entering a character.
+</p><p>
+        Note: This slot is always connected independent of the auto-completion
+        and calltips handling __charAdded() slot.
+</p><dl>
+<dt><i>charNumber</i></dt>
+<dd>
+value of the character entered (integer)
+</dd>
 </dl><a NAME="Editor.__checkEncoding" ID="Editor.__checkEncoding"></a>
 <h4>Editor.__checkEncoding</h4>
 <b>__checkEncoding</b>(<i></i>)
@@ -1459,7 +1507,12 @@
 <dd>
 name of the file (string)
 </dd>
-</dl><a NAME="Editor.__clearTypedWarning" ID="Editor.__clearTypedWarning"></a>
+</dl><a NAME="Editor.__clearCompletionsCache" ID="Editor.__clearCompletionsCache"></a>
+<h4>Editor.__clearCompletionsCache</h4>
+<b>__clearCompletionsCache</b>(<i></i>)
+<p>
+        Private method to clear the auto-completions cache.
+</p><a NAME="Editor.__clearTypedWarning" ID="Editor.__clearTypedWarning"></a>
 <h4>Editor.__clearTypedWarning</h4>
 <b>__clearTypedWarning</b>(<i>warningKind</i>)
 <p>
@@ -2227,6 +2280,26 @@
 <dd>
 reference to the action that was triggered (QAction)
 </dd>
+</dl><a NAME="Editor.__replaceLeadingUnderscores" ID="Editor.__replaceLeadingUnderscores"></a>
+<h4>Editor.__replaceLeadingUnderscores</h4>
+<b>__replaceLeadingUnderscores</b>(<i>txt</i>)
+<p>
+        Private method to replace the first two underlines for invers sorting.
+</p><dl>
+<dt><i>txt</i> (str)</dt>
+<dd>
+completion text
+</dd>
+</dl><dl>
+<dt>Returns:</dt>
+<dd>
+modified completion text
+</dd>
+</dl><dl>
+<dt>Return Type:</dt>
+<dd>
+str
+</dd>
 </dl><a NAME="Editor.__resetLanguage" ID="Editor.__resetLanguage"></a>
 <h4>Editor.__resetLanguage</h4>
 <b>__resetLanguage</b>(<i>propagate=True</i>)
@@ -2386,12 +2459,27 @@
 <b>__showCodeCoverage</b>(<i></i>)
 <p>
         Private method to handle the code coverage context menu action.
+</p><a NAME="Editor.__showCodeInfo" ID="Editor.__showCodeInfo"></a>
+<h4>Editor.__showCodeInfo</h4>
+<b>__showCodeInfo</b>(<i></i>)
+<p>
+        Private slot to handle the context menu action to show code info.
 </p><a NAME="Editor.__showCodeMetrics" ID="Editor.__showCodeMetrics"></a>
 <h4>Editor.__showCodeMetrics</h4>
 <b>__showCodeMetrics</b>(<i></i>)
 <p>
         Private method to handle the code metrics context menu action.
-</p><a NAME="Editor.__showContextMenu" ID="Editor.__showContextMenu"></a>
+</p><a NAME="Editor.__showCompletionsList" ID="Editor.__showCompletionsList"></a>
+<h4>Editor.__showCompletionsList</h4>
+<b>__showCompletionsList</b>(<i>completions</i>)
+<p>
+        Private method to show the completions list.
+</p><dl>
+<dt><i>completions</i> (list of str or set of str)</dt>
+<dd>
+completions to be shown
+</dd>
+</dl><a NAME="Editor.__showContextMenu" ID="Editor.__showContextMenu"></a>
 <h4>Editor.__showContextMenu</h4>
 <b>__showContextMenu</b>(<i></i>)
 <p>
@@ -2601,19 +2689,24 @@
 </dd>
 </dl><a NAME="Editor.addCompletionListHook" ID="Editor.addCompletionListHook"></a>
 <h4>Editor.addCompletionListHook</h4>
-<b>addCompletionListHook</b>(<i>key, func</i>)
+<b>addCompletionListHook</b>(<i>key, func, async=False</i>)
 <p>
         Public method to set an auto-completion list provider.
 </p><dl>
 <dt><i>key</i> (str)</dt>
 <dd>
 name of the provider
-</dd><dt><i>func</i> (function(editor, bool) -> list of str)</dt>
+</dd><dt><i>func</i> (function(editor, bool) -> list of str in case async is False)</dt>
 <dd>
 function providing completion list. func
             should be a function taking a reference to the editor and
             a boolean indicating to complete a context. It should return
             the possible completions as a list of strings.
+            and function(editor, bool, str) returning nothing in case async
+            is True
+</dd><dt><i>async</i> (bool)</dt>
+<dd>
+flag indicating an asynchroneous function
 </dd>
 </dl><a NAME="Editor.addedToProject" ID="Editor.addedToProject"></a>
 <h4>Editor.addedToProject</h4>
@@ -2624,7 +2717,7 @@
 <h4>Editor.autoComplete</h4>
 <b>autoComplete</b>(<i>auto=False, context=True</i>)
 <p>
-        Public method to start autocompletion.
+        Public method to start auto-completion.
 </p><dl>
 <dt><i>auto=</i></dt>
 <dd>
@@ -2835,7 +2928,21 @@
 <b>commentSelection</b>(<i></i>)
 <p>
         Public slot to comment the current selection.
-</p><a NAME="Editor.contextMenuEvent" ID="Editor.contextMenuEvent"></a>
+</p><a NAME="Editor.completionsListReady" ID="Editor.completionsListReady"></a>
+<h4>Editor.completionsListReady</h4>
+<b>completionsListReady</b>(<i>completions, acText</i>)
+<p>
+        Public method to show the completions determined by a completions
+        provider.
+</p><dl>
+<dt><i>completions</i> (list of str or set of str)</dt>
+<dd>
+list of possible completions
+</dd><dt><i>acText</i> (str)</dt>
+<dd>
+text to be completed
+</dd>
+</dl><a NAME="Editor.contextMenuEvent" ID="Editor.contextMenuEvent"></a>
 <h4>Editor.contextMenuEvent</h4>
 <b>contextMenuEvent</b>(<i>evt</i>)
 <p>
--- a/Documentation/Source/eric6.UI.Previewers.PreviewerHTML.html	Wed Nov 01 19:22:02 2017 +0100
+++ b/Documentation/Source/eric6.UI.Previewers.PreviewerHTML.html	Fri Nov 03 12:10:16 2017 +0100
@@ -543,9 +543,8 @@
                 Class is placed here, because it depends on imported markdown,
                 and markdown import is lazy.
 </p><p>
-                (see http://achinghead.com/
-                python-markdown-adding-insert-delete.html this page for
-                details)
+                (see https://pythonhosted.org/Markdown/extensions/api.html
+                this page for details)
 </p>
 <h3>Derived from</h3>
 markdown.Extension
--- a/Documentation/Source/eric6.UI.UserInterface.html	Wed Nov 01 19:22:02 2017 +0100
+++ b/Documentation/Source/eric6.UI.UserInterface.html	Fri Nov 03 12:10:16 2017 +0100
@@ -675,6 +675,9 @@
 <td><a href="#UserInterface.__writeTasks">__writeTasks</a></td>
 <td>Private slot to write the tasks data to an XML file (.e6t).</td>
 </tr><tr>
+<td><a href="#UserInterface.activateCodeDocumentationViewer">activateCodeDocumentationViewer</a></td>
+<td>Public slot to handle the activation of the Code Documentation Viewer.</td>
+</tr><tr>
 <td><a href="#UserInterface.activateCooperationViewer">activateCooperationViewer</a></td>
 <td>Public slot to handle the activation of the cooperation window.</td>
 </tr><tr>
@@ -711,6 +714,9 @@
 <td><a href="#UserInterface.createPopupMenu">createPopupMenu</a></td>
 <td>Public method to create the toolbars menu for Qt.</td>
 </tr><tr>
+<td><a href="#UserInterface.documentationViewer">documentationViewer</a></td>
+<td>Public method to provide a reference to the code documentation viewer.</td>
+</tr><tr>
 <td><a href="#UserInterface.dragEnterEvent">dragEnterEvent</a></td>
 <td>Protected method to handle the drag enter event.</td>
 </tr><tr>
@@ -2060,7 +2066,17 @@
 <b>__writeTasks</b>(<i></i>)
 <p>
         Private slot to write the tasks data to an XML file (.e6t).
-</p><a NAME="UserInterface.activateCooperationViewer" ID="UserInterface.activateCooperationViewer"></a>
+</p><a NAME="UserInterface.activateCodeDocumentationViewer" ID="UserInterface.activateCodeDocumentationViewer"></a>
+<h4>UserInterface.activateCodeDocumentationViewer</h4>
+<b>activateCodeDocumentationViewer</b>(<i>switchFocus=True</i>)
+<p>
+        Public slot to handle the activation of the Code Documentation Viewer.
+</p><dl>
+<dt><i>switchFocus</i> (bool)</dt>
+<dd>
+flag indicating to transfer the input focus
+</dd>
+</dl><a NAME="UserInterface.activateCooperationViewer" ID="UserInterface.activateCooperationViewer"></a>
 <h4>UserInterface.activateCooperationViewer</h4>
 <b>activateCooperationViewer</b>(<i></i>)
 <p>
@@ -2169,6 +2185,21 @@
 <dd>
 toolbars menu (QMenu)
 </dd>
+</dl><a NAME="UserInterface.documentationViewer" ID="UserInterface.documentationViewer"></a>
+<h4>UserInterface.documentationViewer</h4>
+<b>documentationViewer</b>(<i></i>)
+<p>
+        Public method to provide a reference to the code documentation viewer.
+</p><dl>
+<dt>Returns:</dt>
+<dd>
+reference to the code documentation viewer
+</dd>
+</dl><dl>
+<dt>Return Type:</dt>
+<dd>
+CodeDocumentationViewer
+</dd>
 </dl><a NAME="UserInterface.dragEnterEvent" ID="UserInterface.dragEnterEvent"></a>
 <h4>UserInterface.dragEnterEvent</h4>
 <b>dragEnterEvent</b>(<i>event</i>)
--- a/Documentation/Source/eric6.ViewManager.ViewManager.html	Wed Nov 01 19:22:02 2017 +0100
+++ b/Documentation/Source/eric6.ViewManager.ViewManager.html	Fri Nov 03 12:10:16 2017 +0100
@@ -318,6 +318,9 @@
 <td><a href="#ViewManager.__editShowCallTips">__editShowCallTips</a></td>
 <td>Private method to handle the calltips action.</td>
 </tr><tr>
+<td><a href="#ViewManager.__editShowCodeInfo">__editShowCodeInfo</a></td>
+<td>Private method to handle the code info action.</td>
+</tr><tr>
 <td><a href="#ViewManager.__editSmartIndent">__editSmartIndent</a></td>
 <td>Private method to handle the smart indent action.</td>
 </tr><tr>
@@ -429,6 +432,9 @@
 <td><a href="#ViewManager.__initViewActions">__initViewActions</a></td>
 <td>Private method defining the user interface actions for the view commands.</td>
 </tr><tr>
+<td><a href="#ViewManager.__isEditorInfoSupportedEd">__isEditorInfoSupportedEd</a></td>
+<td>Private method to check, if an editor is supported by the documentation viewer.</td>
+</tr><tr>
 <td><a href="#ViewManager.__lastEditPositionAvailable">__lastEditPositionAvailable</a></td>
 <td>Private slot to handle the lastEditPositionAvailable signal of an editor.</td>
 </tr><tr>
@@ -825,6 +831,9 @@
 <td><a href="#ViewManager.isConnected">isConnected</a></td>
 <td>Public method to check the connection status of the IDE.</td>
 </tr><tr>
+<td><a href="#ViewManager.isEditorInfoSupported">isEditorInfoSupported</a></td>
+<td>Public method to check, if a language is supported by the documentation viewer.</td>
+</tr><tr>
 <td><a href="#ViewManager.mainWidget">mainWidget</a></td>
 <td>Public method to return a reference to the main Widget of a specific view manager subclass.</td>
 </tr><tr>
@@ -942,6 +951,9 @@
 <td><a href="#ViewManager.showDebugSource">showDebugSource</a></td>
 <td>Public method to open the given file and highlight the given line in it.</td>
 </tr><tr>
+<td><a href="#ViewManager.showEditorInfo">showEditorInfo</a></td>
+<td>Public method to show some information for a given editor.</td>
+</tr><tr>
 <td><a href="#ViewManager.showReplaceWidget">showReplaceWidget</a></td>
 <td>Public method to show the replace widget.</td>
 </tr><tr>
@@ -1200,6 +1212,11 @@
 <b>__editShowCallTips</b>(<i></i>)
 <p>
         Private method to handle the calltips action.
+</p><a NAME="ViewManager.__editShowCodeInfo" ID="ViewManager.__editShowCodeInfo"></a>
+<h4>ViewManager.__editShowCodeInfo</h4>
+<b>__editShowCodeInfo</b>(<i></i>)
+<p>
+        Private method to handle the code info action.
 </p><a NAME="ViewManager.__editSmartIndent" ID="ViewManager.__editSmartIndent"></a>
 <h4>ViewManager.__editSmartIndent</h4>
 <b>__editSmartIndent</b>(<i></i>)
@@ -1443,7 +1460,28 @@
 <p>
         Private method defining the user interface actions for the view
         commands.
-</p><a NAME="ViewManager.__lastEditPositionAvailable" ID="ViewManager.__lastEditPositionAvailable"></a>
+</p><a NAME="ViewManager.__isEditorInfoSupportedEd" ID="ViewManager.__isEditorInfoSupportedEd"></a>
+<h4>ViewManager.__isEditorInfoSupportedEd</h4>
+<b>__isEditorInfoSupportedEd</b>(<i>editor</i>)
+<p>
+        Private method to check, if an editor is supported by the
+        documentation viewer.
+</p><dl>
+<dt><i>editor</i> (Editor)</dt>
+<dd>
+reference to the editor to check for
+</dd>
+</dl><dl>
+<dt>Returns:</dt>
+<dd>
+flag indicating the support status
+</dd>
+</dl><dl>
+<dt>Return Type:</dt>
+<dd>
+bool
+</dd>
+</dl><a NAME="ViewManager.__lastEditPositionAvailable" ID="ViewManager.__lastEditPositionAvailable"></a>
 <h4>ViewManager.__lastEditPositionAvailable</h4>
 <b>__lastEditPositionAvailable</b>(<i></i>)
 <p>
@@ -2663,6 +2701,27 @@
 <dd>
 flag indicating the connection status (boolean)
 </dd>
+</dl><a NAME="ViewManager.isEditorInfoSupported" ID="ViewManager.isEditorInfoSupported"></a>
+<h4>ViewManager.isEditorInfoSupported</h4>
+<b>isEditorInfoSupported</b>(<i>language</i>)
+<p>
+        Public method to check, if a language is supported by the
+        documentation viewer.
+</p><dl>
+<dt><i>language</i> (str)</dt>
+<dd>
+editor programming language to check
+</dd>
+</dl><dl>
+<dt>Returns:</dt>
+<dd>
+flag indicating the support status
+</dd>
+</dl><dl>
+<dt>Return Type:</dt>
+<dd>
+bool
+</dd>
 </dl><a NAME="ViewManager.mainWidget" ID="ViewManager.mainWidget"></a>
 <h4>ViewManager.mainWidget</h4>
 <b>mainWidget</b>(<i></i>)
@@ -3096,6 +3155,16 @@
 <dd>
 line number to highlight (int)
 </dd>
+</dl><a NAME="ViewManager.showEditorInfo" ID="ViewManager.showEditorInfo"></a>
+<h4>ViewManager.showEditorInfo</h4>
+<b>showEditorInfo</b>(<i>editor</i>)
+<p>
+        Public method to show some information for a given editor.
+</p><dl>
+<dt><i>editor</i> (Editor)</dt>
+<dd>
+editor to show information text for
+</dd>
 </dl><a NAME="ViewManager.showReplaceWidget" ID="ViewManager.showReplaceWidget"></a>
 <h4>ViewManager.showReplaceWidget</h4>
 <b>showReplaceWidget</b>(<i></i>)
--- a/Documentation/Source/eric6.WebBrowser.Download.DownloadItem.html	Wed Nov 01 19:22:02 2017 +0100
+++ b/Documentation/Source/eric6.WebBrowser.Download.DownloadItem.html	Fri Nov 03 12:10:16 2017 +0100
@@ -72,6 +72,9 @@
 <td><a href="#DownloadItem.__init__">DownloadItem</a></td>
 <td>Constructor</td>
 </tr><tr>
+<td><a href="#DownloadItem.__adjustSize">__adjustSize</a></td>
+<td>Private method to adjust the size of the download item.</td>
+</tr><tr>
 <td><a href="#DownloadItem.__downloadProgress">__downloadProgress</a></td>
 <td>Private method to show the download progress.</td>
 </tr><tr>
@@ -90,6 +93,9 @@
 <td><a href="#DownloadItem.__saveFileName">__saveFileName</a></td>
 <td>Private method to calculate a name for the file to download.</td>
 </tr><tr>
+<td><a href="#DownloadItem.__setDateTime">__setDateTime</a></td>
+<td>Private method to set the download date and time.</td>
+</tr><tr>
 <td><a href="#DownloadItem.__setFileName">__setFileName</a></td>
 <td>Private method to set the file name to save the download into.</td>
 </tr><tr>
@@ -175,7 +181,12 @@
 <dd>
 reference to the parent widget (QWidget)
 </dd>
-</dl><a NAME="DownloadItem.__downloadProgress" ID="DownloadItem.__downloadProgress"></a>
+</dl><a NAME="DownloadItem.__adjustSize" ID="DownloadItem.__adjustSize"></a>
+<h4>DownloadItem.__adjustSize</h4>
+<b>__adjustSize</b>(<i></i>)
+<p>
+        Private method to adjust the size of the download item.
+</p><a NAME="DownloadItem.__downloadProgress" ID="DownloadItem.__downloadProgress"></a>
 <h4>DownloadItem.__downloadProgress</h4>
 <b>__downloadProgress</b>(<i>bytesReceived, bytesTotal</i>)
 <p>
@@ -223,6 +234,16 @@
 <dd>
 proposed filename and original filename (string, string)
 </dd>
+</dl><a NAME="DownloadItem.__setDateTime" ID="DownloadItem.__setDateTime"></a>
+<h4>DownloadItem.__setDateTime</h4>
+<b>__setDateTime</b>(<i>dateTime=None</i>)
+<p>
+        Private method to set the download date and time.
+</p><dl>
+<dt><i>dateTime</i> (QDateTime)</dt>
+<dd>
+date and time to be set
+</dd>
 </dl><a NAME="DownloadItem.__setFileName" ID="DownloadItem.__setFileName"></a>
 <h4>DownloadItem.__setFileName</h4>
 <b>__setFileName</b>(<i>fileName</i>)
@@ -341,8 +362,14 @@
 </p><dl>
 <dt>Returns:</dt>
 <dd>
-tuple of URL, save location, flag and the
-            URL of the related web page (QUrl, string, boolean,QUrl)
+tuple of URL, save location, flag, the
+            URL of the related web page and the date and time
+            of the download
+</dd>
+</dl><dl>
+<dt>Return Type:</dt>
+<dd>
+tuple of (QUrl, str, bool, QUrl, QDateTime)
 </dd>
 </dl><a NAME="DownloadItem.getInfoData" ID="DownloadItem.getInfoData"></a>
 <h4>DownloadItem.getInfoData</h4>
@@ -400,10 +427,11 @@
 <p>
         Public method to set the relevant download data.
 </p><dl>
-<dt><i>data</i></dt>
+<dt><i>data</i> (QUrl, str, bool, QUrl, QDateTime)</dt>
 <dd>
-tuple of URL, save location, flag and the
-            URL of the related web page (QUrl, string, boolean, QUrl)
+tuple of URL, save location, flag, the
+            URL of the related web page and the date and time
+            of the download
 </dd>
 </dl><a NAME="DownloadItem.setIcon" ID="DownloadItem.setIcon"></a>
 <h4>DownloadItem.setIcon</h4>
--- a/Documentation/Source/eric6.WebBrowser.Download.DownloadManager.html	Wed Nov 01 19:22:02 2017 +0100
+++ b/Documentation/Source/eric6.WebBrowser.Download.DownloadManager.html	Fri Nov 03 12:10:16 2017 +0100
@@ -164,13 +164,16 @@
 </dd>
 </dl><a NAME="DownloadManager.__addItem" ID="DownloadManager.__addItem"></a>
 <h4>DownloadManager.__addItem</h4>
-<b>__addItem</b>(<i>itm</i>)
+<b>__addItem</b>(<i>itm, append=False</i>)
 <p>
         Private method to add a download to the list of downloads.
 </p><dl>
-<dt><i>itm</i></dt>
+<dt><i>itm</i> (DownloadItem)</dt>
 <dd>
-reference to the download item (DownloadItem)
+reference to the download item
+</dd><dt><i>append</i> (bool)</dt>
+<dd>
+flag indicating to append the item
 </dd>
 </dl><a NAME="DownloadManager.__contextMenuCancel" ID="DownloadManager.__contextMenuCancel"></a>
 <h4>DownloadManager.__contextMenuCancel</h4>
--- a/Documentation/Source/index-eric6.Preferences.ConfigurationPages.html	Wed Nov 01 19:22:02 2017 +0100
+++ b/Documentation/Source/index-eric6.Preferences.ConfigurationPages.html	Fri Nov 03 12:10:16 2017 +0100
@@ -67,6 +67,9 @@
 <td><a href="eric6.Preferences.ConfigurationPages.EditorCalltipsQScintillaPage.html">EditorCalltipsQScintillaPage</a></td>
 <td>Module implementing the QScintilla Calltips configuration page.</td>
 </tr><tr>
+<td><a href="eric6.Preferences.ConfigurationPages.EditorDocViewerPage.html">EditorDocViewerPage</a></td>
+<td>Module implementing the Editor Documentation Viewer configuration page.</td>
+</tr><tr>
 <td><a href="eric6.Preferences.ConfigurationPages.EditorExportersPage.html">EditorExportersPage</a></td>
 <td>Module implementing the Editor Exporters configuration page.</td>
 </tr><tr>
--- a/Documentation/Source/index-eric6.UI.html	Wed Nov 01 19:22:02 2017 +0100
+++ b/Documentation/Source/index-eric6.UI.html	Fri Nov 03 12:10:16 2017 +0100
@@ -32,6 +32,9 @@
 <tr>
 <td><a href="index-eric6.UI.Previewers.html">Previewers</a></td>
 <td>Package containing the various previewer modules.</td>
+</tr><tr>
+<td><a href="index-eric6.UI.data.html">data</a></td>
+<td>Package defining some data used by UI widgets.</td>
 </tr>
 </table>
 
@@ -53,6 +56,12 @@
 <td><a href="eric6.UI.ClearPrivateDataDialog.html">ClearPrivateDataDialog</a></td>
 <td>Module implementing a dialog to select which private data to clear.</td>
 </tr><tr>
+<td><a href="eric6.UI.CodeDocumentationViewer.html">CodeDocumentationViewer</a></td>
+<td>Module implementing a widget to show some source code information provided by plug-ins.</td>
+</tr><tr>
+<td><a href="eric6.UI.CodeDocumentationViewerTemplate.html">CodeDocumentationViewerTemplate</a></td>
+<td>Module implementing functions to prepare an HTML documentation view.</td>
+</tr><tr>
 <td><a href="eric6.UI.CompareDialog.html">CompareDialog</a></td>
 <td>Module implementing a dialog to compare two files and show the result side by side.</td>
 </tr><tr>
--- a/Documentation/Source/index-eric6.html	Wed Nov 01 19:22:02 2017 +0100
+++ b/Documentation/Source/index-eric6.html	Fri Nov 03 12:10:16 2017 +0100
@@ -54,6 +54,9 @@
 <td><a href="index-eric6.E5Network.html">E5Network</a></td>
 <td>Package implementing some special network related objects and functions.</td>
 </tr><tr>
+<td><a href="index-eric6.E5Utilities.html">E5Utilities</a></td>
+<td>Package containing utility modules.</td>
+</tr><tr>
 <td><a href="index-eric6.E5XML.html">E5XML</a></td>
 <td>Package implementing the XML handling module of eric6.</td>
 </tr><tr>
--- a/E5Gui/E5TextEditSearchWidget.py	Wed Nov 01 19:22:02 2017 +0100
+++ b/E5Gui/E5TextEditSearchWidget.py	Fri Nov 03 12:10:16 2017 +0100
@@ -10,11 +10,9 @@
 from __future__ import unicode_literals
 
 from PyQt5.QtCore import pyqtSlot, Qt
-from PyQt5.QtGui import QTextDocument
+from PyQt5.QtGui import QPalette, QBrush, QColor, QTextDocument, QTextCursor
 from PyQt5.QtWidgets import QWidget
 
-from E5Gui import E5MessageBox
-
 from .Ui_E5TextEditSearchWidget import Ui_E5TextEditSearchWidget
 
 import UI.PixmapCache
@@ -34,11 +32,17 @@
         self.setupUi(self)
         
         self.__textedit = None
+        self.__texteditType = ""
         self.__findBackwards = True
         
         self.findPrevButton.setIcon(UI.PixmapCache.getIcon("1leftarrow.png"))
         self.findNextButton.setIcon(UI.PixmapCache.getIcon("1rightarrow.png"))
         
+        self.__defaultBaseColor = \
+            self.findtextCombo.lineEdit().palette().color(QPalette.Base)
+        self.__defaultTextColor = \
+            self.findtextCombo.lineEdit().palette().color(QPalette.Text)
+        
         self.findHistory = []
         
         self.findtextCombo.setCompleter(None)
@@ -46,16 +50,25 @@
             self.__findByReturnPressed)
         
         self.__setSearchButtons(False)
+        self.infoLabel.hide()
         
         self.setFocusProxy(self.findtextCombo)
     
-    def attachTextEdit(self, textedit):
+    def attachTextEdit(self, textedit, editType="QTextEdit"):
         """
         Public method to attach a QTextEdit widget.
         
-        @param textedit reference to the QTextEdit to be attached (QTextEdit)
+        @param textedit reference to the edit widget to be attached
+        @type QTextEdit, QWebEngineView or QWebView
+        @param editType type of the attached edit widget
+        @type str (one of "QTextEdit", "QWebEngineView" or "QWebView")
         """
+        assert editType in ["QTextEdit", "QWebEngineView", "QWebView"]
+        
         self.__textedit = textedit
+        self.__texteditType = editType
+        
+        self.wordCheckBox.setVisible(editType == "QTextEdit")
     
     def keyPressEvent(self, event):
         """
@@ -75,6 +88,9 @@
         @param txt text of the combobox (string)
         """
         self.__setSearchButtons(txt != "")
+        
+        self.infoLabel.hide()
+        self.__setFindtextComboBackground(False)
     
     def __setSearchButtons(self, enabled):
         """
@@ -115,7 +131,13 @@
         if not self.__textedit:
             return
         
+        self.infoLabel.clear()
+        self.infoLabel.hide()
+        self.__setFindtextComboBackground(False)
+        
         txt = self.findtextCombo.currentText()
+        if not txt:
+            return
         self.__findBackwards = backwards
         
         # This moves any previous occurrence of this statement to the head
@@ -126,6 +148,25 @@
         self.findtextCombo.clear()
         self.findtextCombo.addItems(self.findHistory)
         
+        if self.__texteditType == "QTextEdit":
+            ok = self.__findPrevNextQTextEdit(backwards)
+            self.__findNextPrevCallback(ok)
+        elif self.__texteditType == "QWebEngineView":
+            self.__findPrevNextQWebEngineView(backwards)
+        elif self.__texteditType == "QWebView":
+            ok = self.__findPrevNextQWebView(backwards)
+            self.__findNextPrevCallback(ok)
+    
+    def __findPrevNextQTextEdit(self, backwards):
+        """
+        Private method to to search the associated edit widget of
+        type QTextEdit.
+        
+        @param backwards flag indicating a backwards search
+        @type bool
+        @return flag indicating the search result
+        @rtype bool
+        """
         if backwards:
             flags = QTextDocument.FindFlags(QTextDocument.FindBackward)
         else:
@@ -134,10 +175,88 @@
             flags |= QTextDocument.FindCaseSensitively
         if self.wordCheckBox.isChecked():
             flags |= QTextDocument.FindWholeWords
-        ok = self.__textedit.find(txt, flags)
         
+        ok = self.__textedit.find(self.findtextCombo.currentText(), flags)
         if not ok:
-            E5MessageBox.information(
-                self,
-                self.tr("Find"),
-                self.tr("""'{0}' was not found.""").format(txt))
+            # wrap around once
+            cursor = self.__textedit.textCursor()
+            if backwards:
+                moveOp = QTextCursor.End        # move to end of document
+            else:
+                moveOp = QTextCursor.Start      # move to start of document
+            cursor.movePosition(moveOp)
+            self.__textedit.setTextCursor(cursor)
+            ok = self.__textedit.find(self.findtextCombo.currentText(), flags)
+        
+        return ok
+    
+    def __findPrevNextQWebView(self, backwards):
+        """
+        Private method to to search the associated edit widget of
+        type QWebView.
+        
+        @param backwards flag indicating a backwards search
+        @type bool
+        @return flag indicating the search result
+        @rtype bool
+        """
+        from PyQt5.QtWebKitWidgets import QWebPage
+        
+        findFlags = QWebPage.FindFlags(QWebPage.FindWrapsAroundDocument)
+        if self.caseCheckBox.isChecked():
+            findFlags |= QWebPage.FindCaseSensitively
+        if backwards:
+            findFlags |= QWebPage.FindBackward
+        
+        return self.__textedit.findText(self.findtextCombo.currentText(),
+                                        findFlags)
+    
+    def __findPrevNextQWebEngineView(self, backwards):
+        """
+        Private method to to search the associated edit widget of
+        type QWebEngineView.
+        
+        @param backwards flag indicating a backwards search
+        @type bool
+        """
+        from PyQt5.QtWebEngineWidgets import QWebEnginePage
+        
+        findFlags = QWebEnginePage.FindFlags()
+        if self.caseCheckBox.isChecked():
+            findFlags |= QWebEnginePage.FindCaseSensitively
+        if backwards:
+            findFlags |= QWebEnginePage.FindBackward
+        self.__textedit.findText(self.findtextCombo.currentText(),
+                                 findFlags, self.__findNextPrevCallback)
+    
+    def __findNextPrevCallback(self, found):
+        """
+        Private method to process the result of the last search.
+        
+        @param found flag indicating if the last search succeeded
+        @type bool
+        """
+        if not found:
+            txt = self.findtextCombo.currentText()
+            self.infoLabel.setText(
+                self.tr("'{0}' was not found.").format(txt))
+            self.infoLabel.show()
+            self.__setFindtextComboBackground(True)
+    
+    def __setFindtextComboBackground(self, error):
+        """
+        Private slot to change the findtext combo background to indicate
+        errors.
+        
+        @param error flag indicating an error condition (boolean)
+        """
+        le = self.findtextCombo.lineEdit()
+        p = le.palette()
+        if error:
+            p.setBrush(QPalette.Base, QBrush(QColor("#FF6666")))
+            p.setBrush(QPalette.Text, QBrush(QColor("#000000")))
+        else:
+            p.setBrush(QPalette.Base, self.__defaultBaseColor)
+            p.setBrush(QPalette.Text, self.__defaultTextColor)
+        le.setPalette(p)
+        le.update()
--- a/E5Gui/E5TextEditSearchWidget.ui	Wed Nov 01 19:22:02 2017 +0100
+++ b/E5Gui/E5TextEditSearchWidget.ui	Fri Nov 03 12:10:16 2017 +0100
@@ -7,10 +7,10 @@
     <x>0</x>
     <y>0</y>
     <width>475</width>
-    <height>22</height>
+    <height>43</height>
    </rect>
   </property>
-  <layout class="QHBoxLayout" name="horizontalLayout">
+  <layout class="QGridLayout" name="gridLayout">
    <property name="leftMargin">
     <number>0</number>
    </property>
@@ -23,15 +23,15 @@
    <property name="bottomMargin">
     <number>0</number>
    </property>
-   <item>
+   <item row="0" column="0">
     <widget class="QLabel" name="label">
      <property name="text">
       <string>Find:</string>
      </property>
     </widget>
    </item>
-   <item>
-    <widget class="QComboBox" name="findtextCombo">
+   <item row="0" column="1">
+    <widget class="E5ClearableComboBox" name="findtextCombo">
      <property name="sizePolicy">
       <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
        <horstretch>0</horstretch>
@@ -55,36 +55,57 @@
      </property>
     </widget>
    </item>
-   <item>
+   <item row="0" column="2">
     <widget class="QCheckBox" name="caseCheckBox">
      <property name="text">
       <string>Match case</string>
      </property>
     </widget>
    </item>
-   <item>
+   <item row="0" column="3">
     <widget class="QCheckBox" name="wordCheckBox">
      <property name="text">
       <string>Whole word</string>
      </property>
     </widget>
    </item>
-   <item>
-    <widget class="QToolButton" name="findPrevButton">
-     <property name="toolTip">
-      <string>Press to find the previous occurrence</string>
+   <item row="0" column="4">
+    <layout class="QHBoxLayout" name="horizontalLayout">
+     <property name="spacing">
+      <number>0</number>
      </property>
-    </widget>
+     <item>
+      <widget class="QToolButton" name="findPrevButton">
+       <property name="toolTip">
+        <string>Press to find the previous occurrence</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QToolButton" name="findNextButton">
+       <property name="toolTip">
+        <string>Press to find the next occurrence</string>
+       </property>
+      </widget>
+     </item>
+    </layout>
    </item>
-   <item>
-    <widget class="QToolButton" name="findNextButton">
-     <property name="toolTip">
-      <string>Press to find the next occurrence</string>
+   <item row="1" column="0" colspan="5">
+    <widget class="QLabel" name="infoLabel">
+     <property name="text">
+      <string/>
      </property>
     </widget>
    </item>
   </layout>
  </widget>
+ <customwidgets>
+  <customwidget>
+   <class>E5ClearableComboBox</class>
+   <extends>QComboBox</extends>
+   <header>E5Gui/E5ComboBox.h</header>
+  </customwidget>
+ </customwidgets>
  <tabstops>
   <tabstop>findtextCombo</tabstop>
   <tabstop>caseCheckBox</tabstop>
--- a/E5XML/Config.py	Wed Nov 01 19:22:02 2017 +0100
+++ b/E5XML/Config.py	Fri Nov 03 12:10:16 2017 +0100
@@ -17,7 +17,7 @@
 userProjectFileFormatVersion = "4.0"
 
 # version number of the project session file
-sessionFileFormatVersion = "5.0"
+sessionFileFormatVersion = "6.0"
 
 # version number of the shortcuts file
 shortcutsFileFormatVersion = "3.6"
--- a/E5XML/MultiProjectReader.py	Wed Nov 01 19:22:02 2017 +0100
+++ b/E5XML/MultiProjectReader.py	Fri Nov 03 12:10:16 2017 +0100
@@ -96,7 +96,7 @@
                 if 'category' not in project:
                     # upgrade from 4.2 format
                     project["category"] = ""
-                self.multiProject.projects.append(project)
+                self.multiProject.addProject(project)
                 break
             
             if self.isStartElement():
--- a/E5XML/SessionReader.py	Wed Nov 01 19:22:02 2017 +0100
+++ b/E5XML/SessionReader.py	Fri Nov 03 12:10:16 2017 +0100
@@ -19,7 +19,7 @@
     """
     Class for reading an XML session file.
     """
-    supportedVersions = ["4.3", "4.4", "5.0"]
+    supportedVersions = ["4.3", "4.4", "5.0", "6.0"]
     
     def __init__(self, device, isGlobal):
         """
@@ -253,7 +253,12 @@
                         self.project.dbgExcIgnoreList = dbgExcIgnoreList[:]
             
             if self.isStartElement():
-                if self.name() == "CommandLine":
+                if self.name() == "Interpreter":
+                    txt = self.readElementText()
+                    self.dbg.setInterpreterHistory(txt)
+                    if not self.isGlobal:
+                        self.project.dbgInterpreter = txt
+                elif self.name() == "CommandLine":
                     txt = self.readElementText()
                     self.dbg.setArgvHistory(txt)
                     if not self.isGlobal:
--- a/E5XML/SessionWriter.py	Wed Nov 01 19:22:02 2017 +0100
+++ b/E5XML/SessionWriter.py	Fri Nov 03 12:10:16 2017 +0100
@@ -169,6 +169,11 @@
                 dbgEnv = self.dbg.envHistory[0]
             else:
                 dbgEnv = ""
+            if len(self.dbg.interpreterHistory):
+                dbgInterpreter = self.dbg.interpreterHistory[0]
+            else:
+                dbgInterpreter = ""
+            self.writeTextElement("Interpreter", dbgInterpreter)
             self.writeTextElement("CommandLine", dbgCmdline)
             self.writeTextElement("WorkingDirectory", dbgWd)
             self.writeTextElement("Environment", dbgEnv)
@@ -190,6 +195,7 @@
             self.writeAttribute("value", str(self.dbg.autoContinue))
             self.writeEmptyElement("CovexcPattern")    # kept for compatibility
         else:
+            self.writeTextElement("Interpreter", self.project.dbgInterpreter)
             self.writeTextElement("CommandLine", self.project.dbgCmdline)
             self.writeTextElement("WorkingDirectory", self.project.dbgWd)
             self.writeTextElement("Environment", self.project.dbgEnv)
--- a/Helpviewer/Download/DownloadItem.py	Wed Nov 01 19:22:02 2017 +0100
+++ b/Helpviewer/Download/DownloadItem.py	Fri Nov 03 12:10:16 2017 +0100
@@ -14,7 +14,7 @@
     pass
 
 from PyQt5.QtCore import pyqtSlot, pyqtSignal, Qt, QTime, QFile, QFileInfo, \
-    QUrl, QIODevice, QCryptographicHash, PYQT_VERSION_STR
+    QUrl, QIODevice, QCryptographicHash, PYQT_VERSION_STR, QDateTime
 from PyQt5.QtGui import QPalette, QDesktopServices
 from PyQt5.QtWidgets import QWidget, QStyle, QDialog
 from PyQt5.QtNetwork import QNetworkRequest, QNetworkReply
@@ -108,6 +108,7 @@
         self.__gettingFileName = False
         self.__canceledFileSelect = False
         self.__autoOpen = False
+        self.__downloadedDateTime = QDateTime()
         
         self.__sha1Hash = QCryptographicHash(QCryptographicHash.Sha1)
         self.__md5Hash = QCryptographicHash(QCryptographicHash.Md5)
@@ -149,6 +150,8 @@
         self.__reply.finished.connect(self.__finished)
         
         # reset info
+        self.datetimeLabel.clear()
+        self.datetimeLabel.hide()
         self.infoLabel.clear()
         self.progressBar.setValue(0)
         self.__getFileName()
@@ -196,6 +199,7 @@
                     self.tr("Download canceled: {0}").format(
                         QFileInfo(defaultFileName).fileName()))
                 self.__canceledFileSelect = True
+                self.__setDateTime()
                 return
             
             if dlg.getAction() == "scan":
@@ -238,6 +242,7 @@
                     self.tr("Download canceled: {0}")
                         .format(QFileInfo(defaultFileName).fileName()))
                 self.__canceledFileSelect = True
+                self.__setDateTime()
                 return
         
         fileInfo = QFileInfo(fileName)
@@ -257,6 +262,7 @@
                 self.infoLabel.setText(self.tr(
                     "Download directory ({0}) couldn't be created.")
                     .format(saveDirPath.absolutePath()))
+                self.__setDateTime()
                 return
         
         self.filenameLabel.setText(QFileInfo(self.__fileName).fileName())
@@ -379,6 +385,7 @@
         self.setUpdatesEnabled(True)
         self.__state = DownloadItem.DownloadCancelled
         self.__reply.abort()
+        self.__setDateTime()
         self.downloadFinished.emit()
     
     @pyqtSlot()
@@ -625,8 +632,12 @@
         if QFile.exists(self.__fileName):
             QFile.remove(self.__fileName)
         self.__output.rename(self.__fileName)
+        self.__state = DownloadItem.DownloadSuccessful
         self.__updateInfoLabel()
-        self.__state = DownloadItem.DownloadSuccessful
+        self.__setDateTime()
+        
+        self.__adjustSize()
+        
         self.statusChanged.emit()
         self.downloadFinished.emit()
         
@@ -669,18 +680,23 @@
         """
         Public method to get the relevant download data.
         
-        @return tuple of URL, save location, flag and the
-            URL of the related web page (QUrl, string, boolean,QUrl)
+        @return tuple of URL, save location, flag, the
+            URL of the related web page and the date and time
+            of the download
+        @rtype tuple of (QUrl, str, bool, QUrl, QDateTime)
         """
         return (self.__url, QFileInfo(self.__fileName).filePath(),
-                self.downloadedSuccessfully(), self.__pageUrl)
+                self.downloadedSuccessfully(), self.__pageUrl,
+                self.__downloadedDateTime)
     
     def setData(self, data):
         """
         Public method to set the relevant download data.
         
-        @param data tuple of URL, save location, flag and the
-            URL of the related web page (QUrl, string, boolean, QUrl)
+        @param data tuple of URL, save location, flag, the
+            URL of the related web page and the date and time
+            of the download
+        @type QUrl, str, bool, QUrl, QDateTime
         """
         self.__url = data[0]
         self.__fileName = data[1]
@@ -690,6 +706,11 @@
         self.filenameLabel.setText(QFileInfo(self.__fileName).fileName())
         self.infoLabel.setText(self.__fileName)
         
+        if len(data) == 5:
+            self.__setDateTime(data[4])
+        else:
+            self.__setDateTime(QDateTime())
+        
         self.stopButton.setEnabled(False)
         self.stopButton.setVisible(False)
         self.pauseButton.setEnabled(False)
@@ -703,6 +724,8 @@
         else:
             self.__state = DownloadItem.DownloadCancelled
         self.progressBar.setVisible(False)
+        
+        self.__adjustSize()
     
     def getInfoData(self):
         """
@@ -719,3 +742,31 @@
         @return URL of the download page (QUrl)
         """
         return self.__pageUrl
+    
+    def __adjustSize(self):
+        """
+        Private method to adjust the size of the download item.
+        """
+        self.ensurePolished()
+        
+        msh = self.minimumSizeHint()
+        self.resize(max(self.width(), msh.width()), msh.height())
+    
+    def __setDateTime(self, dateTime=None):
+        """
+        Private method to set the download date and time.
+        
+        @param dateTime date and time to be set
+        @type QDateTime
+        """
+        if dateTime is None:
+            self.__downloadedDateTime = QDateTime.currentDateTime()
+        else:
+            self.__downloadedDateTime = dateTime
+        if self.__downloadedDateTime.isValid():
+            labelText = self.__downloadedDateTime.toString("yyyy-MM-dd hh:mm")
+            self.datetimeLabel.setText(labelText)
+            self.datetimeLabel.show()
+        else:
+            self.datetimeLabel.clear()
+            self.datetimeLabel.hide()
--- a/Helpviewer/Download/DownloadItem.ui	Wed Nov 01 19:22:02 2017 +0100
+++ b/Helpviewer/Download/DownloadItem.ui	Fri Nov 03 12:10:16 2017 +0100
@@ -7,7 +7,7 @@
     <x>0</x>
     <y>0</y>
     <width>400</width>
-    <height>82</height>
+    <height>104</height>
    </rect>
   </property>
   <property name="sizePolicy">
@@ -20,6 +20,18 @@
    <string/>
   </property>
   <layout class="QHBoxLayout" name="horizontalLayout">
+   <property name="leftMargin">
+    <number>2</number>
+   </property>
+   <property name="topMargin">
+    <number>2</number>
+   </property>
+   <property name="rightMargin">
+    <number>2</number>
+   </property>
+   <property name="bottomMargin">
+    <number>2</number>
+   </property>
    <item>
     <widget class="QLabel" name="fileIcon">
      <property name="text">
@@ -30,6 +42,19 @@
    <item>
     <layout class="QVBoxLayout" name="verticalLayout">
      <item>
+      <widget class="QLabel" name="datetimeLabel">
+       <property name="text">
+        <string>Date and Time</string>
+       </property>
+       <property name="alignment">
+        <set>Qt::AlignCenter</set>
+       </property>
+       <property name="wordWrap">
+        <bool>true</bool>
+       </property>
+      </widget>
+     </item>
+     <item>
       <widget class="QLabel" name="filenameLabel">
        <property name="sizePolicy">
         <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
--- a/Helpviewer/Download/DownloadManager.py	Wed Nov 01 19:22:02 2017 +0100
+++ b/Helpviewer/Download/DownloadManager.py	Fri Nov 03 12:10:16 2017 +0100
@@ -58,6 +58,8 @@
         self.__downloadDirectory = ""
         self.__loaded = False
         
+        self.__rowHeightMultiplier = 1.1
+        
         self.setDownloadDirectory(Preferences.getUI("DownloadPath"))
         
         self.downloadsView.setShowGrid(False)
@@ -220,24 +222,35 @@
         self.activateWindow()
         self.raise_()
     
-    def __addItem(self, itm):
+    def __addItem(self, itm, append=False):
         """
         Private method to add a download to the list of downloads.
         
-        @param itm reference to the download item (DownloadItem)
+        @param itm reference to the download item
+        @type DownloadItem
+        @param append flag indicating to append the item
+        @type bool
         """
         itm.statusChanged.connect(self.__updateRow)
         itm.downloadFinished.connect(self.__finished)
         
-        row = len(self.__downloads)
+        # insert at top of window
+        if append:
+            row = len(self.__downloads)
+        else:
+            row = 0
         self.__model.beginInsertRows(QModelIndex(), row, row)
-        self.__downloads.append(itm)
+        if append:
+            self.__downloads.append(itm)
+        else:
+            self.__downloads.insert(0, itm)
         self.__model.endInsertRows()
         
         self.downloadsView.setIndexWidget(self.__model.index(row, 0), itm)
         icon = self.style().standardIcon(QStyle.SP_FileIcon)
         itm.setIcon(icon)
-        self.downloadsView.setRowHeight(row, itm.sizeHint().height() * 1.5)
+        self.downloadsView.setRowHeight(
+            row, itm.sizeHint().height() * self.__rowHeightMultiplier)
         # just in case the download finished before the constructor returned
         self.__updateRow(itm)
         self.changeOccurred()
@@ -265,10 +278,9 @@
             icon = self.style().standardIcon(QStyle.SP_FileIcon)
         itm.setIcon(icon)
         
-        oldHeight = self.downloadsView.rowHeight(row)
         self.downloadsView.setRowHeight(
             row,
-            max(oldHeight, itm.minimumSizeHint().height() * 1.5))
+            itm.minimumSizeHint().height() * self.__rowHeightMultiplier)
         
         remove = False
         globalSettings = QWebSettings.globalSettings()
@@ -351,7 +363,7 @@
                 from .DownloadItem import DownloadItem
                 itm = DownloadItem(parent=self)
                 itm.setData(download)
-                self.__addItem(itm)
+                self.__addItem(itm, append=True)
         self.cleanupButton.setEnabled(
             (len(self.__downloads) - self.activeDownloads()) > 0)
         
--- a/MultiProject/MultiProject.py	Wed Nov 01 19:22:02 2017 +0100
+++ b/MultiProject/MultiProject.py	Fri Nov 03 12:10:16 2017 +0100
@@ -91,8 +91,8 @@
         self.description = ""   # description of the multi project
         self.name = ""
         self.opened = False
-        self.projects = []
-        # list of project info; each info entry is a dictionary
+        self.__projects = {}
+        # dict of project info keyed by 'uid'; each info entry is a dictionary
         # 'name'        : name of the project
         # 'file'        : project file name
         # 'master'      : flag indicating the master
@@ -186,20 +186,20 @@
         dirty state of the multi project is changed accordingly.
         """
         removelist = []
-        for project in self.projects:
+        for key, project in self.__projects.items():
             if not os.path.exists(project['file']):
-                removelist.append(project)
+                removelist.append(key)
         
         if removelist:
-            for project in removelist:
-                self.projects.remove(project)
+            for key in removelist:
+                del self.__projects[key]
             self.setDirty(True)
     
     def __extractCategories(self):
         """
         Private slot to extract the categories used in the project definitions.
         """
-        for project in self.projects:
+        for project in self.__projects.values():
             if project['category'] and \
                     project['category'] not in self.categories:
                 self.categories.append(project['category'])
@@ -293,10 +293,19 @@
         
         return res
     
+    def addProject(self, project):
+        """
+        Public method to add a project to the multi-project.
+        
+        @param project dictionary containing the project data to be added
+        @type dict
+        """
+        self.__projects[project['uid']] = project
+    
     @pyqtSlot()
-    def addProject(self, startdir=None):
+    def addNewProject(self, startdir=None):
         """
-        Public slot used to add files to the project.
+        Public slot used to add a new project to the multi-project.
         
         @param startdir start directory for the selection dialog (string)
         """
@@ -312,13 +321,13 @@
                 dlg.getData()
             
             # step 1: check, if project was already added
-            for project in self.projects:
+            for project in self.__projects.values():
                 if project['file'] == filename:
                     return
             
             # step 2: check, if master should be changed
             if isMaster:
-                for project in self.projects:
+                for project in self.__projects.values():
                     if project['master']:
                         project['master'] = False
                         self.projectDataChanged.emit(project)
@@ -334,7 +343,7 @@
                 'category': category,
                 'uid': uid,
             }
-            self.projects.append(project)
+            self.__projects[uid] = project
             if category not in self.categories:
                 self.categories.append(category)
             self.projectAdded.emit(project)
@@ -348,7 +357,7 @@
         """
         # step 1: check, if master should be changed
         if pro['master']:
-            for project in self.projects:
+            for project in self.__projects.values():
                 if project['master']:
                     if project['uid'] != pro['uid']:
                         project['master'] = False
@@ -357,18 +366,17 @@
                     break
         
         # step 2: change the entry
-        for project in self.projects:
-            if project['uid'] == pro['uid']:
-                # project UID is not changeable via interface
-                project['file'] = pro['file']
-                project['name'] = pro['name']
-                project['master'] = pro['master']
-                project['description'] = pro['description']
-                project['category'] = pro['category']
-                if project['category'] not in self.categories:
-                    self.categories.append(project['category'])
-                self.projectDataChanged.emit(project)
-                self.setDirty(True)
+        project = self.__projects[pro['uid']]
+        # project UID is not changeable via interface
+        project['file'] = pro['file']
+        project['name'] = pro['name']
+        project['master'] = pro['master']
+        project['description'] = pro['description']
+        project['category'] = pro['category']
+        if project['category'] not in self.categories:
+            self.categories.append(project['category'])
+        self.projectDataChanged.emit(project)
+        self.setDirty(True)
     
     def getProjects(self):
         """
@@ -376,34 +384,35 @@
         
         @return list of all project entries (list of dictionaries)
         """
-        return self.projects
+        return self.__projects.values()
     
-    def getProject(self, fn):
+    def getProject(self, uid):
         """
         Public method to get a reference to a project entry.
         
-        @param fn filename of the project (string)
+        @param uid UID of the project to get
+        @type str
         @return dictionary containing the project data
+        @rtype dict
         """
-        for project in self.projects:
-            if project['file'] == fn:
-                return project
-        
-        return None
+        if uid in self.__projects:
+            return self.__projects[uid]
+        else:
+            return None
     
-    def removeProject(self, fn):
+    def removeProject(self, uid):
         """
         Public slot to remove a project from the multi project.
         
-        @param fn filename of the project to be removed from the multi
-            project (string)
+        @param uid UID of the project to be removed from the multi
+            project
+        @type str
         """
-        for project in self.projects:
-            if project['file'] == fn:
-                self.projects.remove(project)
-                self.projectRemoved.emit(project)
-                self.setDirty(True)
-                break
+        if uid in self.__projects:
+            project = self.__projects[uid]
+            del self.__projects[uid]
+            self.projectRemoved.emit(project)
+            self.setDirty(True)
     
     def __newMultiProject(self):
         """
@@ -587,7 +596,7 @@
         # now close the current project, if it belongs to the multi project
         pfile = self.projectObject.getProjectFile()
         if pfile:
-            for project in self.projects:
+            for project in self.__projects.values():
                 if project['file'] == pfile:
                     if not self.projectObject.closeProject():
                         return False
@@ -690,7 +699,7 @@
             """<p>This opens a dialog for adding a project"""
             """ to the current multiproject.</p>"""
         ))
-        self.addProjectAct.triggered.connect(self.addProject)
+        self.addProjectAct.triggered.connect(self.addNewProject)
         self.actions.append(self.addProjectAct)
 
         self.propsAct = E5Action(
@@ -897,7 +906,7 @@
         @param reopen flag indicating, that the master project should be
             reopened, if it has been opened already (boolean)
         """
-        for project in self.projects:
+        for project in self.__projects.values():
             if project['master']:
                 if reopen or \
                    not self.projectObject.isOpen() or \
@@ -911,7 +920,7 @@
         
         @return name of the master project file (string)
         """
-        for project in self.projects:
+        for project in self.__projects:
             if project['master']:
                 return project['file']
         
@@ -924,7 +933,7 @@
         @return names of the dependent project files (list of strings)
         """
         files = []
-        for project in self.projects:
+        for project in self.__projects.values():
             if not project['master']:
                 files.append(project['file'])
         return files
--- a/MultiProject/MultiProjectBrowser.py	Wed Nov 01 19:22:02 2017 +0100
+++ b/MultiProject/MultiProjectBrowser.py	Fri Nov 03 12:10:16 2017 +0100
@@ -21,6 +21,9 @@
     """
     Class implementing the multi project browser.
     """
+    ProjectFileNameRole = Qt.UserRole
+    ProjectUidRole = Qt.UserRole + 1
+    
     def __init__(self, multiProject, project, parent=None):
         """
         Constructor
@@ -150,6 +153,7 @@
             'master': False,
             'description': "",
             'category': "",
+            'uid': "",
         }
         itm = self.__findProjectItem(project)
         if itm:
@@ -193,7 +197,7 @@
                 return
         
         if not self.__openingProject:
-            filename = itm.data(0, Qt.UserRole)
+            filename = itm.data(0, MultiProjectBrowser.ProjectFileNameRole)
             if filename:
                 self.__openingProject = True
                 self.multiProject.openProject(filename)
@@ -249,7 +253,9 @@
         else:
             itm.setIcon(0, UI.PixmapCache.getIcon("empty.png"))
         itm.setToolTip(0, project['file'])
-        itm.setData(0, Qt.UserRole, project['file'])
+        itm.setData(0, MultiProjectBrowser.ProjectFileNameRole,
+                    project['file'])
+        itm.setData(0, MultiProjectBrowser.ProjectUidRole, project['uid'])
     
     def __findProjectItem(self, project):
         """
@@ -258,12 +264,19 @@
         @param project reference to the project data dictionary
         @return reference to the item (QTreeWidgetItem) or None
         """
+        if project["uid"]:
+            compareData = project["uid"]
+            compareRole = MultiProjectBrowser.ProjectUidRole
+        else:
+            compareData = project["file"]
+            compareRole = MultiProjectBrowser.ProjectFileNameRole
+        
         for topIndex in range(self.topLevelItemCount()):
             topItm = self.topLevelItem(topIndex)
             for childIndex in range(topItm.childCount()):
                 itm = topItm.child(childIndex)
-                data = itm.data(0, Qt.UserRole)
-                if data == project['file']:
+                data = itm.data(0, compareRole)
+                if data == compareData:
                     return itm
         
         return None
@@ -274,9 +287,9 @@
         """
         itm = self.currentItem()
         if itm is not None and itm.parent() is not None:
-            filename = itm.data(0, Qt.UserRole)
-            if filename:
-                self.multiProject.removeProject(filename)
+            uid = itm.data(0, MultiProjectBrowser.ProjectUidRole)
+            if uid:
+                self.multiProject.removeProject(uid)
     
     def __showProjectProperties(self):
         """
@@ -284,9 +297,9 @@
         """
         itm = self.currentItem()
         if itm is not None and itm.parent() is not None:
-            filename = itm.data(0, Qt.UserRole)
-            if filename:
-                project = self.multiProject.getProject(filename)
+            uid = itm.data(0, MultiProjectBrowser.ProjectUidRole)
+            if uid:
+                project = self.multiProject.getProject(uid)
                 if project is not None:
                     from .AddProjectDialog import AddProjectDialog
                     dlg = AddProjectDialog(
@@ -309,7 +322,7 @@
         """
         Private method to add a new project entry.
         """
-        self.multiProject.addProject()
+        self.multiProject.addNewProject()
     
     def __createPopupMenu(self):
         """
--- a/PluginManager/PluginManager.py	Wed Nov 01 19:22:02 2017 +0100
+++ b/PluginManager/PluginManager.py	Fri Nov 03 12:10:16 2017 +0100
@@ -1324,7 +1324,6 @@
             if getattr(module, "pluginType", "") == type_:
                 if hasattr(module, "clearPrivateData"):
                     module.clearPrivateData()
-        # TODO: document this in the plug-ins paper
 
 #
 # eflag: noqa = M801
--- a/Plugins/CheckerPlugins/CodeStyleChecker/DocStyleChecker.py	Wed Nov 01 19:22:02 2017 +0100
+++ b/Plugins/CheckerPlugins/CodeStyleChecker/DocStyleChecker.py	Fri Nov 03 12:10:16 2017 +0100
@@ -1139,10 +1139,12 @@
                 kwargs = []
                 for line in docstringContext.source():
                     if line.strip().startswith(("@param", "@keyparam")):
-                        at, name = line.strip().split(None, 2)[:2]
-                        if at == "@keyparam":
-                            kwargs.append(name.lstrip("*"))
-                        args.append(name.lstrip("*"))
+                        paramParts = line.strip().split(None, 2)
+                        if len(paramParts) >= 2:
+                            at, name = paramParts[:2]
+                            if at == "@keyparam":
+                                kwargs.append(name.lstrip("*"))
+                            args.append(name.lstrip("*"))
                 
                 # do the checks
                 for name in kwNames:
--- a/Plugins/VcsPlugins/vcsMercurial/HgLogBrowserDialog.py	Wed Nov 01 19:22:02 2017 +0100
+++ b/Plugins/VcsPlugins/vcsMercurial/HgLogBrowserDialog.py	Fri Nov 03 12:10:16 2017 +0100
@@ -1544,7 +1544,7 @@
             
             self.__pullAct.setText(self.tr("Pull Selected Changes"))
             self.__fetchAct.setText(self.tr("Fetch Selected Changes"))
-            if self.vcs.canPull():
+            if self.vcs.canPull() and not bool(self.__bundle):
                 # step 1: determine number of selected draft changesets
                 #         i.e. those that can be pulled
                 selectedDraftItemsCount = 0
--- a/Preferences/ConfigurationDialog.py	Wed Nov 01 19:22:02 2017 +0100
+++ b/Preferences/ConfigurationDialog.py	Fri Nov 03 12:10:16 2017 +0100
@@ -12,7 +12,7 @@
 import os
 import types
 
-from PyQt5.QtCore import QMetaObject, pyqtSignal, Qt, QRect, pyqtSlot
+from PyQt5.QtCore import pyqtSignal, pyqtSlot, PYQT_VERSION, Qt, QMetaObject, QRect
 from PyQt5.QtGui import QPixmap
 from PyQt5.QtWidgets import QSizePolicy, QSpacerItem, QWidget, QTreeWidget, \
     QStackedWidget, QDialog, QSplitter, QScrollArea, QApplication, \
@@ -237,6 +237,9 @@
                 "editorCalltipsQScintillaPage":
                 [self.tr("QScintilla"), "qscintilla.png",
                  "EditorCalltipsQScintillaPage", "editorCalltipsPage", None],
+                "editorDocViewerPage":
+                [self.tr("Documentation Viewer"), "codeDocuViewer.png",
+                 "EditorDocViewerPage", "0editorPage", None],
                 "editorGeneralPage":
                 [self.tr("General"), "preferences-general.png",
                  "EditorGeneralPage", "0editorPage", None],
@@ -343,7 +346,7 @@
                     [self.tr("VirusTotal Interface"), "virustotal.png",
                      "HelpVirusTotalPage", "0webBrowserPage", None],
                 })
-                if qVersionTuple() >= (5, 8, 0):
+                if qVersionTuple() >= (5, 8, 0) and PYQT_VERSION >= 0x50800:
                     self.configItems.update({
                         "webBrowserSpellCheckingPage":
                         [self.tr("Spell checking"),
@@ -467,7 +470,7 @@
                  "HelpVirusTotalPage", None, None],
             }
             
-            if qVersionTuple() >= (5, 8, 0):
+            if qVersionTuple() >= (5, 8, 0) and PYQT_VERSION >= 0x50800:
                 self.configItems.update({
                     "webBrowserSpellCheckingPage":
                     [self.tr("Spell checking"),
--- a/Preferences/ConfigurationPages/EditorAutocompletionPage.py	Wed Nov 01 19:22:02 2017 +0100
+++ b/Preferences/ConfigurationPages/EditorAutocompletionPage.py	Fri Nov 03 12:10:16 2017 +0100
@@ -29,16 +29,26 @@
         self.setObjectName("EditorAutocompletionPage")
         
         # set initial values
-        self.acEnabledCheckBox.setChecked(
+        self.acEnabledGroupBox.setChecked(
             Preferences.getEditor("AutoCompletionEnabled"))
         self.acCaseSensitivityCheckBox.setChecked(
             Preferences.getEditor("AutoCompletionCaseSensitivity"))
+        self.acReversedCheckBox.setChecked(
+            Preferences.getEditor("AutoCompletionReversedList"))
         self.acReplaceWordCheckBox.setChecked(
             Preferences.getEditor("AutoCompletionReplaceWord"))
         self.acThresholdSlider.setValue(
             Preferences.getEditor("AutoCompletionThreshold"))
         self.acScintillaCheckBox.setChecked(
             Preferences.getEditor("AutoCompletionScintillaOnFail"))
+        self.acTimeoutSpinBox.setValue(
+            Preferences.getEditor("AutoCompletionTimeout"))
+        self.acCacheSizeSpinBox.setValue(
+            Preferences.getEditor("AutoCompletionCacheSize"))
+        self.acCacheTimeSpinBox.setValue(
+            Preferences.getEditor("AutoCompletionCacheTime"))
+        self.acWatchdogDoubleSpinBox.setValue(
+            Preferences.getEditor("AutoCompletionWatchdogTime") / 1000.0)
         
     def save(self):
         """
@@ -46,10 +56,14 @@
         """
         Preferences.setEditor(
             "AutoCompletionEnabled",
-            self.acEnabledCheckBox.isChecked())
+            self.acEnabledGroupBox.isChecked())
         Preferences.setEditor(
             "AutoCompletionCaseSensitivity",
             self.acCaseSensitivityCheckBox.isChecked())
+            
+        Preferences.setEditor(
+            "AutoCompletionReversedList",
+            self.acReversedCheckBox.isChecked())
         Preferences.setEditor(
             "AutoCompletionReplaceWord",
             self.acReplaceWordCheckBox.isChecked())
@@ -59,6 +73,18 @@
         Preferences.setEditor(
             "AutoCompletionScintillaOnFail",
             self.acScintillaCheckBox.isChecked())
+        Preferences.setEditor(
+            "AutoCompletionTimeout",
+            self.acTimeoutSpinBox.value())
+        Preferences.setEditor(
+            "AutoCompletionCacheSize",
+            self.acCacheSizeSpinBox.value())
+        Preferences.setEditor(
+            "AutoCompletionCacheTime",
+            self.acCacheTimeSpinBox.value())
+        Preferences.setEditor(
+            "AutoCompletionWatchdogTime",
+            self.acWatchdogDoubleSpinBox.value() * 1000)
     
 
 def create(dlg):
--- a/Preferences/ConfigurationPages/EditorAutocompletionPage.ui	Wed Nov 01 19:22:02 2017 +0100
+++ b/Preferences/ConfigurationPages/EditorAutocompletionPage.ui	Fri Nov 03 12:10:16 2017 +0100
@@ -7,10 +7,10 @@
     <x>0</x>
     <y>0</y>
     <width>506</width>
-    <height>398</height>
+    <height>498</height>
    </rect>
   </property>
-  <layout class="QVBoxLayout" name="verticalLayout_2">
+  <layout class="QVBoxLayout" name="verticalLayout">
    <item>
     <widget class="QLabel" name="headerLabel">
      <property name="text">
@@ -32,28 +32,12 @@
     </widget>
    </item>
    <item>
-    <widget class="QCheckBox" name="acEnabledCheckBox">
-     <property name="toolTip">
-      <string>Select this to enable autocompletion</string>
-     </property>
-     <property name="whatsThis">
-      <string>&lt;b&gt;Autocompletion Enabled&lt;/b&gt;&lt;p&gt;Select to enable autocompletion. In order to get autocompletion from alternative autocompletion providers (if installed), these have to be enabled on their respective configuration page. Only one alternative provider might be enabled.&lt;/p&gt;</string>
-     </property>
-     <property name="text">
-      <string>Automatic Completion Enabled</string>
-     </property>
-    </widget>
-   </item>
-   <item>
     <widget class="QGroupBox" name="groupBox">
-     <property name="enabled">
-      <bool>false</bool>
-     </property>
      <property name="title">
       <string>General</string>
      </property>
-     <layout class="QGridLayout" name="gridLayout">
-      <item row="0" column="0">
+     <layout class="QGridLayout" name="gridLayout_2">
+      <item row="0" column="0" colspan="2">
        <widget class="QCheckBox" name="acCaseSensitivityCheckBox">
         <property name="toolTip">
          <string>Select this to have case sensitive auto-completion lists</string>
@@ -63,7 +47,7 @@
         </property>
        </widget>
       </item>
-      <item row="0" column="1">
+      <item row="0" column="2" colspan="2">
        <widget class="QCheckBox" name="acReplaceWordCheckBox">
         <property name="toolTip">
          <string>Select this, if the word to the right should be replaced by the selected entry</string>
@@ -74,14 +58,49 @@
        </widget>
       </item>
       <item row="1" column="0" colspan="2">
-       <layout class="QHBoxLayout" name="_2">
-        <item>
-         <widget class="QLabel" name="textLabel1_2">
-          <property name="text">
-           <string>Threshold:</string>
-          </property>
-         </widget>
-        </item>
+       <widget class="QCheckBox" name="acReversedCheckBox">
+        <property name="toolTip">
+         <string>Select to show completions of type 'public' first</string>
+        </property>
+        <property name="text">
+         <string>Show 'public' completions first</string>
+        </property>
+       </widget>
+      </item>
+     </layout>
+    </widget>
+   </item>
+   <item>
+    <widget class="QGroupBox" name="acEnabledGroupBox">
+     <property name="toolTip">
+      <string>Select this to enable autocompletion</string>
+     </property>
+     <property name="whatsThis">
+      <string>&lt;b&gt;Autocompletion Enabled&lt;/b&gt;&lt;p&gt;Select to enable autocompletion. In order to get autocompletion from alternative autocompletion providers (if installed), these have to be enabled on their respective configuration page. Only one alternative provider might be enabled.&lt;/p&gt;</string>
+     </property>
+     <property name="title">
+      <string>Automatic Completion Enabled</string>
+     </property>
+     <property name="checkable">
+      <bool>true</bool>
+     </property>
+     <layout class="QGridLayout" name="gridLayout_4">
+      <item row="2" column="0">
+       <widget class="QLabel" name="textLabel1_2">
+        <property name="text">
+         <string>Threshold:</string>
+        </property>
+       </widget>
+      </item>
+      <item row="3" column="0">
+       <widget class="QLabel" name="label">
+        <property name="text">
+         <string>Time to start completion:</string>
+        </property>
+       </widget>
+      </item>
+      <item row="2" column="1">
+       <layout class="QHBoxLayout" name="horizontalLayout">
         <item>
          <widget class="QSlider" name="acThresholdSlider">
           <property name="toolTip">
@@ -119,25 +138,221 @@
         </item>
        </layout>
       </item>
+      <item row="3" column="1">
+       <widget class="QSpinBox" name="acTimeoutSpinBox">
+        <property name="minimumSize">
+         <size>
+          <width>70</width>
+          <height>0</height>
+         </size>
+        </property>
+        <property name="maximumSize">
+         <size>
+          <width>70</width>
+          <height>16777215</height>
+         </size>
+        </property>
+        <property name="toolTip">
+         <string>Enter the time in milliseconds after which a list with completion proposals shall be shown</string>
+        </property>
+        <property name="alignment">
+         <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+        </property>
+        <property name="correctionMode">
+         <enum>QAbstractSpinBox::CorrectToNearestValue</enum>
+        </property>
+        <property name="suffix">
+         <string> ms</string>
+        </property>
+        <property name="minimum">
+         <number>0</number>
+        </property>
+        <property name="maximum">
+         <number>1000</number>
+        </property>
+        <property name="singleStep">
+         <number>50</number>
+        </property>
+       </widget>
+      </item>
+     </layout>
+    </widget>
+   </item>
+   <item>
+    <widget class="QGroupBox" name="groupBox_3">
+     <property name="title">
+      <string>Plug-In Behavior</string>
+     </property>
+     <layout class="QVBoxLayout" name="verticalLayout_2">
+      <item>
+       <widget class="QCheckBox" name="acScintillaCheckBox">
+        <property name="toolTip">
+         <string>Select to show QScintilla provided completions, if the selected plug-ins fail</string>
+        </property>
+        <property name="whatsThis">
+         <string>QScintilla provided completions are shown, if this option is enabled and completions shall be provided by plug-ins (see completions sub-page of the plug-in) and the plugin-ins don't deliver any completions.</string>
+        </property>
+        <property name="text">
+         <string>Show QScintilla completions, if plug-ins fail</string>
+        </property>
+       </widget>
+      </item>
+      <item>
+       <layout class="QHBoxLayout" name="horizontalLayout_2">
+        <item>
+         <widget class="QLabel" name="label_4">
+          <property name="text">
+           <string>Maximum time to wait:</string>
+          </property>
+         </widget>
+        </item>
+        <item>
+         <widget class="QDoubleSpinBox" name="acWatchdogDoubleSpinBox">
+          <property name="enabled">
+           <bool>false</bool>
+          </property>
+          <property name="minimumSize">
+           <size>
+            <width>70</width>
+            <height>0</height>
+           </size>
+          </property>
+          <property name="maximumSize">
+           <size>
+            <width>70</width>
+            <height>16777215</height>
+           </size>
+          </property>
+          <property name="toolTip">
+           <string>Enter the time in seconds after which QSintilla should be used</string>
+          </property>
+          <property name="alignment">
+           <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+          </property>
+          <property name="accelerated">
+           <bool>true</bool>
+          </property>
+          <property name="correctionMode">
+           <enum>QAbstractSpinBox::CorrectToNearestValue</enum>
+          </property>
+          <property name="suffix">
+           <string> s</string>
+          </property>
+          <property name="decimals">
+           <number>1</number>
+          </property>
+          <property name="maximum">
+           <double>10.000000000000000</double>
+          </property>
+          <property name="singleStep">
+           <double>0.500000000000000</double>
+          </property>
+         </widget>
+        </item>
+        <item>
+         <spacer name="horizontalSpacer_3">
+          <property name="orientation">
+           <enum>Qt::Horizontal</enum>
+          </property>
+          <property name="sizeHint" stdset="0">
+           <size>
+            <width>40</width>
+            <height>20</height>
+           </size>
+          </property>
+         </spacer>
+        </item>
+       </layout>
+      </item>
      </layout>
     </widget>
    </item>
    <item>
     <widget class="QGroupBox" name="groupBox_2">
      <property name="title">
-      <string>Plug-In Behavior</string>
+      <string>Completions Cache</string>
      </property>
-     <layout class="QVBoxLayout" name="verticalLayout">
-      <item>
-       <widget class="QCheckBox" name="acScintillaCheckBox">
+     <layout class="QGridLayout" name="gridLayout">
+      <item row="0" column="0">
+       <widget class="QLabel" name="label_2">
+        <property name="text">
+         <string>Size:</string>
+        </property>
+       </widget>
+      </item>
+      <item row="0" column="1">
+       <widget class="QSpinBox" name="acCacheSizeSpinBox">
+        <property name="minimumSize">
+         <size>
+          <width>80</width>
+          <height>0</height>
+         </size>
+        </property>
         <property name="toolTip">
-         <string>Select to show QScintilla provided completions, if the selected plug-ins fail</string>
+         <string>Enter the maximum number of entries to be kept in the completions cache</string>
+        </property>
+        <property name="alignment">
+         <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+        </property>
+        <property name="correctionMode">
+         <enum>QAbstractSpinBox::CorrectToNearestValue</enum>
+        </property>
+        <property name="suffix">
+         <string> entries</string>
+        </property>
+        <property name="minimum">
+         <number>0</number>
+        </property>
+        <property name="maximum">
+         <number>1000</number>
+        </property>
+        <property name="singleStep">
+         <number>10</number>
+        </property>
+       </widget>
+      </item>
+      <item row="0" column="2">
+       <spacer name="horizontalSpacer_2">
+        <property name="orientation">
+         <enum>Qt::Horizontal</enum>
         </property>
-        <property name="whatsThis">
-         <string>Qscintilla provided completions are shown, if this option is enabled and completions shall be provided by plug-ins (see completions sub-page of the plug-in) and the plugin-ins don't deliver any completions.</string>
+        <property name="sizeHint" stdset="0">
+         <size>
+          <width>271</width>
+          <height>20</height>
+         </size>
+        </property>
+       </spacer>
+      </item>
+      <item row="1" column="0">
+       <widget class="QLabel" name="label_3">
+        <property name="text">
+         <string>Timeout:</string>
         </property>
-        <property name="text">
-         <string>Show QScintilla completions, if plug-ins fail</string>
+       </widget>
+      </item>
+      <item row="1" column="1">
+       <widget class="QSpinBox" name="acCacheTimeSpinBox">
+        <property name="toolTip">
+         <string>Enter the time in seconds after which a cached completion entry should be removed from the completions cache</string>
+        </property>
+        <property name="alignment">
+         <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+        </property>
+        <property name="correctionMode">
+         <enum>QAbstractSpinBox::CorrectToNearestValue</enum>
+        </property>
+        <property name="suffix">
+         <string> s</string>
+        </property>
+        <property name="minimum">
+         <number>0</number>
+        </property>
+        <property name="maximum">
+         <number>3600</number>
+        </property>
+        <property name="singleStep">
+         <number>60</number>
         </property>
        </widget>
       </item>
@@ -160,11 +375,16 @@
   </layout>
  </widget>
  <tabstops>
-  <tabstop>acEnabledCheckBox</tabstop>
   <tabstop>acCaseSensitivityCheckBox</tabstop>
   <tabstop>acReplaceWordCheckBox</tabstop>
+  <tabstop>acReversedCheckBox</tabstop>
+  <tabstop>acEnabledGroupBox</tabstop>
   <tabstop>acThresholdSlider</tabstop>
+  <tabstop>acTimeoutSpinBox</tabstop>
   <tabstop>acScintillaCheckBox</tabstop>
+  <tabstop>acWatchdogDoubleSpinBox</tabstop>
+  <tabstop>acCacheSizeSpinBox</tabstop>
+  <tabstop>acCacheTimeSpinBox</tabstop>
  </tabstops>
  <resources/>
  <connections>
@@ -175,28 +395,28 @@
    <slot>display(int)</slot>
    <hints>
     <hint type="sourcelabel">
-     <x>304</x>
-     <y>114</y>
+     <x>442</x>
+     <y>161</y>
     </hint>
     <hint type="destinationlabel">
-     <x>465</x>
-     <y>116</y>
+     <x>485</x>
+     <y>162</y>
     </hint>
    </hints>
   </connection>
   <connection>
-   <sender>acEnabledCheckBox</sender>
+   <sender>acScintillaCheckBox</sender>
    <signal>toggled(bool)</signal>
-   <receiver>groupBox</receiver>
+   <receiver>acWatchdogDoubleSpinBox</receiver>
    <slot>setEnabled(bool)</slot>
    <hints>
     <hint type="sourcelabel">
-     <x>103</x>
-     <y>43</y>
+     <x>30</x>
+     <y>237</y>
     </hint>
     <hint type="destinationlabel">
-     <x>114</x>
-     <y>64</y>
+     <x>155</x>
+     <y>259</y>
     </hint>
    </hints>
   </connection>
--- a/Preferences/__init__.py	Wed Nov 01 19:22:02 2017 +0100
+++ b/Preferences/__init__.py	Fri Nov 03 12:10:16 2017 +0100
@@ -416,15 +416,21 @@
         "AutoCompletionShowSingle": False,
         "AutoCompletionSource": QsciScintilla.AcsDocument,
         "AutoCompletionThreshold": 2,
+        # timeout in ms before auto-completion is started
+        "AutoCompletionTimeout": 200,
         "AutoCompletionFillups": False,
+        # show QScintilla completions, if plug-in fails
         "AutoCompletionScintillaOnFail": False,
-        # show QScintilla completions, if plug-in fails
+        "AutoCompletionReversedList": False,
+        "AutoCompletionCacheSize": 100,
+        "AutoCompletionCacheTime": 300,     # 5 minutes
+        "AutoCompletionWatchdogTime": 3000,     # ms
         
         "CallTipsEnabled": False,
         "CallTipsVisible": 0,
         "CallTipsStyle": QsciScintilla.CallTipsNoContext,
+        # show QScintilla calltips, if plug-in fails
         "CallTipsScintillaOnFail": False,
-        # show QScintilla calltips, if plug-in fails
         
         "AutoCheckSyntax": True,
         "OnlineSyntaxCheck": True,
@@ -1458,6 +1464,13 @@
         "HeaderColor": QColor(237, 237, 190),
         "BadWhitespaceColor": QColor(255, 0, 0, 192),
     }
+    
+    # defaults for Code Documentation Viewer
+    docuViewerDefaults = {
+        "ShowInfoAsRichText": False,
+        "Provider": "disabled",
+        "ShowInfoOnOpenParenthesis": True,
+    }
 
 
 def readToolGroups(prefClass=Prefs):
@@ -2063,7 +2076,9 @@
     elif key in ["AutosaveInterval", "TabWidth", "IndentWidth",
                  "FoldingStyle", "WarnFilesize", "EdgeMode", "EdgeColumn",
                  "CaretWidth", "AutoCompletionSource",
-                 "AutoCompletionThreshold", "CallTipsVisible",
+                 "AutoCompletionThreshold", "AutoCompletionTimeout",
+                 "AutoCompletionCacheSize", "AutoCompletionCacheTime",
+                 "AutoCompletionWatchdogTime", "CallTipsVisible",
                  "CallTipsStyle", "MarkOccurrencesTimeout",
                  "AutoSpellCheckChunkSize", "SpellCheckingMinWordSize",
                  "PostScriptLevel", "EOLMode", "ZoomFactor", "WhitespaceSize",
@@ -2685,7 +2700,10 @@
             pageUrl = prefClass.settings.value("PageURL")
             if pageUrl is None:
                 pageUrl = QUrl()
-            downloads.append((url, location, done, pageUrl))
+            downloaded = prefClass.settings.value("Downloaded")
+            if downloaded is None:
+                downloaded = QDateTime()
+            downloads.append((url, location, done, pageUrl, downloaded))
         prefClass.settings.endArray()
         return downloads
     elif key == "RssFeeds":
@@ -2803,6 +2821,7 @@
             prefClass.settings.setValue("URL", v[0])
             prefClass.settings.setValue("Title", v[1])
             prefClass.settings.setValue("Icon", v[2])
+            prefClass.settings.setValue("Downloaded", v[4])
             index += 1
         prefClass.settings.endArray()
     elif key in ["SyncFtpPassword", "SyncEncryptionKey"]:
@@ -2872,7 +2891,10 @@
             pageUrl = prefClass.settings.value("PageURL")
             if pageUrl is None:
                 pageUrl = QUrl()
-            downloads.append((url, location, done, pageUrl))
+            downloaded = prefClass.settings.value("Downloaded")
+            if downloaded is None:
+                downloaded = QDateTime()
+            downloads.append((url, location, done, pageUrl, downloaded))
         prefClass.settings.endArray()
         return downloads
     elif key == "RssFeeds":
@@ -2996,6 +3018,7 @@
             prefClass.settings.setValue("Location", v[1])
             prefClass.settings.setValue("Done", v[2])
             prefClass.settings.setValue("PageURL", v[3])
+            prefClass.settings.setValue("Downloaded", v[4])
             index += 1
         prefClass.settings.endArray()
     elif key == "RssFeeds":
@@ -3523,7 +3546,7 @@
     
     @param key the key of the value to get
     @param prefClass preferences class used as the storage area
-    @return the requested editor colour
+    @return the requested diff colour
     """
     col = prefClass.settings.value("Diff/" + key)
     if col is not None:
@@ -3551,6 +3574,35 @@
     prefClass.settings.setValue("Diff/" + key, val)
 
 
+def getDocuViewer(key, prefClass=Prefs):
+    """
+    Module function to retrieve the Code Documentation Viewer related settings.
+    
+    @param key the key of the value to get
+    @param prefClass preferences class used as the storage area
+    @return the requested editor colour
+    """
+    if key in ["ShowInfoAsRichText", "ShowInfoOnOpenParenthesis"]:
+        return toBool(prefClass.settings.value(
+            "CodeDocumentationViewer/" + key,
+            prefClass.docuViewerDefaults[key]))
+    else:
+        return prefClass.settings.value(
+            "CodeDocumentationViewer/" + key,
+            prefClass.docuViewerDefaults[key])
+    
+
+def setDocuViewer(key, value, prefClass=Prefs):
+    """
+    Module function to store the Code Documentation Viewer related settings.
+    
+    @param key the key of the setting to be set
+    @param value the value to be set
+    @param prefClass preferences class used as the storage area
+    """
+    prefClass.settings.setValue("CodeDocumentationViewer/" + key, value)
+
+
 def getGeometry(key, prefClass=Prefs):
     """
     Module function to retrieve the display geometry.
--- a/Project/Project.py	Wed Nov 01 19:22:02 2017 +0100
+++ b/Project/Project.py	Fri Nov 03 12:10:16 2017 +0100
@@ -410,6 +410,7 @@
         self.otherssubdirs = []
         self.vcs = None
         self.vcsRequested = False
+        self.dbgInterpreter = ''
         self.dbgCmdline = ''
         self.dbgWd = ''
         self.dbgEnv = ''
@@ -1237,11 +1238,13 @@
         """
         return self.debugProperties[key]
         
-    def setDbgInfo(self, argv, wd, env, excReporting, excList, excIgnoreList,
-                   autoClearShell, tracePython=None, autoContinue=None):
+    def setDbgInfo(self, interpreter, argv, wd, env, excReporting, excList,
+                   excIgnoreList, autoClearShell, tracePython=None,
+                   autoContinue=None):
         """
         Public method to set the debugging information.
         
+        @param interpreter interpreter to be used (string)
         @param argv command line arguments to be used (string)
         @param wd working directory (string)
         @param env environment setting (string)
@@ -1255,6 +1258,7 @@
         @keyparam autoContinue flag indicating, that the debugger should not
             stop at the first executable line (boolean)
         """
+        self.dbgInterpreter = interpreter
         self.dbgCmdline = argv
         self.dbgWd = wd
         self.dbgEnv = env
--- a/QScintilla/Editor.py	Wed Nov 01 19:22:02 2017 +0100
+++ b/QScintilla/Editor.py	Fri Nov 03 12:10:16 2017 +0100
@@ -27,6 +27,7 @@
 
 from E5Gui.E5Application import e5App
 from E5Gui import E5FileDialog, E5MessageBox
+from E5Utilities.E5Cache import E5Cache
 
 from .QsciScintillaCompat import QsciScintillaCompat, QSCINTILLA_VERSION
 from .EditorMarkerMap import EditorMarkerMap
@@ -126,6 +127,8 @@
     AttributeProtectedID = 8
     AttributePrivateID = 9
     EnumID = 10
+    KeywordsID = 11
+    ModuleID = 12
     
     FromDocumentID = 99
     
@@ -258,6 +261,7 @@
         self.cursorPositionChanged.connect(self.__cursorPositionChanged)
         self.modificationAttempted.connect(self.__modificationReadOnly)
         self.userListActivated.connect(self.__completionListSelected)
+        self.SCN_CHARADDED.connect(self.__charAddedPermanent)
         
         # margins layout
         if QSCINTILLA_VERSION() >= 0x020301:
@@ -380,10 +384,32 @@
         # set the text display again
         self.__setTextDisplay()
         
-        # set the autocompletion and calltips function
+        # set the auto-completion function
+        self.__acContext = True
+        self.__acText = ""
+        self.__acCompletions = set()
+        self.__acCompletionsFinished = 0
+        self.__acCache = E5Cache(
+            size=Preferences.getEditor("AutoCompletionCacheSize"))
+        self.__acCache.setMaximumCacheTime(
+            Preferences.getEditor("AutoCompletionCacheTime"))
+        self.__acTimer = QTimer(self)
+        self.__acTimer.setSingleShot(True)
+        self.__acTimer.setInterval(
+            Preferences.getEditor("AutoCompletionTimeout"))
+        self.__acTimer.timeout.connect(self.__autoComplete)
+        
+        self.__acWatchdog = QTimer(self)
+        self.__acWatchdog.setSingleShot(True)
+        self.__acWatchdog.setInterval(
+            Preferences.getEditor("AutoCompletionWatchdogTime"))
+        self.__acWatchdog.timeout.connect(self.autoCompleteQScintilla)
+        
         self.__completionListHookFunctions = {}
+        self.__completionListAsyncHookFunctions = {}
         self.__setAutoCompletion()
         
+        # set the call-tips function
         self.__ctHookFunctions = {}
         self.__setCallTips()
         
@@ -506,6 +532,10 @@
                            UI.PixmapCache.getPixmap("attribute_private.png"))
         self.registerImage(self.EnumID,
                            UI.PixmapCache.getPixmap("enum.png"))
+        self.registerImage(self.KeywordsID,
+                           UI.PixmapCache.getPixmap("keywords.png"))
+        self.registerImage(self.ModuleID,
+                           UI.PixmapCache.getPixmap("module.png"))
         
         self.registerImage(self.FromDocumentID,
                            UI.PixmapCache.getPixmap("editor.png"))
@@ -749,6 +779,8 @@
             self.menu.addMenu(self.autocompletionMenu)
             self.menuActs["calltip"] = self.menu.addAction(
                 self.tr('Calltip'), self.callTip)
+            self.menuActs["codeInfo"] = self.menu.addAction(
+                self.tr('Code Info'), self.__showCodeInfo)
         self.menu.addSeparator()
         if self.isResourcesFile:
             self.menu.addMenu(self.resourcesMenu)
@@ -820,6 +852,9 @@
         self.menuActs["acDynamic"] = menu.addAction(
             self.tr('Complete'), self.autoComplete)
         menu.addSeparator()
+        self.menuActs["acClearCache"] = menu.addAction(
+            self.tr("Clear Completions Cache"), self.__clearCompletionsCache)
+        menu.addSeparator()
         menu.addAction(
             self.tr('Complete from Document'), self.autoCompleteFromDocument)
         self.menuActs["acAPI"] = menu.addAction(
@@ -4032,8 +4067,17 @@
         # set margin 0 and 2 configuration
         self.__setMarginsDisplay()
         
-        # set the autocompletion and calltips function
+        # set the auto-completion function
+        self.__acCache.setSize(
+            Preferences.getEditor("AutoCompletionCacheSize"))
+        self.__acCache.setMaximumCacheTime(
+            Preferences.getEditor("AutoCompletionCacheTime"))
+        acTimeout = Preferences.getEditor("AutoCompletionTimeout")
+        if acTimeout != self.__acTimer.interval:
+            self.__acTimer.setInterval(acTimeout)
         self.__setAutoCompletion()
+        
+        # set the calltips function
         self.__setCallTips()
         
         # set the autosave flags
@@ -4367,7 +4411,8 @@
         else:
             self.setAutoCompletionSource(QsciScintilla.AcsAll)
         if Preferences.getEditor("AutoCompletionEnabled"):
-            if not self.__completionListHookFunctions:
+            if not self.__completionListHookFunctions and \
+               not self.__completionListAsyncHookFunctions:
                 self.setAutoCompletionThreshold(
                     Preferences.getEditor("AutoCompletionThreshold"))
             else:
@@ -4418,6 +4463,11 @@
         """
         Public method to perform an autocompletion using QScintilla methods.
         """
+        self.__acText = ' '  # Prevent long running ACs to add results
+        self.__acWatchdog.stop()
+        if self.__acCompletions:
+            return
+        
         acs = Preferences.getEditor("AutoCompletionSource")
         if acs == QsciScintilla.AcsDocument:
             self.autoCompleteFromDocument()
@@ -4521,7 +4571,8 @@
     ## auto-completion hook interfaces
     #################################################################
     
-    def addCompletionListHook(self, key, func):
+    # TODO: document this hook in chapter 6.2 of plug-in document
+    def addCompletionListHook(self, key, func, async=False):
         """
         Public method to set an auto-completion list provider.
         
@@ -4531,9 +4582,14 @@
             should be a function taking a reference to the editor and
             a boolean indicating to complete a context. It should return
             the possible completions as a list of strings.
-        @type function(editor, bool) -> list of str
-        """
-        if key in self.__completionListHookFunctions:
+        @type function(editor, bool) -> list of str in case async is False
+            and function(editor, bool, str) returning nothing in case async
+            is True
+        @param async flag indicating an asynchroneous function
+        @type bool
+        """
+        if key in self.__completionListHookFunctions or \
+           key in self.__completionListAsyncHookFunctions:
             # it was already registered
             E5MessageBox.warning(
                 self,
@@ -4543,12 +4599,18 @@
                 .format(key))
             return
         
-        if not self.__completionListHookFunctions:
+        if not self.__completionListHookFunctions and \
+           not self.__completionListAsyncHookFunctions:
             if self.autoCompletionThreshold() > 0:
                 self.setAutoCompletionThreshold(0)
             self.SCN_CHARADDED.connect(self.__charAdded)
-        self.__completionListHookFunctions[key] = func
-    
+        
+        if async:
+            self.__completionListAsyncHookFunctions[key] = func
+        else:
+            self.__completionListHookFunctions[key] = func
+    
+    # TODO: document this hook in chapter 6.2 of plug-in document
     def removeCompletionListHook(self, key):
         """
         Public method to remove a previously registered completion list
@@ -4559,13 +4621,17 @@
         """
         if key in self.__completionListHookFunctions:
             del self.__completionListHookFunctions[key]
-        
-        if not self.__completionListHookFunctions:
+        elif key in self.__completionListAsyncHookFunctions:
+            del self.__completionListAsyncHookFunctions[key]
+        
+        if not self.__completionListHookFunctions and \
+           not self.__completionListAsyncHookFunctions:
             self.SCN_CHARADDED.disconnect(self.__charAdded)
             if self.autoCompletionThreshold() == 0:
                 self.setAutoCompletionThreshold(
                     Preferences.getEditor("AutoCompletionThreshold"))
     
+    # TODO: document this hook in chapter 6.2 of plug-in document
     def getCompletionListHook(self, key):
         """
         Public method to get the registered completion list provider.
@@ -4575,45 +4641,154 @@
         @return function providing completion list
         @rtype function or None
         """
-        if key in self.__completionListHookFunctions:
-            return self.__completionListHookFunctions[key]
-        else:
-            return None
+        return (self.__completionListHookFunctions.get(key) or
+                self.__completionListAsyncHookFunctions.get(key))
     
     def autoComplete(self, auto=False, context=True):
         """
-        Public method to start autocompletion.
+        Public method to start auto-completion.
         
         @keyparam auto flag indicating a call from the __charAdded method
             (boolean)
         @keyparam context flag indicating to complete a context (boolean)
         """
         if auto and self.autoCompletionThreshold() == -1:
-            # autocompletion is disabled
+            # auto-completion is disabled
             return
         
-        if self.__completionListHookFunctions:
-            if self.isListActive():
-                self.cancelList()
-            completionsList = []
-            for key in self.__completionListHookFunctions:
-                completionsList.extend(
-                    self.__completionListHookFunctions[key](self, context))
-            completionsList = list(set(completionsList))
-            if len(completionsList) == 0:
-                if Preferences.getEditor("AutoCompletionScintillaOnFail") and \
-                    (self.autoCompletionSource() != QsciScintilla.AcsNone or
-                     not auto):
-                    self.autoCompleteQScintilla()
+        if self.__completionListHookFunctions or \
+           self.__completionListAsyncHookFunctions:
+            if auto and Preferences.getEditor("AutoCompletionTimeout"):
+                self.__acTimer.stop()
+                self.__acContext = context
+                self.__acTimer.start()
             else:
-                completionsList.sort()
-                self.showUserList(EditorAutoCompletionListID,
-                                  completionsList)
+                self.__autoComplete(auto, context)
         elif not auto:
             self.autoCompleteQScintilla()
         elif self.autoCompletionSource() != QsciScintilla.AcsNone:
             self.autoCompleteQScintilla()
     
+    def __autoComplete(self, auto=True, context=None):
+        """
+        Private method to start auto-completion via plug-ins.
+        
+        @keyparam auto flag indicating a call from the __charAdded method
+            (boolean)
+        @keyparam context flag indicating to complete a context
+        @type bool or None
+        """
+        line, col = self.getCursorPosition()
+        text = self.text(line)
+        if self.__isStartChar(text[col - 1]):
+            self.__acText = self.getWordLeft(line, col - 1) + text[col - 1]
+        else:
+            self.__acText = self.getWordLeft(line, col)
+        self.__acCompletions.clear()
+        self.__acCompletionsFinished = 0
+        
+        # Suppress empty completions
+        if auto and self.__acText == '':
+            return
+        
+        completions = self.__acCache.get(self.__acText)
+        if completions is not None:
+            # show list with cached entries
+            if self.isListActive():
+                self.cancelList()
+            
+            self.__showCompletionsList(completions)
+        else:
+            if context is None:
+                context = self.__acContext
+            
+            for key in self.__completionListAsyncHookFunctions:
+                self.__completionListAsyncHookFunctions[key](
+                    self, context, self.__acText)
+            
+            for key in self.__completionListHookFunctions:
+                completions = self.__completionListHookFunctions[key](
+                    self, context)
+                self.completionsListReady(completions, self.__acText)
+            
+            if Preferences.getEditor("AutoCompletionScintillaOnFail"):
+                self.__acWatchdog.start()
+    
+    # TODO: document this hook in chapter 6.2 of plug-in document
+    def completionsListReady(self, completions, acText):
+        """
+        Public method to show the completions determined by a completions
+        provider.
+        
+        @param completions list of possible completions
+        @type list of str or set of str
+        @param acText text to be completed
+        @type str
+        """
+        # process the list only, if not already obsolete ...
+        if acText != self.__acText:
+           return
+        
+        self.__acCompletions.update(set(completions))
+        
+        self.__acCompletionsFinished += 1
+        # Got all results from auto completer?
+        if self.__acCompletionsFinished >= len(
+                self.__completionListAsyncHookFunctions):
+            self.__acWatchdog.stop()
+            
+            # Autocomplete with QScintilla if no results present
+            if (Preferences.getEditor("AutoCompletionScintillaOnFail")
+                    and not self.__acCompletions):
+                self.autoCompleteQScintilla()
+                return
+        
+        # ... or completions are not empty
+        if not bool(completions):
+            return
+        
+        if self.isListActive():
+            self.cancelList()
+        
+        if self.__acCompletions:
+            self.__acCache.add(acText, set(self.__acCompletions))
+            self.__showCompletionsList(self.__acCompletions)
+    
+    def __showCompletionsList(self, completions):
+        """
+        Private method to show the completions list.
+        
+        @param completions completions to be shown
+        @type list of str or set of str
+        """
+        if Preferences.getEditor("AutoCompletionReversedList"):
+            acCompletions = sorted(
+                list(completions),
+                key=self.__replaceLeadingUnderscores)
+        else:
+            acCompletions = sorted(list(completions))
+        self.showUserList(EditorAutoCompletionListID, acCompletions)
+    
+    def __replaceLeadingUnderscores(self, txt):
+        """
+        Private method to replace the first two underlines for invers sorting.
+        
+        @param txt completion text
+        @type str
+        @return modified completion text
+        @rtype str
+        """
+        if txt.startswith('_'):
+            return txt[:2].replace('_', '~') + txt[2:]
+        else:
+            return txt
+    
+    def __clearCompletionsCache(self):
+        """
+        Private method to clear the auto-completions cache.
+        """
+        self.__acCache.clear()
+    
     def __completionListSelected(self, listId, txt):
         """
         Private slot to handle the selection from the completion list.
@@ -4652,7 +4827,73 @@
             (boolean)
         """
         return (self.acAPI or
-                bool(self.__completionListHookFunctions))
+                bool(self.__completionListHookFunctions) or
+                bool(self.__completionListAsyncHookFunctions))
+    
+    #################################################################
+    ## call-tip hook interfaces
+    #################################################################
+    
+    # TODO: document this hook in chapter 6.2 of plug-in document
+    def addCallTipHook(self, key, func):
+        """
+        Public method to set a calltip provider.
+        
+        @param key name of the provider
+        @type str
+        @param func function providing calltips. func
+            should be a function taking a reference to the editor,
+            a position into the text and the amount of commas to the
+            left of the cursor. It should return the possible
+            calltips as a list of strings.
+        @type function(editor, int, int) -> list of str
+        """
+        if key in self.__ctHookFunctions:
+            # it was already registered
+            E5MessageBox.warning(
+                self,
+                self.tr("Call-Tips Provider"),
+                self.tr("""The call-tips provider '{0}' was already"""
+                        """ registered. Ignoring duplicate request.""")
+                .format(key))
+            return
+        
+        self.__ctHookFunctions[key] = func
+    
+    # TODO: document this hook in chapter 6.2 of plug-in document
+    def removeCallTipHook(self, key):
+        """
+        Public method to remove a previously registered calltip provider.
+        
+        @param key name of the provider
+        @type str
+        """
+        if key in self.__ctHookFunctions:
+            del self.__ctHookFunctions[key]
+    
+    # TODO: document this hook in chapter 6.2 of plug-in document
+    def getCallTipHook(self, key):
+        """
+        Public method to get the registered calltip provider.
+        
+        @param key name of the provider
+        @type str
+        @return function providing calltips
+        @rtype function or None
+        """
+        if key in self.__ctHookFunctions:
+            return self.__ctHookFunctions[key]
+        else:
+            return None
+    
+    def canProvideCallTipps(self):
+        """
+        Public method to test the calltips availability.
+        
+        @return flag indicating the availability of calltips (boolean)
+        """
+        return (self.acAPI or
+                bool(self.__ctHookFunctions))
     
     def callTip(self):
         """
@@ -4784,66 +5025,28 @@
         return ct
     
     #################################################################
-    ## call-tip hook interfaces
+    ## Methods needed by the code documentation viewer
     #################################################################
     
-    def addCallTipHook(self, key, func):
-        """
-        Public method to set a calltip provider.
-        
-        @param key name of the provider
-        @type str
-        @param func function providing calltips. func
-            should be a function taking a reference to the editor,
-            a position into the text and the amount of commas to the
-            left of the cursor. It should return the possible
-            calltips as a list of strings.
-        @type function(editor, int, int) -> list of str
-        """
-        if key in self.__ctHookFunctions:
-            # it was already registered
-            E5MessageBox.warning(
-                self,
-                self.tr("Call-Tips Provider"),
-                self.tr("""The call-tips provider '{0}' was already"""
-                        """ registered. Ignoring duplicate request.""")
-                .format(key))
-            return
-        
-        self.__ctHookFunctions[key] = func
-    
-    def removeCallTipHook(self, key):
-        """
-        Public method to remove a previously registered calltip provider.
-        
-        @param key name of the provider
-        @type str
-        """
-        if key in self.__ctHookFunctions:
-            del self.__ctHookFunctions[key]
-    
-    def getCallTipHook(self, key):
-        """
-        Public method to get the registered calltip provider.
-        
-        @param key name of the provider
-        @type str
-        @return function providing calltips
-        @rtype function or None
-        """
-        if key in self.__ctHookFunctions:
-            return self.__ctHookFunctions[key]
-        else:
-            return None
-    
-    def canProvideCallTipps(self):
-        """
-        Public method to test the calltips availability.
-        
-        @return flag indicating the availability of calltips (boolean)
-        """
-        return (self.acAPI or
-                bool(self.__ctHookFunctions))
+    def __charAddedPermanent(self, charNumber):
+        """
+        Private slot called to handle the user entering a character.
+        
+        Note: This slot is always connected independent of the auto-completion
+        and calltips handling __charAdded() slot.
+        
+        @param charNumber value of the character entered (integer)
+        """
+        char = chr(charNumber)
+        if char == "(" and \
+           Preferences.getDocuViewer("ShowInfoOnOpenParenthesis"):
+            self.vm.showEditorInfo(self)
+    
+    def __showCodeInfo(self):
+        """
+        Private slot to handle the context menu action to show code info.
+        """
+        self.vm.showEditorInfo(self)
     
     #################################################################
     ## Methods needed by the context menu
@@ -4936,7 +5139,9 @@
             self.completer is not None and self.completer.isEnabled())
         
         if not self.isResourcesFile:
-            self.menuActs["calltip"].setEnabled(self.acAPI)
+            self.menuActs["calltip"].setEnabled(self.canProvideCallTipps())
+            self.menuActs["codeInfo"].setEnabled(
+                self.vm.isEditorInfoSupported(self.getLanguage()))
         
         from .SpellChecker import SpellChecker
         spellingAvailable = SpellChecker.isAvailable()
@@ -4973,9 +5178,10 @@
         """
         self.menuActs["acDynamic"].setEnabled(
             self.canProvideDynamicAutoCompletion())
+        self.menuActs["acClearCache"].setEnabled(
+            self.canProvideDynamicAutoCompletion())
         self.menuActs["acAPI"].setEnabled(self.acAPI)
         self.menuActs["acAPIDocument"].setEnabled(self.acAPI)
-        self.menuActs["calltip"].setEnabled(self.canProvideCallTipps())
         
         self.showMenu.emit("Autocompletion", self.autocompletionMenu, self)
         
--- a/README-MacOSX.rst	Wed Nov 01 19:22:02 2017 +0100
+++ b/README-MacOSX.rst	Fri Nov 03 12:10:16 2017 +0100
@@ -179,13 +179,13 @@
 
 ::
 
-    port search hunspell-dict
+    port search hunspell
 
 Then install them with a command like this
 
 ::
 
-    sudo port install hunspell-dict-de_DE
+    sudo port install hunspell-de_DE hunspell-en_US_large
 
 replacing the 'de_DE' part with the language code of your desire.
 
--- a/UI/Previewers/PreviewerHTML.py	Wed Nov 01 19:22:02 2017 +0100
+++ b/UI/Previewers/PreviewerHTML.py	Fri Nov 03 12:10:16 2017 +0100
@@ -673,16 +673,17 @@
             import markdown     # __IGNORE_EXCEPTION__
         except ImportError:
             return self.tr(
-                """<p>Markdown preview requires the <b>python-markdown</b> """
+                """<p>Markdown preview requires the <b>Markdown</b> """
                 """package.<br/>Install it with your package manager,"""
-                """ 'pip install docutils' or see """
+                """ 'pip install Markdown' or see """
                 """<a href="http://pythonhosted.org/Markdown/install.html">"""
                 """installation instructions.</a></p>""")
         
         try:
             import mdx_mathjax  # __IGNORE_EXCEPTION__ __IGNORE_WARNING__
         except ImportError:
-            #mathjax doesn't require import statement if installed as extension
+            # mathjax doesn't require import statement if installed
+            # as extension
             pass
         
         if convertNewLineToBreak:
@@ -699,9 +700,8 @@
                 Class is placed here, because it depends on imported markdown,
                 and markdown import is lazy.
                 
-                (see http://achinghead.com/
-                python-markdown-adding-insert-delete.html this page for
-                details)
+                (see https://pythonhosted.org/Markdown/extensions/api.html
+                this page for details)
                 """
                 DEL_RE = r'(~~)(.*?)~~'
 
--- a/UI/UserInterface.py	Wed Nov 01 19:22:02 2017 +0100
+++ b/UI/UserInterface.py	Fri Nov 03 12:10:16 2017 +0100
@@ -455,6 +455,8 @@
         self.preferencesChanged.connect(self.cooperation.preferencesChanged)
         self.preferencesChanged.connect(
             self.backgroundService.preferencesOrProjectChanged)
+        self.preferencesChanged.connect(
+            self.codeDocumentationViewer.preferencesChanged)
         
         self.viewmanager.editorSaved.connect(self.project.repopulateItem)
         self.viewmanager.lastEditorClosed.connect(self.__lastEditorClosed)
@@ -531,6 +533,7 @@
         e5App().registerObject("IRC", self.irc)
         e5App().registerObject("Symbols", self.symbolsViewer)
         e5App().registerObject("Numbers", self.numbersViewer)
+        e5App().registerObject("DocuViewer", self.codeDocumentationViewer)
         
         # list of web addresses serving the versions file
         self.__httpAlternatives = Preferences.getUI("VersionsUrls6")
@@ -642,6 +645,9 @@
         if interval > 0:
             QApplication.setKeyboardInputInterval(interval)
         
+        # finalize the initialization of the code documentation viewer
+        self.codeDocumentationViewer.finalizeSetup()
+        
     def __createLayout(self, debugServer):
         """
         Private method to create the layout of the various windows.
@@ -700,6 +706,8 @@
         """
         from E5Gui.E5ToolBox import E5VerticalToolBox, E5HorizontalToolBox
         
+        logging.debug("Creating Toolboxes Layout...")
+        
         # Create the left toolbox
         self.lToolboxDock = self.__createDockWindow("lToolboxDock")
         self.lToolbox = E5VerticalToolBox(self.lToolboxDock)
@@ -720,6 +728,7 @@
                                self.rToolbox, self.tr("Right Toolbox"))
         
         # Create the project browser
+        logging.debug("Creating Project Browser...")
         from Project.ProjectBrowser import ProjectBrowser
         self.projectBrowser = ProjectBrowser(
             self.project, None,
@@ -729,6 +738,7 @@
                               self.tr("Project-Viewer"))
 
         # Create the multi project browser
+        logging.debug("Creating Multiproject Browser...")
         from MultiProject.MultiProjectBrowser import MultiProjectBrowser
         self.multiProjectBrowser = MultiProjectBrowser(self.multiProject,
                                                        self.project)
@@ -737,6 +747,7 @@
                               self.tr("Multiproject-Viewer"))
 
         # Create the template viewer part of the user interface
+        logging.debug("Creating Template Viewer...")
         from Templates.TemplateViewer import TemplateViewer
         self.templateViewer = TemplateViewer(None,
                                              self.viewmanager)
@@ -744,7 +755,16 @@
                               UI.PixmapCache.getIcon("templateViewer.png"),
                               self.tr("Template-Viewer"))
 
+        # Create the code documentation viewer
+        logging.debug("Creating Code Documentation Viewer...")
+        from .CodeDocumentationViewer import CodeDocumentationViewer
+        self.codeDocumentationViewer = CodeDocumentationViewer(self)
+        self.rToolbox.addItem(self.codeDocumentationViewer,
+                              UI.PixmapCache.getIcon("codeDocuViewer.png"),
+                              self.tr("Code Documentation Viewer"))
+        
         # Create the debug viewer maybe without the embedded shell
+        logging.debug("Creating Debug Viewer...")
         from Debugger.DebugViewer import DebugViewer
         self.debugViewer = DebugViewer(
             debugServer, True, self.viewmanager, None,
@@ -755,6 +775,7 @@
                               self.tr("Debug-Viewer"))
 
         # Create the chat part of the user interface
+        logging.debug("Creating Chat Widget...")
         from Cooperation.ChatWidget import ChatWidget
         self.cooperation = ChatWidget(self)
         self.rToolbox.addItem(self.cooperation,
@@ -762,6 +783,7 @@
                               self.tr("Cooperation"))
         
         # Create the IRC part of the user interface
+        logging.debug("Creating IRC Widget...")
         from Network.IRC.IrcWidget import IrcWidget
         self.irc = IrcWidget(self)
         self.rToolbox.addItem(self.irc,
@@ -769,6 +791,7 @@
                               self.tr("IRC"))
         
         # Create the task viewer part of the user interface
+        logging.debug("Creating Task Viewer...")
         from Tasks.TaskViewer import TaskViewer
         self.taskViewer = TaskViewer(None, self.project)
         self.hToolbox.addItem(self.taskViewer,
@@ -776,6 +799,7 @@
                               self.tr("Task-Viewer"))
 
         # Create the log viewer part of the user interface
+        logging.debug("Creating Log Viewer...")
         from .LogView import LogViewer
         self.logViewer = LogViewer(self)
         self.hToolbox.addItem(self.logViewer,
@@ -786,6 +810,7 @@
             self.shell = self.debugViewer.shell
         else:
             # Create the shell
+            logging.debug("Creating Shell...")
             from QScintilla.Shell import ShellAssembly
             self.shellAssembly = \
                 ShellAssembly(debugServer, self.viewmanager, True)
@@ -796,6 +821,7 @@
 
         if self.embeddedFileBrowser == 0:   # separate window
             # Create the file browser
+            logging.debug("Creating File Browser...")
             from .Browser import Browser
             self.browser = Browser()
             self.lToolbox.addItem(self.browser,
@@ -807,6 +833,7 @@
             self.browser = self.projectBrowser.fileBrowser
         
         # Create the symbols viewer
+        logging.debug("Creating Symbols Viewer...")
         from .SymbolsWidget import SymbolsWidget
         self.symbolsViewer = SymbolsWidget()
         self.lToolbox.addItem(self.symbolsViewer,
@@ -814,6 +841,7 @@
                               self.tr("Symbols"))
         
         # Create the numbers viewer
+        logging.debug("Creating Numbers Viewer...")
         from .NumbersWidget import NumbersWidget
         self.numbersViewer = NumbersWidget()
         self.hToolbox.addItem(self.numbersViewer,
@@ -830,6 +858,8 @@
         """
         from E5Gui.E5SideBar import E5SideBar
         
+        logging.debug("Creating Sidebars Layout...")
+        
         delay = Preferences.getUI("SidebarDelay")
         # Create the left sidebar
         self.leftSidebar = E5SideBar(E5SideBar.West, delay)
@@ -871,6 +901,15 @@
             UI.PixmapCache.getIcon("templateViewer.png"),
             self.tr("Template-Viewer"))
 
+        # Create the code documentation viewer
+        logging.debug("Creating Code Documentation Viewer...")
+        from .CodeDocumentationViewer import CodeDocumentationViewer
+        self.codeDocumentationViewer = CodeDocumentationViewer(self)
+        self.rightSidebar.addTab(
+            self.codeDocumentationViewer,
+            UI.PixmapCache.getIcon("codeDocuViewer.png"),
+            self.tr("Code Documentation Viewer"))
+        
         # Create the debug viewer maybe without the embedded shell
         logging.debug("Creating Debug Viewer...")
         from Debugger.DebugViewer import DebugViewer
@@ -1424,7 +1463,7 @@
             self.tr('&Shell'),
             QKeySequence(self.tr("Alt+Shift+S")),
             0, self,
-            'interprter_shell_activate')
+            'interpreter_shell_activate')
         self.shellActivateAct.setStatusTip(self.tr(
             "Switch the input focus to the Shell window."))
         self.shellActivateAct.setWhatsThis(self.tr(
@@ -4164,6 +4203,24 @@
         if aw is not None:
             aw.setFocus(Qt.ActiveWindowFocusReason)
     
+    def activateCodeDocumentationViewer(self, switchFocus=True):
+        """
+        Public slot to handle the activation of the Code Documentation Viewer.
+        
+        @param switchFocus flag indicating to transfer the input focus
+        @type bool
+        """
+        if self.layoutType == "Toolboxes":
+            self.rToolboxDock.show()
+            self.rToolbox.setCurrentWidget(self.codeDocumentationViewer)
+        elif self.layoutType == "Sidebars":
+            self.rightSidebar.show()
+            self.rightSidebar.setCurrentWidget(self.codeDocumentationViewer)
+        else:
+            self.codeDocumentationViewer.show()
+        if switchFocus:
+            self.codeDocumentationViewer.setFocus(Qt.ActiveWindowFocusReason)
+    
     def __toggleWindow(self, w):
         """
         Private method to toggle a workspace editor window.
@@ -6266,6 +6323,8 @@
         if sessionCreated and not self.__disableCrashSession:
             self.__deleteCrashSession()
         
+        self.codeDocumentationViewer.shutdown()
+        
         self.__previewer.shutdown()
         
         self.shell.closeShell()
@@ -6797,3 +6856,16 @@
         Private slot handling the automatic connection of the IRC client.
         """
         self.__activateIRC()
+    
+    ###############################################
+    ## Support for Code Documentation Viewer  below
+    ###############################################
+    
+    def documentationViewer(self):
+        """
+        Public method to provide a reference to the code documentation viewer.
+        
+        @return reference to the code documentation viewer
+        @rtype CodeDocumentationViewer
+        """
+        return self.codeDocumentationViewer
--- a/Utilities/BackgroundService.py	Wed Nov 01 19:22:02 2017 +0100
+++ b/Utilities/BackgroundService.py	Fri Nov 03 12:10:16 2017 +0100
@@ -211,7 +211,7 @@
                             'An error in Erics background client stopped the'
                             ' service.')
                         )
-                    except KeyError:
+                    except (KeyError, TypeError):
                         # ignore silently
                         pass
                 if res != E5MessageBox.No:
--- a/ViewManager/ViewManager.py	Wed Nov 01 19:22:02 2017 +0100
+++ b/ViewManager/ViewManager.py	Fri Nov 03 12:10:16 2017 +0100
@@ -1378,6 +1378,24 @@
         self.calltipsAct.triggered.connect(self.__editShowCallTips)
         self.editActions.append(self.calltipsAct)
         
+        self.codeInfoAct = E5Action(
+            QCoreApplication.translate('ViewManager', 'Code Info'),
+            UI.PixmapCache.getIcon("codeDocuViewer.png"),
+            QCoreApplication.translate('ViewManager', 'Code Info'),
+            QKeySequence(QCoreApplication.translate(
+                'ViewManager', "Ctrl+Alt+I", "Edit|Code Info")),
+            0,
+            self.editActGrp, 'vm_edit_codeinfo')
+        self.codeInfoAct.setStatusTip(QCoreApplication.translate(
+            'ViewManager', 'Show Code Info'))
+        self.codeInfoAct.setWhatsThis(QCoreApplication.translate(
+            'ViewManager',
+            """<b>Code Info</b>"""
+            """<p>Show code information based on the cursor position.</p>"""
+        ))
+        self.codeInfoAct.triggered.connect(self.__editShowCodeInfo)
+        self.editActions.append(self.codeInfoAct)
+        
         self.sortAct = E5Action(
             QCoreApplication.translate('ViewManager', 'Sort'),
             QCoreApplication.translate('ViewManager', 'Sort'),
@@ -2752,6 +2770,7 @@
         menu.addSeparator()
         menu.addMenu(autocompletionMenu)
         menu.addAction(self.calltipsAct)
+        menu.addAction(self.codeInfoAct)
         menu.addSeparator()
         menu.addMenu(searchMenu)
         menu.addSeparator()
@@ -5433,6 +5452,12 @@
         """
         self.activeWindow().callTip()
     
+    def __editShowCodeInfo(self):
+        """
+        Private method to handle the code info action.
+        """
+        self.showEditorInfo(self.activeWindow())
+    
     ##################################################################
     ## Below are the action and utility methods for the search menu
     ##################################################################
@@ -6577,6 +6602,7 @@
             self.autoCompleteAct.setEnabled(
                 editor.canProvideDynamicAutoCompletion())
             self.calltipsAct.setEnabled(editor.canProvideCallTipps())
+            self.codeInfoAct.setEnabled(self.__isEditorInfoSupportedEd(editor))
             
             if editor.isPyFile() or editor.isRubyFile():
                 self.gotoPreviousDefAct.setEnabled(True)
@@ -6782,6 +6808,40 @@
         if editor:
             editor.sortLines()
     
+    def showEditorInfo(self, editor):
+        """
+        Public method to show some information for a given editor.
+        
+        @param editor editor to show information text for
+        @type Editor
+        """
+        self.ui.documentationViewer().showInfo(editor)
+    
+    def isEditorInfoSupported(self, language):
+        """
+        Public method to check, if a language is supported by the
+        documentation viewer.
+        
+        @param language editor programming language to check
+        @type str
+        @return flag indicating the support status
+        @rtype bool
+        """
+        return self.ui.documentationViewer().isSupportedLanguage(language)
+    
+    def __isEditorInfoSupportedEd(self, editor):
+        """
+        Private method to check, if an editor is supported by the
+        documentation viewer.
+        
+        @param editor reference to the editor to check for
+        @type Editor
+        @return flag indicating the support status
+        @rtype bool
+        """
+        language = editor.getLanguage()
+        return self.isEditorInfoSupported(language)
+    
     ##################################################################
     ## Below are protected utility methods
     ##################################################################
--- a/WebBrowser/AdBlock/AdBlockRule.py	Wed Nov 01 19:22:02 2017 +0100
+++ b/WebBrowser/AdBlock/AdBlockRule.py	Fri Nov 03 12:10:16 2017 +0100
@@ -11,7 +11,7 @@
 
 import re
 
-from PyQt5.QtCore import Qt, QRegExp
+from PyQt5.QtCore import PYQT_VERSION, Qt, QRegExp
 from PyQt5.QtWebEngineCore import QWebEngineUrlRequestInfo
 
 from Globals import qVersionTuple
@@ -534,7 +534,7 @@
         match = (
             req.resourceType() ==
             QWebEngineUrlRequestInfo.ResourceTypeSubResource)
-        if qVersionTuple() >= (5, 7, 0):
+        if qVersionTuple() >= (5, 7, 0) and PYQT_VERSION >= 0x50700:
             match = match or (
                 req.resourceType() ==
                 QWebEngineUrlRequestInfo.ResourceTypePluginResource)
--- a/WebBrowser/Download/DownloadItem.py	Wed Nov 01 19:22:02 2017 +0100
+++ b/WebBrowser/Download/DownloadItem.py	Fri Nov 03 12:10:16 2017 +0100
@@ -11,8 +11,8 @@
 
 import os
 
-from PyQt5.QtCore import pyqtSlot, pyqtSignal, Qt, QTime, QUrl, \
-    QStandardPaths, QFileInfo
+from PyQt5.QtCore import pyqtSlot, pyqtSignal, PYQT_VERSION, Qt, QTime, QUrl, \
+    QStandardPaths, QFileInfo, QDateTime
 from PyQt5.QtGui import QPalette, QDesktopServices
 from PyQt5.QtWidgets import QWidget, QStyle, QDialog
 from PyQt5.QtWebEngineWidgets import QWebEngineDownloadItem
@@ -86,6 +86,7 @@
         self.__gettingFileName = False
         self.__canceledFileSelect = False
         self.__autoOpen = False
+        self.__downloadedDateTime = QDateTime()
         
         self.__initialize()
     
@@ -109,6 +110,8 @@
         self.__downloadItem.finished.connect(self.__finished)
         
         # reset info
+        self.datetimeLabel.clear()
+        self.datetimeLabel.hide()
         self.infoLabel.clear()
         self.progressBar.setValue(0)
         if self.__downloadItem.state() == \
@@ -130,10 +133,10 @@
         if self.__gettingFileName:
             return
         
-        if qVersionTuple() >= (5, 8, 0):
+        if qVersionTuple() >= (5, 8, 0) and PYQT_VERSION >= 0x50800:
             savePage = self.__downloadItem.type() == \
                 QWebEngineDownloadItem.SavePage
-        elif qVersionTuple() >= (5, 7, 0):
+        elif qVersionTuple() >= (5, 7, 0) and PYQT_VERSION >= 0x50700:
             savePage = self.__downloadItem.savePageFormat() != \
                 QWebEngineDownloadItem.UnknownSaveFormat
         else:
@@ -176,6 +179,7 @@
                     self.tr("Download canceled: {0}").format(
                         QFileInfo(defaultFileName).fileName()))
                 self.__canceledFileSelect = True
+                self.__setDateTime()
                 return
             
             if dlg.getAction() == "scan":
@@ -256,6 +260,7 @@
                 self.tr("Download canceled: {0}")
                     .format(QFileInfo(defaultFileName).fileName()))
             self.__canceledFileSelect = True
+            self.__setDateTime()
             return
         
         self.__setFileName(fileName)
@@ -283,6 +288,7 @@
                 self.infoLabel.setText(self.tr(
                     "Download directory ({0}) couldn't be created.")
                     .format(saveDirPath.absolutePath()))
+                self.__setDateTime()
                 return
         
         self.filenameLabel.setText(QFileInfo(self.__fileName).fileName())
@@ -335,6 +341,7 @@
         self.setUpdatesEnabled(True)
         self.__state = DownloadItem.DownloadCancelled
         self.__downloadItem.cancel()
+        self.__setDateTime()
         self.downloadFinished.emit()
     
     @pyqtSlot()
@@ -507,6 +514,10 @@
         self.openButton.setVisible(noError)
         self.__state = DownloadItem.DownloadSuccessful
         self.__updateInfoLabel()
+        self.__setDateTime()
+        
+        self.__adjustSize()
+        
         self.statusChanged.emit()
         self.downloadFinished.emit()
         
@@ -549,18 +560,23 @@
         """
         Public method to get the relevant download data.
         
-        @return tuple of URL, save location, flag and the
-            URL of the related web page (QUrl, string, boolean,QUrl)
+        @return tuple of URL, save location, flag, the
+            URL of the related web page and the date and time
+            of the download
+        @rtype tuple of (QUrl, str, bool, QUrl, QDateTime)
         """
         return (self.__url, QFileInfo(self.__fileName).filePath(),
-                self.downloadedSuccessfully(), self.__pageUrl)
+                self.downloadedSuccessfully(), self.__pageUrl,
+                self.__downloadedDateTime)
     
     def setData(self, data):
         """
         Public method to set the relevant download data.
         
-        @param data tuple of URL, save location, flag and the
-            URL of the related web page (QUrl, string, boolean, QUrl)
+        @param data tuple of URL, save location, flag, the
+            URL of the related web page and the date and time
+            of the download
+        @type QUrl, str, bool, QUrl, QDateTime
         """
         self.__url = data[0]
         self.__fileName = data[1]
@@ -569,6 +585,11 @@
         self.filenameLabel.setText(QFileInfo(self.__fileName).fileName())
         self.infoLabel.setText(self.__fileName)
         
+        if len(data) == 5:
+            self.__setDateTime(data[4])
+        else:
+            self.__setDateTime(QDateTime())
+        
         self.stopButton.setEnabled(False)
         self.stopButton.setVisible(False)
         self.openButton.setEnabled(data[2])
@@ -578,6 +599,8 @@
         else:
             self.__state = DownloadItem.DownloadCancelled
         self.progressBar.setVisible(False)
+        
+        self.__adjustSize()
     
     def getInfoData(self):
         """
@@ -594,3 +617,31 @@
         @return URL of the download page (QUrl)
         """
         return self.__pageUrl
+    
+    def __adjustSize(self):
+        """
+        Private method to adjust the size of the download item.
+        """
+        self.ensurePolished()
+        
+        msh = self.minimumSizeHint()
+        self.resize(max(self.width(), msh.width()), msh.height())
+    
+    def __setDateTime(self, dateTime=None):
+        """
+        Private method to set the download date and time.
+        
+        @param dateTime date and time to be set
+        @type QDateTime
+        """
+        if dateTime is None:
+            self.__downloadedDateTime = QDateTime.currentDateTime()
+        else:
+            self.__downloadedDateTime = dateTime
+        if self.__downloadedDateTime.isValid():
+            labelText = self.__downloadedDateTime.toString("yyyy-MM-dd hh:mm")
+            self.datetimeLabel.setText(labelText)
+            self.datetimeLabel.show()
+        else:
+            self.datetimeLabel.clear()
+            self.datetimeLabel.hide()
--- a/WebBrowser/Download/DownloadItem.ui	Wed Nov 01 19:22:02 2017 +0100
+++ b/WebBrowser/Download/DownloadItem.ui	Fri Nov 03 12:10:16 2017 +0100
@@ -6,8 +6,8 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>400</width>
-    <height>87</height>
+    <width>397</width>
+    <height>104</height>
    </rect>
   </property>
   <property name="sizePolicy">
@@ -20,6 +20,18 @@
    <string/>
   </property>
   <layout class="QHBoxLayout" name="horizontalLayout">
+   <property name="leftMargin">
+    <number>2</number>
+   </property>
+   <property name="topMargin">
+    <number>2</number>
+   </property>
+   <property name="rightMargin">
+    <number>2</number>
+   </property>
+   <property name="bottomMargin">
+    <number>2</number>
+   </property>
    <item>
     <widget class="QLabel" name="fileIcon">
      <property name="text">
@@ -30,6 +42,19 @@
    <item>
     <layout class="QVBoxLayout" name="verticalLayout">
      <item>
+      <widget class="QLabel" name="datetimeLabel">
+       <property name="text">
+        <string>Date and Time</string>
+       </property>
+       <property name="alignment">
+        <set>Qt::AlignCenter</set>
+       </property>
+       <property name="wordWrap">
+        <bool>true</bool>
+       </property>
+      </widget>
+     </item>
+     <item>
       <widget class="QLabel" name="filenameLabel">
        <property name="sizePolicy">
         <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
--- a/WebBrowser/Download/DownloadManager.py	Wed Nov 01 19:22:02 2017 +0100
+++ b/WebBrowser/Download/DownloadManager.py	Fri Nov 03 12:10:16 2017 +0100
@@ -55,6 +55,8 @@
         self.__downloadDirectory = ""
         self.__loaded = False
         
+        self.__rowHeightMultiplier = 1.1
+        
         self.setDownloadDirectory(Preferences.getUI("DownloadPath"))
         
         self.downloadsView.setShowGrid(False)
@@ -203,24 +205,35 @@
         self.activateWindow()
         self.raise_()
     
-    def __addItem(self, itm):
+    def __addItem(self, itm, append=False):
         """
         Private method to add a download to the list of downloads.
         
-        @param itm reference to the download item (DownloadItem)
+        @param itm reference to the download item
+        @type DownloadItem
+        @param append flag indicating to append the item
+        @type bool
         """
         itm.statusChanged.connect(self.__updateRow)
         itm.downloadFinished.connect(self.__finished)
         
-        row = len(self.__downloads)
+        # insert at top of window
+        if append:
+            row = len(self.__downloads)
+        else:
+            row = 0
         self.__model.beginInsertRows(QModelIndex(), row, row)
-        self.__downloads.append(itm)
+        if append:
+            self.__downloads.append(itm)
+        else:
+            self.__downloads.insert(0, itm)
         self.__model.endInsertRows()
         
         self.downloadsView.setIndexWidget(self.__model.index(row, 0), itm)
         icon = self.style().standardIcon(QStyle.SP_FileIcon)
         itm.setIcon(icon)
-        self.downloadsView.setRowHeight(row, itm.sizeHint().height() * 1.5)
+        self.downloadsView.setRowHeight(
+            row, itm.sizeHint().height() * self.__rowHeightMultiplier)
         # just in case the download finished before the constructor returned
         self.__updateRow(itm)
         self.changeOccurred()
@@ -248,10 +261,9 @@
             icon = self.style().standardIcon(QStyle.SP_FileIcon)
         itm.setIcon(icon)
         
-        oldHeight = self.downloadsView.rowHeight(row)
         self.downloadsView.setRowHeight(
             row,
-            max(oldHeight, itm.minimumSizeHint().height() * 1.5))
+            itm.minimumSizeHint().height() * self.__rowHeightMultiplier)
         
         remove = False
         
@@ -334,7 +346,7 @@
                 from .DownloadItem import DownloadItem
                 itm = DownloadItem(parent=self)
                 itm.setData(download)
-                self.__addItem(itm)
+                self.__addItem(itm, append=True)
         self.cleanupButton.setEnabled(
             (len(self.__downloads) - self.activeDownloads()) > 0)
         
--- a/WebBrowser/WebBrowserView.py	Wed Nov 01 19:22:02 2017 +0100
+++ b/WebBrowser/WebBrowserView.py	Fri Nov 03 12:10:16 2017 +0100
@@ -16,9 +16,9 @@
 
 import os
 
-from PyQt5.QtCore import pyqtSignal, QUrl, QFileInfo, Qt, QTimer, QEvent, \
-    QPoint, QPointF, QDateTime, QStandardPaths, QByteArray, QIODevice, \
-    QDataStream
+from PyQt5.QtCore import pyqtSignal, PYQT_VERSION, Qt, QUrl, QFileInfo, \
+    QTimer, QEvent, QPoint, QPointF, QDateTime, QStandardPaths, QByteArray, \
+    QIODevice, QDataStream
 from PyQt5.QtGui import QDesktopServices, QClipboard, QIcon, \
     QContextMenuEvent, QPixmap
 from PyQt5.QtWidgets import qApp, QStyle, QMenu, QApplication
@@ -362,9 +362,10 @@
         """
         Public slot to clear the current selection.
         """
-        if qVersionTuple() >= (5, 7, 0):
+        try:
             self.triggerPageAction(QWebEnginePage.Unselect)
-        else:
+        except AttributeError:
+            # prior to 5.7.0
             self.page().runJavaScript(
                 "window.getSelection().empty()",
                 WebBrowserPage.SafeJsWorld)
@@ -545,11 +546,11 @@
         @type WebHitTestResult
         """
         spellCheckActionCount = 0
-        if qVersionTuple() >= (5, 7, 0):
+        if qVersionTuple() >= (5, 7, 0) and PYQT_VERSION >= 0x50700:
             contextMenuData = self.page().contextMenuData()
             hitTest.updateWithContextMenuData(contextMenuData)
             
-            if qVersionTuple() >= (5, 8, 0) and \
+            if qVersionTuple() >= (5, 8, 0) and PYQT_VERSION >= 0x50800 and \
                bool(contextMenuData.misspelledWord()):
                 boldFont = menu.font()
                 boldFont.setBold(True)
@@ -801,7 +802,7 @@
             language = languages[0]
             langCode = language.split("[")[1][:2]
             googleTranslatorUrl = QUrl(
-                "http://translate.google.com/#auto|{0}|{1}".format(
+                "http://translate.google.com/#auto/{0}/{1}".format(
                     langCode, self.selectedText()))
             menu.addAction(
                 UI.PixmapCache.getIcon("translate.png"),
@@ -1723,7 +1724,7 @@
         if url.isEmpty():
             return
         
-        if qVersionTuple() >= (5, 8, 0):
+        if qVersionTuple() >= (5, 8, 0) and PYQT_VERSION >= 0x50800:
             # since Qt 5.8.0
             fileName, savePageFormat = self.__getSavePageFileNameAndFormat()
             if fileName:
--- a/WebBrowser/WebBrowserWindow.py	Wed Nov 01 19:22:02 2017 +0100
+++ b/WebBrowser/WebBrowserWindow.py	Fri Nov 03 12:10:16 2017 +0100
@@ -3248,11 +3248,14 @@
                 profile.setHttpCacheType(QWebEngineProfile.MemoryHttpCache)
                 profile.setHttpCacheMaximumSize(0)
         
-        if qVersionTuple() >= (5, 8, 0):
+        try:
             profile.setSpellCheckEnabled(
                 Preferences.getWebBrowser("SpellCheckEnabled"))
             profile.setSpellCheckLanguages(
                 Preferences.getWebBrowser("SpellCheckLanguages"))
+        except AttributeError:
+            # not yet supported
+            pass
         
         self.__virusTotal.preferencesChanged()
         if not Preferences.getWebBrowser("VirusTotalEnabled") or \
@@ -4845,11 +4848,14 @@
                 cls._webProfile.setPersistentCookiesPolicy(
                     QWebEngineProfile.AllowPersistentCookies)
             
-            if qVersionTuple() >= (5, 8, 0):
+            try:
                 cls._webProfile.setSpellCheckEnabled(
                     Preferences.getWebBrowser("SpellCheckEnabled"))
                 cls._webProfile.setSpellCheckLanguages(
                     Preferences.getWebBrowser("SpellCheckLanguages"))
+            except AttributeError:
+                # not yet supported
+                pass
             
             # Setup QWebChannel user script
             from .WebBrowserPage import WebBrowserPage
--- a/changelog	Wed Nov 01 19:22:02 2017 +0100
+++ b/changelog	Fri Nov 03 12:10:16 2017 +0100
@@ -1,5 +1,20 @@
 Change Log
 ----------
+Version 17.11:
+- bug fixes
+- Debugger
+  -- added capability to enter an interpreter in the Start... dialog
+- Editor
+  -- added support for auto-completion lists being provided asynchronously
+  -- added a viewer for source code documentation extracted by providers to
+     be implemented by plug-ins (like rope and jedi)
+- Web Browser (old style)
+  -- changed logic in order to put new downloads at the top of the list of
+     downloads and added the download date and time to the shown info
+- Web Browser (NG)
+  -- changed logic in order to put new downloads at the top of the list of
+     downloads and added the download date and time to the shown info
+
 Version 17.10:
 - bug fixes
 - Web Browser (NG)
--- a/eric6.e4p	Wed Nov 01 19:22:02 2017 +0100
+++ b/eric6.e4p	Fri Nov 03 12:10:16 2017 +0100
@@ -170,6 +170,8 @@
     <Source>E5Network/__init__.py</Source>
     <Source>E5Network/data/__init__.py</Source>
     <Source>E5Network/data/tld_rc.py</Source>
+    <Source>E5Utilities/E5Cache.py</Source>
+    <Source>E5Utilities/__init__.py</Source>
     <Source>E5XML/Config.py</Source>
     <Source>E5XML/DebuggerPropertiesReader.py</Source>
     <Source>E5XML/DebuggerPropertiesWriter.py</Source>
@@ -743,6 +745,7 @@
     <Source>Preferences/ConfigurationPages/EditorAutocompletionQScintillaPage.py</Source>
     <Source>Preferences/ConfigurationPages/EditorCalltipsPage.py</Source>
     <Source>Preferences/ConfigurationPages/EditorCalltipsQScintillaPage.py</Source>
+    <Source>Preferences/ConfigurationPages/EditorDocViewerPage.py</Source>
     <Source>Preferences/ConfigurationPages/EditorExportersPage.py</Source>
     <Source>Preferences/ConfigurationPages/EditorFilePage.py</Source>
     <Source>Preferences/ConfigurationPages/EditorGeneralPage.py</Source>
@@ -1219,6 +1222,8 @@
     <Source>UI/BrowserModel.py</Source>
     <Source>UI/BrowserSortFilterProxyModel.py</Source>
     <Source>UI/ClearPrivateDataDialog.py</Source>
+    <Source>UI/CodeDocumentationViewer.py</Source>
+    <Source>UI/CodeDocumentationViewerTemplate.py</Source>
     <Source>UI/CompareDialog.py</Source>
     <Source>UI/Config.py</Source>
     <Source>UI/DeleteFilesConfirmationDialog.py</Source>
@@ -1242,6 +1247,8 @@
     <Source>UI/SymbolsWidget.py</Source>
     <Source>UI/UserInterface.py</Source>
     <Source>UI/__init__.py</Source>
+    <Source>UI/data/__init__.py</Source>
+    <Source>UI/data/codeDocumentationViewer_rc.py</Source>
     <Source>Utilities/AutoSaver.py</Source>
     <Source>Utilities/BackgroundClient.py</Source>
     <Source>Utilities/BackgroundService.py</Source>
@@ -1805,6 +1812,7 @@
     <Form>Preferences/ConfigurationPages/EditorAutocompletionQScintillaPage.ui</Form>
     <Form>Preferences/ConfigurationPages/EditorCalltipsPage.ui</Form>
     <Form>Preferences/ConfigurationPages/EditorCalltipsQScintillaPage.ui</Form>
+    <Form>Preferences/ConfigurationPages/EditorDocViewerPage.ui</Form>
     <Form>Preferences/ConfigurationPages/EditorExportersPage.ui</Form>
     <Form>Preferences/ConfigurationPages/EditorFilePage.ui</Form>
     <Form>Preferences/ConfigurationPages/EditorGeneralPage.ui</Form>
@@ -2003,6 +2011,7 @@
     <Resource>Helpviewer/data/icons.qrc</Resource>
     <Resource>Helpviewer/data/javascript.qrc</Resource>
     <Resource>IconEditor/cursors/cursors.qrc</Resource>
+    <Resource>UI/data/codeDocumentationViewer.qrc</Resource>
     <Resource>WebBrowser/Bookmarks/DefaultBookmarks.qrc</Resource>
     <Resource>WebBrowser/OpenSearch/DefaultSearchEngines/DefaultSearchEngines.qrc</Resource>
     <Resource>WebBrowser/UserAgent/UserAgentDefaults.qrc</Resource>
@@ -2109,6 +2118,7 @@
     <Other>ThirdParty/Pygments/pygments/PKG-INFO</Other>
     <Other>ThirdParty/Send2Trash/LICENSE</Other>
     <Other>ThirdParty/enum/LICENSE</Other>
+    <Other>UI/data/documentViewerStyle.css</Other>
     <Other>WebBrowser/Bookmarks/DefaultBookmarks.xbel</Other>
     <Other>WebBrowser/OpenSearch/DefaultSearchEngines/Amazoncom.xml</Other>
     <Other>WebBrowser/OpenSearch/DefaultSearchEngines/Bing.xml</Other>
--- a/i18n/eric6_cs.ts	Wed Nov 01 19:22:02 2017 +0100
+++ b/i18n/eric6_cs.ts	Fri Nov 03 12:10:16 2017 +0100
@@ -1503,32 +1503,32 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Utilities/BackgroundService.py" line="183"/>
+        <location filename="../Utilities/BackgroundService.py" line="185"/>
         <source>Restart background client?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Utilities/BackgroundService.py" line="209"/>
+        <location filename="../Utilities/BackgroundService.py" line="211"/>
         <source>An error in Erics background client stopped the service.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Utilities/BackgroundService.py" line="420"/>
+        <location filename="../Utilities/BackgroundService.py" line="422"/>
         <source>Erics background client disconnected because of an unknown reason.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Utilities/BackgroundService.py" line="426"/>
+        <location filename="../Utilities/BackgroundService.py" line="428"/>
         <source>Background client disconnected.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Utilities/BackgroundService.py" line="183"/>
+        <location filename="../Utilities/BackgroundService.py" line="185"/>
         <source>&lt;p&gt;The background client for &lt;b&gt;{0}&lt;/b&gt; has stopped due to an exception. It&apos;s used by various plug-ins like the different checkers.&lt;/p&gt;&lt;p&gt;Select&lt;ul&gt;&lt;li&gt;&lt;b&gt;&apos;Yes&apos;&lt;/b&gt; to restart the client, but abort the last job&lt;/li&gt;&lt;li&gt;&lt;b&gt;&apos;Retry&apos;&lt;/b&gt; to restart the client and the last job&lt;/li&gt;&lt;li&gt;&lt;b&gt;&apos;No&apos;&lt;/b&gt; to leave the client off.&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;&lt;p&gt;Note: The client can be restarted by opening and accepting the preferences dialog or reloading/changing the project.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Utilities/BackgroundService.py" line="426"/>
+        <location filename="../Utilities/BackgroundService.py" line="428"/>
         <source>The background client for &lt;b&gt;{0}&lt;/b&gt; disconnected because of an unknown reason.&lt;br&gt;Should it be restarted?</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3045,6 +3045,86 @@
     </message>
 </context>
 <context>
+    <name>CodeDocumentationViewer</name>
+    <message>
+        <location filename="../UI/CodeDocumentationViewer.py" line="232"/>
+        <source>Code Info Provider:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../UI/CodeDocumentationViewer.py" line="244"/>
+        <source>Select the code info provider</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../UI/CodeDocumentationViewer.py" line="246"/>
+        <source>&lt;disabled&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../UI/CodeDocumentationViewer.py" line="258"/>
+        <source>Main Menu</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../UI/CodeDocumentationViewer.py" line="266"/>
+        <source>Rich Text</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../UI/CodeDocumentationViewer.py" line="270"/>
+        <source>Plain Text</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../UI/CodeDocumentationViewer.py" line="442"/>
+        <source>No documentation available</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../UI/CodeDocumentationViewer.py" line="471"/>
+        <source>Definition: {0}{1}
+</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../UI/CodeDocumentationViewer.py" line="478"/>
+        <source>Info: {0}
+
+----
+
+</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../UI/CodeDocumentationViewer.py" line="499"/>
+        <source>No source code documentation provider has been registered. This function has been disabled.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../UI/CodeDocumentationViewer.py" line="504"/>
+        <source>This function has been disabled.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../UI/CodeDocumentationViewerTemplate.py" line="121"/>
+        <source>No further documentation available</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../UI/CodeDocumentationViewerTemplate.py" line="59"/>
+        <source>&lt;p&gt;&lt;b&gt;Definition:&lt;/b&gt; &lt;span class=&quot;def&quot;&gt;@NAME@@ARGSPEC@&lt;/span&gt;&lt;/p&gt;</source>
+        <comment>Just translate &apos;Definition:&apos; and leave the rest intact.</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../UI/CodeDocumentationViewerTemplate.py" line="64"/>
+        <source>&lt;p&gt;&lt;b&gt;Note:&lt;/b&gt; @NOTE@&lt;/p&gt;</source>
+        <comment>Just translate &apos;Note:&apos; and leave the rest intact.</comment>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>CodeMetricsDialog</name>
     <message>
         <location filename="../DataViews/CodeMetricsDialog.ui" line="14"/>
@@ -4472,7 +4552,7 @@
         <translation>Plugin Manažer</translation>
     </message>
     <message>
-        <location filename="../Preferences/ConfigurationDialog.py" line="443"/>
+        <location filename="../Preferences/ConfigurationDialog.py" line="446"/>
         <source>Printer</source>
         <translation>Tiskárna</translation>
     </message>
@@ -4537,92 +4617,92 @@
         <translation>Rychlé tipy</translation>
     </message>
     <message>
-        <location filename="../Preferences/ConfigurationDialog.py" line="241"/>
+        <location filename="../Preferences/ConfigurationDialog.py" line="244"/>
         <source>General</source>
         <translation>Hlavní</translation>
     </message>
     <message>
-        <location filename="../Preferences/ConfigurationDialog.py" line="261"/>
-        <source>Typing</source>
-        <translation>Psaní</translation>
-    </message>
-    <message>
         <location filename="../Preferences/ConfigurationDialog.py" line="264"/>
+        <source>Typing</source>
+        <translation>Psaní</translation>
+    </message>
+    <message>
+        <location filename="../Preferences/ConfigurationDialog.py" line="267"/>
         <source>Exporters</source>
         <translation>Exportery</translation>
     </message>
     <message>
-        <location filename="../Preferences/ConfigurationDialog.py" line="268"/>
+        <location filename="../Preferences/ConfigurationDialog.py" line="271"/>
         <source>Highlighters</source>
         <translation>Zvýrazňovače</translation>
     </message>
     <message>
-        <location filename="../Preferences/ConfigurationDialog.py" line="272"/>
+        <location filename="../Preferences/ConfigurationDialog.py" line="275"/>
         <source>Filetype Associations</source>
         <translation>Asociace typů souborů</translation>
     </message>
     <message>
-        <location filename="../Preferences/ConfigurationDialog.py" line="276"/>
+        <location filename="../Preferences/ConfigurationDialog.py" line="279"/>
         <source>Styles</source>
         <translation>Styly</translation>
     </message>
     <message>
-        <location filename="../Preferences/ConfigurationDialog.py" line="292"/>
+        <location filename="../Preferences/ConfigurationDialog.py" line="295"/>
         <source>Help</source>
         <translation>Nápověda</translation>
     </message>
     <message>
-        <location filename="../Preferences/ConfigurationDialog.py" line="450"/>
+        <location filename="../Preferences/ConfigurationDialog.py" line="453"/>
         <source>Help Documentation</source>
         <translation>Dokumenty nápovědy</translation>
     </message>
     <message>
-        <location filename="../Preferences/ConfigurationDialog.py" line="299"/>
+        <location filename="../Preferences/ConfigurationDialog.py" line="302"/>
         <source>Help Viewers</source>
         <translation>Prohlížeče nápovědy</translation>
     </message>
     <message>
+        <location filename="../Preferences/ConfigurationDialog.py" line="313"/>
+        <source>Project</source>
+        <translation>Projekt</translation>
+    </message>
+    <message>
         <location filename="../Preferences/ConfigurationDialog.py" line="310"/>
-        <source>Project</source>
-        <translation>Projekt</translation>
-    </message>
-    <message>
-        <location filename="../Preferences/ConfigurationDialog.py" line="307"/>
         <source>Project Viewer</source>
         <translation>Prohlížeč projektu</translation>
     </message>
     <message>
-        <location filename="../Preferences/ConfigurationDialog.py" line="313"/>
+        <location filename="../Preferences/ConfigurationDialog.py" line="316"/>
         <source>Multiproject</source>
         <translation>Multiprojekt</translation>
     </message>
     <message>
-        <location filename="../Preferences/ConfigurationDialog.py" line="437"/>
+        <location filename="../Preferences/ConfigurationDialog.py" line="440"/>
         <source>Interface</source>
         <translation>Interface</translation>
     </message>
     <message>
-        <location filename="../Preferences/ConfigurationDialog.py" line="324"/>
+        <location filename="../Preferences/ConfigurationDialog.py" line="327"/>
         <source>Viewmanager</source>
         <translation>Viewmanager</translation>
     </message>
     <message>
-        <location filename="../Preferences/ConfigurationDialog.py" line="717"/>
+        <location filename="../Preferences/ConfigurationDialog.py" line="720"/>
         <source>Configuration Page Error</source>
         <translation>Chyba na straně konfigurace</translation>
     </message>
     <message>
-        <location filename="../Preferences/ConfigurationDialog.py" line="244"/>
+        <location filename="../Preferences/ConfigurationDialog.py" line="247"/>
         <source>Filehandling</source>
         <translation>Manažer souborů</translation>
     </message>
     <message>
-        <location filename="../Preferences/ConfigurationDialog.py" line="248"/>
+        <location filename="../Preferences/ConfigurationDialog.py" line="251"/>
         <source>Searching</source>
         <translation>Vyhledávání</translation>
     </message>
     <message>
-        <location filename="../Preferences/ConfigurationDialog.py" line="455"/>
+        <location filename="../Preferences/ConfigurationDialog.py" line="458"/>
         <source>Appearance</source>
         <translation>Vzhled</translation>
     </message>
@@ -4632,33 +4712,33 @@
         <translation>QScintilla</translation>
     </message>
     <message>
-        <location filename="../Preferences/ConfigurationDialog.py" line="255"/>
+        <location filename="../Preferences/ConfigurationDialog.py" line="258"/>
         <source>Style</source>
         <translation>Styl</translation>
     </message>
     <message>
-        <location filename="../Preferences/ConfigurationDialog.py" line="283"/>
+        <location filename="../Preferences/ConfigurationDialog.py" line="286"/>
         <source>Properties</source>
         <translation>Nastavení</translation>
     </message>
     <message>
-        <location filename="../Preferences/ConfigurationDialog.py" line="639"/>
+        <location filename="../Preferences/ConfigurationDialog.py" line="642"/>
         <source>Preferences</source>
         <translation>Předvolby</translation>
     </message>
     <message>
-        <location filename="../Preferences/ConfigurationDialog.py" line="644"/>
+        <location filename="../Preferences/ConfigurationDialog.py" line="647"/>
         <source>Please select an entry of the list 
 to display the configuration page.</source>
         <translation>Pro zobrazení strany s konfigurací vyberte položku ze seznamu.</translation>
     </message>
     <message>
-        <location filename="../Preferences/ConfigurationDialog.py" line="440"/>
+        <location filename="../Preferences/ConfigurationDialog.py" line="443"/>
         <source>Network</source>
         <translation>Síť</translation>
     </message>
     <message>
-        <location filename="../Preferences/ConfigurationDialog.py" line="471"/>
+        <location filename="../Preferences/ConfigurationDialog.py" line="474"/>
         <source>Spell checking</source>
         <translation>Kontrola pravopisu</translation>
     </message>
@@ -4668,12 +4748,12 @@
         <translation></translation>
     </message>
     <message>
-        <location filename="../Preferences/ConfigurationDialog.py" line="717"/>
+        <location filename="../Preferences/ConfigurationDialog.py" line="720"/>
         <source>&lt;p&gt;The configuration page &lt;b&gt;{0}&lt;/b&gt; could not be loaded.&lt;/p&gt;</source>
         <translation>&lt;p&gt;Konfigurační stranu &lt;b&gt;{0}&lt;/b&gt; nelze načíst.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Preferences/ConfigurationDialog.py" line="280"/>
+        <location filename="../Preferences/ConfigurationDialog.py" line="283"/>
         <source>Keywords</source>
         <translation>Klíčová slova</translation>
     </message>
@@ -4683,17 +4763,17 @@
         <translation>Spolupráce</translation>
     </message>
     <message>
-        <location filename="../Preferences/ConfigurationDialog.py" line="487"/>
+        <location filename="../Preferences/ConfigurationDialog.py" line="490"/>
         <source>Tray Starter</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Preferences/ConfigurationDialog.py" line="466"/>
+        <location filename="../Preferences/ConfigurationDialog.py" line="469"/>
         <source>VirusTotal Interface</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Preferences/ConfigurationDialog.py" line="446"/>
+        <location filename="../Preferences/ConfigurationDialog.py" line="449"/>
         <source>Security</source>
         <translation type="unfinished">Bezpečnost</translation>
     </message>
@@ -4708,12 +4788,12 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Preferences/ConfigurationDialog.py" line="258"/>
+        <location filename="../Preferences/ConfigurationDialog.py" line="261"/>
         <source>Code Checkers</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Preferences/ConfigurationDialog.py" line="458"/>
+        <location filename="../Preferences/ConfigurationDialog.py" line="461"/>
         <source>eric6 Web Browser</source>
         <translation type="unfinished">eric5 web prohlížeč {6 ?}</translation>
     </message>
@@ -4728,27 +4808,27 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Preferences/ConfigurationDialog.py" line="577"/>
+        <location filename="../Preferences/ConfigurationDialog.py" line="580"/>
         <source>Enter search text...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Preferences/ConfigurationDialog.py" line="287"/>
+        <location filename="../Preferences/ConfigurationDialog.py" line="290"/>
         <source>Mouse Click Handlers</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Preferences/ConfigurationDialog.py" line="462"/>
+        <location filename="../Preferences/ConfigurationDialog.py" line="465"/>
         <source>Flash Cookie Manager</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Preferences/ConfigurationDialog.py" line="500"/>
+        <location filename="../Preferences/ConfigurationDialog.py" line="503"/>
         <source>Hex Editor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Preferences/ConfigurationDialog.py" line="357"/>
+        <location filename="../Preferences/ConfigurationDialog.py" line="360"/>
         <source>Web Browser</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4757,6 +4837,11 @@
         <source>Diff</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../Preferences/ConfigurationDialog.py" line="241"/>
+        <source>Documentation Viewer</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>Connection</name>
@@ -5490,12 +5575,12 @@
         <translation>změněno</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugServer.py" line="744"/>
+        <location filename="../Debugger/DebugServer.py" line="746"/>
         <source>Connection from illegal host</source>
         <translation>Spojení z ilegálního hosta</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugServer.py" line="1364"/>
+        <location filename="../Debugger/DebugServer.py" line="1372"/>
         <source>
 Not connected
 </source>
@@ -5504,18 +5589,18 @@
 </translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugServer.py" line="744"/>
+        <location filename="../Debugger/DebugServer.py" line="746"/>
         <source>&lt;p&gt;A connection was attempted by the illegal host &lt;b&gt;{0}&lt;/b&gt;. Accept this connection?&lt;/p&gt;</source>
         <translation>&lt;p&gt;Pokus o spojení z ilegálního hosta &lt;b&gt;{0}&lt;/b&gt;. Přijmout toto spojení?&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugServer.py" line="1544"/>
+        <location filename="../Debugger/DebugServer.py" line="1552"/>
         <source>Passive debug connection received
 </source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugServer.py" line="1558"/>
+        <location filename="../Debugger/DebugServer.py" line="1566"/>
         <source>Passive debug connection closed
 </source>
         <translation type="unfinished"></translation>
@@ -5534,287 +5619,287 @@
 <context>
     <name>DebugUI</name>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="1808"/>
+        <location filename="../Debugger/DebugUI.py" line="1845"/>
         <source>Run Script</source>
         <translation>Spustit skript</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="173"/>
+        <location filename="../Debugger/DebugUI.py" line="175"/>
         <source>&amp;Run Script...</source>
         <translation>Spustit sk&amp;ript...</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="178"/>
+        <location filename="../Debugger/DebugUI.py" line="180"/>
         <source>Run the current Script</source>
         <translation>Spustit aktuální skript</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="179"/>
+        <location filename="../Debugger/DebugUI.py" line="181"/>
         <source>&lt;b&gt;Run Script&lt;/b&gt;&lt;p&gt;Set the command line arguments and run the script outside the debugger. If the file has unsaved changes it may be saved first.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Spustit skript&lt;/b&gt;&lt;p&gt;Nastavení parametrů příkazové řádky a spuštění skriptu bez debugeru. Pokud jsou v souboru neuložené změny, měly by se nejdříve uložit.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="1822"/>
+        <location filename="../Debugger/DebugUI.py" line="1860"/>
         <source>Run Project</source>
         <translation>Spustit projekt</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="188"/>
+        <location filename="../Debugger/DebugUI.py" line="190"/>
         <source>Run &amp;Project...</source>
         <translation>Spustit &amp;projekt...</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="193"/>
+        <location filename="../Debugger/DebugUI.py" line="195"/>
         <source>Run the current Project</source>
         <translation>Spustit aktuální projekt</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="194"/>
+        <location filename="../Debugger/DebugUI.py" line="196"/>
         <source>&lt;b&gt;Run Project&lt;/b&gt;&lt;p&gt;Set the command line arguments and run the current project outside the debugger. If files of the current project have unsaved changes they may be saved first.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Spustit projekt&lt;/b&gt;&lt;p&gt;Nastavení parametrů příkazové řádky a spuštění projektu bez debugeru. Pokud jsou v projektu neuložené změny, měly by se nejdříve uložit.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="204"/>
+        <location filename="../Debugger/DebugUI.py" line="206"/>
         <source>Coverage run of Script</source>
         <translation>Spustit skript s kontrolou pokrytí</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="204"/>
+        <location filename="../Debugger/DebugUI.py" line="206"/>
         <source>Coverage run of Script...</source>
         <translation>Spustit skript s kontrolou pokrytí...</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="209"/>
-        <source>Perform a coverage run of the current Script</source>
-        <translation>Provede se spuštění běhu aktuálního skriptu s kontrolou pokrytí kódu</translation>
-    </message>
-    <message>
         <location filename="../Debugger/DebugUI.py" line="211"/>
+        <source>Perform a coverage run of the current Script</source>
+        <translation>Provede se spuštění běhu aktuálního skriptu s kontrolou pokrytí kódu</translation>
+    </message>
+    <message>
+        <location filename="../Debugger/DebugUI.py" line="213"/>
         <source>&lt;b&gt;Coverage run of Script&lt;/b&gt;&lt;p&gt;Set the command line arguments and run the script under the control of a coverage analysis tool. If the file has unsaved changes it may be saved first.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Spustit skript s kontrolou pokrytí&lt;/b&gt;&lt;p&gt;Nastavení parametrů příkazové řádky a spuštění projektu pod kontrolou nástroje analýzy pokrytí kódu. Pokud jsou v souboru neuložené změny, měly by se nejdříve uložit.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="220"/>
+        <location filename="../Debugger/DebugUI.py" line="222"/>
         <source>Coverage run of Project</source>
         <translation>Spustit projekt s kontrolou pokrytí</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="220"/>
+        <location filename="../Debugger/DebugUI.py" line="222"/>
         <source>Coverage run of Project...</source>
         <translation>Spustit projekt s kontrolou pokrytí...</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="225"/>
-        <source>Perform a coverage run of the current Project</source>
-        <translation>Provede se spuštění běhu aktuálního projektu s kontrolou pokrytí kódu</translation>
-    </message>
-    <message>
         <location filename="../Debugger/DebugUI.py" line="227"/>
+        <source>Perform a coverage run of the current Project</source>
+        <translation>Provede se spuštění běhu aktuálního projektu s kontrolou pokrytí kódu</translation>
+    </message>
+    <message>
+        <location filename="../Debugger/DebugUI.py" line="229"/>
         <source>&lt;b&gt;Coverage run of Project&lt;/b&gt;&lt;p&gt;Set the command line arguments and run the current project under the control of a coverage analysis tool. If files of the current project have unsaved changes they may be saved first.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Spustit projekt s kontrolou pokrytí&lt;/b&gt;&lt;p&gt;Nastavení parametrů příkazové řádky a spuštění projektu pod kontrolou nástroje analýzy pokrytí kódu. Pokud jsou v projektu neuložené změny, měly by se nejdříve uložit.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="237"/>
+        <location filename="../Debugger/DebugUI.py" line="239"/>
         <source>Profile Script</source>
         <translation>Profilovat skript</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="237"/>
+        <location filename="../Debugger/DebugUI.py" line="239"/>
         <source>Profile Script...</source>
         <translation>Profilovat skript...</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="241"/>
+        <location filename="../Debugger/DebugUI.py" line="243"/>
         <source>Profile the current Script</source>
         <translation>Profilovat aktuální skript</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="242"/>
+        <location filename="../Debugger/DebugUI.py" line="244"/>
         <source>&lt;b&gt;Profile Script&lt;/b&gt;&lt;p&gt;Set the command line arguments and profile the script. If the file has unsaved changes it may be saved first.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Profilovat skript&lt;/b&gt;&lt;p&gt;Nastavení parametrů příkazové řádky a spuštění projektu s profilováním kódu. Pokud jsou ve skriptu neuložené změny, měly by se nejdříve uložit.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="250"/>
+        <location filename="../Debugger/DebugUI.py" line="252"/>
         <source>Profile Project</source>
         <translation>Profilovat projekt</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="250"/>
+        <location filename="../Debugger/DebugUI.py" line="252"/>
         <source>Profile Project...</source>
         <translation>Profilovat projekt...</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="255"/>
-        <source>Profile the current Project</source>
-        <translation>Profilovat aktuální projekt</translation>
-    </message>
-    <message>
         <location filename="../Debugger/DebugUI.py" line="257"/>
+        <source>Profile the current Project</source>
+        <translation>Profilovat aktuální projekt</translation>
+    </message>
+    <message>
+        <location filename="../Debugger/DebugUI.py" line="259"/>
         <source>&lt;b&gt;Profile Project&lt;/b&gt;&lt;p&gt;Set the command line arguments and profile the current project. If files of the current project have unsaved changes they may be saved first.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Profilovat projekt&lt;/b&gt;&lt;p&gt;Nastavení parametrů příkazové řádky a spuštění projektu s profilováním kódu. Pokud jsou v projektu neuložené změny, měly by se nejdříve uložit.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="1939"/>
+        <location filename="../Debugger/DebugUI.py" line="1981"/>
         <source>Debug Script</source>
         <translation>Debugovat skript</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="266"/>
+        <location filename="../Debugger/DebugUI.py" line="268"/>
         <source>&amp;Debug Script...</source>
         <translation>&amp;Debugovat skript...</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="271"/>
+        <location filename="../Debugger/DebugUI.py" line="273"/>
         <source>Debug the current Script</source>
         <translation>Debugovat aktuální skript</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="272"/>
+        <location filename="../Debugger/DebugUI.py" line="274"/>
         <source>&lt;b&gt;Debug Script&lt;/b&gt;&lt;p&gt;Set the command line arguments and set the current line to be the first executable Python statement of the current editor window. If the file has unsaved changes it may be saved first.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Debugovat skript&lt;/b&gt;&lt;p&gt;Nastavení parametrů příkazové řádky a aktuální řádky jako první python příkaz v aktuálním editačním okně. Pokud jsou ve skriptu neuložené změny, měly by se nejdříve uložit.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="1953"/>
+        <location filename="../Debugger/DebugUI.py" line="1997"/>
         <source>Debug Project</source>
         <translation>Debugovat projekt</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="282"/>
+        <location filename="../Debugger/DebugUI.py" line="284"/>
         <source>Debug &amp;Project...</source>
         <translation>Debugovat pro&amp;jekt...</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="287"/>
-        <source>Debug the current Project</source>
-        <translation>Debugovat aktuální projekt</translation>
-    </message>
-    <message>
         <location filename="../Debugger/DebugUI.py" line="289"/>
+        <source>Debug the current Project</source>
+        <translation>Debugovat aktuální projekt</translation>
+    </message>
+    <message>
+        <location filename="../Debugger/DebugUI.py" line="291"/>
         <source>&lt;b&gt;Debug Project&lt;/b&gt;&lt;p&gt;Set the command line arguments and set the current line to be the first executable Python statement of the main script of the current project. If files of the current project have unsaved changes they may be saved first.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Debugovat projekt&lt;/b&gt;&lt;p&gt;Nastavení parametrů příkazové řádky a nastavení aktuální řádky jako první python příkaz hlavního skriptu v aktuálním projektu. Pokud jsou v projektu neuložené změny, měly by se měly nejdříve uložit.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="303"/>
+        <location filename="../Debugger/DebugUI.py" line="305"/>
         <source>Restart the last debugged script</source>
         <translation>Restartovat posledně debugovaný skript</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="330"/>
+        <location filename="../Debugger/DebugUI.py" line="332"/>
         <source>Continue</source>
         <translation>Pokračovat</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="330"/>
+        <location filename="../Debugger/DebugUI.py" line="332"/>
         <source>&amp;Continue</source>
         <translation>&amp;Pokračovat</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="335"/>
-        <source>Continue running the program from the current line</source>
-        <translation>Pokračovat v běhu programu od aktuální řádky</translation>
-    </message>
-    <message>
         <location filename="../Debugger/DebugUI.py" line="337"/>
+        <source>Continue running the program from the current line</source>
+        <translation>Pokračovat v běhu programu od aktuální řádky</translation>
+    </message>
+    <message>
+        <location filename="../Debugger/DebugUI.py" line="339"/>
         <source>&lt;b&gt;Continue&lt;/b&gt;&lt;p&gt;Continue running the program from the current line. The program will stop when it terminates or when a breakpoint is reached.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Pokračovat&lt;/b&gt;&lt;p&gt;Pokračovat v běhu programu od aktuální řádky. Program se zastaví na nejbližším breakpointu nebo běží až do konce.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="346"/>
+        <location filename="../Debugger/DebugUI.py" line="348"/>
         <source>Continue to Cursor</source>
         <translation>Pokračovat až na kurzor</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="346"/>
+        <location filename="../Debugger/DebugUI.py" line="348"/>
         <source>Continue &amp;To Cursor</source>
         <translation>Pokračova&amp;t až na kurzor</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="351"/>
+        <location filename="../Debugger/DebugUI.py" line="353"/>
         <source>Continue running the program from the current line to the current cursor position</source>
         <translation>Pokračovat v běhu programu od aktuální řádky až na pozici kurzoru</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="354"/>
+        <location filename="../Debugger/DebugUI.py" line="356"/>
         <source>&lt;b&gt;Continue To Cursor&lt;/b&gt;&lt;p&gt;Continue running the program from the current line to the current cursor position.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Pokračovat až na kurzor&lt;/b&gt;&lt;p&gt;Běh programu pokračuje až na řádek, na kterém se nachází kurzor.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="382"/>
+        <location filename="../Debugger/DebugUI.py" line="384"/>
         <source>Single Step</source>
         <translation>Krok dovnitř</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="382"/>
+        <location filename="../Debugger/DebugUI.py" line="384"/>
         <source>Sin&amp;gle Step</source>
         <translation>&amp;Krok dovnitř</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="387"/>
+        <location filename="../Debugger/DebugUI.py" line="389"/>
         <source>Execute a single Python statement</source>
         <translation>Vykonat jen jeden python příkaz</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="388"/>
+        <location filename="../Debugger/DebugUI.py" line="390"/>
         <source>&lt;b&gt;Single Step&lt;/b&gt;&lt;p&gt;Execute a single Python statement. If the statement is an &lt;tt&gt;import&lt;/tt&gt; statement, a class constructor, or a method or function call then control is returned to the debugger at the next statement.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Krok dovnitř&lt;/b&gt;&lt;p&gt;Vykoná se jen jeden python příkaz. Pokud je příkaz &lt;tt&gt;import&lt;/tt&gt;, konstruktor třídy, metoda nebo funkce, tak debuger vstoupí dovnitř funkce a zastaví se na prvním příkazu v těle funkce.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="398"/>
+        <location filename="../Debugger/DebugUI.py" line="400"/>
         <source>Step Over</source>
         <translation>Krok přes</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="398"/>
+        <location filename="../Debugger/DebugUI.py" line="400"/>
         <source>Step &amp;Over</source>
         <translation>Kr&amp;ok přes</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="403"/>
+        <location filename="../Debugger/DebugUI.py" line="405"/>
         <source>Execute a single Python statement staying in the current frame</source>
         <translation>Vykonat jeden python příkaz ale nevstupovat do něj</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="406"/>
+        <location filename="../Debugger/DebugUI.py" line="408"/>
         <source>&lt;b&gt;Step Over&lt;/b&gt;&lt;p&gt;Execute a single Python statement staying in the same frame. If the statement is an &lt;tt&gt;import&lt;/tt&gt; statement, a class constructor, or a method or function call then control is returned to the debugger after the statement has completed.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Krok přes&lt;/b&gt;&lt;p&gt;Vykoná se jeden python příkaz. Pokud je příkaz &lt;tt&gt;import&lt;/tt&gt;, konstruktor třídy, metoda nebo funkce, tak debuger nevstupuje dovnitř funkce, ale vykoná ji celou a zastaví se až na následujícím příkazu.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="417"/>
+        <location filename="../Debugger/DebugUI.py" line="419"/>
         <source>Step Out</source>
         <translation>Krok ven</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="417"/>
+        <location filename="../Debugger/DebugUI.py" line="419"/>
         <source>Step Ou&amp;t</source>
         <translation>Krok &amp;ven</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="422"/>
+        <location filename="../Debugger/DebugUI.py" line="424"/>
         <source>Execute Python statements until leaving the current frame</source>
         <translation>Vykonávat python příkazy tak dlouho, dokud nedojde k opuštění těla kódu</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="425"/>
+        <location filename="../Debugger/DebugUI.py" line="427"/>
         <source>&lt;b&gt;Step Out&lt;/b&gt;&lt;p&gt;Execute Python statements until leaving the current frame. If the statements are inside an &lt;tt&gt;import&lt;/tt&gt; statement, a class constructor, or a method or function call then control is returned to the debugger after the current frame has been left.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Krok ven&lt;/b&gt;&lt;p&gt;Provádí se python příkazy tak dlouho, dokud nedojde k opuštění těla aktuálního bloku kódu. Pokud je příkaz &lt;tt&gt;import&lt;/tt&gt;, konstruktor třídy, metoda nebo funkce, tak debuger provádí příkazy tak dlouho, dokud z daného bloku nevystoupí. Zastaví se až na příkazu následujícím za daným blokem.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="436"/>
+        <location filename="../Debugger/DebugUI.py" line="438"/>
         <source>Stop</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="436"/>
+        <location filename="../Debugger/DebugUI.py" line="438"/>
         <source>&amp;Stop</source>
         <translation>&amp;Stop</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="441"/>
+        <location filename="../Debugger/DebugUI.py" line="443"/>
         <source>Stop debugging</source>
         <translation>Stop debugování</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="442"/>
+        <location filename="../Debugger/DebugUI.py" line="444"/>
         <source>&lt;b&gt;Stop&lt;/b&gt;&lt;p&gt;Stop the running debugging session.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Stop&lt;/b&gt;&lt;p&gt;Stop běhu aktuální debug relace.&lt;/p&gt;</translation>
     </message>
@@ -5854,190 +5939,190 @@
         <translation type="obsolete">&lt;b&gt;Execute&lt;/b&gt;&lt;p&gt;Vykonat jednu řádku kódu v aktuálním kontextu debugovaného programu.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="449"/>
+        <location filename="../Debugger/DebugUI.py" line="451"/>
         <source>Variables Type Filter</source>
         <translation>Filtr typů proměnných</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="449"/>
+        <location filename="../Debugger/DebugUI.py" line="451"/>
         <source>Varia&amp;bles Type Filter...</source>
         <translation>&amp;Filtr typů proměnných...</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="453"/>
-        <source>Configure variables type filter</source>
-        <translation>Nastavit filtr typů proměnných</translation>
-    </message>
-    <message>
         <location filename="../Debugger/DebugUI.py" line="455"/>
+        <source>Configure variables type filter</source>
+        <translation>Nastavit filtr typů proměnných</translation>
+    </message>
+    <message>
+        <location filename="../Debugger/DebugUI.py" line="457"/>
         <source>&lt;b&gt;Variables Type Filter&lt;/b&gt;&lt;p&gt;Configure the variables type filter. Only variable types that are not selected are displayed in the global or local variables window during a debugging session.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Filtr typů proměnných&lt;/b&gt;&lt;p&gt;Nastavení filtru typů proměnných. Během debugování jsou v okně globálních nebo lokálních proměnných zobrazovány jen ty typy proměnných, které nebyly vybrány.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="465"/>
+        <location filename="../Debugger/DebugUI.py" line="467"/>
         <source>Exceptions Filter</source>
         <translation>Filtr výjimek</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="465"/>
+        <location filename="../Debugger/DebugUI.py" line="467"/>
         <source>&amp;Exceptions Filter...</source>
         <translation>Filtr výjim&amp;ek...</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="469"/>
-        <source>Configure exceptions filter</source>
-        <translation>Konfigurace filtru výjimek</translation>
-    </message>
-    <message>
         <location filename="../Debugger/DebugUI.py" line="471"/>
+        <source>Configure exceptions filter</source>
+        <translation>Konfigurace filtru výjimek</translation>
+    </message>
+    <message>
+        <location filename="../Debugger/DebugUI.py" line="473"/>
         <source>&lt;b&gt;Exceptions Filter&lt;/b&gt;&lt;p&gt;Configure the exceptions filter. Only exception types that are listed are highlighted during a debugging session.&lt;/p&gt;&lt;p&gt;Please note, that all unhandled exceptions are highlighted indepent from the filter list.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Filtr výjimek&lt;/b&gt;&lt;p&gt;Nastavení filtru výjimek. Během debugování jsou zvýrazněny jen ty výjimky, které jsou uvedeny v seznamu.&lt;/p&gt;&lt;p&gt;Všimněte si, že neošetřené výjimky jsou zvýrazněny nezávisle na seznamu filtru.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="507"/>
+        <location filename="../Debugger/DebugUI.py" line="509"/>
         <source>Toggle Breakpoint</source>
         <translation>Přepnout breakpoint</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="508"/>
+        <location filename="../Debugger/DebugUI.py" line="510"/>
         <source>&lt;b&gt;Toggle Breakpoint&lt;/b&gt;&lt;p&gt;Toggles a breakpoint at the current line of the current editor.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Přepnout breakpoint&lt;/b&gt;&lt;p&gt;Zapíná/vypíná breakpoint na aktuální řádce v aktuálním editoru.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="522"/>
+        <location filename="../Debugger/DebugUI.py" line="524"/>
         <source>Edit Breakpoint</source>
         <translation>Editovat breakpoint</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="516"/>
+        <location filename="../Debugger/DebugUI.py" line="518"/>
         <source>Edit Breakpoint...</source>
         <translation>Editovat breakpoint...</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="523"/>
+        <location filename="../Debugger/DebugUI.py" line="525"/>
         <source>&lt;b&gt;Edit Breakpoint&lt;/b&gt;&lt;p&gt;Opens a dialog to edit the breakpoints properties. It works at the current line of the current editor.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Editovat breakpoint&lt;/b&gt;&lt;p&gt;Otevře dialog s editací vlastností breakpointů. Zpracovává aktuální řádku v aktuálním editoru.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="538"/>
+        <location filename="../Debugger/DebugUI.py" line="540"/>
         <source>Next Breakpoint</source>
         <translation>Následující breakpoint</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="531"/>
+        <location filename="../Debugger/DebugUI.py" line="533"/>
         <source>Ctrl+Shift+PgDown</source>
         <comment>Debug|Next Breakpoint</comment>
         <translation></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="539"/>
+        <location filename="../Debugger/DebugUI.py" line="541"/>
         <source>&lt;b&gt;Next Breakpoint&lt;/b&gt;&lt;p&gt;Go to next breakpoint of the current editor.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Následující breakpoint&lt;/b&gt;&lt;p&gt;Jít na následující breakpoint v aktuálním editoru.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="553"/>
+        <location filename="../Debugger/DebugUI.py" line="555"/>
         <source>Previous Breakpoint</source>
         <translation>Předchozí breakpoint</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="546"/>
+        <location filename="../Debugger/DebugUI.py" line="548"/>
         <source>Ctrl+Shift+PgUp</source>
         <comment>Debug|Previous Breakpoint</comment>
         <translation></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="554"/>
+        <location filename="../Debugger/DebugUI.py" line="556"/>
         <source>&lt;b&gt;Previous Breakpoint&lt;/b&gt;&lt;p&gt;Go to previous breakpoint of the current editor.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Předchozí breakpoint&lt;/b&gt;&lt;p&gt;Jít na předchozí brakpoint v aktuálním editoru.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="567"/>
+        <location filename="../Debugger/DebugUI.py" line="569"/>
         <source>Clear Breakpoints</source>
         <translation>Zrušit breakpointy</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="561"/>
+        <location filename="../Debugger/DebugUI.py" line="563"/>
         <source>Ctrl+Shift+C</source>
         <comment>Debug|Clear Breakpoints</comment>
         <translation></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="568"/>
+        <location filename="../Debugger/DebugUI.py" line="570"/>
         <source>&lt;b&gt;Clear Breakpoints&lt;/b&gt;&lt;p&gt;Clear breakpoints of all editors.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Zrušit breakpointy&lt;/b&gt;&lt;p&gt;Zrušení breakpointů ve všech editorech.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="594"/>
-        <source>&amp;Debug</source>
-        <translation>&amp;Debugování</translation>
-    </message>
-    <message>
         <location filename="../Debugger/DebugUI.py" line="596"/>
-        <source>&amp;Start</source>
-        <translation>&amp;Start</translation>
+        <source>&amp;Debug</source>
+        <translation>&amp;Debugování</translation>
     </message>
     <message>
         <location filename="../Debugger/DebugUI.py" line="598"/>
+        <source>&amp;Start</source>
+        <translation>&amp;Start</translation>
+    </message>
+    <message>
+        <location filename="../Debugger/DebugUI.py" line="600"/>
         <source>&amp;Breakpoints</source>
         <translation>&amp;Breakpointy</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="641"/>
+        <location filename="../Debugger/DebugUI.py" line="643"/>
         <source>Start</source>
         <translation>Start</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="655"/>
+        <location filename="../Debugger/DebugUI.py" line="657"/>
         <source>Debug</source>
         <translation>Debug</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="1093"/>
+        <location filename="../Debugger/DebugUI.py" line="1120"/>
         <source>The program being debugged contains an unspecified syntax error.</source>
         <translation>Program, který je právě debugován, obsahuje nespecifikovanou syntaktickou chybu.</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="1130"/>
+        <location filename="../Debugger/DebugUI.py" line="1157"/>
         <source>An unhandled exception occured. See the shell window for details.</source>
         <translation>Objevila se neošetřená výjimka. Detaily naleznete v shell okně.</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="1255"/>
+        <location filename="../Debugger/DebugUI.py" line="1282"/>
         <source>The program being debugged has terminated unexpectedly.</source>
         <translation>Debugovaný program byl neočekávaně ukončen.</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="1324"/>
+        <location filename="../Debugger/DebugUI.py" line="1351"/>
         <source>Breakpoint Condition Error</source>
         <translation>Chyba v podmíněném breakpointu</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="1564"/>
+        <location filename="../Debugger/DebugUI.py" line="1592"/>
         <source>Coverage of Project</source>
         <translation>Pokrytí projektu</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="1552"/>
+        <location filename="../Debugger/DebugUI.py" line="1579"/>
         <source>Coverage of Script</source>
         <translation>Pokrytí skriptu</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="1822"/>
+        <location filename="../Debugger/DebugUI.py" line="1860"/>
         <source>There is no main script defined for the current project. Aborting</source>
         <translation>V aktuálním projektu není definován hlavní skript. Zrušeno</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="1692"/>
+        <location filename="../Debugger/DebugUI.py" line="1725"/>
         <source>Profile of Project</source>
         <translation>Profilovat projekt</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="1680"/>
+        <location filename="../Debugger/DebugUI.py" line="1712"/>
         <source>Profile of Script</source>
         <translation>Profilovat skript</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="1953"/>
+        <location filename="../Debugger/DebugUI.py" line="1997"/>
         <source>There is no main script defined for the current project. No debugging possible.</source>
         <translation>V aktuálním projektu není definován hlavní skript. Debugování není možné.</translation>
     </message>
@@ -6052,7 +6137,7 @@
         <translation type="obsolete">Zadejte příkaz pro vykonání</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="320"/>
+        <location filename="../Debugger/DebugUI.py" line="322"/>
         <source>Stop the running script.</source>
         <translation>Zastavit běžící skript.</translation>
     </message>
@@ -6062,43 +6147,43 @@
         <translation type="obsolete">&lt;b&gt;Vyhodnotit&lt;/b&gt;&lt;p&gt;Vyhodnotit výraz aktuálního kontextu debugovaného programu. Výsledek je zobrazen v shell okně.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="1360"/>
+        <location filename="../Debugger/DebugUI.py" line="1387"/>
         <source>Watch Expression Error</source>
         <translation>Chyba sledovacího bodu</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="1400"/>
+        <location filename="../Debugger/DebugUI.py" line="1427"/>
         <source>Watch expression already exists</source>
         <translation>Sledovací bod již existuje</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="482"/>
+        <location filename="../Debugger/DebugUI.py" line="484"/>
         <source>Ignored Exceptions</source>
         <translation>Ignorované výjimky</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="482"/>
+        <location filename="../Debugger/DebugUI.py" line="484"/>
         <source>&amp;Ignored Exceptions...</source>
         <translation>&amp;Ignorované výjimky...</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="486"/>
-        <source>Configure ignored exceptions</source>
-        <translation>Konfigurovat ignorované výjimky</translation>
-    </message>
-    <message>
         <location filename="../Debugger/DebugUI.py" line="488"/>
+        <source>Configure ignored exceptions</source>
+        <translation>Konfigurovat ignorované výjimky</translation>
+    </message>
+    <message>
+        <location filename="../Debugger/DebugUI.py" line="490"/>
         <source>&lt;b&gt;Ignored Exceptions&lt;/b&gt;&lt;p&gt;Configure the ignored exceptions. Only exception types that are not listed are highlighted during a debugging session.&lt;/p&gt;&lt;p&gt;Please note, that unhandled exceptions cannot be ignored.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Ignorované výjimky&lt;/b&gt;&lt;p&gt;Seznam ignorovaných výjimek. Během debugování jsou zvýrazněny jen ty typy výjimek, které nejsou uvedeny v tomto seznamu.&lt;/p&gt;&lt;p&gt;Všimněte si prosím, že výjimky typu unhalted nelze ignorovat.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="501"/>
+        <location filename="../Debugger/DebugUI.py" line="503"/>
         <source>Shift+F11</source>
         <comment>Debug|Toggle Breakpoint</comment>
         <translation></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="516"/>
+        <location filename="../Debugger/DebugUI.py" line="518"/>
         <source>Shift+F12</source>
         <comment>Debug|Edit Breakpoint</comment>
         <translation></translation>
@@ -6114,128 +6199,128 @@
         <translation type="obsolete">&lt;p&gt;&lt;b&gt;{0}&lt;/b&gt; byl ukončen s exit statusem {1}.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="1112"/>
+        <location filename="../Debugger/DebugUI.py" line="1139"/>
         <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; contains the syntax error &lt;b&gt;{1}&lt;/b&gt; at line &lt;b&gt;{2}&lt;/b&gt;, character &lt;b&gt;{3}&lt;/b&gt;.&lt;/p&gt;</source>
         <translation>&lt;p&gt;Soubor &lt;b&gt;{0}&lt;/b&gt; na řádce &lt;b&gt;{1}&lt;/b&gt;, písmeno &lt;b&gt;{2}&lt;/b&gt;, obsahuje syntaktickou chybu &lt;b&gt;{3}&lt;/b&gt;.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="1177"/>
+        <location filename="../Debugger/DebugUI.py" line="1204"/>
         <source>&lt;p&gt;The debugged program raised the exception &lt;b&gt;{0}&lt;/b&gt;&lt;br&gt;&quot;&lt;b&gt;{1}&lt;/b&gt;&quot;&lt;br&gt;File: &lt;b&gt;{2}&lt;/b&gt;, Line: &lt;b&gt;{3}&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Break here?&lt;/p&gt;</source>
         <translation>&lt;p&gt;Debugovaný program vyvolal výjimku  &lt;b&gt;{0}&lt;/b&gt;&lt;br&gt;&quot;&lt;b&gt;{1}&lt;/b&gt;&quot;&lt;br&gt;Soubor: &lt;b&gt;{2}&lt;/b&gt;, řádek: &lt;b&gt;{3}&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Zastavit zde?&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="1192"/>
+        <location filename="../Debugger/DebugUI.py" line="1219"/>
         <source>&lt;p&gt;The debugged program raised the exception &lt;b&gt;{0}&lt;/b&gt;&lt;br&gt;&quot;&lt;b&gt;{1}&lt;/b&gt;&quot;&lt;/p&gt;</source>
         <translation>&lt;p&gt;Debugovaný program vyvolal výjimku  &lt;b&gt;{0}&lt;/b&gt;&lt;br&gt;&quot;&lt;b&gt;{1}&lt;/b&gt;&quot;&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="1324"/>
+        <location filename="../Debugger/DebugUI.py" line="1351"/>
         <source>&lt;p&gt;The condition of the breakpoint &lt;b&gt;{0}, {1}&lt;/b&gt; contains a syntax error.&lt;/p&gt;</source>
         <translation>&lt;p&gt;Podmínka breakpointu &lt;b&gt;{0}, {1}&lt;/b&gt; obsahuje syntaktickou chybu.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="1360"/>
+        <location filename="../Debugger/DebugUI.py" line="1387"/>
         <source>&lt;p&gt;The watch expression &lt;b&gt;{0}&lt;/b&gt; contains a syntax error.&lt;/p&gt;</source>
         <translation>&lt;p&gt;Sledovací bod &lt;b&gt;{0}&lt;/b&gt; obsahuje syntaktickou chybu.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="1390"/>
+        <location filename="../Debugger/DebugUI.py" line="1417"/>
         <source>&lt;p&gt;A watch expression &apos;&lt;b&gt;{0}&lt;/b&gt;&apos; already exists.&lt;/p&gt;</source>
         <translation>&lt;p&gt;Sledovací bod &apos;&lt;b&gt;{0}&lt;/b&gt;&apos; již existuje.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="1394"/>
+        <location filename="../Debugger/DebugUI.py" line="1421"/>
         <source>&lt;p&gt;A watch expression &apos;&lt;b&gt;{0}&lt;/b&gt;&apos; for the variable &lt;b&gt;{1}&lt;/b&gt; already exists.&lt;/p&gt;</source>
         <translation>&lt;p&gt;Sledovací bod &apos;&lt;b&gt;{0}&lt;/b&gt;&apos; pro proměnnou &lt;b&gt;{1}&lt;/b&gt; již existuje.&lt;/p&gt;</translation>
     </message>
     <message>
+        <location filename="../Debugger/DebugUI.py" line="1089"/>
+        <source>Program terminated</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Debugger/DebugUI.py" line="301"/>
+        <source>Restart</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Debugger/DebugUI.py" line="307"/>
+        <source>&lt;b&gt;Restart&lt;/b&gt;&lt;p&gt;Set the command line arguments and set the current line to be the first executable Python statement of the script that was debugged last. If there are unsaved changes, they may be saved first.&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Debugger/DebugUI.py" line="323"/>
+        <source>&lt;b&gt;Stop&lt;/b&gt;&lt;p&gt;This stops the script running in the debugger backend.&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Debugger/DebugUI.py" line="1268"/>
+        <source>&lt;p&gt;The program generate the signal &quot;{0}&quot;.&lt;br/&gt;File: &lt;b&gt;{1}&lt;/b&gt;, Line: &lt;b&gt;{2}&lt;/b&gt;&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Debugger/DebugUI.py" line="1056"/>
+        <source>&lt;p&gt;Message: {0}&lt;/p&gt;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
         <location filename="../Debugger/DebugUI.py" line="1062"/>
-        <source>Program terminated</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../Debugger/DebugUI.py" line="299"/>
-        <source>Restart</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../Debugger/DebugUI.py" line="305"/>
-        <source>&lt;b&gt;Restart&lt;/b&gt;&lt;p&gt;Set the command line arguments and set the current line to be the first executable Python statement of the script that was debugged last. If there are unsaved changes, they may be saved first.&lt;/p&gt;</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../Debugger/DebugUI.py" line="321"/>
-        <source>&lt;b&gt;Stop&lt;/b&gt;&lt;p&gt;This stops the script running in the debugger backend.&lt;/p&gt;</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../Debugger/DebugUI.py" line="1241"/>
-        <source>&lt;p&gt;The program generate the signal &quot;{0}&quot;.&lt;br/&gt;File: &lt;b&gt;{1}&lt;/b&gt;, Line: &lt;b&gt;{2}&lt;/b&gt;&lt;/p&gt;</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../Debugger/DebugUI.py" line="1029"/>
-        <source>&lt;p&gt;Message: {0}&lt;/p&gt;</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../Debugger/DebugUI.py" line="1035"/>
         <source>&lt;p&gt;The program has terminated with an exit status of {0}.&lt;/p&gt;{1}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="1040"/>
-        <source>&lt;p&gt;&lt;b&gt;{0}&lt;/b&gt; has terminated with an exit status of {1}.&lt;/p&gt;{2}</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../Debugger/DebugUI.py" line="1048"/>
-        <source>Message: {0}</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../Debugger/DebugUI.py" line="1055"/>
-        <source>The program has terminated with an exit status of {0}.
-{1}</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../Debugger/DebugUI.py" line="1058"/>
-        <source>&quot;{0}&quot; has terminated with an exit status of {1}.
-{2}</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <location filename="../Debugger/DebugUI.py" line="1067"/>
+        <source>&lt;p&gt;&lt;b&gt;{0}&lt;/b&gt; has terminated with an exit status of {1}.&lt;/p&gt;{2}</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Debugger/DebugUI.py" line="1075"/>
+        <source>Message: {0}</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Debugger/DebugUI.py" line="1082"/>
+        <source>The program has terminated with an exit status of {0}.
+{1}</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Debugger/DebugUI.py" line="1085"/>
+        <source>&quot;{0}&quot; has terminated with an exit status of {1}.
+{2}</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Debugger/DebugUI.py" line="1094"/>
         <source>The program has terminated with an exit status of {0}.
 {1}
 </source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="1071"/>
+        <location filename="../Debugger/DebugUI.py" line="1098"/>
         <source>&quot;{0}&quot; has terminated with an exit status of {1}.
 {2}
 </source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="362"/>
+        <location filename="../Debugger/DebugUI.py" line="364"/>
         <source>Move Instruction Pointer to Cursor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="362"/>
+        <location filename="../Debugger/DebugUI.py" line="364"/>
         <source>&amp;Jump To Cursor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="367"/>
+        <location filename="../Debugger/DebugUI.py" line="369"/>
         <source>Skip the code from the current line to the current cursor position</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="370"/>
+        <location filename="../Debugger/DebugUI.py" line="372"/>
         <source>&lt;b&gt;Move Instruction Pointer to Cursor&lt;/b&gt;&lt;p&gt;Move the Python internal instruction pointer to the current cursor position without executing the code in between.&lt;/p&gt;&lt;p&gt;It&apos;s not possible to jump out of a function or jump in a code block, e.g. a loop. In these cases, a error message is printed to the log window.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
@@ -6689,27 +6774,27 @@
 <context>
     <name>DebuggerInterfacePython</name>
     <message>
-        <location filename="../Debugger/DebuggerInterfacePython.py" line="370"/>
+        <location filename="../Debugger/DebuggerInterfacePython.py" line="376"/>
         <source>Start Debugger</source>
         <translation type="unfinished">Spustit debuger</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebuggerInterfacePython.py" line="844"/>
+        <location filename="../Debugger/DebuggerInterfacePython.py" line="850"/>
         <source>Parent Process</source>
         <translation type="unfinished">Rodičovský proces</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebuggerInterfacePython.py" line="845"/>
+        <location filename="../Debugger/DebuggerInterfacePython.py" line="851"/>
         <source>Child process</source>
         <translation type="unfinished">Dětský proces</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebuggerInterfacePython.py" line="846"/>
+        <location filename="../Debugger/DebuggerInterfacePython.py" line="852"/>
         <source>Client forking</source>
         <translation type="unfinished">Větvení klienta</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebuggerInterfacePython.py" line="846"/>
+        <location filename="../Debugger/DebuggerInterfacePython.py" line="852"/>
         <source>Select the fork branch to follow.</source>
         <translation type="unfinished">Pokračovat ve fork větvi.</translation>
     </message>
@@ -6719,22 +6804,22 @@
         <translation type="obsolete">&lt;p&gt;Python2 interpreter není nakonfigurován.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebuggerInterfacePython.py" line="152"/>
+        <location filename="../Debugger/DebuggerInterfacePython.py" line="155"/>
         <source>&lt;p&gt;No {0} interpreter configured.&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebuggerInterfacePython.py" line="370"/>
+        <location filename="../Debugger/DebuggerInterfacePython.py" line="376"/>
         <source>&lt;p&gt;The debugger backend could not be started.&lt;/p&gt;</source>
         <translation type="unfinished">&lt;p&gt;Debugovací backend nelze spustit.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebuggerInterfacePython.py" line="891"/>
+        <location filename="../Debugger/DebuggerInterfacePython.py" line="897"/>
         <source>Debug Protocol Error</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebuggerInterfacePython.py" line="891"/>
+        <location filename="../Debugger/DebuggerInterfacePython.py" line="897"/>
         <source>&lt;p&gt;The response received from the debugger backend could not be decoded. Please report this issue with the received data to the eric bugs email address.&lt;/p&gt;&lt;p&gt;Error: {0}&lt;/p&gt;&lt;p&gt;Data:&lt;br/&gt;{0}&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
@@ -7864,123 +7949,128 @@
 <context>
     <name>DownloadItem</name>
     <message>
-        <location filename="../WebBrowser/Download/DownloadItem.ui" line="26"/>
+        <location filename="../WebBrowser/Download/DownloadItem.ui" line="38"/>
         <source>Icon</source>
         <translation type="unfinished">Ikona</translation>
     </message>
     <message>
-        <location filename="../WebBrowser/Download/DownloadItem.ui" line="41"/>
+        <location filename="../WebBrowser/Download/DownloadItem.ui" line="66"/>
         <source>Filename</source>
         <translation type="unfinished">Jméno souboru</translation>
     </message>
     <message>
-        <location filename="../Helpviewer/Download/DownloadItem.ui" line="78"/>
+        <location filename="../Helpviewer/Download/DownloadItem.ui" line="103"/>
         <source>Press to repeat the download</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../WebBrowser/Download/DownloadItem.ui" line="78"/>
+        <location filename="../WebBrowser/Download/DownloadItem.ui" line="103"/>
         <source>Press to cancel the download</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../WebBrowser/Download/DownloadItem.ui" line="88"/>
+        <location filename="../WebBrowser/Download/DownloadItem.ui" line="113"/>
         <source>Press to open the downloaded file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../WebBrowser/Download/DownloadItem.py" line="257"/>
+        <location filename="../WebBrowser/Download/DownloadItem.py" line="261"/>
         <source>Download canceled: {0}</source>
         <translation type="unfinished">Download zrušen: {0}</translation>
     </message>
     <message>
-        <location filename="../WebBrowser/Download/DownloadItem.py" line="203"/>
+        <location filename="../WebBrowser/Download/DownloadItem.py" line="207"/>
         <source>Save File</source>
         <translation type="unfinished">Uložit soubor</translation>
     </message>
     <message>
-        <location filename="../WebBrowser/Download/DownloadItem.py" line="285"/>
+        <location filename="../WebBrowser/Download/DownloadItem.py" line="290"/>
         <source>Download directory ({0}) couldn&apos;t be created.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Helpviewer/Download/DownloadItem.py" line="421"/>
+        <location filename="../Helpviewer/Download/DownloadItem.py" line="428"/>
         <source>Error opening save file: {0}</source>
         <translation type="unfinished">Chyba při otvírání uloženého souboru: {0}</translation>
     </message>
     <message>
-        <location filename="../Helpviewer/Download/DownloadItem.py" line="434"/>
+        <location filename="../Helpviewer/Download/DownloadItem.py" line="441"/>
         <source>Error saving: {0}</source>
         <translation type="unfinished">Chyba při ukládání: {0}</translation>
     </message>
     <message>
-        <location filename="../Helpviewer/Download/DownloadItem.py" line="447"/>
+        <location filename="../Helpviewer/Download/DownloadItem.py" line="454"/>
         <source>Network Error: {0}</source>
         <translation type="unfinished">Chyba sítě: {0}</translation>
     </message>
     <message>
-        <location filename="../WebBrowser/Download/DownloadItem.py" line="458"/>
+        <location filename="../WebBrowser/Download/DownloadItem.py" line="465"/>
         <source>?</source>
         <translation type="unfinished">?</translation>
     </message>
     <message>
-        <location filename="../WebBrowser/Download/DownloadItem.py" line="469"/>
+        <location filename="../WebBrowser/Download/DownloadItem.py" line="476"/>
         <source>{0} of {1} - Stopped</source>
         <translation type="unfinished">{0} z {1} - zastaveno</translation>
     </message>
     <message>
-        <location filename="../WebBrowser/Download/DownloadItem.py" line="188"/>
+        <location filename="../WebBrowser/Download/DownloadItem.py" line="192"/>
         <source>VirusTotal scan scheduled: {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Helpviewer/Download/DownloadItem.ui" line="88"/>
+        <location filename="../Helpviewer/Download/DownloadItem.ui" line="113"/>
         <source>Press to pause the download</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../WebBrowser/Download/DownloadItem.py" line="457"/>
+        <location filename="../WebBrowser/Download/DownloadItem.py" line="464"/>
         <source>{0} of {1} ({2}/sec)
 {3}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Helpviewer/Download/DownloadItem.py" line="573"/>
+        <location filename="../Helpviewer/Download/DownloadItem.py" line="580"/>
         <source>{0} downloaded
 SHA1: {1}
 MD5: {2}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../WebBrowser/Download/DownloadItem.py" line="466"/>
+        <location filename="../WebBrowser/Download/DownloadItem.py" line="473"/>
         <source>{0} downloaded</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../WebBrowser/Download/DownloadItem.py" line="214"/>
+        <location filename="../WebBrowser/Download/DownloadItem.py" line="218"/>
         <source>Web Archive (*.mhtml *.mht)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../WebBrowser/Download/DownloadItem.py" line="215"/>
+        <location filename="../WebBrowser/Download/DownloadItem.py" line="219"/>
         <source>HTML File (*.html *.htm)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../WebBrowser/Download/DownloadItem.py" line="216"/>
+        <location filename="../WebBrowser/Download/DownloadItem.py" line="220"/>
         <source>HTML File with all resources (*.html *.htm)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../WebBrowser/Download/DownloadItem.py" line="226"/>
+        <location filename="../WebBrowser/Download/DownloadItem.py" line="230"/>
         <source>Save Web Page</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../WebBrowser/Download/DownloadItem.ui" line="47"/>
+        <source>Date and Time</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>DownloadManager</name>
     <message>
-        <location filename="../WebBrowser/Download/DownloadManager.py" line="383"/>
+        <location filename="../WebBrowser/Download/DownloadManager.py" line="395"/>
         <source>Downloads</source>
         <translation type="unfinished"></translation>
     </message>
@@ -7995,7 +8085,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message numerus="yes">
-        <location filename="../WebBrowser/Download/DownloadManager.py" line="372"/>
+        <location filename="../WebBrowser/Download/DownloadManager.py" line="384"/>
         <source>%n Download(s)</source>
         <translation type="unfinished">
             <numerusform></numerusform>
@@ -8004,7 +8094,7 @@
         </translation>
     </message>
     <message numerus="yes">
-        <location filename="../WebBrowser/Download/DownloadManager.py" line="151"/>
+        <location filename="../WebBrowser/Download/DownloadManager.py" line="153"/>
         <source>There are %n downloads in progress.
 Do you want to quit anyway?</source>
         <translation type="unfinished">
@@ -8019,47 +8109,47 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Helpviewer/Download/DownloadManager.py" line="91"/>
+        <location filename="../Helpviewer/Download/DownloadManager.py" line="93"/>
         <source>Retry</source>
         <translation type="unfinished">Vrátit</translation>
     </message>
     <message>
-        <location filename="../WebBrowser/Download/DownloadManager.py" line="91"/>
+        <location filename="../WebBrowser/Download/DownloadManager.py" line="93"/>
         <source>Open</source>
         <translation type="unfinished">Otevřít</translation>
     </message>
     <message>
-        <location filename="../WebBrowser/Download/DownloadManager.py" line="95"/>
+        <location filename="../WebBrowser/Download/DownloadManager.py" line="97"/>
         <source>Cancel</source>
         <translation type="unfinished">Zrušit</translation>
     </message>
     <message>
-        <location filename="../WebBrowser/Download/DownloadManager.py" line="99"/>
+        <location filename="../WebBrowser/Download/DownloadManager.py" line="101"/>
         <source>Open Containing Folder</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../WebBrowser/Download/DownloadManager.py" line="103"/>
+        <location filename="../WebBrowser/Download/DownloadManager.py" line="105"/>
         <source>Go to Download Page</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../WebBrowser/Download/DownloadManager.py" line="106"/>
+        <location filename="../WebBrowser/Download/DownloadManager.py" line="108"/>
         <source>Copy Download Link</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../WebBrowser/Download/DownloadManager.py" line="110"/>
+        <location filename="../WebBrowser/Download/DownloadManager.py" line="112"/>
         <source>Select All</source>
         <translation type="unfinished">Vybrat vše</translation>
     </message>
     <message>
-        <location filename="../WebBrowser/Download/DownloadManager.py" line="117"/>
+        <location filename="../WebBrowser/Download/DownloadManager.py" line="119"/>
         <source>Remove From List</source>
         <translation type="unfinished"></translation>
     </message>
     <message numerus="yes">
-        <location filename="../WebBrowser/Download/DownloadManager.py" line="380"/>
+        <location filename="../WebBrowser/Download/DownloadManager.py" line="392"/>
         <source>Downloading %n file(s)</source>
         <translation type="unfinished">
             <numerusform></numerusform>
@@ -8068,12 +8158,12 @@
         </translation>
     </message>
     <message>
-        <location filename="../WebBrowser/Download/DownloadManager.py" line="180"/>
+        <location filename="../WebBrowser/Download/DownloadManager.py" line="182"/>
         <source>Suspicuous URL detected</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../WebBrowser/Download/DownloadManager.py" line="180"/>
+        <location filename="../WebBrowser/Download/DownloadManager.py" line="182"/>
         <source>&lt;p&gt;The URL &lt;b&gt;{0}&lt;/b&gt; was found in the Safe Browsing database.&lt;/p&gt;{1}</source>
         <translation type="unfinished"></translation>
     </message>
@@ -9231,22 +9321,22 @@
         <translation type="unfinished">Celé slovo</translation>
     </message>
     <message>
-        <location filename="../E5Gui/E5TextEditSearchWidget.ui" line="75"/>
+        <location filename="../E5Gui/E5TextEditSearchWidget.ui" line="80"/>
         <source>Press to find the previous occurrence</source>
         <translation type="unfinished">Stisknout pro vyhledání předchozího výskytu</translation>
     </message>
     <message>
-        <location filename="../E5Gui/E5TextEditSearchWidget.ui" line="82"/>
+        <location filename="../E5Gui/E5TextEditSearchWidget.ui" line="87"/>
         <source>Press to find the next occurrence</source>
         <translation type="unfinished">Stisknout pro vyhledání následujícího výskytu</translation>
     </message>
     <message>
         <location filename="../E5Gui/E5TextEditSearchWidget.py" line="140"/>
         <source>Find</source>
-        <translation type="unfinished">Hledat</translation>
-    </message>
-    <message>
-        <location filename="../E5Gui/E5TextEditSearchWidget.py" line="140"/>
+        <translation type="obsolete">Hledat</translation>
+    </message>
+    <message>
+        <location filename="../E5Gui/E5TextEditSearchWidget.py" line="242"/>
         <source>&apos;{0}&apos; was not found.</source>
         <translation type="unfinished">&apos;{0}&apos; nebyl nalezen.</translation>
     </message>
@@ -9592,97 +9682,97 @@
 <context>
     <name>Editor</name>
     <message>
-        <location filename="../QScintilla/Editor.py" line="2890"/>
+        <location filename="../QScintilla/Editor.py" line="2925"/>
         <source>Open File</source>
         <translation>Otevřít soubor</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="668"/>
-        <source>Undo</source>
-        <translation>Vrátit</translation>
-    </message>
-    <message>
-        <location filename="../QScintilla/Editor.py" line="671"/>
-        <source>Redo</source>
-        <translation>Znovu použít</translation>
-    </message>
-    <message>
-        <location filename="../QScintilla/Editor.py" line="674"/>
-        <source>Revert to last saved state</source>
-        <translation>Vrátit k poslednímu uloženému stavu</translation>
-    </message>
-    <message>
-        <location filename="../QScintilla/Editor.py" line="678"/>
-        <source>Cut</source>
-        <translation>Vyjmout</translation>
-    </message>
-    <message>
-        <location filename="../QScintilla/Editor.py" line="681"/>
-        <source>Copy</source>
-        <translation>Kopírovat</translation>
-    </message>
-    <message>
-        <location filename="../QScintilla/Editor.py" line="684"/>
-        <source>Paste</source>
-        <translation>Vložit</translation>
-    </message>
-    <message>
-        <location filename="../QScintilla/Editor.py" line="689"/>
-        <source>Indent</source>
-        <translation>Odsadit</translation>
-    </message>
-    <message>
-        <location filename="../QScintilla/Editor.py" line="692"/>
-        <source>Unindent</source>
-        <translation>Zrušit odsazení</translation>
-    </message>
-    <message>
-        <location filename="../QScintilla/Editor.py" line="695"/>
-        <source>Comment</source>
-        <translation>Vytvořit komentář</translation>
-    </message>
-    <message>
         <location filename="../QScintilla/Editor.py" line="698"/>
-        <source>Uncomment</source>
-        <translation>Zrušit komentář</translation>
+        <source>Undo</source>
+        <translation>Vrátit</translation>
     </message>
     <message>
         <location filename="../QScintilla/Editor.py" line="701"/>
-        <source>Stream Comment</source>
-        <translation>Proudový komentář</translation>
+        <source>Redo</source>
+        <translation>Znovu použít</translation>
     </message>
     <message>
         <location filename="../QScintilla/Editor.py" line="704"/>
-        <source>Box Comment</source>
-        <translation>Obdélníkový komentář</translation>
+        <source>Revert to last saved state</source>
+        <translation>Vrátit k poslednímu uloženému stavu</translation>
     </message>
     <message>
         <location filename="../QScintilla/Editor.py" line="708"/>
-        <source>Select to brace</source>
-        <translation>Vybrat až po závorku</translation>
-    </message>
-    <message>
-        <location filename="../QScintilla/Editor.py" line="710"/>
-        <source>Select all</source>
-        <translation>Vybrat vše</translation>
+        <source>Cut</source>
+        <translation>Vyjmout</translation>
     </message>
     <message>
         <location filename="../QScintilla/Editor.py" line="711"/>
-        <source>Deselect all</source>
-        <translation>Zrušit celý výběr</translation>
+        <source>Copy</source>
+        <translation>Kopírovat</translation>
+    </message>
+    <message>
+        <location filename="../QScintilla/Editor.py" line="714"/>
+        <source>Paste</source>
+        <translation>Vložit</translation>
+    </message>
+    <message>
+        <location filename="../QScintilla/Editor.py" line="719"/>
+        <source>Indent</source>
+        <translation>Odsadit</translation>
+    </message>
+    <message>
+        <location filename="../QScintilla/Editor.py" line="722"/>
+        <source>Unindent</source>
+        <translation>Zrušit odsazení</translation>
     </message>
     <message>
         <location filename="../QScintilla/Editor.py" line="725"/>
+        <source>Comment</source>
+        <translation>Vytvořit komentář</translation>
+    </message>
+    <message>
+        <location filename="../QScintilla/Editor.py" line="728"/>
+        <source>Uncomment</source>
+        <translation>Zrušit komentář</translation>
+    </message>
+    <message>
+        <location filename="../QScintilla/Editor.py" line="731"/>
+        <source>Stream Comment</source>
+        <translation>Proudový komentář</translation>
+    </message>
+    <message>
+        <location filename="../QScintilla/Editor.py" line="734"/>
+        <source>Box Comment</source>
+        <translation>Obdélníkový komentář</translation>
+    </message>
+    <message>
+        <location filename="../QScintilla/Editor.py" line="738"/>
+        <source>Select to brace</source>
+        <translation>Vybrat až po závorku</translation>
+    </message>
+    <message>
+        <location filename="../QScintilla/Editor.py" line="740"/>
+        <source>Select all</source>
+        <translation>Vybrat vše</translation>
+    </message>
+    <message>
+        <location filename="../QScintilla/Editor.py" line="741"/>
+        <source>Deselect all</source>
+        <translation>Zrušit celý výběr</translation>
+    </message>
+    <message>
+        <location filename="../QScintilla/Editor.py" line="755"/>
         <source>Shorten empty lines</source>
         <translation>Zkrátit prázdné řádky</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="732"/>
+        <location filename="../QScintilla/Editor.py" line="762"/>
         <source>Use Monospaced Font</source>
         <translation>Použít neporoporcionální font</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="737"/>
+        <location filename="../QScintilla/Editor.py" line="767"/>
         <source>Autosave enabled</source>
         <translation>Zapnout autosave</translation>
     </message>
@@ -9692,22 +9782,22 @@
         <translation type="obsolete">Zapnout autodoplňování</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="778"/>
+        <location filename="../QScintilla/Editor.py" line="810"/>
         <source>Close</source>
         <translation>Zavřít</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="784"/>
+        <location filename="../QScintilla/Editor.py" line="816"/>
         <source>Save</source>
         <translation>Uložit</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="787"/>
+        <location filename="../QScintilla/Editor.py" line="819"/>
         <source>Save As...</source>
         <translation>Uložit jako...</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="803"/>
+        <location filename="../QScintilla/Editor.py" line="835"/>
         <source>Print</source>
         <translation>Tisk</translation>
     </message>
@@ -9717,447 +9807,447 @@
         <translation type="obsolete">Autodoplňování</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="829"/>
+        <location filename="../QScintilla/Editor.py" line="864"/>
         <source>Complete from Document</source>
         <translation type="unfinished">z dokumentu</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="831"/>
+        <location filename="../QScintilla/Editor.py" line="866"/>
         <source>Complete from APIs</source>
         <translation type="unfinished">z API</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="833"/>
+        <location filename="../QScintilla/Editor.py" line="868"/>
         <source>Complete from Document and APIs</source>
         <translation type="unfinished">z dokumentu a API</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="847"/>
+        <location filename="../QScintilla/Editor.py" line="882"/>
         <source>Check</source>
         <translation>Zkontrolovat</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="867"/>
+        <location filename="../QScintilla/Editor.py" line="902"/>
         <source>Show</source>
         <translation>Zobrazit</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="869"/>
+        <location filename="../QScintilla/Editor.py" line="904"/>
         <source>Code metrics...</source>
         <translation>Metrika kódu...</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="870"/>
+        <location filename="../QScintilla/Editor.py" line="905"/>
         <source>Code coverage...</source>
         <translation>Pokrytí kódu...</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="872"/>
+        <location filename="../QScintilla/Editor.py" line="907"/>
         <source>Show code coverage annotations</source>
         <translation>Zobrazit poznámky pokrytí kódu</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="875"/>
+        <location filename="../QScintilla/Editor.py" line="910"/>
         <source>Hide code coverage annotations</source>
         <translation>Skrýt poznámky pokrytí kódu</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="878"/>
+        <location filename="../QScintilla/Editor.py" line="913"/>
         <source>Profile data...</source>
         <translation>Profilovat data...</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="891"/>
+        <location filename="../QScintilla/Editor.py" line="926"/>
         <source>Diagrams</source>
         <translation>Diagramy</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="893"/>
+        <location filename="../QScintilla/Editor.py" line="928"/>
         <source>Class Diagram...</source>
         <translation>Diagram třídy...</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="895"/>
+        <location filename="../QScintilla/Editor.py" line="930"/>
         <source>Package Diagram...</source>
         <translation>Diagram balíčku...</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="897"/>
+        <location filename="../QScintilla/Editor.py" line="932"/>
         <source>Imports Diagram...</source>
         <translation>Diagram importů...</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="899"/>
+        <location filename="../QScintilla/Editor.py" line="934"/>
         <source>Application Diagram...</source>
         <translation>Diagram aplikace...</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="917"/>
+        <location filename="../QScintilla/Editor.py" line="952"/>
         <source>Languages</source>
         <translation>Jazyky</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="920"/>
+        <location filename="../QScintilla/Editor.py" line="955"/>
         <source>No Language</source>
         <translation>Žádný jazyk</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="1163"/>
+        <location filename="../QScintilla/Editor.py" line="1198"/>
         <source>Toggle bookmark</source>
         <translation>Přepnout záložku</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="1165"/>
+        <location filename="../QScintilla/Editor.py" line="1200"/>
         <source>Next bookmark</source>
         <translation>Následující záložka</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="1167"/>
+        <location filename="../QScintilla/Editor.py" line="1202"/>
         <source>Previous bookmark</source>
         <translation>Předchozí záložka</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="1169"/>
+        <location filename="../QScintilla/Editor.py" line="1204"/>
         <source>Clear all bookmarks</source>
         <translation>Zrušit všechny záložky</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="1172"/>
+        <location filename="../QScintilla/Editor.py" line="1207"/>
         <source>Goto syntax error</source>
         <translation>Jít na chybu syntaxe</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="1174"/>
-        <source>Show syntax error message</source>
-        <translation>Zobrazit hlášení syntaktické chyby</translation>
-    </message>
-    <message>
-        <location filename="../QScintilla/Editor.py" line="1176"/>
-        <source>Clear syntax error</source>
-        <translation>Zrušit chybu syntaxe</translation>
-    </message>
-    <message>
-        <location filename="../QScintilla/Editor.py" line="1189"/>
-        <source>Toggle breakpoint</source>
-        <translation>Přepnout breakpoint</translation>
-    </message>
-    <message>
-        <location filename="../QScintilla/Editor.py" line="1191"/>
-        <source>Toggle temporary breakpoint</source>
-        <translation>Přepnout dočasný breakpoint</translation>
-    </message>
-    <message>
-        <location filename="../QScintilla/Editor.py" line="1194"/>
-        <source>Edit breakpoint...</source>
-        <translation>Editovat breakpoint...</translation>
-    </message>
-    <message>
-        <location filename="../QScintilla/Editor.py" line="5178"/>
-        <source>Enable breakpoint</source>
-        <translation>Aktivovat breakpoint</translation>
-    </message>
-    <message>
-        <location filename="../QScintilla/Editor.py" line="1199"/>
-        <source>Next breakpoint</source>
-        <translation>Následující breakpoint</translation>
-    </message>
-    <message>
-        <location filename="../QScintilla/Editor.py" line="1201"/>
-        <source>Previous breakpoint</source>
-        <translation>Předchozí breakpoint</translation>
-    </message>
-    <message>
-        <location filename="../QScintilla/Editor.py" line="1203"/>
-        <source>Clear all breakpoints</source>
-        <translation>Zrušit všechny breakpointy</translation>
-    </message>
-    <message>
-        <location filename="../QScintilla/Editor.py" line="1206"/>
-        <source>Next uncovered line</source>
-        <translation>Následující odkrytá řádka</translation>
-    </message>
-    <message>
         <location filename="../QScintilla/Editor.py" line="1209"/>
+        <source>Show syntax error message</source>
+        <translation>Zobrazit hlášení syntaktické chyby</translation>
+    </message>
+    <message>
+        <location filename="../QScintilla/Editor.py" line="1211"/>
+        <source>Clear syntax error</source>
+        <translation>Zrušit chybu syntaxe</translation>
+    </message>
+    <message>
+        <location filename="../QScintilla/Editor.py" line="1224"/>
+        <source>Toggle breakpoint</source>
+        <translation>Přepnout breakpoint</translation>
+    </message>
+    <message>
+        <location filename="../QScintilla/Editor.py" line="1226"/>
+        <source>Toggle temporary breakpoint</source>
+        <translation>Přepnout dočasný breakpoint</translation>
+    </message>
+    <message>
+        <location filename="../QScintilla/Editor.py" line="1229"/>
+        <source>Edit breakpoint...</source>
+        <translation>Editovat breakpoint...</translation>
+    </message>
+    <message>
+        <location filename="../QScintilla/Editor.py" line="5290"/>
+        <source>Enable breakpoint</source>
+        <translation>Aktivovat breakpoint</translation>
+    </message>
+    <message>
+        <location filename="../QScintilla/Editor.py" line="1234"/>
+        <source>Next breakpoint</source>
+        <translation>Následující breakpoint</translation>
+    </message>
+    <message>
+        <location filename="../QScintilla/Editor.py" line="1236"/>
+        <source>Previous breakpoint</source>
+        <translation>Předchozí breakpoint</translation>
+    </message>
+    <message>
+        <location filename="../QScintilla/Editor.py" line="1238"/>
+        <source>Clear all breakpoints</source>
+        <translation>Zrušit všechny breakpointy</translation>
+    </message>
+    <message>
+        <location filename="../QScintilla/Editor.py" line="1241"/>
+        <source>Next uncovered line</source>
+        <translation>Následující odkrytá řádka</translation>
+    </message>
+    <message>
+        <location filename="../QScintilla/Editor.py" line="1244"/>
         <source>Previous uncovered line</source>
         <translation>Předchozí odkrytá řádka</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="1212"/>
+        <location filename="../QScintilla/Editor.py" line="1247"/>
         <source>Next task</source>
         <translation>Následující úloha</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="1214"/>
+        <location filename="../QScintilla/Editor.py" line="1249"/>
         <source>Previous task</source>
         <translation>Předchozí úloha</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="1223"/>
+        <location filename="../QScintilla/Editor.py" line="1258"/>
         <source>LMB toggles bookmarks</source>
         <translation>LMB přepínač záložek</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="1227"/>
+        <location filename="../QScintilla/Editor.py" line="1262"/>
         <source>LMB toggles breakpoints</source>
         <translation>LMB přepínač breakpointů</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="1764"/>
+        <location filename="../QScintilla/Editor.py" line="1799"/>
         <source>Modification of Read Only file</source>
         <translation>Modifikace souboru otevřeného jen pro čtení</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="1764"/>
+        <location filename="../QScintilla/Editor.py" line="1799"/>
         <source>You are attempting to change a read only file. Please save to a different file first.</source>
         <translation>Pokoušíte se změnit soubor, který je otevřen jen pro čtení. Prosím, uložte jej nejdříve do jiného souboru.</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="2455"/>
+        <location filename="../QScintilla/Editor.py" line="2490"/>
         <source>Printing...</source>
         <translation>Tisk...</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="2472"/>
+        <location filename="../QScintilla/Editor.py" line="2507"/>
         <source>Printing completed</source>
         <translation>Tisk je hotov</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="2474"/>
+        <location filename="../QScintilla/Editor.py" line="2509"/>
         <source>Error while printing</source>
         <translation>Chyba během tisku</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="2477"/>
+        <location filename="../QScintilla/Editor.py" line="2512"/>
         <source>Printing aborted</source>
         <translation>Tisk byl zrušen</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="3053"/>
+        <location filename="../QScintilla/Editor.py" line="3088"/>
         <source>Save File</source>
         <translation>Uložit soubor</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="2835"/>
+        <location filename="../QScintilla/Editor.py" line="2870"/>
         <source>File Modified</source>
         <translation>Soubor je modifikován</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="4451"/>
+        <location filename="../QScintilla/Editor.py" line="4500"/>
         <source>Autocompletion</source>
         <translation>Autodoplňování</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="4451"/>
+        <location filename="../QScintilla/Editor.py" line="4500"/>
         <source>Autocompletion is not available because there is no autocompletion source set.</source>
         <translation>Autodoplňování není dostupné protože zdrojová část autodoplňování nebyla nalezena.</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="5181"/>
+        <location filename="../QScintilla/Editor.py" line="5293"/>
         <source>Disable breakpoint</source>
         <translation>Deaktivovat breakpoint</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="5555"/>
+        <location filename="../QScintilla/Editor.py" line="5667"/>
         <source>Code Coverage</source>
         <translation>Pokrytí kódu</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="5555"/>
+        <location filename="../QScintilla/Editor.py" line="5667"/>
         <source>Please select a coverage file</source>
         <translation>Prosím, vyberte soubor s pokrytím kódu</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="5618"/>
+        <location filename="../QScintilla/Editor.py" line="5730"/>
         <source>Show Code Coverage Annotations</source>
         <translation>Zobrazit poznámky pokrytí kódu</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="5611"/>
+        <location filename="../QScintilla/Editor.py" line="5723"/>
         <source>All lines have been covered.</source>
         <translation>Všechny řádky byly pokryty.</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="5618"/>
+        <location filename="../QScintilla/Editor.py" line="5730"/>
         <source>There is no coverage file available.</source>
         <translation>Soubor s pokrytím není dostupný.</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="5733"/>
+        <location filename="../QScintilla/Editor.py" line="5845"/>
         <source>Profile Data</source>
         <translation>Profilovat data</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="5733"/>
+        <location filename="../QScintilla/Editor.py" line="5845"/>
         <source>Please select a profile file</source>
         <translation>Prosím, vyberte soubor s profilem</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="5893"/>
+        <location filename="../QScintilla/Editor.py" line="6005"/>
         <source>Syntax Error</source>
         <translation>Chyba syntaxe</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="5893"/>
+        <location filename="../QScintilla/Editor.py" line="6005"/>
         <source>No syntax error message available.</source>
         <translation>Hlášení syntaktické chyby není dostupné.</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6208"/>
+        <location filename="../QScintilla/Editor.py" line="6320"/>
         <source>Macro Name</source>
         <translation>Název makra</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6208"/>
+        <location filename="../QScintilla/Editor.py" line="6320"/>
         <source>Select a macro name:</source>
         <translation>Vyberte název makra:</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6236"/>
+        <location filename="../QScintilla/Editor.py" line="6348"/>
         <source>Load macro file</source>
         <translation>Načíst soubor makra</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6279"/>
+        <location filename="../QScintilla/Editor.py" line="6391"/>
         <source>Macro files (*.macro)</source>
         <translation>Macro soubory (*.macro)</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6259"/>
+        <location filename="../QScintilla/Editor.py" line="6371"/>
         <source>Error loading macro</source>
         <translation>Chyba při načítání makra</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6279"/>
+        <location filename="../QScintilla/Editor.py" line="6391"/>
         <source>Save macro file</source>
         <translation>Uložit soubor s makrem</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6296"/>
+        <location filename="../QScintilla/Editor.py" line="6408"/>
         <source>Save macro</source>
         <translation>Uložit makro</translation>
     </message>
     <message>
-        <location filename="../QScintilla/Editor.py" line="6312"/>
+        <location filename="../QScintilla/Editor.py" line="6424"/>
         <source>Error saving macro</source>
         <translation>Chyba při ukládá