Mon, 01 Feb 2021 13:25:37 +0100
Merged with the changes of the 'jsonfiles' branch.
docs/changelog | file | annotate | diff | comparison | revisions | |
eric6.e4p | file | annotate | diff | comparison | revisions | |
eric6/Preferences/__init__.py | file | annotate | diff | comparison | revisions |
--- a/docs/changelog Mon Feb 01 10:06:11 2021 +0100 +++ b/docs/changelog Mon Feb 01 13:25:37 2021 +0100 @@ -1,5 +1,11 @@ Change Log ---------- +Version 21.3: +- bug fixes +- General + -- changed the default file format for several generated files to be based on + JSON + Version 21.2: - bug fixes - General
--- a/eric6.e4p Mon Feb 01 10:06:11 2021 +0100 +++ b/eric6.e4p Mon Feb 01 13:25:37 2021 +0100 @@ -280,6 +280,7 @@ <Source>eric6/MultiProject/AddProjectDialog.py</Source> <Source>eric6/MultiProject/MultiProject.py</Source> <Source>eric6/MultiProject/MultiProjectBrowser.py</Source> + <Source>eric6/MultiProject/MultiProjectFile.py</Source> <Source>eric6/MultiProject/PropertiesDialog.py</Source> <Source>eric6/MultiProject/__init__.py</Source> <Source>eric6/Network/IRC/IrcChannelEditDialog.py</Source> @@ -724,6 +725,7 @@ <Source>eric6/Preferences/ConfigurationPages/EditorGeneralPage.py</Source> <Source>eric6/Preferences/ConfigurationPages/EditorHighlightersPage.py</Source> <Source>eric6/Preferences/ConfigurationPages/EditorHighlightingStylesPage.py</Source> + <Source>eric6/Preferences/ConfigurationPages/EditorHighlightingStylesSelectionDialog.py</Source> <Source>eric6/Preferences/ConfigurationPages/EditorKeywordsPage.py</Source> <Source>eric6/Preferences/ConfigurationPages/EditorLanguageTabIndentOverrideDialog.py</Source> <Source>eric6/Preferences/ConfigurationPages/EditorMouseClickHandlerPage.py</Source> @@ -771,12 +773,14 @@ <Source>eric6/Preferences/ConfigurationPages/WebBrowserSpellCheckingPage.py</Source> <Source>eric6/Preferences/ConfigurationPages/WebBrowserVirusTotalPage.py</Source> <Source>eric6/Preferences/ConfigurationPages/__init__.py</Source> + <Source>eric6/Preferences/HighlightingStylesFile.py</Source> <Source>eric6/Preferences/MouseClickDialog.py</Source> <Source>eric6/Preferences/PreferencesLexer.py</Source> <Source>eric6/Preferences/ProgramsDialog.py</Source> <Source>eric6/Preferences/ShortcutDialog.py</Source> <Source>eric6/Preferences/Shortcuts.py</Source> <Source>eric6/Preferences/ShortcutsDialog.py</Source> + <Source>eric6/Preferences/ShortcutsFile.py</Source> <Source>eric6/Preferences/SubstyleDefinitionDialog.py</Source> <Source>eric6/Preferences/ToolConfigurationDialog.py</Source> <Source>eric6/Preferences/ToolGroupConfigurationDialog.py</Source> @@ -788,6 +792,7 @@ <Source>eric6/Project/AddLanguageDialog.py</Source> <Source>eric6/Project/CreateDialogCodeDialog.py</Source> <Source>eric6/Project/DebuggerPropertiesDialog.py</Source> + <Source>eric6/Project/DebuggerPropertiesFile.py</Source> <Source>eric6/Project/FiletypeAssociationDialog.py</Source> <Source>eric6/Project/IdlCompilerDefineNameDialog.py</Source> <Source>eric6/Project/IdlCompilerOptionsDialog.py</Source> @@ -801,6 +806,7 @@ <Source>eric6/Project/ProjectBrowserFlags.py</Source> <Source>eric6/Project/ProjectBrowserModel.py</Source> <Source>eric6/Project/ProjectBrowserSortFilterProxyModel.py</Source> + <Source>eric6/Project/ProjectFile.py</Source> <Source>eric6/Project/ProjectFormsBrowser.py</Source> <Source>eric6/Project/ProjectInterfacesBrowser.py</Source> <Source>eric6/Project/ProjectOthersBrowser.py</Source> @@ -816,6 +822,7 @@ <Source>eric6/Project/UicCompilerOptionsDialog.py</Source> <Source>eric6/Project/UicLoadUi5.py</Source> <Source>eric6/Project/UicLoadUi6.py</Source> + <Source>eric6/Project/UserProjectFile.py</Source> <Source>eric6/Project/UserPropertiesDialog.py</Source> <Source>eric6/Project/__init__.py</Source> <Source>eric6/PyUnit/UnittestDialog.py</Source> @@ -909,6 +916,8 @@ <Source>eric6/QScintilla/TypingCompleters/__init__.py</Source> <Source>eric6/QScintilla/ZoomDialog.py</Source> <Source>eric6/QScintilla/__init__.py</Source> + <Source>eric6/Sessions/SessionFile.py</Source> + <Source>eric6/Sessions/__init__.py</Source> <Source>eric6/Snapshot/SnapWidget.py</Source> <Source>eric6/Snapshot/SnapshotDefaultGrabber.py</Source> <Source>eric6/Snapshot/SnapshotFreehandGrabber.py</Source> @@ -928,11 +937,13 @@ <Source>eric6/Tasks/TaskFilterConfigDialog.py</Source> <Source>eric6/Tasks/TaskPropertiesDialog.py</Source> <Source>eric6/Tasks/TaskViewer.py</Source> + <Source>eric6/Tasks/TasksFile.py</Source> <Source>eric6/Tasks/__init__.py</Source> <Source>eric6/Templates/TemplateMultipleVariablesDialog.py</Source> <Source>eric6/Templates/TemplatePropertiesDialog.py</Source> <Source>eric6/Templates/TemplateSingleVariableDialog.py</Source> <Source>eric6/Templates/TemplateViewer.py</Source> + <Source>eric6/Templates/TemplatesFile.py</Source> <Source>eric6/Templates/__init__.py</Source> <Source>eric6/ThirdParty/CharDet/__init__.py</Source> <Source>eric6/ThirdParty/CharDet/chardet/__init__.py</Source> @@ -1901,6 +1912,7 @@ <Form>eric6/Preferences/ConfigurationPages/EditorGeneralPage.ui</Form> <Form>eric6/Preferences/ConfigurationPages/EditorHighlightersPage.ui</Form> <Form>eric6/Preferences/ConfigurationPages/EditorHighlightingStylesPage.ui</Form> + <Form>eric6/Preferences/ConfigurationPages/EditorHighlightingStylesSelectionDialog.ui</Form> <Form>eric6/Preferences/ConfigurationPages/EditorKeywordsPage.ui</Form> <Form>eric6/Preferences/ConfigurationPages/EditorLanguageTabIndentOverrideDialog.ui</Form> <Form>eric6/Preferences/ConfigurationPages/EditorMouseClickHandlerPage.ui</Form> @@ -2115,6 +2127,7 @@ <Other>docs/THANKS</Other> <Other>docs/changelog</Other> <Other>eric6.e4p</Other> + <Other>eric6.epj</Other> <Other>eric6/APIs/MicroPython/calliope.api</Other> <Other>eric6/APIs/MicroPython/circuitpython.api</Other> <Other>eric6/APIs/MicroPython/microbit.api</Other>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/eric6.epj Mon Feb 01 13:25:37 2021 +0100 @@ -0,0 +1,2639 @@ +{ + "header": { + "comment": "eric project file for project eric6", + "copyright": " Copyright (C) 2021 Detlev Offenbach, detlev@die-offenbachs.de " + }, + "project": { + "DESCRIPTION": "eric6 is an integrated development environment for the Python language. It uses the PyQt5 bindings and the QScintilla2 editor widget.", + "VERSION": "6.x", + "SOURCES": [ + "Examples/hallo.py", + "Examples/modpython.py", + "Examples/modpython_dbg.py", + "Examples/rhallo.py", + "eric6/CondaInterface/Conda.py", + "eric6/CondaInterface/CondaExecDialog.py", + "eric6/CondaInterface/CondaExportDialog.py", + "eric6/CondaInterface/CondaInfoDialog.py", + "eric6/CondaInterface/CondaNewEnvironmentDataDialog.py", + "eric6/CondaInterface/CondaPackageDetailsWidget.py", + "eric6/CondaInterface/CondaPackagesWidget.py", + "eric6/CondaInterface/__init__.py", + "eric6/Cooperation/ChatWidget.py", + "eric6/Cooperation/Connection.py", + "eric6/Cooperation/CooperationClient.py", + "eric6/Cooperation/CooperationServer.py", + "eric6/Cooperation/__init__.py", + "eric6/DataViews/CodeMetrics.py", + "eric6/DataViews/CodeMetricsDialog.py", + "eric6/DataViews/PyCoverageDialog.py", + "eric6/DataViews/PyProfileDialog.py", + "eric6/DataViews/__init__.py", + "eric6/DebugClients/Python/AsyncFile.py", + "eric6/DebugClients/Python/BreakpointWatch.py", + "eric6/DebugClients/Python/DCTestResult.py", + "eric6/DebugClients/Python/DebugBase.py", + "eric6/DebugClients/Python/DebugClient.py", + "eric6/DebugClients/Python/DebugClientBase.py", + "eric6/DebugClients/Python/DebugClientCapabilities.py", + "eric6/DebugClients/Python/DebugConfig.py", + "eric6/DebugClients/Python/DebugUtilities.py", + "eric6/DebugClients/Python/DebugVariables.py", + "eric6/DebugClients/Python/FlexCompleter.py", + "eric6/DebugClients/Python/ModuleLoader.py", + "eric6/DebugClients/Python/MultiProcessDebugExtension.py", + "eric6/DebugClients/Python/MultiprocessingExtension.py", + "eric6/DebugClients/Python/PyProfile.py", + "eric6/DebugClients/Python/QProcessExtension.py", + "eric6/DebugClients/Python/SubprocessExtension.py", + "eric6/DebugClients/Python/ThreadExtension.py", + "eric6/DebugClients/Python/__init__.py", + "eric6/DebugClients/Python/coverage/__init__.py", + "eric6/DebugClients/Python/coverage/__main__.py", + "eric6/DebugClients/Python/coverage/annotate.py", + "eric6/DebugClients/Python/coverage/backunittest.py", + "eric6/DebugClients/Python/coverage/backward.py", + "eric6/DebugClients/Python/coverage/bytecode.py", + "eric6/DebugClients/Python/coverage/cmdline.py", + "eric6/DebugClients/Python/coverage/collector.py", + "eric6/DebugClients/Python/coverage/config.py", + "eric6/DebugClients/Python/coverage/context.py", + "eric6/DebugClients/Python/coverage/control.py", + "eric6/DebugClients/Python/coverage/data.py", + "eric6/DebugClients/Python/coverage/debug.py", + "eric6/DebugClients/Python/coverage/disposition.py", + "eric6/DebugClients/Python/coverage/env.py", + "eric6/DebugClients/Python/coverage/execfile.py", + "eric6/DebugClients/Python/coverage/files.py", + "eric6/DebugClients/Python/coverage/html.py", + "eric6/DebugClients/Python/coverage/inorout.py", + "eric6/DebugClients/Python/coverage/jsonreport.py", + "eric6/DebugClients/Python/coverage/misc.py", + "eric6/DebugClients/Python/coverage/multiproc.py", + "eric6/DebugClients/Python/coverage/numbits.py", + "eric6/DebugClients/Python/coverage/optional.py", + "eric6/DebugClients/Python/coverage/parser.py", + "eric6/DebugClients/Python/coverage/phystokens.py", + "eric6/DebugClients/Python/coverage/plugin.py", + "eric6/DebugClients/Python/coverage/plugin_support.py", + "eric6/DebugClients/Python/coverage/python.py", + "eric6/DebugClients/Python/coverage/pytracer.py", + "eric6/DebugClients/Python/coverage/report.py", + "eric6/DebugClients/Python/coverage/results.py", + "eric6/DebugClients/Python/coverage/sqldata.py", + "eric6/DebugClients/Python/coverage/summary.py", + "eric6/DebugClients/Python/coverage/templite.py", + "eric6/DebugClients/Python/coverage/tomlconfig.py", + "eric6/DebugClients/Python/coverage/version.py", + "eric6/DebugClients/Python/coverage/xmlreport.py", + "eric6/DebugClients/Python/eric6dbgstub.py", + "eric6/DebugClients/Python/getpass.py", + "eric6/DebugClients/__init__.py", + "eric6/Debugger/BreakPointModel.py", + "eric6/Debugger/BreakPointViewer.py", + "eric6/Debugger/CallStackViewer.py", + "eric6/Debugger/CallTraceViewer.py", + "eric6/Debugger/Config.py", + "eric6/Debugger/DebugClientCapabilities.py", + "eric6/Debugger/DebugServer.py", + "eric6/Debugger/DebugUI.py", + "eric6/Debugger/DebugViewer.py", + "eric6/Debugger/DebuggerInterfaceNone.py", + "eric6/Debugger/DebuggerInterfacePython.py", + "eric6/Debugger/EditBreakpointDialog.py", + "eric6/Debugger/EditWatchpointDialog.py", + "eric6/Debugger/ExceptionLogger.py", + "eric6/Debugger/ExceptionsFilterDialog.py", + "eric6/Debugger/StartDialog.py", + "eric6/Debugger/StartHistoryEditDialog.py", + "eric6/Debugger/VariableDetailDialog.py", + "eric6/Debugger/VariablesFilterDialog.py", + "eric6/Debugger/VariablesViewer.py", + "eric6/Debugger/WatchPointModel.py", + "eric6/Debugger/WatchPointViewer.py", + "eric6/Debugger/__init__.py", + "eric6/DocumentationTools/APIGenerator.py", + "eric6/DocumentationTools/Config.py", + "eric6/DocumentationTools/IndexGenerator.py", + "eric6/DocumentationTools/ModuleDocumentor.py", + "eric6/DocumentationTools/QtHelpGenerator.py", + "eric6/DocumentationTools/TemplatesListsStyle.py", + "eric6/DocumentationTools/TemplatesListsStyleCSS.py", + "eric6/DocumentationTools/__init__.py", + "eric6/E5Graphics/E5ArrowItem.py", + "eric6/E5Graphics/E5GraphicsView.py", + "eric6/E5Graphics/__init__.py", + "eric6/E5Gui/E5Action.py", + "eric6/E5Gui/E5AnimatedLabel.py", + "eric6/E5Gui/E5AnimatedWidget.py", + "eric6/E5Gui/E5Application.py", + "eric6/E5Gui/E5ClickableLabel.py", + "eric6/E5Gui/E5ComboBox.py", + "eric6/E5Gui/E5Completers.py", + "eric6/E5Gui/E5ErrorMessage.py", + "eric6/E5Gui/E5ErrorMessageFilterDialog.py", + "eric6/E5Gui/E5FileDialog.py", + "eric6/E5Gui/E5FileSaveConfirmDialog.py", + "eric6/E5Gui/E5GenericDiffHighlighter.py", + "eric6/E5Gui/E5Led.py", + "eric6/E5Gui/E5LineEdit.py", + "eric6/E5Gui/E5LineEditButton.py", + "eric6/E5Gui/E5ListSelectionDialog.py", + "eric6/E5Gui/E5ListView.py", + "eric6/E5Gui/E5MainWindow.py", + "eric6/E5Gui/E5MapWidget.py", + "eric6/E5Gui/E5MessageBox.py", + "eric6/E5Gui/E5ModelMenu.py", + "eric6/E5Gui/E5ModelToolBar.py", + "eric6/E5Gui/E5OverrideCursor.py", + "eric6/E5Gui/E5PassivePopup.py", + "eric6/E5Gui/E5PasswordMeter.py", + "eric6/E5Gui/E5PathPicker.py", + "eric6/E5Gui/E5PathPickerDialog.py", + "eric6/E5Gui/E5PlainTextDialog.py", + "eric6/E5Gui/E5ProcessDialog.py", + "eric6/E5Gui/E5ProgressDialog.py", + "eric6/E5Gui/E5SideBar.py", + "eric6/E5Gui/E5SimpleHelpDialog.py", + "eric6/E5Gui/E5SingleApplication.py", + "eric6/E5Gui/E5SqueezeLabels.py", + "eric6/E5Gui/E5StringListEditWidget.py", + "eric6/E5Gui/E5TabWidget.py", + "eric6/E5Gui/E5TableView.py", + "eric6/E5Gui/E5TextEditSearchWidget.py", + "eric6/E5Gui/E5TextInputDialog.py", + "eric6/E5Gui/E5TextSpinBox.py", + "eric6/E5Gui/E5ToolBarDialog.py", + "eric6/E5Gui/E5ToolBarManager.py", + "eric6/E5Gui/E5ToolBox.py", + "eric6/E5Gui/E5ToolButton.py", + "eric6/E5Gui/E5TreeSortFilterProxyModel.py", + "eric6/E5Gui/E5TreeView.py", + "eric6/E5Gui/E5TreeWidget.py", + "eric6/E5Gui/E5ZoomWidget.py", + "eric6/E5Gui/__init__.py", + "eric6/E5Network/E5Ftp.py", + "eric6/E5Network/E5GoogleMail.py", + "eric6/E5Network/E5GoogleMailHelpers.py", + "eric6/E5Network/E5NetworkHeaderDetailsDialog.py", + "eric6/E5Network/E5NetworkProxyFactory.py", + "eric6/E5Network/E5RFC6266.py", + "eric6/E5Network/E5SslCertificateSelectionDialog.py", + "eric6/E5Network/E5SslCertificatesDialog.py", + "eric6/E5Network/E5SslCertificatesInfoDialog.py", + "eric6/E5Network/E5SslCertificatesInfoWidget.py", + "eric6/E5Network/E5SslErrorHandler.py", + "eric6/E5Network/E5SslInfoWidget.py", + "eric6/E5Network/E5SslUtilities.py", + "eric6/E5Network/E5TldExtractor.py", + "eric6/E5Network/E5UrlInfo.py", + "eric6/E5Network/E5XmlRpcClient.py", + "eric6/E5Network/__init__.py", + "eric6/E5Network/data/__init__.py", + "eric6/E5Utilities/E5Cache.py", + "eric6/E5Utilities/E5MutexLocker.py", + "eric6/E5Utilities/__init__.py", + "eric6/E5XML/Config.py", + "eric6/E5XML/DebuggerPropertiesReader.py", + "eric6/E5XML/DebuggerPropertiesWriter.py", + "eric6/E5XML/HighlightingStylesReader.py", + "eric6/E5XML/HighlightingStylesWriter.py", + "eric6/E5XML/MultiProjectReader.py", + "eric6/E5XML/MultiProjectWriter.py", + "eric6/E5XML/PluginRepositoryReader.py", + "eric6/E5XML/ProjectReader.py", + "eric6/E5XML/ProjectWriter.py", + "eric6/E5XML/SessionReader.py", + "eric6/E5XML/SessionWriter.py", + "eric6/E5XML/ShortcutsReader.py", + "eric6/E5XML/ShortcutsWriter.py", + "eric6/E5XML/SpellCheckDictionariesReader.py", + "eric6/E5XML/TasksReader.py", + "eric6/E5XML/TasksWriter.py", + "eric6/E5XML/TemplatesReader.py", + "eric6/E5XML/TemplatesWriter.py", + "eric6/E5XML/UserProjectReader.py", + "eric6/E5XML/UserProjectWriter.py", + "eric6/E5XML/XMLStreamReaderBase.py", + "eric6/E5XML/XMLStreamWriterBase.py", + "eric6/E5XML/__init__.py", + "eric6/Globals/AppInfo.py", + "eric6/Globals/__init__.py", + "eric6/Graphics/ApplicationDiagramBuilder.py", + "eric6/Graphics/AssociationItem.py", + "eric6/Graphics/ClassItem.py", + "eric6/Graphics/GraphicsUtilities.py", + "eric6/Graphics/ImportsDiagramBuilder.py", + "eric6/Graphics/ModuleItem.py", + "eric6/Graphics/PackageDiagramBuilder.py", + "eric6/Graphics/PackageItem.py", + "eric6/Graphics/PixmapDiagram.py", + "eric6/Graphics/SvgDiagram.py", + "eric6/Graphics/UMLClassDiagramBuilder.py", + "eric6/Graphics/UMLDiagramBuilder.py", + "eric6/Graphics/UMLDialog.py", + "eric6/Graphics/UMLGraphicsView.py", + "eric6/Graphics/UMLItem.py", + "eric6/Graphics/UMLSceneSizeDialog.py", + "eric6/Graphics/__init__.py", + "eric6/HexEdit/HexEditChunks.py", + "eric6/HexEdit/HexEditGotoWidget.py", + "eric6/HexEdit/HexEditMainWindow.py", + "eric6/HexEdit/HexEditSearchReplaceWidget.py", + "eric6/HexEdit/HexEditUndoStack.py", + "eric6/HexEdit/HexEditWidget.py", + "eric6/HexEdit/__init__.py", + "eric6/IconEditor/IconEditorGrid.py", + "eric6/IconEditor/IconEditorPalette.py", + "eric6/IconEditor/IconEditorWindow.py", + "eric6/IconEditor/IconSizeDialog.py", + "eric6/IconEditor/__init__.py", + "eric6/IconEditor/cursors/__init__.py", + "eric6/MicroPython/CircuitPythonDevices.py", + "eric6/MicroPython/CircuitPythonFirmwareSelectionDialog.py", + "eric6/MicroPython/EspBackupRestoreFirmwareDialog.py", + "eric6/MicroPython/EspDevices.py", + "eric6/MicroPython/EspFirmwareSelectionDialog.py", + "eric6/MicroPython/IgnoredDevicesDialog.py", + "eric6/MicroPython/MicroPythonCommandsInterface.py", + "eric6/MicroPython/MicroPythonDevices.py", + "eric6/MicroPython/MicroPythonFileManager.py", + "eric6/MicroPython/MicroPythonFileManagerWidget.py", + "eric6/MicroPython/MicroPythonFileSystemUtilities.py", + "eric6/MicroPython/MicroPythonGraphWidget.py", + "eric6/MicroPython/MicroPythonProgressInfoDialog.py", + "eric6/MicroPython/MicroPythonSerialPort.py", + "eric6/MicroPython/MicroPythonWidget.py", + "eric6/MicroPython/MicrobitDevices.py", + "eric6/MicroPython/PyBoardDevices.py", + "eric6/MicroPython/__init__.py", + "eric6/MultiProject/AddProjectDialog.py", + "eric6/MultiProject/MultiProject.py", + "eric6/MultiProject/MultiProjectBrowser.py", + "eric6/MultiProject/MultiProjectFile.py", + "eric6/MultiProject/PropertiesDialog.py", + "eric6/MultiProject/__init__.py", + "eric6/Network/IRC/IrcChannelEditDialog.py", + "eric6/Network/IRC/IrcChannelWidget.py", + "eric6/Network/IRC/IrcIdentitiesEditDialog.py", + "eric6/Network/IRC/IrcMessageEdit.py", + "eric6/Network/IRC/IrcNetworkEditDialog.py", + "eric6/Network/IRC/IrcNetworkListDialog.py", + "eric6/Network/IRC/IrcNetworkManager.py", + "eric6/Network/IRC/IrcNetworkWidget.py", + "eric6/Network/IRC/IrcServerEditDialog.py", + "eric6/Network/IRC/IrcUtilities.py", + "eric6/Network/IRC/IrcWidget.py", + "eric6/Network/IRC/__init__.py", + "eric6/Network/__init__.py", + "eric6/PipInterface/Pip.py", + "eric6/PipInterface/PipDialog.py", + "eric6/PipInterface/PipFileSelectionDialog.py", + "eric6/PipInterface/PipFreezeDialog.py", + "eric6/PipInterface/PipPackageDetailsDialog.py", + "eric6/PipInterface/PipPackagesInputDialog.py", + "eric6/PipInterface/PipPackagesWidget.py", + "eric6/PipInterface/__init__.py", + "eric6/PluginManager/PluginDetailsDialog.py", + "eric6/PluginManager/PluginExceptions.py", + "eric6/PluginManager/PluginInfoDialog.py", + "eric6/PluginManager/PluginInstallDialog.py", + "eric6/PluginManager/PluginManager.py", + "eric6/PluginManager/PluginRepositoryDialog.py", + "eric6/PluginManager/PluginUninstallDialog.py", + "eric6/PluginManager/__init__.py", + "eric6/Plugins/AboutPlugin/AboutDialog.py", + "eric6/Plugins/AboutPlugin/__init__.py", + "eric6/Plugins/CheckerPlugins/CodeStyleChecker/Annotations/AnnotationsChecker.py", + "eric6/Plugins/CheckerPlugins/CodeStyleChecker/Annotations/__init__.py", + "eric6/Plugins/CheckerPlugins/CodeStyleChecker/Annotations/translations.py", + "eric6/Plugins/CheckerPlugins/CodeStyleChecker/AstUtilities.py", + "eric6/Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleAddBuiltinIgnoreDialog.py", + "eric6/Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleChecker.py", + "eric6/Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py", + "eric6/Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCodeSelectionDialog.py", + "eric6/Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleFixer.py", + "eric6/Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleStatisticsDialog.py", + "eric6/Plugins/CheckerPlugins/CodeStyleChecker/Complexity/ComplexityChecker.py", + "eric6/Plugins/CheckerPlugins/CodeStyleChecker/Complexity/__init__.py", + "eric6/Plugins/CheckerPlugins/CodeStyleChecker/Complexity/translations.py", + "eric6/Plugins/CheckerPlugins/CodeStyleChecker/DocStyle/DocStyleChecker.py", + "eric6/Plugins/CheckerPlugins/CodeStyleChecker/DocStyle/__init__.py", + "eric6/Plugins/CheckerPlugins/CodeStyleChecker/DocStyle/translations.py", + "eric6/Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/MiscellaneousChecker.py", + "eric6/Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/MiscellaneousDefaults.py", + "eric6/Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/__init__.py", + "eric6/Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py", + "eric6/Plugins/CheckerPlugins/CodeStyleChecker/Naming/NamingStyleChecker.py", + "eric6/Plugins/CheckerPlugins/CodeStyleChecker/Naming/__init__.py", + "eric6/Plugins/CheckerPlugins/CodeStyleChecker/Naming/translations.py", + "eric6/Plugins/CheckerPlugins/CodeStyleChecker/Security/Checks/__init__.py", + "eric6/Plugins/CheckerPlugins/CodeStyleChecker/Security/Checks/assert.py", + "eric6/Plugins/CheckerPlugins/CodeStyleChecker/Security/Checks/awsHardcodedPassword.py", + "eric6/Plugins/CheckerPlugins/CodeStyleChecker/Security/Checks/blackListCalls.py", + "eric6/Plugins/CheckerPlugins/CodeStyleChecker/Security/Checks/blackListImports.py", + "eric6/Plugins/CheckerPlugins/CodeStyleChecker/Security/Checks/certificateValidation.py", + "eric6/Plugins/CheckerPlugins/CodeStyleChecker/Security/Checks/djangoSqlInjection.py", + "eric6/Plugins/CheckerPlugins/CodeStyleChecker/Security/Checks/djangoXssVulnerability.py", + "eric6/Plugins/CheckerPlugins/CodeStyleChecker/Security/Checks/exec.py", + "eric6/Plugins/CheckerPlugins/CodeStyleChecker/Security/Checks/flaskDebug.py", + "eric6/Plugins/CheckerPlugins/CodeStyleChecker/Security/Checks/generalBindAllInterfaces.py", + "eric6/Plugins/CheckerPlugins/CodeStyleChecker/Security/Checks/generalFilePermissions.py", + "eric6/Plugins/CheckerPlugins/CodeStyleChecker/Security/Checks/generalHardcodedPassword.py", + "eric6/Plugins/CheckerPlugins/CodeStyleChecker/Security/Checks/generalHardcodedTmp.py", + "eric6/Plugins/CheckerPlugins/CodeStyleChecker/Security/Checks/injectionParamiko.py", + "eric6/Plugins/CheckerPlugins/CodeStyleChecker/Security/Checks/injectionShell.py", + "eric6/Plugins/CheckerPlugins/CodeStyleChecker/Security/Checks/injectionSql.py", + "eric6/Plugins/CheckerPlugins/CodeStyleChecker/Security/Checks/injectionWildcard.py", + "eric6/Plugins/CheckerPlugins/CodeStyleChecker/Security/Checks/insecureHashlibNew.py", + "eric6/Plugins/CheckerPlugins/CodeStyleChecker/Security/Checks/insecureSslTls.py", + "eric6/Plugins/CheckerPlugins/CodeStyleChecker/Security/Checks/jinja2Templates.py", + "eric6/Plugins/CheckerPlugins/CodeStyleChecker/Security/Checks/makoTemplates.py", + "eric6/Plugins/CheckerPlugins/CodeStyleChecker/Security/Checks/sshNoHostKeyVerification.py", + "eric6/Plugins/CheckerPlugins/CodeStyleChecker/Security/Checks/tryExcept.py", + "eric6/Plugins/CheckerPlugins/CodeStyleChecker/Security/Checks/weakCryptographicKey.py", + "eric6/Plugins/CheckerPlugins/CodeStyleChecker/Security/Checks/yamlLoad.py", + "eric6/Plugins/CheckerPlugins/CodeStyleChecker/Security/SecurityChecker.py", + "eric6/Plugins/CheckerPlugins/CodeStyleChecker/Security/SecurityContext.py", + "eric6/Plugins/CheckerPlugins/CodeStyleChecker/Security/SecurityDefaults.py", + "eric6/Plugins/CheckerPlugins/CodeStyleChecker/Security/SecurityNodeVisitor.py", + "eric6/Plugins/CheckerPlugins/CodeStyleChecker/Security/SecurityUtils.py", + "eric6/Plugins/CheckerPlugins/CodeStyleChecker/Security/__init__.py", + "eric6/Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py", + "eric6/Plugins/CheckerPlugins/CodeStyleChecker/__init__.py", + "eric6/Plugins/CheckerPlugins/CodeStyleChecker/eradicate.py", + "eric6/Plugins/CheckerPlugins/CodeStyleChecker/mccabe.py", + "eric6/Plugins/CheckerPlugins/CodeStyleChecker/pycodestyle.py", + "eric6/Plugins/CheckerPlugins/CodeStyleChecker/translations.py", + "eric6/Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheck.py", + "eric6/Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckService.py", + "eric6/Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py", + "eric6/Plugins/CheckerPlugins/SyntaxChecker/__init__.py", + "eric6/Plugins/CheckerPlugins/SyntaxChecker/jsCheckSyntax.py", + "eric6/Plugins/CheckerPlugins/SyntaxChecker/jsonCheckSyntax.py", + "eric6/Plugins/CheckerPlugins/SyntaxChecker/pyflakes/__init__.py", + "eric6/Plugins/CheckerPlugins/SyntaxChecker/pyflakes/checker.py", + "eric6/Plugins/CheckerPlugins/SyntaxChecker/pyflakes/messages.py", + "eric6/Plugins/CheckerPlugins/SyntaxChecker/pyflakes/translations.py", + "eric6/Plugins/CheckerPlugins/SyntaxChecker/tomlCheckSyntax.py", + "eric6/Plugins/CheckerPlugins/SyntaxChecker/yamlCheckSyntax.py", + "eric6/Plugins/CheckerPlugins/__init__.py", + "eric6/Plugins/DocumentationPlugins/Ericapi/EricapiConfigDialog.py", + "eric6/Plugins/DocumentationPlugins/Ericapi/EricapiExecDialog.py", + "eric6/Plugins/DocumentationPlugins/Ericapi/__init__.py", + "eric6/Plugins/DocumentationPlugins/Ericdoc/EricdocConfigDialog.py", + "eric6/Plugins/DocumentationPlugins/Ericdoc/EricdocExecDialog.py", + "eric6/Plugins/DocumentationPlugins/Ericdoc/__init__.py", + "eric6/Plugins/DocumentationPlugins/__init__.py", + "eric6/Plugins/PluginAbout.py", + "eric6/Plugins/PluginCodeStyleChecker.py", + "eric6/Plugins/PluginEricapi.py", + "eric6/Plugins/PluginEricdoc.py", + "eric6/Plugins/PluginSyntaxChecker.py", + "eric6/Plugins/PluginTranslator.py", + "eric6/Plugins/PluginVcsGit.py", + "eric6/Plugins/PluginVcsMercurial.py", + "eric6/Plugins/PluginVcsPySvn.py", + "eric6/Plugins/PluginVcsSubversion.py", + "eric6/Plugins/PluginVmListspace.py", + "eric6/Plugins/PluginVmTabview.py", + "eric6/Plugins/PluginWizardDotDesktop.py", + "eric6/Plugins/PluginWizardE5MessageBox.py", + "eric6/Plugins/PluginWizardEricPlugin.py", + "eric6/Plugins/PluginWizardPyRegExp.py", + "eric6/Plugins/PluginWizardQColorDialog.py", + "eric6/Plugins/PluginWizardQFileDialog.py", + "eric6/Plugins/PluginWizardQFontDialog.py", + "eric6/Plugins/PluginWizardQInputDialog.py", + "eric6/Plugins/PluginWizardQMessageBox.py", + "eric6/Plugins/PluginWizardQRegularExpression.py", + "eric6/Plugins/PluginWizardSetup.py", + "eric6/Plugins/UiExtensionPlugins/Translator/ConfigurationPage/TranslatorPage.py", + "eric6/Plugins/UiExtensionPlugins/Translator/ConfigurationPage/__init__.py", + "eric6/Plugins/UiExtensionPlugins/Translator/Translator.py", + "eric6/Plugins/UiExtensionPlugins/Translator/TranslatorEngines/DeepLEngine.py", + "eric6/Plugins/UiExtensionPlugins/Translator/TranslatorEngines/GlosbeEngine.py", + "eric6/Plugins/UiExtensionPlugins/Translator/TranslatorEngines/GoogleV1Engine.py", + "eric6/Plugins/UiExtensionPlugins/Translator/TranslatorEngines/GoogleV2Engine.py", + "eric6/Plugins/UiExtensionPlugins/Translator/TranslatorEngines/IbmWatsonEngine.py", + "eric6/Plugins/UiExtensionPlugins/Translator/TranslatorEngines/MicrosoftEngine.py", + "eric6/Plugins/UiExtensionPlugins/Translator/TranslatorEngines/MyMemoryEngine.py", + "eric6/Plugins/UiExtensionPlugins/Translator/TranslatorEngines/PromtEngine.py", + "eric6/Plugins/UiExtensionPlugins/Translator/TranslatorEngines/TranslationEngine.py", + "eric6/Plugins/UiExtensionPlugins/Translator/TranslatorEngines/YandexEngine.py", + "eric6/Plugins/UiExtensionPlugins/Translator/TranslatorEngines/__init__.py", + "eric6/Plugins/UiExtensionPlugins/Translator/TranslatorLanguagesDb.py", + "eric6/Plugins/UiExtensionPlugins/Translator/TranslatorRequest.py", + "eric6/Plugins/UiExtensionPlugins/Translator/TranslatorWidget.py", + "eric6/Plugins/UiExtensionPlugins/Translator/__init__.py", + "eric6/Plugins/UiExtensionPlugins/__init__.py", + "eric6/Plugins/VcsPlugins/__init__.py", + "eric6/Plugins/VcsPlugins/vcsGit/Config.py", + "eric6/Plugins/VcsPlugins/vcsGit/ConfigurationPage/GitPage.py", + "eric6/Plugins/VcsPlugins/vcsGit/ConfigurationPage/__init__.py", + "eric6/Plugins/VcsPlugins/vcsGit/GitAddRemoteDialog.py", + "eric6/Plugins/VcsPlugins/vcsGit/GitApplyBundleDataDialog.py", + "eric6/Plugins/VcsPlugins/vcsGit/GitArchiveDataDialog.py", + "eric6/Plugins/VcsPlugins/vcsGit/GitBisectLogBrowserDialog.py", + "eric6/Plugins/VcsPlugins/vcsGit/GitBisectStartDialog.py", + "eric6/Plugins/VcsPlugins/vcsGit/GitBlameDialog.py", + "eric6/Plugins/VcsPlugins/vcsGit/GitBranchDialog.py", + "eric6/Plugins/VcsPlugins/vcsGit/GitBranchPushDialog.py", + "eric6/Plugins/VcsPlugins/vcsGit/GitBundleDialog.py", + "eric6/Plugins/VcsPlugins/vcsGit/GitChangeRemoteUrlDialog.py", + "eric6/Plugins/VcsPlugins/vcsGit/GitCherryPickDialog.py", + "eric6/Plugins/VcsPlugins/vcsGit/GitCommandDialog.py", + "eric6/Plugins/VcsPlugins/vcsGit/GitCommitDialog.py", + "eric6/Plugins/VcsPlugins/vcsGit/GitCopyDialog.py", + "eric6/Plugins/VcsPlugins/vcsGit/GitDescribeDialog.py", + "eric6/Plugins/VcsPlugins/vcsGit/GitDialog.py", + "eric6/Plugins/VcsPlugins/vcsGit/GitDiffDialog.py", + "eric6/Plugins/VcsPlugins/vcsGit/GitDiffGenerator.py", + "eric6/Plugins/VcsPlugins/vcsGit/GitDiffHighlighter.py", + "eric6/Plugins/VcsPlugins/vcsGit/GitDiffParser.py", + "eric6/Plugins/VcsPlugins/vcsGit/GitFetchDialog.py", + "eric6/Plugins/VcsPlugins/vcsGit/GitListDialog.py", + "eric6/Plugins/VcsPlugins/vcsGit/GitLogBrowserDialog.py", + "eric6/Plugins/VcsPlugins/vcsGit/GitMergeDialog.py", + "eric6/Plugins/VcsPlugins/vcsGit/GitNewProjectOptionsDialog.py", + "eric6/Plugins/VcsPlugins/vcsGit/GitOptionsDialog.py", + "eric6/Plugins/VcsPlugins/vcsGit/GitPatchFilesDialog.py", + "eric6/Plugins/VcsPlugins/vcsGit/GitPatchStatisticsDialog.py", + "eric6/Plugins/VcsPlugins/vcsGit/GitPullDialog.py", + "eric6/Plugins/VcsPlugins/vcsGit/GitPushDialog.py", + "eric6/Plugins/VcsPlugins/vcsGit/GitReflogBrowserDialog.py", + "eric6/Plugins/VcsPlugins/vcsGit/GitRemoteCredentialsDialog.py", + "eric6/Plugins/VcsPlugins/vcsGit/GitRemoteRepositoriesDialog.py", + "eric6/Plugins/VcsPlugins/vcsGit/GitRevisionSelectionDialog.py", + "eric6/Plugins/VcsPlugins/vcsGit/GitRevisionsSelectionDialog.py", + "eric6/Plugins/VcsPlugins/vcsGit/GitStashBrowserDialog.py", + "eric6/Plugins/VcsPlugins/vcsGit/GitStashDataDialog.py", + "eric6/Plugins/VcsPlugins/vcsGit/GitStatusDialog.py", + "eric6/Plugins/VcsPlugins/vcsGit/GitStatusMonitorThread.py", + "eric6/Plugins/VcsPlugins/vcsGit/GitSubmoduleAddDialog.py", + "eric6/Plugins/VcsPlugins/vcsGit/GitSubmodulesDeinitDialog.py", + "eric6/Plugins/VcsPlugins/vcsGit/GitSubmodulesListDialog.py", + "eric6/Plugins/VcsPlugins/vcsGit/GitSubmodulesStatusDialog.py", + "eric6/Plugins/VcsPlugins/vcsGit/GitSubmodulesSummaryOptionsDialog.py", + "eric6/Plugins/VcsPlugins/vcsGit/GitSubmodulesSyncDialog.py", + "eric6/Plugins/VcsPlugins/vcsGit/GitSubmodulesUpdateOptionsDialog.py", + "eric6/Plugins/VcsPlugins/vcsGit/GitTagBranchListDialog.py", + "eric6/Plugins/VcsPlugins/vcsGit/GitTagDialog.py", + "eric6/Plugins/VcsPlugins/vcsGit/GitUserConfigDataDialog.py", + "eric6/Plugins/VcsPlugins/vcsGit/GitUtilities.py", + "eric6/Plugins/VcsPlugins/vcsGit/ProjectBrowserHelper.py", + "eric6/Plugins/VcsPlugins/vcsGit/ProjectHelper.py", + "eric6/Plugins/VcsPlugins/vcsGit/__init__.py", + "eric6/Plugins/VcsPlugins/vcsGit/git.py", + "eric6/Plugins/VcsPlugins/vcsMercurial/CloseheadExtension/HgCloseHeadSelectionDialog.py", + "eric6/Plugins/VcsPlugins/vcsMercurial/CloseheadExtension/ProjectHelper.py", + "eric6/Plugins/VcsPlugins/vcsMercurial/CloseheadExtension/__init__.py", + "eric6/Plugins/VcsPlugins/vcsMercurial/CloseheadExtension/closehead.py", + "eric6/Plugins/VcsPlugins/vcsMercurial/Config.py", + "eric6/Plugins/VcsPlugins/vcsMercurial/ConfigurationPage/MercurialPage.py", + "eric6/Plugins/VcsPlugins/vcsMercurial/ConfigurationPage/__init__.py", + "eric6/Plugins/VcsPlugins/vcsMercurial/GpgExtension/HgGpgSignDialog.py", + "eric6/Plugins/VcsPlugins/vcsMercurial/GpgExtension/HgGpgSignaturesDialog.py", + "eric6/Plugins/VcsPlugins/vcsMercurial/GpgExtension/ProjectHelper.py", + "eric6/Plugins/VcsPlugins/vcsMercurial/GpgExtension/__init__.py", + "eric6/Plugins/VcsPlugins/vcsMercurial/GpgExtension/gpg.py", + "eric6/Plugins/VcsPlugins/vcsMercurial/HgAddSubrepositoryDialog.py", + "eric6/Plugins/VcsPlugins/vcsMercurial/HgAnnotateDialog.py", + "eric6/Plugins/VcsPlugins/vcsMercurial/HgArchiveDialog.py", + "eric6/Plugins/VcsPlugins/vcsMercurial/HgBackoutDialog.py", + "eric6/Plugins/VcsPlugins/vcsMercurial/HgBookmarkDialog.py", + "eric6/Plugins/VcsPlugins/vcsMercurial/HgBookmarkRenameDialog.py", + "eric6/Plugins/VcsPlugins/vcsMercurial/HgBookmarksInOutDialog.py", + "eric6/Plugins/VcsPlugins/vcsMercurial/HgBookmarksListDialog.py", + "eric6/Plugins/VcsPlugins/vcsMercurial/HgBranchInputDialog.py", + "eric6/Plugins/VcsPlugins/vcsMercurial/HgBundleDialog.py", + "eric6/Plugins/VcsPlugins/vcsMercurial/HgClient.py", + "eric6/Plugins/VcsPlugins/vcsMercurial/HgClientPromptDialog.py", + "eric6/Plugins/VcsPlugins/vcsMercurial/HgCommandDialog.py", + "eric6/Plugins/VcsPlugins/vcsMercurial/HgCommitDialog.py", + "eric6/Plugins/VcsPlugins/vcsMercurial/HgConflictsListDialog.py", + "eric6/Plugins/VcsPlugins/vcsMercurial/HgCopyDialog.py", + "eric6/Plugins/VcsPlugins/vcsMercurial/HgDialog.py", + "eric6/Plugins/VcsPlugins/vcsMercurial/HgDiffDialog.py", + "eric6/Plugins/VcsPlugins/vcsMercurial/HgDiffGenerator.py", + "eric6/Plugins/VcsPlugins/vcsMercurial/HgDiffHighlighter.py", + "eric6/Plugins/VcsPlugins/vcsMercurial/HgExportDialog.py", + "eric6/Plugins/VcsPlugins/vcsMercurial/HgExtension.py", + "eric6/Plugins/VcsPlugins/vcsMercurial/HgExtensionProjectBrowserHelper.py", + "eric6/Plugins/VcsPlugins/vcsMercurial/HgExtensionProjectHelper.py", + "eric6/Plugins/VcsPlugins/vcsMercurial/HgGraftDialog.py", + "eric6/Plugins/VcsPlugins/vcsMercurial/HgImportDialog.py", + "eric6/Plugins/VcsPlugins/vcsMercurial/HgLogBrowserDialog.py", + "eric6/Plugins/VcsPlugins/vcsMercurial/HgMergeDialog.py", + "eric6/Plugins/VcsPlugins/vcsMercurial/HgNewProjectOptionsDialog.py", + "eric6/Plugins/VcsPlugins/vcsMercurial/HgOptionsDialog.py", + "eric6/Plugins/VcsPlugins/vcsMercurial/HgPhaseDialog.py", + "eric6/Plugins/VcsPlugins/vcsMercurial/HgRemoveSubrepositoriesDialog.py", + "eric6/Plugins/VcsPlugins/vcsMercurial/HgRepoConfigDataDialog.py", + "eric6/Plugins/VcsPlugins/vcsMercurial/HgRevisionSelectionDialog.py", + "eric6/Plugins/VcsPlugins/vcsMercurial/HgRevisionsSelectionDialog.py", + "eric6/Plugins/VcsPlugins/vcsMercurial/HgServeDialog.py", + "eric6/Plugins/VcsPlugins/vcsMercurial/HgStatusDialog.py", + "eric6/Plugins/VcsPlugins/vcsMercurial/HgStatusMonitorThread.py", + "eric6/Plugins/VcsPlugins/vcsMercurial/HgSummaryDialog.py", + "eric6/Plugins/VcsPlugins/vcsMercurial/HgTagBranchListDialog.py", + "eric6/Plugins/VcsPlugins/vcsMercurial/HgTagDialog.py", + "eric6/Plugins/VcsPlugins/vcsMercurial/HgUserConfigDialog.py", + "eric6/Plugins/VcsPlugins/vcsMercurial/HgUserConfigHostFingerprintDialog.py", + "eric6/Plugins/VcsPlugins/vcsMercurial/HgUserConfigHostMinimumProtocolDialog.py", + "eric6/Plugins/VcsPlugins/vcsMercurial/HgUtilities.py", + "eric6/Plugins/VcsPlugins/vcsMercurial/HisteditExtension/HgHisteditCommitEditor.py", + "eric6/Plugins/VcsPlugins/vcsMercurial/HisteditExtension/HgHisteditConfigDialog.py", + "eric6/Plugins/VcsPlugins/vcsMercurial/HisteditExtension/HgHisteditEditor.py", + "eric6/Plugins/VcsPlugins/vcsMercurial/HisteditExtension/HgHisteditPlanEditor.py", + "eric6/Plugins/VcsPlugins/vcsMercurial/HisteditExtension/ProjectHelper.py", + "eric6/Plugins/VcsPlugins/vcsMercurial/HisteditExtension/__init__.py", + "eric6/Plugins/VcsPlugins/vcsMercurial/HisteditExtension/histedit.py", + "eric6/Plugins/VcsPlugins/vcsMercurial/LargefilesExtension/LfConvertDataDialog.py", + "eric6/Plugins/VcsPlugins/vcsMercurial/LargefilesExtension/LfRevisionsInputDialog.py", + "eric6/Plugins/VcsPlugins/vcsMercurial/LargefilesExtension/ProjectBrowserHelper.py", + "eric6/Plugins/VcsPlugins/vcsMercurial/LargefilesExtension/ProjectHelper.py", + "eric6/Plugins/VcsPlugins/vcsMercurial/LargefilesExtension/__init__.py", + "eric6/Plugins/VcsPlugins/vcsMercurial/LargefilesExtension/largefiles.py", + "eric6/Plugins/VcsPlugins/vcsMercurial/ProjectBrowserHelper.py", + "eric6/Plugins/VcsPlugins/vcsMercurial/ProjectHelper.py", + "eric6/Plugins/VcsPlugins/vcsMercurial/PurgeExtension/HgPurgeListDialog.py", + "eric6/Plugins/VcsPlugins/vcsMercurial/PurgeExtension/ProjectHelper.py", + "eric6/Plugins/VcsPlugins/vcsMercurial/PurgeExtension/__init__.py", + "eric6/Plugins/VcsPlugins/vcsMercurial/PurgeExtension/purge.py", + "eric6/Plugins/VcsPlugins/vcsMercurial/QueuesExtension/HgQueuesDefineGuardsDialog.py", + "eric6/Plugins/VcsPlugins/vcsMercurial/QueuesExtension/HgQueuesFoldDialog.py", + "eric6/Plugins/VcsPlugins/vcsMercurial/QueuesExtension/HgQueuesGuardsSelectionDialog.py", + "eric6/Plugins/VcsPlugins/vcsMercurial/QueuesExtension/HgQueuesHeaderDialog.py", + "eric6/Plugins/VcsPlugins/vcsMercurial/QueuesExtension/HgQueuesListAllGuardsDialog.py", + "eric6/Plugins/VcsPlugins/vcsMercurial/QueuesExtension/HgQueuesListDialog.py", + "eric6/Plugins/VcsPlugins/vcsMercurial/QueuesExtension/HgQueuesListGuardsDialog.py", + "eric6/Plugins/VcsPlugins/vcsMercurial/QueuesExtension/HgQueuesNewPatchDialog.py", + "eric6/Plugins/VcsPlugins/vcsMercurial/QueuesExtension/HgQueuesQueueManagementDialog.py", + "eric6/Plugins/VcsPlugins/vcsMercurial/QueuesExtension/HgQueuesRenamePatchDialog.py", + "eric6/Plugins/VcsPlugins/vcsMercurial/QueuesExtension/ProjectHelper.py", + "eric6/Plugins/VcsPlugins/vcsMercurial/QueuesExtension/__init__.py", + "eric6/Plugins/VcsPlugins/vcsMercurial/QueuesExtension/queues.py", + "eric6/Plugins/VcsPlugins/vcsMercurial/RebaseExtension/HgRebaseDialog.py", + "eric6/Plugins/VcsPlugins/vcsMercurial/RebaseExtension/ProjectHelper.py", + "eric6/Plugins/VcsPlugins/vcsMercurial/RebaseExtension/__init__.py", + "eric6/Plugins/VcsPlugins/vcsMercurial/RebaseExtension/rebase.py", + "eric6/Plugins/VcsPlugins/vcsMercurial/ShelveExtension/HgShelveBrowserDialog.py", + "eric6/Plugins/VcsPlugins/vcsMercurial/ShelveExtension/HgShelveDataDialog.py", + "eric6/Plugins/VcsPlugins/vcsMercurial/ShelveExtension/HgShelvesSelectionDialog.py", + "eric6/Plugins/VcsPlugins/vcsMercurial/ShelveExtension/HgUnshelveDataDialog.py", + "eric6/Plugins/VcsPlugins/vcsMercurial/ShelveExtension/ProjectBrowserHelper.py", + "eric6/Plugins/VcsPlugins/vcsMercurial/ShelveExtension/ProjectHelper.py", + "eric6/Plugins/VcsPlugins/vcsMercurial/ShelveExtension/__init__.py", + "eric6/Plugins/VcsPlugins/vcsMercurial/ShelveExtension/shelve.py", + "eric6/Plugins/VcsPlugins/vcsMercurial/StripExtension/HgStripDialog.py", + "eric6/Plugins/VcsPlugins/vcsMercurial/StripExtension/ProjectHelper.py", + "eric6/Plugins/VcsPlugins/vcsMercurial/StripExtension/__init__.py", + "eric6/Plugins/VcsPlugins/vcsMercurial/StripExtension/strip.py", + "eric6/Plugins/VcsPlugins/vcsMercurial/__init__.py", + "eric6/Plugins/VcsPlugins/vcsMercurial/hg.py", + "eric6/Plugins/VcsPlugins/vcsPySvn/Config.py", + "eric6/Plugins/VcsPlugins/vcsPySvn/ConfigurationPage/SubversionPage.py", + "eric6/Plugins/VcsPlugins/vcsPySvn/ConfigurationPage/__init__.py", + "eric6/Plugins/VcsPlugins/vcsPySvn/ProjectBrowserHelper.py", + "eric6/Plugins/VcsPlugins/vcsPySvn/ProjectHelper.py", + "eric6/Plugins/VcsPlugins/vcsPySvn/SvnBlameDialog.py", + "eric6/Plugins/VcsPlugins/vcsPySvn/SvnChangeListsDialog.py", + "eric6/Plugins/VcsPlugins/vcsPySvn/SvnCommandDialog.py", + "eric6/Plugins/VcsPlugins/vcsPySvn/SvnCommitDialog.py", + "eric6/Plugins/VcsPlugins/vcsPySvn/SvnConst.py", + "eric6/Plugins/VcsPlugins/vcsPySvn/SvnCopyDialog.py", + "eric6/Plugins/VcsPlugins/vcsPySvn/SvnDialog.py", + "eric6/Plugins/VcsPlugins/vcsPySvn/SvnDialogMixin.py", + "eric6/Plugins/VcsPlugins/vcsPySvn/SvnDiffDialog.py", + "eric6/Plugins/VcsPlugins/vcsPySvn/SvnDiffHighlighter.py", + "eric6/Plugins/VcsPlugins/vcsPySvn/SvnInfoDialog.py", + "eric6/Plugins/VcsPlugins/vcsPySvn/SvnLogBrowserDialog.py", + "eric6/Plugins/VcsPlugins/vcsPySvn/SvnLoginDialog.py", + "eric6/Plugins/VcsPlugins/vcsPySvn/SvnMergeDialog.py", + "eric6/Plugins/VcsPlugins/vcsPySvn/SvnNewProjectOptionsDialog.py", + "eric6/Plugins/VcsPlugins/vcsPySvn/SvnOptionsDialog.py", + "eric6/Plugins/VcsPlugins/vcsPySvn/SvnPropDelDialog.py", + "eric6/Plugins/VcsPlugins/vcsPySvn/SvnPropListDialog.py", + "eric6/Plugins/VcsPlugins/vcsPySvn/SvnPropSetDialog.py", + "eric6/Plugins/VcsPlugins/vcsPySvn/SvnRelocateDialog.py", + "eric6/Plugins/VcsPlugins/vcsPySvn/SvnRepoBrowserDialog.py", + "eric6/Plugins/VcsPlugins/vcsPySvn/SvnRevisionSelectionDialog.py", + "eric6/Plugins/VcsPlugins/vcsPySvn/SvnStatusDialog.py", + "eric6/Plugins/VcsPlugins/vcsPySvn/SvnStatusMonitorThread.py", + "eric6/Plugins/VcsPlugins/vcsPySvn/SvnSwitchDialog.py", + "eric6/Plugins/VcsPlugins/vcsPySvn/SvnTagBranchListDialog.py", + "eric6/Plugins/VcsPlugins/vcsPySvn/SvnTagDialog.py", + "eric6/Plugins/VcsPlugins/vcsPySvn/SvnUrlSelectionDialog.py", + "eric6/Plugins/VcsPlugins/vcsPySvn/SvnUtilities.py", + "eric6/Plugins/VcsPlugins/vcsPySvn/__init__.py", + "eric6/Plugins/VcsPlugins/vcsPySvn/subversion.py", + "eric6/Plugins/VcsPlugins/vcsSubversion/Config.py", + "eric6/Plugins/VcsPlugins/vcsSubversion/ConfigurationPage/SubversionPage.py", + "eric6/Plugins/VcsPlugins/vcsSubversion/ConfigurationPage/__init__.py", + "eric6/Plugins/VcsPlugins/vcsSubversion/ProjectBrowserHelper.py", + "eric6/Plugins/VcsPlugins/vcsSubversion/ProjectHelper.py", + "eric6/Plugins/VcsPlugins/vcsSubversion/SvnBlameDialog.py", + "eric6/Plugins/VcsPlugins/vcsSubversion/SvnChangeListsDialog.py", + "eric6/Plugins/VcsPlugins/vcsSubversion/SvnCommandDialog.py", + "eric6/Plugins/VcsPlugins/vcsSubversion/SvnCommitDialog.py", + "eric6/Plugins/VcsPlugins/vcsSubversion/SvnCopyDialog.py", + "eric6/Plugins/VcsPlugins/vcsSubversion/SvnDialog.py", + "eric6/Plugins/VcsPlugins/vcsSubversion/SvnDiffDialog.py", + "eric6/Plugins/VcsPlugins/vcsSubversion/SvnDiffHighlighter.py", + "eric6/Plugins/VcsPlugins/vcsSubversion/SvnLogBrowserDialog.py", + "eric6/Plugins/VcsPlugins/vcsSubversion/SvnMergeDialog.py", + "eric6/Plugins/VcsPlugins/vcsSubversion/SvnNewProjectOptionsDialog.py", + "eric6/Plugins/VcsPlugins/vcsSubversion/SvnOptionsDialog.py", + "eric6/Plugins/VcsPlugins/vcsSubversion/SvnPropListDialog.py", + "eric6/Plugins/VcsPlugins/vcsSubversion/SvnPropSetDialog.py", + "eric6/Plugins/VcsPlugins/vcsSubversion/SvnRelocateDialog.py", + "eric6/Plugins/VcsPlugins/vcsSubversion/SvnRepoBrowserDialog.py", + "eric6/Plugins/VcsPlugins/vcsSubversion/SvnRevisionSelectionDialog.py", + "eric6/Plugins/VcsPlugins/vcsSubversion/SvnStatusDialog.py", + "eric6/Plugins/VcsPlugins/vcsSubversion/SvnStatusMonitorThread.py", + "eric6/Plugins/VcsPlugins/vcsSubversion/SvnSwitchDialog.py", + "eric6/Plugins/VcsPlugins/vcsSubversion/SvnTagBranchListDialog.py", + "eric6/Plugins/VcsPlugins/vcsSubversion/SvnTagDialog.py", + "eric6/Plugins/VcsPlugins/vcsSubversion/SvnUrlSelectionDialog.py", + "eric6/Plugins/VcsPlugins/vcsSubversion/SvnUtilities.py", + "eric6/Plugins/VcsPlugins/vcsSubversion/__init__.py", + "eric6/Plugins/VcsPlugins/vcsSubversion/subversion.py", + "eric6/Plugins/ViewManagerPlugins/Listspace/Listspace.py", + "eric6/Plugins/ViewManagerPlugins/Listspace/__init__.py", + "eric6/Plugins/ViewManagerPlugins/Tabview/Tabview.py", + "eric6/Plugins/ViewManagerPlugins/Tabview/__init__.py", + "eric6/Plugins/ViewManagerPlugins/__init__.py", + "eric6/Plugins/WizardPlugins/ColorDialogWizard/ColorDialogWizardDialog.py", + "eric6/Plugins/WizardPlugins/ColorDialogWizard/__init__.py", + "eric6/Plugins/WizardPlugins/DotDesktopWizard/DotDesktopListSelectionDialog.py", + "eric6/Plugins/WizardPlugins/DotDesktopWizard/DotDesktopWizardDialog.py", + "eric6/Plugins/WizardPlugins/DotDesktopWizard/__init__.py", + "eric6/Plugins/WizardPlugins/E5MessageBoxWizard/E5MessageBoxWizardDialog.py", + "eric6/Plugins/WizardPlugins/E5MessageBoxWizard/__init__.py", + "eric6/Plugins/WizardPlugins/EricPluginWizard/PluginWizardDialog.py", + "eric6/Plugins/WizardPlugins/EricPluginWizard/Templates.py", + "eric6/Plugins/WizardPlugins/EricPluginWizard/__init__.py", + "eric6/Plugins/WizardPlugins/FileDialogWizard/FileDialogWizardDialog.py", + "eric6/Plugins/WizardPlugins/FileDialogWizard/__init__.py", + "eric6/Plugins/WizardPlugins/FontDialogWizard/FontDialogWizardDialog.py", + "eric6/Plugins/WizardPlugins/FontDialogWizard/__init__.py", + "eric6/Plugins/WizardPlugins/InputDialogWizard/InputDialogWizardDialog.py", + "eric6/Plugins/WizardPlugins/InputDialogWizard/__init__.py", + "eric6/Plugins/WizardPlugins/MessageBoxWizard/MessageBoxWizardDialog.py", + "eric6/Plugins/WizardPlugins/MessageBoxWizard/__init__.py", + "eric6/Plugins/WizardPlugins/PyRegExpWizard/PyRegExpWizardCharactersDialog.py", + "eric6/Plugins/WizardPlugins/PyRegExpWizard/PyRegExpWizardDialog.py", + "eric6/Plugins/WizardPlugins/PyRegExpWizard/PyRegExpWizardRepeatDialog.py", + "eric6/Plugins/WizardPlugins/PyRegExpWizard/__init__.py", + "eric6/Plugins/WizardPlugins/QRegularExpressionWizard/QRegularExpressionWizardCharactersDialog.py", + "eric6/Plugins/WizardPlugins/QRegularExpressionWizard/QRegularExpressionWizardDialog.py", + "eric6/Plugins/WizardPlugins/QRegularExpressionWizard/QRegularExpressionWizardRepeatDialog.py", + "eric6/Plugins/WizardPlugins/QRegularExpressionWizard/QRegularExpressionWizardServer.py", + "eric6/Plugins/WizardPlugins/QRegularExpressionWizard/__init__.py", + "eric6/Plugins/WizardPlugins/SetupWizard/SetupWizardDialog.py", + "eric6/Plugins/WizardPlugins/SetupWizard/__init__.py", + "eric6/Plugins/WizardPlugins/__init__.py", + "eric6/Plugins/__init__.py", + "eric6/Preferences/ConfigurationDialog.py", + "eric6/Preferences/ConfigurationPages/ApplicationPage.py", + "eric6/Preferences/ConfigurationPages/CondaPage.py", + "eric6/Preferences/ConfigurationPages/ConfigurationPageBase.py", + "eric6/Preferences/ConfigurationPages/CooperationPage.py", + "eric6/Preferences/ConfigurationPages/CorbaPage.py", + "eric6/Preferences/ConfigurationPages/DebuggerGeneralPage.py", + "eric6/Preferences/ConfigurationPages/DebuggerPython3Page.py", + "eric6/Preferences/ConfigurationPages/DiffColoursPage.py", + "eric6/Preferences/ConfigurationPages/EditorAPIsPage.py", + "eric6/Preferences/ConfigurationPages/EditorAutocompletionPage.py", + "eric6/Preferences/ConfigurationPages/EditorAutocompletionQScintillaPage.py", + "eric6/Preferences/ConfigurationPages/EditorCalltipsPage.py", + "eric6/Preferences/ConfigurationPages/EditorCalltipsQScintillaPage.py", + "eric6/Preferences/ConfigurationPages/EditorDocViewerPage.py", + "eric6/Preferences/ConfigurationPages/EditorExportersPage.py", + "eric6/Preferences/ConfigurationPages/EditorFilePage.py", + "eric6/Preferences/ConfigurationPages/EditorGeneralPage.py", + "eric6/Preferences/ConfigurationPages/EditorHighlightersPage.py", + "eric6/Preferences/ConfigurationPages/EditorHighlightingStylesPage.py", + "eric6/Preferences/ConfigurationPages/EditorKeywordsPage.py", + "eric6/Preferences/ConfigurationPages/EditorLanguageTabIndentOverrideDialog.py", + "eric6/Preferences/ConfigurationPages/EditorMouseClickHandlerPage.py", + "eric6/Preferences/ConfigurationPages/EditorPropertiesPage.py", + "eric6/Preferences/ConfigurationPages/EditorSearchPage.py", + "eric6/Preferences/ConfigurationPages/EditorSpellCheckingPage.py", + "eric6/Preferences/ConfigurationPages/EditorStylesPage.py", + "eric6/Preferences/ConfigurationPages/EditorSyntaxPage.py", + "eric6/Preferences/ConfigurationPages/EditorTypingPage.py", + "eric6/Preferences/ConfigurationPages/EmailPage.py", + "eric6/Preferences/ConfigurationPages/GraphicsPage.py", + "eric6/Preferences/ConfigurationPages/HelpDocumentationPage.py", + "eric6/Preferences/ConfigurationPages/HelpViewersPage.py", + "eric6/Preferences/ConfigurationPages/HexEditorPage.py", + "eric6/Preferences/ConfigurationPages/IconsPage.py", + "eric6/Preferences/ConfigurationPages/IconsPreviewDialog.py", + "eric6/Preferences/ConfigurationPages/InterfacePage.py", + "eric6/Preferences/ConfigurationPages/IrcPage.py", + "eric6/Preferences/ConfigurationPages/LogViewerPage.py", + "eric6/Preferences/ConfigurationPages/MasterPasswordEntryDialog.py", + "eric6/Preferences/ConfigurationPages/MicroPythonPage.py", + "eric6/Preferences/ConfigurationPages/MimeTypesPage.py", + "eric6/Preferences/ConfigurationPages/MultiProjectPage.py", + "eric6/Preferences/ConfigurationPages/NetworkPage.py", + "eric6/Preferences/ConfigurationPages/NotificationsPage.py", + "eric6/Preferences/ConfigurationPages/PipPage.py", + "eric6/Preferences/ConfigurationPages/PluginManagerPage.py", + "eric6/Preferences/ConfigurationPages/PrinterPage.py", + "eric6/Preferences/ConfigurationPages/ProjectBrowserPage.py", + "eric6/Preferences/ConfigurationPages/ProjectPage.py", + "eric6/Preferences/ConfigurationPages/ProtobufPage.py", + "eric6/Preferences/ConfigurationPages/PythonPage.py", + "eric6/Preferences/ConfigurationPages/QtPage.py", + "eric6/Preferences/ConfigurationPages/SecurityPage.py", + "eric6/Preferences/ConfigurationPages/ShellPage.py", + "eric6/Preferences/ConfigurationPages/TasksPage.py", + "eric6/Preferences/ConfigurationPages/TemplatesPage.py", + "eric6/Preferences/ConfigurationPages/TrayStarterPage.py", + "eric6/Preferences/ConfigurationPages/VcsPage.py", + "eric6/Preferences/ConfigurationPages/ViewmanagerPage.py", + "eric6/Preferences/ConfigurationPages/WebBrowserAppearancePage.py", + "eric6/Preferences/ConfigurationPages/WebBrowserFlashCookieManagerPage.py", + "eric6/Preferences/ConfigurationPages/WebBrowserInterfacePage.py", + "eric6/Preferences/ConfigurationPages/WebBrowserPage.py", + "eric6/Preferences/ConfigurationPages/WebBrowserSpellCheckingPage.py", + "eric6/Preferences/ConfigurationPages/WebBrowserVirusTotalPage.py", + "eric6/Preferences/ConfigurationPages/__init__.py", + "eric6/Preferences/MouseClickDialog.py", + "eric6/Preferences/PreferencesLexer.py", + "eric6/Preferences/ProgramsDialog.py", + "eric6/Preferences/ShortcutDialog.py", + "eric6/Preferences/Shortcuts.py", + "eric6/Preferences/ShortcutsDialog.py", + "eric6/Preferences/SubstyleDefinitionDialog.py", + "eric6/Preferences/ToolConfigurationDialog.py", + "eric6/Preferences/ToolGroupConfigurationDialog.py", + "eric6/Preferences/ViewProfileDialog.py", + "eric6/Preferences/__init__.py", + "eric6/Project/AddDirectoryDialog.py", + "eric6/Project/AddFileDialog.py", + "eric6/Project/AddFoundFilesDialog.py", + "eric6/Project/AddLanguageDialog.py", + "eric6/Project/CreateDialogCodeDialog.py", + "eric6/Project/DebuggerPropertiesDialog.py", + "eric6/Project/FiletypeAssociationDialog.py", + "eric6/Project/IdlCompilerDefineNameDialog.py", + "eric6/Project/IdlCompilerOptionsDialog.py", + "eric6/Project/LexerAssociationDialog.py", + "eric6/Project/MakePropertiesDialog.py", + "eric6/Project/NewDialogClassDialog.py", + "eric6/Project/NewPythonPackageDialog.py", + "eric6/Project/Project.py", + "eric6/Project/ProjectBaseBrowser.py", + "eric6/Project/ProjectBrowser.py", + "eric6/Project/ProjectBrowserFlags.py", + "eric6/Project/ProjectBrowserModel.py", + "eric6/Project/ProjectBrowserSortFilterProxyModel.py", + "eric6/Project/ProjectFile.py", + "eric6/Project/ProjectFormsBrowser.py", + "eric6/Project/ProjectInterfacesBrowser.py", + "eric6/Project/ProjectOthersBrowser.py", + "eric6/Project/ProjectProtocolsBrowser.py", + "eric6/Project/ProjectResourcesBrowser.py", + "eric6/Project/ProjectSourcesBrowser.py", + "eric6/Project/ProjectTranslationsBrowser.py", + "eric6/Project/PropertiesDialog.py", + "eric6/Project/QuickFindFileDialog.py", + "eric6/Project/RccCompilerOptionsDialog.py", + "eric6/Project/SpellingPropertiesDialog.py", + "eric6/Project/TranslationPropertiesDialog.py", + "eric6/Project/UicCompilerOptionsDialog.py", + "eric6/Project/UicLoadUi5.py", + "eric6/Project/UicLoadUi6.py", + "eric6/Project/UserPropertiesDialog.py", + "eric6/Project/__init__.py", + "eric6/PyUnit/UnittestDialog.py", + "eric6/PyUnit/__init__.py", + "eric6/QScintilla/APIsManager.py", + "eric6/QScintilla/DocstringGenerator/BaseDocstringGenerator.py", + "eric6/QScintilla/DocstringGenerator/EricdocGenerator.py", + "eric6/QScintilla/DocstringGenerator/GoogledocGenerator.py", + "eric6/QScintilla/DocstringGenerator/NumpydocGenerator.py", + "eric6/QScintilla/DocstringGenerator/PyDocstringGenerator.py", + "eric6/QScintilla/DocstringGenerator/SphinxdocGenerator.py", + "eric6/QScintilla/DocstringGenerator/__init__.py", + "eric6/QScintilla/Editor.py", + "eric6/QScintilla/EditorAssembly.py", + "eric6/QScintilla/EditorButtonsWidget.py", + "eric6/QScintilla/EditorMarkerMap.py", + "eric6/QScintilla/EditorOutline.py", + "eric6/QScintilla/EditorOutlineModel.py", + "eric6/QScintilla/Exporters/ExporterBase.py", + "eric6/QScintilla/Exporters/ExporterHTML.py", + "eric6/QScintilla/Exporters/ExporterODT.py", + "eric6/QScintilla/Exporters/ExporterPDF.py", + "eric6/QScintilla/Exporters/ExporterRTF.py", + "eric6/QScintilla/Exporters/ExporterTEX.py", + "eric6/QScintilla/Exporters/__init__.py", + "eric6/QScintilla/GotoDialog.py", + "eric6/QScintilla/KeySequenceTranslator.py", + "eric6/QScintilla/Lexers/Lexer.py", + "eric6/QScintilla/Lexers/LexerBash.py", + "eric6/QScintilla/Lexers/LexerBatch.py", + "eric6/QScintilla/Lexers/LexerCMake.py", + "eric6/QScintilla/Lexers/LexerCPP.py", + "eric6/QScintilla/Lexers/LexerCSS.py", + "eric6/QScintilla/Lexers/LexerCSharp.py", + "eric6/QScintilla/Lexers/LexerCoffeeScript.py", + "eric6/QScintilla/Lexers/LexerContainer.py", + "eric6/QScintilla/Lexers/LexerD.py", + "eric6/QScintilla/Lexers/LexerDiff.py", + "eric6/QScintilla/Lexers/LexerFortran.py", + "eric6/QScintilla/Lexers/LexerFortran77.py", + "eric6/QScintilla/Lexers/LexerHTML.py", + "eric6/QScintilla/Lexers/LexerIDL.py", + "eric6/QScintilla/Lexers/LexerJSON.py", + "eric6/QScintilla/Lexers/LexerJava.py", + "eric6/QScintilla/Lexers/LexerJavaScript.py", + "eric6/QScintilla/Lexers/LexerLua.py", + "eric6/QScintilla/Lexers/LexerMakefile.py", + "eric6/QScintilla/Lexers/LexerMarkdown.py", + "eric6/QScintilla/Lexers/LexerMatlab.py", + "eric6/QScintilla/Lexers/LexerOctave.py", + "eric6/QScintilla/Lexers/LexerPO.py", + "eric6/QScintilla/Lexers/LexerPOV.py", + "eric6/QScintilla/Lexers/LexerPascal.py", + "eric6/QScintilla/Lexers/LexerPerl.py", + "eric6/QScintilla/Lexers/LexerPostScript.py", + "eric6/QScintilla/Lexers/LexerProperties.py", + "eric6/QScintilla/Lexers/LexerPygments.py", + "eric6/QScintilla/Lexers/LexerPython.py", + "eric6/QScintilla/Lexers/LexerQSS.py", + "eric6/QScintilla/Lexers/LexerRuby.py", + "eric6/QScintilla/Lexers/LexerSQL.py", + "eric6/QScintilla/Lexers/LexerTCL.py", + "eric6/QScintilla/Lexers/LexerTeX.py", + "eric6/QScintilla/Lexers/LexerVHDL.py", + "eric6/QScintilla/Lexers/LexerXML.py", + "eric6/QScintilla/Lexers/LexerYAML.py", + "eric6/QScintilla/Lexers/SubstyledLexer.py", + "eric6/QScintilla/Lexers/__init__.py", + "eric6/QScintilla/MarkupProviders/HtmlProvider.py", + "eric6/QScintilla/MarkupProviders/HyperlinkMarkupDialog.py", + "eric6/QScintilla/MarkupProviders/ImageMarkupDialog.py", + "eric6/QScintilla/MarkupProviders/MarkdownProvider.py", + "eric6/QScintilla/MarkupProviders/MarkupBase.py", + "eric6/QScintilla/MarkupProviders/RestructuredTextProvider.py", + "eric6/QScintilla/MarkupProviders/__init__.py", + "eric6/QScintilla/MiniEditor.py", + "eric6/QScintilla/Printer.py", + "eric6/QScintilla/QsciScintillaCompat.py", + "eric6/QScintilla/SearchReplaceWidget.py", + "eric6/QScintilla/Shell.py", + "eric6/QScintilla/ShellHistoryDialog.py", + "eric6/QScintilla/ShellWindow.py", + "eric6/QScintilla/SortOptionsDialog.py", + "eric6/QScintilla/SpellChecker.py", + "eric6/QScintilla/SpellCheckingDialog.py", + "eric6/QScintilla/SpellingDictionaryEditDialog.py", + "eric6/QScintilla/TypingCompleters/CompleterBase.py", + "eric6/QScintilla/TypingCompleters/CompleterPython.py", + "eric6/QScintilla/TypingCompleters/CompleterRuby.py", + "eric6/QScintilla/TypingCompleters/CompleterYaml.py", + "eric6/QScintilla/TypingCompleters/__init__.py", + "eric6/QScintilla/ZoomDialog.py", + "eric6/QScintilla/__init__.py", + "eric6/Snapshot/SnapWidget.py", + "eric6/Snapshot/SnapshotDefaultGrabber.py", + "eric6/Snapshot/SnapshotFreehandGrabber.py", + "eric6/Snapshot/SnapshotModes.py", + "eric6/Snapshot/SnapshotPreview.py", + "eric6/Snapshot/SnapshotRegionGrabber.py", + "eric6/Snapshot/SnapshotTimer.py", + "eric6/Snapshot/SnapshotWaylandGrabber.py", + "eric6/Snapshot/__init__.py", + "eric6/SqlBrowser/SqlBrowser.py", + "eric6/SqlBrowser/SqlBrowserWidget.py", + "eric6/SqlBrowser/SqlConnectionDialog.py", + "eric6/SqlBrowser/SqlConnectionWidget.py", + "eric6/SqlBrowser/__init__.py", + "eric6/Tasks/Task.py", + "eric6/Tasks/TaskFilter.py", + "eric6/Tasks/TaskFilterConfigDialog.py", + "eric6/Tasks/TaskPropertiesDialog.py", + "eric6/Tasks/TaskViewer.py", + "eric6/Tasks/__init__.py", + "eric6/Templates/TemplateMultipleVariablesDialog.py", + "eric6/Templates/TemplatePropertiesDialog.py", + "eric6/Templates/TemplateSingleVariableDialog.py", + "eric6/Templates/TemplateViewer.py", + "eric6/Templates/__init__.py", + "eric6/ThirdParty/CharDet/__init__.py", + "eric6/ThirdParty/CharDet/chardet/__init__.py", + "eric6/ThirdParty/CharDet/chardet/big5freq.py", + "eric6/ThirdParty/CharDet/chardet/big5prober.py", + "eric6/ThirdParty/CharDet/chardet/chardistribution.py", + "eric6/ThirdParty/CharDet/chardet/charsetgroupprober.py", + "eric6/ThirdParty/CharDet/chardet/charsetprober.py", + "eric6/ThirdParty/CharDet/chardet/cli/__init__.py", + "eric6/ThirdParty/CharDet/chardet/cli/chardetect.py", + "eric6/ThirdParty/CharDet/chardet/codingstatemachine.py", + "eric6/ThirdParty/CharDet/chardet/compat.py", + "eric6/ThirdParty/CharDet/chardet/cp949prober.py", + "eric6/ThirdParty/CharDet/chardet/enums.py", + "eric6/ThirdParty/CharDet/chardet/escprober.py", + "eric6/ThirdParty/CharDet/chardet/escsm.py", + "eric6/ThirdParty/CharDet/chardet/eucjpprober.py", + "eric6/ThirdParty/CharDet/chardet/euckrfreq.py", + "eric6/ThirdParty/CharDet/chardet/euckrprober.py", + "eric6/ThirdParty/CharDet/chardet/euctwfreq.py", + "eric6/ThirdParty/CharDet/chardet/euctwprober.py", + "eric6/ThirdParty/CharDet/chardet/gb2312freq.py", + "eric6/ThirdParty/CharDet/chardet/gb2312prober.py", + "eric6/ThirdParty/CharDet/chardet/hebrewprober.py", + "eric6/ThirdParty/CharDet/chardet/jisfreq.py", + "eric6/ThirdParty/CharDet/chardet/jpcntx.py", + "eric6/ThirdParty/CharDet/chardet/langbulgarianmodel.py", + "eric6/ThirdParty/CharDet/chardet/langgreekmodel.py", + "eric6/ThirdParty/CharDet/chardet/langhebrewmodel.py", + "eric6/ThirdParty/CharDet/chardet/langhungarianmodel.py", + "eric6/ThirdParty/CharDet/chardet/langrussianmodel.py", + "eric6/ThirdParty/CharDet/chardet/langthaimodel.py", + "eric6/ThirdParty/CharDet/chardet/langturkishmodel.py", + "eric6/ThirdParty/CharDet/chardet/latin1prober.py", + "eric6/ThirdParty/CharDet/chardet/mbcharsetprober.py", + "eric6/ThirdParty/CharDet/chardet/mbcsgroupprober.py", + "eric6/ThirdParty/CharDet/chardet/mbcssm.py", + "eric6/ThirdParty/CharDet/chardet/metadata/__init__.py", + "eric6/ThirdParty/CharDet/chardet/metadata/languages.py", + "eric6/ThirdParty/CharDet/chardet/sbcharsetprober.py", + "eric6/ThirdParty/CharDet/chardet/sbcsgroupprober.py", + "eric6/ThirdParty/CharDet/chardet/sjisprober.py", + "eric6/ThirdParty/CharDet/chardet/universaldetector.py", + "eric6/ThirdParty/CharDet/chardet/utf8prober.py", + "eric6/ThirdParty/CharDet/chardet/version.py", + "eric6/ThirdParty/EditorConfig/__init__.py", + "eric6/ThirdParty/EditorConfig/editorconfig/__init__.py", + "eric6/ThirdParty/EditorConfig/editorconfig/__main__.py", + "eric6/ThirdParty/EditorConfig/editorconfig/compat.py", + "eric6/ThirdParty/EditorConfig/editorconfig/exceptions.py", + "eric6/ThirdParty/EditorConfig/editorconfig/fnmatch.py", + "eric6/ThirdParty/EditorConfig/editorconfig/handler.py", + "eric6/ThirdParty/EditorConfig/editorconfig/ini.py", + "eric6/ThirdParty/EditorConfig/editorconfig/version.py", + "eric6/ThirdParty/EditorConfig/editorconfig/versiontools.py", + "eric6/ThirdParty/Jasy/__init__.py", + "eric6/ThirdParty/Jasy/jasy/__init__.py", + "eric6/ThirdParty/Jasy/jasy/core/Console.py", + "eric6/ThirdParty/Jasy/jasy/core/Text.py", + "eric6/ThirdParty/Jasy/jasy/core/__init__.py", + "eric6/ThirdParty/Jasy/jasy/parse/AbstractNode.py", + "eric6/ThirdParty/Jasy/jasy/parse/__init__.py", + "eric6/ThirdParty/Jasy/jasy/script/__init__.py", + "eric6/ThirdParty/Jasy/jasy/script/api/Comment.py", + "eric6/ThirdParty/Jasy/jasy/script/api/Text.py", + "eric6/ThirdParty/Jasy/jasy/script/api/__init__.py", + "eric6/ThirdParty/Jasy/jasy/script/output/Compressor.py", + "eric6/ThirdParty/Jasy/jasy/script/output/__init__.py", + "eric6/ThirdParty/Jasy/jasy/script/parse/Lang.py", + "eric6/ThirdParty/Jasy/jasy/script/parse/Node.py", + "eric6/ThirdParty/Jasy/jasy/script/parse/Parser.py", + "eric6/ThirdParty/Jasy/jasy/script/parse/VanillaBuilder.py", + "eric6/ThirdParty/Jasy/jasy/script/parse/__init__.py", + "eric6/ThirdParty/Jasy/jasy/script/tokenize/Lang.py", + "eric6/ThirdParty/Jasy/jasy/script/tokenize/Tokenizer.py", + "eric6/ThirdParty/Jasy/jasy/script/tokenize/__init__.py", + "eric6/ThirdParty/Jasy/jasy/script/util/__init__.py", + "eric6/ThirdParty/Pygments/__init__.py", + "eric6/ThirdParty/Pygments/pygments/__init__.py", + "eric6/ThirdParty/Pygments/pygments/__main__.py", + "eric6/ThirdParty/Pygments/pygments/cmdline.py", + "eric6/ThirdParty/Pygments/pygments/console.py", + "eric6/ThirdParty/Pygments/pygments/filter.py", + "eric6/ThirdParty/Pygments/pygments/filters/__init__.py", + "eric6/ThirdParty/Pygments/pygments/formatter.py", + "eric6/ThirdParty/Pygments/pygments/formatters/__init__.py", + "eric6/ThirdParty/Pygments/pygments/formatters/_mapping.py", + "eric6/ThirdParty/Pygments/pygments/formatters/bbcode.py", + "eric6/ThirdParty/Pygments/pygments/formatters/html.py", + "eric6/ThirdParty/Pygments/pygments/formatters/img.py", + "eric6/ThirdParty/Pygments/pygments/formatters/irc.py", + "eric6/ThirdParty/Pygments/pygments/formatters/latex.py", + "eric6/ThirdParty/Pygments/pygments/formatters/other.py", + "eric6/ThirdParty/Pygments/pygments/formatters/rtf.py", + "eric6/ThirdParty/Pygments/pygments/formatters/svg.py", + "eric6/ThirdParty/Pygments/pygments/formatters/terminal.py", + "eric6/ThirdParty/Pygments/pygments/formatters/terminal256.py", + "eric6/ThirdParty/Pygments/pygments/lexer.py", + "eric6/ThirdParty/Pygments/pygments/lexers/__init__.py", + "eric6/ThirdParty/Pygments/pygments/lexers/_asy_builtins.py", + "eric6/ThirdParty/Pygments/pygments/lexers/_cl_builtins.py", + "eric6/ThirdParty/Pygments/pygments/lexers/_cocoa_builtins.py", + "eric6/ThirdParty/Pygments/pygments/lexers/_csound_builtins.py", + "eric6/ThirdParty/Pygments/pygments/lexers/_lasso_builtins.py", + "eric6/ThirdParty/Pygments/pygments/lexers/_lua_builtins.py", + "eric6/ThirdParty/Pygments/pygments/lexers/_mapping.py", + "eric6/ThirdParty/Pygments/pygments/lexers/_mql_builtins.py", + "eric6/ThirdParty/Pygments/pygments/lexers/_mysql_builtins.py", + "eric6/ThirdParty/Pygments/pygments/lexers/_openedge_builtins.py", + "eric6/ThirdParty/Pygments/pygments/lexers/_php_builtins.py", + "eric6/ThirdParty/Pygments/pygments/lexers/_postgres_builtins.py", + "eric6/ThirdParty/Pygments/pygments/lexers/_scilab_builtins.py", + "eric6/ThirdParty/Pygments/pygments/lexers/_sourcemod_builtins.py", + "eric6/ThirdParty/Pygments/pygments/lexers/_stan_builtins.py", + "eric6/ThirdParty/Pygments/pygments/lexers/_stata_builtins.py", + "eric6/ThirdParty/Pygments/pygments/lexers/_tsql_builtins.py", + "eric6/ThirdParty/Pygments/pygments/lexers/_usd_builtins.py", + "eric6/ThirdParty/Pygments/pygments/lexers/_vbscript_builtins.py", + "eric6/ThirdParty/Pygments/pygments/lexers/_vim_builtins.py", + "eric6/ThirdParty/Pygments/pygments/lexers/actionscript.py", + "eric6/ThirdParty/Pygments/pygments/lexers/agile.py", + "eric6/ThirdParty/Pygments/pygments/lexers/algebra.py", + "eric6/ThirdParty/Pygments/pygments/lexers/ambient.py", + "eric6/ThirdParty/Pygments/pygments/lexers/ampl.py", + "eric6/ThirdParty/Pygments/pygments/lexers/apl.py", + "eric6/ThirdParty/Pygments/pygments/lexers/archetype.py", + "eric6/ThirdParty/Pygments/pygments/lexers/arrow.py", + "eric6/ThirdParty/Pygments/pygments/lexers/asm.py", + "eric6/ThirdParty/Pygments/pygments/lexers/automation.py", + "eric6/ThirdParty/Pygments/pygments/lexers/bare.py", + "eric6/ThirdParty/Pygments/pygments/lexers/basic.py", + "eric6/ThirdParty/Pygments/pygments/lexers/bibtex.py", + "eric6/ThirdParty/Pygments/pygments/lexers/boa.py", + "eric6/ThirdParty/Pygments/pygments/lexers/business.py", + "eric6/ThirdParty/Pygments/pygments/lexers/c_cpp.py", + "eric6/ThirdParty/Pygments/pygments/lexers/c_like.py", + "eric6/ThirdParty/Pygments/pygments/lexers/capnproto.py", + "eric6/ThirdParty/Pygments/pygments/lexers/chapel.py", + "eric6/ThirdParty/Pygments/pygments/lexers/clean.py", + "eric6/ThirdParty/Pygments/pygments/lexers/compiled.py", + "eric6/ThirdParty/Pygments/pygments/lexers/configs.py", + "eric6/ThirdParty/Pygments/pygments/lexers/console.py", + "eric6/ThirdParty/Pygments/pygments/lexers/crystal.py", + "eric6/ThirdParty/Pygments/pygments/lexers/csound.py", + "eric6/ThirdParty/Pygments/pygments/lexers/css.py", + "eric6/ThirdParty/Pygments/pygments/lexers/d.py", + "eric6/ThirdParty/Pygments/pygments/lexers/dalvik.py", + "eric6/ThirdParty/Pygments/pygments/lexers/data.py", + "eric6/ThirdParty/Pygments/pygments/lexers/devicetree.py", + "eric6/ThirdParty/Pygments/pygments/lexers/diff.py", + "eric6/ThirdParty/Pygments/pygments/lexers/dotnet.py", + "eric6/ThirdParty/Pygments/pygments/lexers/dsls.py", + "eric6/ThirdParty/Pygments/pygments/lexers/dylan.py", + "eric6/ThirdParty/Pygments/pygments/lexers/ecl.py", + "eric6/ThirdParty/Pygments/pygments/lexers/eiffel.py", + "eric6/ThirdParty/Pygments/pygments/lexers/elm.py", + "eric6/ThirdParty/Pygments/pygments/lexers/email.py", + "eric6/ThirdParty/Pygments/pygments/lexers/erlang.py", + "eric6/ThirdParty/Pygments/pygments/lexers/esoteric.py", + "eric6/ThirdParty/Pygments/pygments/lexers/ezhil.py", + "eric6/ThirdParty/Pygments/pygments/lexers/factor.py", + "eric6/ThirdParty/Pygments/pygments/lexers/fantom.py", + "eric6/ThirdParty/Pygments/pygments/lexers/felix.py", + "eric6/ThirdParty/Pygments/pygments/lexers/floscript.py", + "eric6/ThirdParty/Pygments/pygments/lexers/forth.py", + "eric6/ThirdParty/Pygments/pygments/lexers/fortran.py", + "eric6/ThirdParty/Pygments/pygments/lexers/foxpro.py", + "eric6/ThirdParty/Pygments/pygments/lexers/freefem.py", + "eric6/ThirdParty/Pygments/pygments/lexers/functional.py", + "eric6/ThirdParty/Pygments/pygments/lexers/gdscript.py", + "eric6/ThirdParty/Pygments/pygments/lexers/go.py", + "eric6/ThirdParty/Pygments/pygments/lexers/grammar_notation.py", + "eric6/ThirdParty/Pygments/pygments/lexers/graph.py", + "eric6/ThirdParty/Pygments/pygments/lexers/graphics.py", + "eric6/ThirdParty/Pygments/pygments/lexers/haskell.py", + "eric6/ThirdParty/Pygments/pygments/lexers/haxe.py", + "eric6/ThirdParty/Pygments/pygments/lexers/hdl.py", + "eric6/ThirdParty/Pygments/pygments/lexers/hexdump.py", + "eric6/ThirdParty/Pygments/pygments/lexers/html.py", + "eric6/ThirdParty/Pygments/pygments/lexers/idl.py", + "eric6/ThirdParty/Pygments/pygments/lexers/igor.py", + "eric6/ThirdParty/Pygments/pygments/lexers/inferno.py", + "eric6/ThirdParty/Pygments/pygments/lexers/installers.py", + "eric6/ThirdParty/Pygments/pygments/lexers/int_fiction.py", + "eric6/ThirdParty/Pygments/pygments/lexers/iolang.py", + "eric6/ThirdParty/Pygments/pygments/lexers/j.py", + "eric6/ThirdParty/Pygments/pygments/lexers/javascript.py", + "eric6/ThirdParty/Pygments/pygments/lexers/julia.py", + "eric6/ThirdParty/Pygments/pygments/lexers/jvm.py", + "eric6/ThirdParty/Pygments/pygments/lexers/lisp.py", + "eric6/ThirdParty/Pygments/pygments/lexers/make.py", + "eric6/ThirdParty/Pygments/pygments/lexers/markup.py", + "eric6/ThirdParty/Pygments/pygments/lexers/math.py", + "eric6/ThirdParty/Pygments/pygments/lexers/matlab.py", + "eric6/ThirdParty/Pygments/pygments/lexers/mime.py", + "eric6/ThirdParty/Pygments/pygments/lexers/ml.py", + "eric6/ThirdParty/Pygments/pygments/lexers/modeling.py", + "eric6/ThirdParty/Pygments/pygments/lexers/modula2.py", + "eric6/ThirdParty/Pygments/pygments/lexers/monte.py", + "eric6/ThirdParty/Pygments/pygments/lexers/mosel.py", + "eric6/ThirdParty/Pygments/pygments/lexers/ncl.py", + "eric6/ThirdParty/Pygments/pygments/lexers/nimrod.py", + "eric6/ThirdParty/Pygments/pygments/lexers/nit.py", + "eric6/ThirdParty/Pygments/pygments/lexers/nix.py", + "eric6/ThirdParty/Pygments/pygments/lexers/oberon.py", + "eric6/ThirdParty/Pygments/pygments/lexers/objective.py", + "eric6/ThirdParty/Pygments/pygments/lexers/ooc.py", + "eric6/ThirdParty/Pygments/pygments/lexers/other.py", + "eric6/ThirdParty/Pygments/pygments/lexers/parasail.py", + "eric6/ThirdParty/Pygments/pygments/lexers/parsers.py", + "eric6/ThirdParty/Pygments/pygments/lexers/pascal.py", + "eric6/ThirdParty/Pygments/pygments/lexers/pawn.py", + "eric6/ThirdParty/Pygments/pygments/lexers/perl.py", + "eric6/ThirdParty/Pygments/pygments/lexers/php.py", + "eric6/ThirdParty/Pygments/pygments/lexers/pointless.py", + "eric6/ThirdParty/Pygments/pygments/lexers/pony.py", + "eric6/ThirdParty/Pygments/pygments/lexers/praat.py", + "eric6/ThirdParty/Pygments/pygments/lexers/prolog.py", + "eric6/ThirdParty/Pygments/pygments/lexers/promql.py", + "eric6/ThirdParty/Pygments/pygments/lexers/python.py", + "eric6/ThirdParty/Pygments/pygments/lexers/qvt.py", + "eric6/ThirdParty/Pygments/pygments/lexers/r.py", + "eric6/ThirdParty/Pygments/pygments/lexers/rdf.py", + "eric6/ThirdParty/Pygments/pygments/lexers/rebol.py", + "eric6/ThirdParty/Pygments/pygments/lexers/resource.py", + "eric6/ThirdParty/Pygments/pygments/lexers/ride.py", + "eric6/ThirdParty/Pygments/pygments/lexers/rnc.py", + "eric6/ThirdParty/Pygments/pygments/lexers/roboconf.py", + "eric6/ThirdParty/Pygments/pygments/lexers/robotframework.py", + "eric6/ThirdParty/Pygments/pygments/lexers/ruby.py", + "eric6/ThirdParty/Pygments/pygments/lexers/rust.py", + "eric6/ThirdParty/Pygments/pygments/lexers/sas.py", + "eric6/ThirdParty/Pygments/pygments/lexers/scdoc.py", + "eric6/ThirdParty/Pygments/pygments/lexers/scripting.py", + "eric6/ThirdParty/Pygments/pygments/lexers/sgf.py", + "eric6/ThirdParty/Pygments/pygments/lexers/shell.py", + "eric6/ThirdParty/Pygments/pygments/lexers/sieve.py", + "eric6/ThirdParty/Pygments/pygments/lexers/slash.py", + "eric6/ThirdParty/Pygments/pygments/lexers/smalltalk.py", + "eric6/ThirdParty/Pygments/pygments/lexers/smv.py", + "eric6/ThirdParty/Pygments/pygments/lexers/snobol.py", + "eric6/ThirdParty/Pygments/pygments/lexers/solidity.py", + "eric6/ThirdParty/Pygments/pygments/lexers/special.py", + "eric6/ThirdParty/Pygments/pygments/lexers/sql.py", + "eric6/ThirdParty/Pygments/pygments/lexers/stata.py", + "eric6/ThirdParty/Pygments/pygments/lexers/supercollider.py", + "eric6/ThirdParty/Pygments/pygments/lexers/tcl.py", + "eric6/ThirdParty/Pygments/pygments/lexers/templates.py", + "eric6/ThirdParty/Pygments/pygments/lexers/teraterm.py", + "eric6/ThirdParty/Pygments/pygments/lexers/testing.py", + "eric6/ThirdParty/Pygments/pygments/lexers/text.py", + "eric6/ThirdParty/Pygments/pygments/lexers/textedit.py", + "eric6/ThirdParty/Pygments/pygments/lexers/textfmts.py", + "eric6/ThirdParty/Pygments/pygments/lexers/theorem.py", + "eric6/ThirdParty/Pygments/pygments/lexers/tnt.py", + "eric6/ThirdParty/Pygments/pygments/lexers/trafficscript.py", + "eric6/ThirdParty/Pygments/pygments/lexers/typoscript.py", + "eric6/ThirdParty/Pygments/pygments/lexers/unicon.py", + "eric6/ThirdParty/Pygments/pygments/lexers/urbi.py", + "eric6/ThirdParty/Pygments/pygments/lexers/usd.py", + "eric6/ThirdParty/Pygments/pygments/lexers/varnish.py", + "eric6/ThirdParty/Pygments/pygments/lexers/verification.py", + "eric6/ThirdParty/Pygments/pygments/lexers/web.py", + "eric6/ThirdParty/Pygments/pygments/lexers/webidl.py", + "eric6/ThirdParty/Pygments/pygments/lexers/webmisc.py", + "eric6/ThirdParty/Pygments/pygments/lexers/whiley.py", + "eric6/ThirdParty/Pygments/pygments/lexers/x10.py", + "eric6/ThirdParty/Pygments/pygments/lexers/xorg.py", + "eric6/ThirdParty/Pygments/pygments/lexers/yang.py", + "eric6/ThirdParty/Pygments/pygments/lexers/zig.py", + "eric6/ThirdParty/Pygments/pygments/modeline.py", + "eric6/ThirdParty/Pygments/pygments/plugin.py", + "eric6/ThirdParty/Pygments/pygments/regexopt.py", + "eric6/ThirdParty/Pygments/pygments/scanner.py", + "eric6/ThirdParty/Pygments/pygments/sphinxext.py", + "eric6/ThirdParty/Pygments/pygments/style.py", + "eric6/ThirdParty/Pygments/pygments/styles/__init__.py", + "eric6/ThirdParty/Pygments/pygments/styles/abap.py", + "eric6/ThirdParty/Pygments/pygments/styles/algol.py", + "eric6/ThirdParty/Pygments/pygments/styles/algol_nu.py", + "eric6/ThirdParty/Pygments/pygments/styles/arduino.py", + "eric6/ThirdParty/Pygments/pygments/styles/autumn.py", + "eric6/ThirdParty/Pygments/pygments/styles/borland.py", + "eric6/ThirdParty/Pygments/pygments/styles/bw.py", + "eric6/ThirdParty/Pygments/pygments/styles/colorful.py", + "eric6/ThirdParty/Pygments/pygments/styles/default.py", + "eric6/ThirdParty/Pygments/pygments/styles/emacs.py", + "eric6/ThirdParty/Pygments/pygments/styles/friendly.py", + "eric6/ThirdParty/Pygments/pygments/styles/fruity.py", + "eric6/ThirdParty/Pygments/pygments/styles/igor.py", + "eric6/ThirdParty/Pygments/pygments/styles/inkpot.py", + "eric6/ThirdParty/Pygments/pygments/styles/lovelace.py", + "eric6/ThirdParty/Pygments/pygments/styles/manni.py", + "eric6/ThirdParty/Pygments/pygments/styles/monokai.py", + "eric6/ThirdParty/Pygments/pygments/styles/murphy.py", + "eric6/ThirdParty/Pygments/pygments/styles/native.py", + "eric6/ThirdParty/Pygments/pygments/styles/paraiso_dark.py", + "eric6/ThirdParty/Pygments/pygments/styles/paraiso_light.py", + "eric6/ThirdParty/Pygments/pygments/styles/pastie.py", + "eric6/ThirdParty/Pygments/pygments/styles/perldoc.py", + "eric6/ThirdParty/Pygments/pygments/styles/rainbow_dash.py", + "eric6/ThirdParty/Pygments/pygments/styles/rrt.py", + "eric6/ThirdParty/Pygments/pygments/styles/sas.py", + "eric6/ThirdParty/Pygments/pygments/styles/solarized.py", + "eric6/ThirdParty/Pygments/pygments/styles/stata_dark.py", + "eric6/ThirdParty/Pygments/pygments/styles/stata_light.py", + "eric6/ThirdParty/Pygments/pygments/styles/tango.py", + "eric6/ThirdParty/Pygments/pygments/styles/trac.py", + "eric6/ThirdParty/Pygments/pygments/styles/vim.py", + "eric6/ThirdParty/Pygments/pygments/styles/vs.py", + "eric6/ThirdParty/Pygments/pygments/styles/xcode.py", + "eric6/ThirdParty/Pygments/pygments/token.py", + "eric6/ThirdParty/Pygments/pygments/unistring.py", + "eric6/ThirdParty/Pygments/pygments/util.py", + "eric6/ThirdParty/Send2Trash/__init__.py", + "eric6/ThirdParty/Send2Trash/send2trash/__init__.py", + "eric6/ThirdParty/Send2Trash/send2trash/compat.py", + "eric6/ThirdParty/Send2Trash/send2trash/exceptions.py", + "eric6/ThirdParty/Send2Trash/send2trash/plat_gio.py", + "eric6/ThirdParty/Send2Trash/send2trash/plat_osx.py", + "eric6/ThirdParty/Send2Trash/send2trash/plat_other.py", + "eric6/ThirdParty/Send2Trash/send2trash/plat_win.py", + "eric6/ThirdParty/__init__.py", + "eric6/ThirdParty/asttokens/__init__.py", + "eric6/ThirdParty/asttokens/asttokens/__init__.py", + "eric6/ThirdParty/asttokens/asttokens/asttokens.py", + "eric6/ThirdParty/asttokens/asttokens/line_numbers.py", + "eric6/ThirdParty/asttokens/asttokens/mark_tokens.py", + "eric6/ThirdParty/asttokens/asttokens/util.py", + "eric6/ThirdParty/asttokens/asttokens/version.py", + "eric6/Toolbox/SingleApplication.py", + "eric6/Toolbox/Startup.py", + "eric6/Toolbox/__init__.py", + "eric6/Tools/TRPreviewer.py", + "eric6/Tools/TRSingleApplication.py", + "eric6/Tools/TrayStarter.py", + "eric6/Tools/UIPreviewer.py", + "eric6/Tools/__init__.py", + "eric6/Tools/webBrowserSupport.py", + "eric6/UI/AuthenticationDialog.py", + "eric6/UI/Browser.py", + "eric6/UI/BrowserModel.py", + "eric6/UI/BrowserSortFilterProxyModel.py", + "eric6/UI/ClearPrivateDataDialog.py", + "eric6/UI/CodeDocumentationViewer.py", + "eric6/UI/CodeDocumentationViewerTemplate.py", + "eric6/UI/CompareDialog.py", + "eric6/UI/Config.py", + "eric6/UI/DeleteFilesConfirmationDialog.py", + "eric6/UI/DiffDialog.py", + "eric6/UI/DiffHighlighter.py", + "eric6/UI/EmailDialog.py", + "eric6/UI/ErrorLogDialog.py", + "eric6/UI/FindFileDialog.py", + "eric6/UI/FindFileNameDialog.py", + "eric6/UI/Info.py", + "eric6/UI/InstallInfoDialog.py", + "eric6/UI/LogView.py", + "eric6/UI/NotificationWidget.py", + "eric6/UI/NumbersWidget.py", + "eric6/UI/PixmapCache.py", + "eric6/UI/Previewer.py", + "eric6/UI/Previewers/MarkdownExtensions.py", + "eric6/UI/Previewers/PreviewerHTML.py", + "eric6/UI/Previewers/PreviewerHTMLStyles.py", + "eric6/UI/Previewers/PreviewerQSS.py", + "eric6/UI/Previewers/__init__.py", + "eric6/UI/PythonAstViewer.py", + "eric6/UI/PythonDisViewer.py", + "eric6/UI/SearchWidget.py", + "eric6/UI/SplashScreen.py", + "eric6/UI/SymbolsWidget.py", + "eric6/UI/UserInterface.py", + "eric6/UI/__init__.py", + "eric6/UI/data/__init__.py", + "eric6/Utilities/AutoSaver.py", + "eric6/Utilities/BackgroundClient.py", + "eric6/Utilities/BackgroundService.py", + "eric6/Utilities/ClassBrowsers/ClbrBaseClasses.py", + "eric6/Utilities/ClassBrowsers/__init__.py", + "eric6/Utilities/ClassBrowsers/idlclbr.py", + "eric6/Utilities/ClassBrowsers/jsclbr.py", + "eric6/Utilities/ClassBrowsers/protoclbr.py", + "eric6/Utilities/ClassBrowsers/pyclbr.py", + "eric6/Utilities/ClassBrowsers/rbclbr.py", + "eric6/Utilities/FtpUtilities.py", + "eric6/Utilities/GetSysPath.py", + "eric6/Utilities/MimeTypes.py", + "eric6/Utilities/ModuleParser.py", + "eric6/Utilities/MouseUtilities.py", + "eric6/Utilities/PasswordChecker.py", + "eric6/Utilities/PySideImporter.py", + "eric6/Utilities/__init__.py", + "eric6/Utilities/crypto/__init__.py", + "eric6/Utilities/crypto/py3AES.py", + "eric6/Utilities/crypto/py3PBKDF2.py", + "eric6/Utilities/uic.py", + "eric6/VCS/CommandOptionsDialog.py", + "eric6/VCS/ProjectBrowserHelper.py", + "eric6/VCS/ProjectHelper.py", + "eric6/VCS/RepositoryInfoDialog.py", + "eric6/VCS/StatusMonitorLed.py", + "eric6/VCS/StatusMonitorThread.py", + "eric6/VCS/VersionControl.py", + "eric6/VCS/__init__.py", + "eric6/ViewManager/BookmarkedFilesDialog.py", + "eric6/ViewManager/ViewManager.py", + "eric6/ViewManager/__init__.py", + "eric6/VirtualEnv/VirtualenvAddEditDialog.py", + "eric6/VirtualEnv/VirtualenvConfigurationDialog.py", + "eric6/VirtualEnv/VirtualenvExecDialog.py", + "eric6/VirtualEnv/VirtualenvInterpreterSelectionDialog.py", + "eric6/VirtualEnv/VirtualenvManager.py", + "eric6/VirtualEnv/VirtualenvManagerDialog.py", + "eric6/VirtualEnv/VirtualenvNameDialog.py", + "eric6/VirtualEnv/__init__.py", + "eric6/WebBrowser/AdBlock/AdBlockDialog.py", + "eric6/WebBrowser/AdBlock/AdBlockExceptionsDialog.py", + "eric6/WebBrowser/AdBlock/AdBlockIcon.py", + "eric6/WebBrowser/AdBlock/AdBlockManager.py", + "eric6/WebBrowser/AdBlock/AdBlockMatcher.py", + "eric6/WebBrowser/AdBlock/AdBlockPage.py", + "eric6/WebBrowser/AdBlock/AdBlockRule.py", + "eric6/WebBrowser/AdBlock/AdBlockSearchTree.py", + "eric6/WebBrowser/AdBlock/AdBlockSubscription.py", + "eric6/WebBrowser/AdBlock/AdBlockTreeWidget.py", + "eric6/WebBrowser/AdBlock/AdBlockUrlInterceptor.py", + "eric6/WebBrowser/AdBlock/__init__.py", + "eric6/WebBrowser/AutoScroll/AutoScroller.py", + "eric6/WebBrowser/AutoScroll/FrameScroller.py", + "eric6/WebBrowser/AutoScroll/__init__.py", + "eric6/WebBrowser/Bookmarks/AddBookmarkDialog.py", + "eric6/WebBrowser/Bookmarks/BookmarkNode.py", + "eric6/WebBrowser/Bookmarks/BookmarkPropertiesDialog.py", + "eric6/WebBrowser/Bookmarks/BookmarksDialog.py", + "eric6/WebBrowser/Bookmarks/BookmarksImportDialog.py", + "eric6/WebBrowser/Bookmarks/BookmarksImporters/BookmarksImporter.py", + "eric6/WebBrowser/Bookmarks/BookmarksImporters/ChromeImporter.py", + "eric6/WebBrowser/Bookmarks/BookmarksImporters/FirefoxImporter.py", + "eric6/WebBrowser/Bookmarks/BookmarksImporters/HtmlImporter.py", + "eric6/WebBrowser/Bookmarks/BookmarksImporters/IExplorerImporter.py", + "eric6/WebBrowser/Bookmarks/BookmarksImporters/OperaImporter.py", + "eric6/WebBrowser/Bookmarks/BookmarksImporters/SafariImporter.py", + "eric6/WebBrowser/Bookmarks/BookmarksImporters/XbelImporter.py", + "eric6/WebBrowser/Bookmarks/BookmarksImporters/__init__.py", + "eric6/WebBrowser/Bookmarks/BookmarksManager.py", + "eric6/WebBrowser/Bookmarks/BookmarksMenu.py", + "eric6/WebBrowser/Bookmarks/BookmarksModel.py", + "eric6/WebBrowser/Bookmarks/BookmarksToolBar.py", + "eric6/WebBrowser/Bookmarks/NsHtmlReader.py", + "eric6/WebBrowser/Bookmarks/NsHtmlWriter.py", + "eric6/WebBrowser/Bookmarks/XbelReader.py", + "eric6/WebBrowser/Bookmarks/XbelWriter.py", + "eric6/WebBrowser/Bookmarks/__init__.py", + "eric6/WebBrowser/ClosedTabsManager.py", + "eric6/WebBrowser/CookieJar/CookieExceptionsModel.py", + "eric6/WebBrowser/CookieJar/CookieJar.py", + "eric6/WebBrowser/CookieJar/CookiesConfigurationDialog.py", + "eric6/WebBrowser/CookieJar/CookiesDialog.py", + "eric6/WebBrowser/CookieJar/CookiesExceptionsDialog.py", + "eric6/WebBrowser/CookieJar/__init__.py", + "eric6/WebBrowser/Download/DownloadAskActionDialog.py", + "eric6/WebBrowser/Download/DownloadItem.py", + "eric6/WebBrowser/Download/DownloadManager.py", + "eric6/WebBrowser/Download/DownloadManagerButton.py", + "eric6/WebBrowser/Download/DownloadModel.py", + "eric6/WebBrowser/Download/DownloadUtilities.py", + "eric6/WebBrowser/Download/__init__.py", + "eric6/WebBrowser/FeaturePermissions/FeaturePermissionBar.py", + "eric6/WebBrowser/FeaturePermissions/FeaturePermissionManager.py", + "eric6/WebBrowser/FeaturePermissions/FeaturePermissionsDialog.py", + "eric6/WebBrowser/FeaturePermissions/__init__.py", + "eric6/WebBrowser/Feeds/FeedEditDialog.py", + "eric6/WebBrowser/Feeds/FeedsDialog.py", + "eric6/WebBrowser/Feeds/FeedsManager.py", + "eric6/WebBrowser/Feeds/__init__.py", + "eric6/WebBrowser/FlashCookieManager/FlashCookie.py", + "eric6/WebBrowser/FlashCookieManager/FlashCookieManager.py", + "eric6/WebBrowser/FlashCookieManager/FlashCookieManagerDialog.py", + "eric6/WebBrowser/FlashCookieManager/FlashCookieNotification.py", + "eric6/WebBrowser/FlashCookieManager/FlashCookieReader.py", + "eric6/WebBrowser/FlashCookieManager/FlashCookieUtilities.py", + "eric6/WebBrowser/FlashCookieManager/__init__.py", + "eric6/WebBrowser/GreaseMonkey/GreaseMonkeyAddScriptDialog.py", + "eric6/WebBrowser/GreaseMonkey/GreaseMonkeyConfiguration/GreaseMonkeyConfigurationDialog.py", + "eric6/WebBrowser/GreaseMonkey/GreaseMonkeyConfiguration/GreaseMonkeyConfigurationListDelegate.py", + "eric6/WebBrowser/GreaseMonkey/GreaseMonkeyConfiguration/GreaseMonkeyConfigurationListWidget.py", + "eric6/WebBrowser/GreaseMonkey/GreaseMonkeyConfiguration/GreaseMonkeyConfigurationScriptInfoDialog.py", + "eric6/WebBrowser/GreaseMonkey/GreaseMonkeyConfiguration/__init__.py", + "eric6/WebBrowser/GreaseMonkey/GreaseMonkeyDownloader.py", + "eric6/WebBrowser/GreaseMonkey/GreaseMonkeyJavaScript.py", + "eric6/WebBrowser/GreaseMonkey/GreaseMonkeyJsObject.py", + "eric6/WebBrowser/GreaseMonkey/GreaseMonkeyManager.py", + "eric6/WebBrowser/GreaseMonkey/GreaseMonkeyScript.py", + "eric6/WebBrowser/GreaseMonkey/__init__.py", + "eric6/WebBrowser/History/HistoryCompleter.py", + "eric6/WebBrowser/History/HistoryDialog.py", + "eric6/WebBrowser/History/HistoryFilterModel.py", + "eric6/WebBrowser/History/HistoryManager.py", + "eric6/WebBrowser/History/HistoryMenu.py", + "eric6/WebBrowser/History/HistoryModel.py", + "eric6/WebBrowser/History/HistoryTreeModel.py", + "eric6/WebBrowser/History/__init__.py", + "eric6/WebBrowser/ImageSearch/ImageSearchEngine.py", + "eric6/WebBrowser/ImageSearch/__init__.py", + "eric6/WebBrowser/JavaScript/ExternalJsObject.py", + "eric6/WebBrowser/JavaScript/PasswordManagerJsObject.py", + "eric6/WebBrowser/JavaScript/StartPageJsObject.py", + "eric6/WebBrowser/JavaScript/__init__.py", + "eric6/WebBrowser/Navigation/NavigationBar.py", + "eric6/WebBrowser/Navigation/NavigationContainer.py", + "eric6/WebBrowser/Navigation/ReloadStopButton.py", + "eric6/WebBrowser/Navigation/__init__.py", + "eric6/WebBrowser/Network/EricSchemeHandler.py", + "eric6/WebBrowser/Network/NetworkManager.py", + "eric6/WebBrowser/Network/NetworkUrlInterceptor.py", + "eric6/WebBrowser/Network/ProtocolHandlerManager.py", + "eric6/WebBrowser/Network/ProtocolHandlerManagerDialog.py", + "eric6/WebBrowser/Network/QtHelpSchemeHandler.py", + "eric6/WebBrowser/Network/SendRefererWhitelistDialog.py", + "eric6/WebBrowser/Network/SslErrorExceptionsDialog.py", + "eric6/WebBrowser/Network/UrlInterceptor.py", + "eric6/WebBrowser/Network/__init__.py", + "eric6/WebBrowser/OpenSearch/DefaultSearchEngines/__init__.py", + "eric6/WebBrowser/OpenSearch/OpenSearchDialog.py", + "eric6/WebBrowser/OpenSearch/OpenSearchEditDialog.py", + "eric6/WebBrowser/OpenSearch/OpenSearchEngine.py", + "eric6/WebBrowser/OpenSearch/OpenSearchEngineAction.py", + "eric6/WebBrowser/OpenSearch/OpenSearchEngineModel.py", + "eric6/WebBrowser/OpenSearch/OpenSearchManager.py", + "eric6/WebBrowser/OpenSearch/OpenSearchReader.py", + "eric6/WebBrowser/OpenSearch/OpenSearchWriter.py", + "eric6/WebBrowser/OpenSearch/__init__.py", + "eric6/WebBrowser/PageScreenDialog.py", + "eric6/WebBrowser/Passwords/LoginForm.py", + "eric6/WebBrowser/Passwords/PasswordManager.py", + "eric6/WebBrowser/Passwords/PasswordModel.py", + "eric6/WebBrowser/Passwords/PasswordReader.py", + "eric6/WebBrowser/Passwords/PasswordWriter.py", + "eric6/WebBrowser/Passwords/PasswordsDialog.py", + "eric6/WebBrowser/Passwords/__init__.py", + "eric6/WebBrowser/PersonalInformationManager/PersonalDataDialog.py", + "eric6/WebBrowser/PersonalInformationManager/PersonalInformationManager.py", + "eric6/WebBrowser/PersonalInformationManager/__init__.py", + "eric6/WebBrowser/QtHelp/HelpDocsInstaller.py", + "eric6/WebBrowser/QtHelp/HelpIndexWidget.py", + "eric6/WebBrowser/QtHelp/HelpSearchWidget.py", + "eric6/WebBrowser/QtHelp/HelpTocWidget.py", + "eric6/WebBrowser/QtHelp/HelpTopicDialog.py", + "eric6/WebBrowser/QtHelp/QtHelpDocumentationDialog.py", + "eric6/WebBrowser/QtHelp/QtHelpDocumentationSelectionDialog.py", + "eric6/WebBrowser/QtHelp/__init__.py", + "eric6/WebBrowser/SafeBrowsing/SafeBrowsingAPIClient.py", + "eric6/WebBrowser/SafeBrowsing/SafeBrowsingCache.py", + "eric6/WebBrowser/SafeBrowsing/SafeBrowsingDialog.py", + "eric6/WebBrowser/SafeBrowsing/SafeBrowsingInfoWidget.py", + "eric6/WebBrowser/SafeBrowsing/SafeBrowsingLabel.py", + "eric6/WebBrowser/SafeBrowsing/SafeBrowsingManager.py", + "eric6/WebBrowser/SafeBrowsing/SafeBrowsingThreatList.py", + "eric6/WebBrowser/SafeBrowsing/SafeBrowsingUrl.py", + "eric6/WebBrowser/SafeBrowsing/__init__.py", + "eric6/WebBrowser/SearchWidget.py", + "eric6/WebBrowser/Session/SessionManager.py", + "eric6/WebBrowser/Session/SessionManagerDialog.py", + "eric6/WebBrowser/Session/__init__.py", + "eric6/WebBrowser/SiteInfo/SiteInfoDialog.py", + "eric6/WebBrowser/SiteInfo/SiteInfoWidget.py", + "eric6/WebBrowser/SiteInfo/__init__.py", + "eric6/WebBrowser/SpeedDial/Page.py", + "eric6/WebBrowser/SpeedDial/PageThumbnailer.py", + "eric6/WebBrowser/SpeedDial/SpeedDial.py", + "eric6/WebBrowser/SpeedDial/SpeedDialReader.py", + "eric6/WebBrowser/SpeedDial/SpeedDialWriter.py", + "eric6/WebBrowser/SpeedDial/__init__.py", + "eric6/WebBrowser/SpellCheck/ManageDictionariesDialog.py", + "eric6/WebBrowser/SpellCheck/__init__.py", + "eric6/WebBrowser/StatusBar/ImagesIcon.py", + "eric6/WebBrowser/StatusBar/JavaScriptIcon.py", + "eric6/WebBrowser/StatusBar/JavaScriptSettingsDialog.py", + "eric6/WebBrowser/StatusBar/StatusBarIcon.py", + "eric6/WebBrowser/StatusBar/__init__.py", + "eric6/WebBrowser/Sync/DirectorySyncHandler.py", + "eric6/WebBrowser/Sync/FtpSyncHandler.py", + "eric6/WebBrowser/Sync/SyncAssistantDialog.py", + "eric6/WebBrowser/Sync/SyncCheckPage.py", + "eric6/WebBrowser/Sync/SyncDataPage.py", + "eric6/WebBrowser/Sync/SyncDirectorySettingsPage.py", + "eric6/WebBrowser/Sync/SyncEncryptionPage.py", + "eric6/WebBrowser/Sync/SyncFtpSettingsPage.py", + "eric6/WebBrowser/Sync/SyncGlobals.py", + "eric6/WebBrowser/Sync/SyncHandler.py", + "eric6/WebBrowser/Sync/SyncHostTypePage.py", + "eric6/WebBrowser/Sync/SyncManager.py", + "eric6/WebBrowser/Sync/__init__.py", + "eric6/WebBrowser/TabManager/TabManagerWidget.py", + "eric6/WebBrowser/TabManager/__init__.py", + "eric6/WebBrowser/Tools/DelayedFileWatcher.py", + "eric6/WebBrowser/Tools/PrintToPdfDialog.py", + "eric6/WebBrowser/Tools/Scripts.py", + "eric6/WebBrowser/Tools/WebBrowserTools.py", + "eric6/WebBrowser/Tools/WebHitTestResult.py", + "eric6/WebBrowser/Tools/WebIconDialog.py", + "eric6/WebBrowser/Tools/WebIconLoader.py", + "eric6/WebBrowser/Tools/WebIconProvider.py", + "eric6/WebBrowser/Tools/__init__.py", + "eric6/WebBrowser/UrlBar/BookmarkActionSelectionDialog.py", + "eric6/WebBrowser/UrlBar/BookmarkInfoDialog.py", + "eric6/WebBrowser/UrlBar/FavIconLabel.py", + "eric6/WebBrowser/UrlBar/SslLabel.py", + "eric6/WebBrowser/UrlBar/StackedUrlBar.py", + "eric6/WebBrowser/UrlBar/UrlBar.py", + "eric6/WebBrowser/UrlBar/__init__.py", + "eric6/WebBrowser/UserAgent/UserAgentManager.py", + "eric6/WebBrowser/UserAgent/UserAgentMenu.py", + "eric6/WebBrowser/UserAgent/UserAgentModel.py", + "eric6/WebBrowser/UserAgent/UserAgentReader.py", + "eric6/WebBrowser/UserAgent/UserAgentWriter.py", + "eric6/WebBrowser/UserAgent/UserAgentsDialog.py", + "eric6/WebBrowser/UserAgent/__init__.py", + "eric6/WebBrowser/VirusTotal/VirusTotalApi.py", + "eric6/WebBrowser/VirusTotal/VirusTotalDomainReportDialog.py", + "eric6/WebBrowser/VirusTotal/VirusTotalIpReportDialog.py", + "eric6/WebBrowser/VirusTotal/VirusTotalWhoisDialog.py", + "eric6/WebBrowser/VirusTotal/__init__.py", + "eric6/WebBrowser/WebBrowserClearPrivateDataDialog.py", + "eric6/WebBrowser/WebBrowserJavaScriptConsole.py", + "eric6/WebBrowser/WebBrowserLanguagesDialog.py", + "eric6/WebBrowser/WebBrowserPage.py", + "eric6/WebBrowser/WebBrowserSingleApplication.py", + "eric6/WebBrowser/WebBrowserSnap.py", + "eric6/WebBrowser/WebBrowserTabBar.py", + "eric6/WebBrowser/WebBrowserTabWidget.py", + "eric6/WebBrowser/WebBrowserView.py", + "eric6/WebBrowser/WebBrowserWebSearchWidget.py", + "eric6/WebBrowser/WebBrowserWindow.py", + "eric6/WebBrowser/WebInspector.py", + "eric6/WebBrowser/ZoomManager/ZoomManager.py", + "eric6/WebBrowser/ZoomManager/ZoomValuesDialog.py", + "eric6/WebBrowser/ZoomManager/ZoomValuesModel.py", + "eric6/WebBrowser/ZoomManager/__init__.py", + "eric6/WebBrowser/__init__.py", + "eric6/WebBrowser/data/__init__.py", + "eric6/__init__.py", + "eric6/eric6.py", + "eric6/eric6.pyw", + "eric6/eric6_api.py", + "eric6/eric6_browser.py", + "eric6/eric6_browser.pyw", + "eric6/eric6_compare.py", + "eric6/eric6_compare.pyw", + "eric6/eric6_configure.py", + "eric6/eric6_configure.pyw", + "eric6/eric6_diff.py", + "eric6/eric6_diff.pyw", + "eric6/eric6_doc.py", + "eric6/eric6_editor.py", + "eric6/eric6_editor.pyw", + "eric6/eric6_hexeditor.py", + "eric6/eric6_hexeditor.pyw", + "eric6/eric6_iconeditor.py", + "eric6/eric6_iconeditor.pyw", + "eric6/eric6_plugininstall.py", + "eric6/eric6_plugininstall.pyw", + "eric6/eric6_pluginrepository.py", + "eric6/eric6_pluginrepository.pyw", + "eric6/eric6_pluginuninstall.py", + "eric6/eric6_pluginuninstall.pyw", + "eric6/eric6_post_install.py", + "eric6/eric6_qregularexpression.py", + "eric6/eric6_qregularexpression.pyw", + "eric6/eric6_re.py", + "eric6/eric6_re.pyw", + "eric6/eric6_shell.py", + "eric6/eric6_shell.pyw", + "eric6/eric6_snap.py", + "eric6/eric6_snap.pyw", + "eric6/eric6_sqlbrowser.py", + "eric6/eric6_sqlbrowser.pyw", + "eric6/eric6_tray.py", + "eric6/eric6_tray.pyw", + "eric6/eric6_trpreviewer.py", + "eric6/eric6_trpreviewer.pyw", + "eric6/eric6_uipreviewer.py", + "eric6/eric6_uipreviewer.pyw", + "eric6/eric6_unittest.py", + "eric6/eric6_unittest.pyw", + "eric6/eric6config.py", + "scripts/cleanupSource.py", + "scripts/compileUiFiles.py", + "scripts/create_windows_links.py", + "scripts/install-debugclients.py", + "scripts/install-i18n.py", + "scripts/install.py", + "scripts/patch_modpython.py", + "scripts/uninstall-debugclients.py", + "scripts/uninstall.py", + "setup.py" + ], + "FORMS": [ + "eric6/CondaInterface/CondaExecDialog.ui", + "eric6/CondaInterface/CondaExportDialog.ui", + "eric6/CondaInterface/CondaInfoDialog.ui", + "eric6/CondaInterface/CondaNewEnvironmentDataDialog.ui", + "eric6/CondaInterface/CondaPackageDetailsWidget.ui", + "eric6/CondaInterface/CondaPackagesWidget.ui", + "eric6/Cooperation/ChatWidget.ui", + "eric6/DataViews/CodeMetricsDialog.ui", + "eric6/DataViews/PyCoverageDialog.ui", + "eric6/DataViews/PyProfileDialog.ui", + "eric6/Debugger/CallTraceViewer.ui", + "eric6/Debugger/EditBreakpointDialog.ui", + "eric6/Debugger/EditWatchpointDialog.ui", + "eric6/Debugger/ExceptionsFilterDialog.ui", + "eric6/Debugger/StartCoverageDialog.ui", + "eric6/Debugger/StartDebugDialog.ui", + "eric6/Debugger/StartHistoryEditDialog.ui", + "eric6/Debugger/StartProfileDialog.ui", + "eric6/Debugger/StartRunDialog.ui", + "eric6/Debugger/VariableDetailDialog.ui", + "eric6/Debugger/VariablesFilterDialog.ui", + "eric6/E5Gui/E5ErrorMessageFilterDialog.ui", + "eric6/E5Gui/E5ListSelectionDialog.ui", + "eric6/E5Gui/E5PlainTextDialog.ui", + "eric6/E5Gui/E5ProcessDialog.ui", + "eric6/E5Gui/E5SimpleHelpDialog.ui", + "eric6/E5Gui/E5StringListEditWidget.ui", + "eric6/E5Gui/E5ToolBarDialog.ui", + "eric6/E5Gui/E5ZoomWidget.ui", + "eric6/E5Network/E5NetworkHeaderDetailsDialog.ui", + "eric6/E5Network/E5SslCertificateSelectionDialog.ui", + "eric6/E5Network/E5SslCertificatesDialog.ui", + "eric6/E5Network/E5SslCertificatesInfoDialog.ui", + "eric6/E5Network/E5SslCertificatesInfoWidget.ui", + "eric6/Graphics/UMLSceneSizeDialog.ui", + "eric6/HexEdit/HexEditGotoWidget.ui", + "eric6/HexEdit/HexEditReplaceWidget.ui", + "eric6/HexEdit/HexEditSearchWidget.ui", + "eric6/IconEditor/IconSizeDialog.ui", + "eric6/MicroPython/CircuitPythonFirmwareSelectionDialog.ui", + "eric6/MicroPython/EspBackupRestoreFirmwareDialog.ui", + "eric6/MicroPython/EspFirmwareSelectionDialog.ui", + "eric6/MicroPython/IgnoredDevicesDialog.ui", + "eric6/MicroPython/MicroPythonFileManagerWidget.ui", + "eric6/MicroPython/MicroPythonProgressInfoDialog.ui", + "eric6/MicroPython/MicroPythonWidget.ui", + "eric6/MultiProject/AddProjectDialog.ui", + "eric6/MultiProject/PropertiesDialog.ui", + "eric6/Network/IRC/IrcChannelEditDialog.ui", + "eric6/Network/IRC/IrcChannelWidget.ui", + "eric6/Network/IRC/IrcIdentitiesEditDialog.ui", + "eric6/Network/IRC/IrcNetworkEditDialog.ui", + "eric6/Network/IRC/IrcNetworkListDialog.ui", + "eric6/Network/IRC/IrcNetworkWidget.ui", + "eric6/Network/IRC/IrcServerEditDialog.ui", + "eric6/Network/IRC/IrcWidget.ui", + "eric6/PipInterface/PipDialog.ui", + "eric6/PipInterface/PipFileSelectionDialog.ui", + "eric6/PipInterface/PipFreezeDialog.ui", + "eric6/PipInterface/PipPackageDetailsDialog.ui", + "eric6/PipInterface/PipPackagesInputDialog.ui", + "eric6/PipInterface/PipPackagesWidget.ui", + "eric6/PluginManager/PluginDetailsDialog.ui", + "eric6/PluginManager/PluginInfoDialog.ui", + "eric6/PluginManager/PluginInstallDialog.ui", + "eric6/PluginManager/PluginRepositoryDialog.ui", + "eric6/PluginManager/PluginUninstallDialog.ui", + "eric6/Plugins/AboutPlugin/AboutDialog.ui", + "eric6/Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleAddBuiltinIgnoreDialog.ui", + "eric6/Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.ui", + "eric6/Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCodeSelectionDialog.ui", + "eric6/Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleStatisticsDialog.ui", + "eric6/Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.ui", + "eric6/Plugins/DocumentationPlugins/Ericapi/EricapiConfigDialog.ui", + "eric6/Plugins/DocumentationPlugins/Ericapi/EricapiExecDialog.ui", + "eric6/Plugins/DocumentationPlugins/Ericdoc/EricdocConfigDialog.ui", + "eric6/Plugins/DocumentationPlugins/Ericdoc/EricdocExecDialog.ui", + "eric6/Plugins/UiExtensionPlugins/Translator/ConfigurationPage/TranslatorPage.ui", + "eric6/Plugins/UiExtensionPlugins/Translator/TranslatorWidget.ui", + "eric6/Plugins/VcsPlugins/vcsGit/ConfigurationPage/GitPage.ui", + "eric6/Plugins/VcsPlugins/vcsGit/GitAddRemoteDialog.ui", + "eric6/Plugins/VcsPlugins/vcsGit/GitApplyBundleDataDialog.ui", + "eric6/Plugins/VcsPlugins/vcsGit/GitArchiveDataDialog.ui", + "eric6/Plugins/VcsPlugins/vcsGit/GitBisectLogBrowserDialog.ui", + "eric6/Plugins/VcsPlugins/vcsGit/GitBisectStartDialog.ui", + "eric6/Plugins/VcsPlugins/vcsGit/GitBlameDialog.ui", + "eric6/Plugins/VcsPlugins/vcsGit/GitBranchDialog.ui", + "eric6/Plugins/VcsPlugins/vcsGit/GitBranchPushDialog.ui", + "eric6/Plugins/VcsPlugins/vcsGit/GitBundleDialog.ui", + "eric6/Plugins/VcsPlugins/vcsGit/GitChangeRemoteUrlDialog.ui", + "eric6/Plugins/VcsPlugins/vcsGit/GitCherryPickDialog.ui", + "eric6/Plugins/VcsPlugins/vcsGit/GitCommandDialog.ui", + "eric6/Plugins/VcsPlugins/vcsGit/GitCommitDialog.ui", + "eric6/Plugins/VcsPlugins/vcsGit/GitCopyDialog.ui", + "eric6/Plugins/VcsPlugins/vcsGit/GitDescribeDialog.ui", + "eric6/Plugins/VcsPlugins/vcsGit/GitDialog.ui", + "eric6/Plugins/VcsPlugins/vcsGit/GitDiffDialog.ui", + "eric6/Plugins/VcsPlugins/vcsGit/GitFetchDialog.ui", + "eric6/Plugins/VcsPlugins/vcsGit/GitListDialog.ui", + "eric6/Plugins/VcsPlugins/vcsGit/GitLogBrowserDialog.ui", + "eric6/Plugins/VcsPlugins/vcsGit/GitMergeDialog.ui", + "eric6/Plugins/VcsPlugins/vcsGit/GitNewProjectOptionsDialog.ui", + "eric6/Plugins/VcsPlugins/vcsGit/GitOptionsDialog.ui", + "eric6/Plugins/VcsPlugins/vcsGit/GitPatchFilesDialog.ui", + "eric6/Plugins/VcsPlugins/vcsGit/GitPatchStatisticsDialog.ui", + "eric6/Plugins/VcsPlugins/vcsGit/GitPullDialog.ui", + "eric6/Plugins/VcsPlugins/vcsGit/GitPushDialog.ui", + "eric6/Plugins/VcsPlugins/vcsGit/GitReflogBrowserDialog.ui", + "eric6/Plugins/VcsPlugins/vcsGit/GitRemoteCredentialsDialog.ui", + "eric6/Plugins/VcsPlugins/vcsGit/GitRemoteRepositoriesDialog.ui", + "eric6/Plugins/VcsPlugins/vcsGit/GitRevisionSelectionDialog.ui", + "eric6/Plugins/VcsPlugins/vcsGit/GitRevisionsSelectionDialog.ui", + "eric6/Plugins/VcsPlugins/vcsGit/GitStashBrowserDialog.ui", + "eric6/Plugins/VcsPlugins/vcsGit/GitStashDataDialog.ui", + "eric6/Plugins/VcsPlugins/vcsGit/GitStatusDialog.ui", + "eric6/Plugins/VcsPlugins/vcsGit/GitSubmoduleAddDialog.ui", + "eric6/Plugins/VcsPlugins/vcsGit/GitSubmodulesDeinitDialog.ui", + "eric6/Plugins/VcsPlugins/vcsGit/GitSubmodulesListDialog.ui", + "eric6/Plugins/VcsPlugins/vcsGit/GitSubmodulesStatusDialog.ui", + "eric6/Plugins/VcsPlugins/vcsGit/GitSubmodulesSummaryOptionsDialog.ui", + "eric6/Plugins/VcsPlugins/vcsGit/GitSubmodulesSyncDialog.ui", + "eric6/Plugins/VcsPlugins/vcsGit/GitSubmodulesUpdateOptionsDialog.ui", + "eric6/Plugins/VcsPlugins/vcsGit/GitTagBranchListDialog.ui", + "eric6/Plugins/VcsPlugins/vcsGit/GitTagDialog.ui", + "eric6/Plugins/VcsPlugins/vcsGit/GitUserConfigDataDialog.ui", + "eric6/Plugins/VcsPlugins/vcsMercurial/CloseheadExtension/HgCloseHeadSelectionDialog.ui", + "eric6/Plugins/VcsPlugins/vcsMercurial/ConfigurationPage/MercurialPage.ui", + "eric6/Plugins/VcsPlugins/vcsMercurial/GpgExtension/HgGpgSignDialog.ui", + "eric6/Plugins/VcsPlugins/vcsMercurial/GpgExtension/HgGpgSignaturesDialog.ui", + "eric6/Plugins/VcsPlugins/vcsMercurial/HgAddSubrepositoryDialog.ui", + "eric6/Plugins/VcsPlugins/vcsMercurial/HgAnnotateDialog.ui", + "eric6/Plugins/VcsPlugins/vcsMercurial/HgArchiveDialog.ui", + "eric6/Plugins/VcsPlugins/vcsMercurial/HgBackoutDialog.ui", + "eric6/Plugins/VcsPlugins/vcsMercurial/HgBookmarkDialog.ui", + "eric6/Plugins/VcsPlugins/vcsMercurial/HgBookmarkRenameDialog.ui", + "eric6/Plugins/VcsPlugins/vcsMercurial/HgBookmarksInOutDialog.ui", + "eric6/Plugins/VcsPlugins/vcsMercurial/HgBookmarksListDialog.ui", + "eric6/Plugins/VcsPlugins/vcsMercurial/HgBranchInputDialog.ui", + "eric6/Plugins/VcsPlugins/vcsMercurial/HgBundleDialog.ui", + "eric6/Plugins/VcsPlugins/vcsMercurial/HgClientPromptDialog.ui", + "eric6/Plugins/VcsPlugins/vcsMercurial/HgCommandDialog.ui", + "eric6/Plugins/VcsPlugins/vcsMercurial/HgCommitDialog.ui", + "eric6/Plugins/VcsPlugins/vcsMercurial/HgConflictsListDialog.ui", + "eric6/Plugins/VcsPlugins/vcsMercurial/HgCopyDialog.ui", + "eric6/Plugins/VcsPlugins/vcsMercurial/HgDialog.ui", + "eric6/Plugins/VcsPlugins/vcsMercurial/HgDiffDialog.ui", + "eric6/Plugins/VcsPlugins/vcsMercurial/HgExportDialog.ui", + "eric6/Plugins/VcsPlugins/vcsMercurial/HgGraftDialog.ui", + "eric6/Plugins/VcsPlugins/vcsMercurial/HgImportDialog.ui", + "eric6/Plugins/VcsPlugins/vcsMercurial/HgLogBrowserDialog.ui", + "eric6/Plugins/VcsPlugins/vcsMercurial/HgMergeDialog.ui", + "eric6/Plugins/VcsPlugins/vcsMercurial/HgMultiRevisionSelectionDialog.ui", + "eric6/Plugins/VcsPlugins/vcsMercurial/HgNewProjectOptionsDialog.ui", + "eric6/Plugins/VcsPlugins/vcsMercurial/HgOptionsDialog.ui", + "eric6/Plugins/VcsPlugins/vcsMercurial/HgPhaseDialog.ui", + "eric6/Plugins/VcsPlugins/vcsMercurial/HgRemoveSubrepositoriesDialog.ui", + "eric6/Plugins/VcsPlugins/vcsMercurial/HgRepoConfigDataDialog.ui", + "eric6/Plugins/VcsPlugins/vcsMercurial/HgRevisionSelectionDialog.ui", + "eric6/Plugins/VcsPlugins/vcsMercurial/HgRevisionsSelectionDialog.ui", + "eric6/Plugins/VcsPlugins/vcsMercurial/HgStatusDialog.ui", + "eric6/Plugins/VcsPlugins/vcsMercurial/HgSummaryDialog.ui", + "eric6/Plugins/VcsPlugins/vcsMercurial/HgTagBranchListDialog.ui", + "eric6/Plugins/VcsPlugins/vcsMercurial/HgTagDialog.ui", + "eric6/Plugins/VcsPlugins/vcsMercurial/HgUserConfigDialog.ui", + "eric6/Plugins/VcsPlugins/vcsMercurial/HgUserConfigHostFingerprintDialog.ui", + "eric6/Plugins/VcsPlugins/vcsMercurial/HgUserConfigHostMinimumProtocolDialog.ui", + "eric6/Plugins/VcsPlugins/vcsMercurial/HisteditExtension/HgHisteditCommitEditor.ui", + "eric6/Plugins/VcsPlugins/vcsMercurial/HisteditExtension/HgHisteditConfigDialog.ui", + "eric6/Plugins/VcsPlugins/vcsMercurial/HisteditExtension/HgHisteditPlanEditor.ui", + "eric6/Plugins/VcsPlugins/vcsMercurial/LargefilesExtension/LfConvertDataDialog.ui", + "eric6/Plugins/VcsPlugins/vcsMercurial/LargefilesExtension/LfRevisionsInputDialog.ui", + "eric6/Plugins/VcsPlugins/vcsMercurial/PurgeExtension/HgPurgeListDialog.ui", + "eric6/Plugins/VcsPlugins/vcsMercurial/QueuesExtension/HgQueuesDefineGuardsDialog.ui", + "eric6/Plugins/VcsPlugins/vcsMercurial/QueuesExtension/HgQueuesFoldDialog.ui", + "eric6/Plugins/VcsPlugins/vcsMercurial/QueuesExtension/HgQueuesGuardsSelectionDialog.ui", + "eric6/Plugins/VcsPlugins/vcsMercurial/QueuesExtension/HgQueuesHeaderDialog.ui", + "eric6/Plugins/VcsPlugins/vcsMercurial/QueuesExtension/HgQueuesListAllGuardsDialog.ui", + "eric6/Plugins/VcsPlugins/vcsMercurial/QueuesExtension/HgQueuesListDialog.ui", + "eric6/Plugins/VcsPlugins/vcsMercurial/QueuesExtension/HgQueuesListGuardsDialog.ui", + "eric6/Plugins/VcsPlugins/vcsMercurial/QueuesExtension/HgQueuesNewPatchDialog.ui", + "eric6/Plugins/VcsPlugins/vcsMercurial/QueuesExtension/HgQueuesQueueManagementDialog.ui", + "eric6/Plugins/VcsPlugins/vcsMercurial/QueuesExtension/HgQueuesRenamePatchDialog.ui", + "eric6/Plugins/VcsPlugins/vcsMercurial/RebaseExtension/HgRebaseDialog.ui", + "eric6/Plugins/VcsPlugins/vcsMercurial/ShelveExtension/HgShelveBrowserDialog.ui", + "eric6/Plugins/VcsPlugins/vcsMercurial/ShelveExtension/HgShelveDataDialog.ui", + "eric6/Plugins/VcsPlugins/vcsMercurial/ShelveExtension/HgShelvesSelectionDialog.ui", + "eric6/Plugins/VcsPlugins/vcsMercurial/ShelveExtension/HgUnshelveDataDialog.ui", + "eric6/Plugins/VcsPlugins/vcsMercurial/StripExtension/HgStripDialog.ui", + "eric6/Plugins/VcsPlugins/vcsPySvn/ConfigurationPage/SubversionPage.ui", + "eric6/Plugins/VcsPlugins/vcsPySvn/SvnBlameDialog.ui", + "eric6/Plugins/VcsPlugins/vcsPySvn/SvnChangeListsDialog.ui", + "eric6/Plugins/VcsPlugins/vcsPySvn/SvnCommandDialog.ui", + "eric6/Plugins/VcsPlugins/vcsPySvn/SvnCommitDialog.ui", + "eric6/Plugins/VcsPlugins/vcsPySvn/SvnCopyDialog.ui", + "eric6/Plugins/VcsPlugins/vcsPySvn/SvnDialog.ui", + "eric6/Plugins/VcsPlugins/vcsPySvn/SvnDiffDialog.ui", + "eric6/Plugins/VcsPlugins/vcsPySvn/SvnLogBrowserDialog.ui", + "eric6/Plugins/VcsPlugins/vcsPySvn/SvnLoginDialog.ui", + "eric6/Plugins/VcsPlugins/vcsPySvn/SvnMergeDialog.ui", + "eric6/Plugins/VcsPlugins/vcsPySvn/SvnNewProjectOptionsDialog.ui", + "eric6/Plugins/VcsPlugins/vcsPySvn/SvnOptionsDialog.ui", + "eric6/Plugins/VcsPlugins/vcsPySvn/SvnPropDelDialog.ui", + "eric6/Plugins/VcsPlugins/vcsPySvn/SvnPropListDialog.ui", + "eric6/Plugins/VcsPlugins/vcsPySvn/SvnPropSetDialog.ui", + "eric6/Plugins/VcsPlugins/vcsPySvn/SvnRelocateDialog.ui", + "eric6/Plugins/VcsPlugins/vcsPySvn/SvnRepoBrowserDialog.ui", + "eric6/Plugins/VcsPlugins/vcsPySvn/SvnRevisionSelectionDialog.ui", + "eric6/Plugins/VcsPlugins/vcsPySvn/SvnStatusDialog.ui", + "eric6/Plugins/VcsPlugins/vcsPySvn/SvnSwitchDialog.ui", + "eric6/Plugins/VcsPlugins/vcsPySvn/SvnTagBranchListDialog.ui", + "eric6/Plugins/VcsPlugins/vcsPySvn/SvnTagDialog.ui", + "eric6/Plugins/VcsPlugins/vcsPySvn/SvnUrlSelectionDialog.ui", + "eric6/Plugins/VcsPlugins/vcsSubversion/ConfigurationPage/SubversionPage.ui", + "eric6/Plugins/VcsPlugins/vcsSubversion/SvnBlameDialog.ui", + "eric6/Plugins/VcsPlugins/vcsSubversion/SvnChangeListsDialog.ui", + "eric6/Plugins/VcsPlugins/vcsSubversion/SvnCommandDialog.ui", + "eric6/Plugins/VcsPlugins/vcsSubversion/SvnCommitDialog.ui", + "eric6/Plugins/VcsPlugins/vcsSubversion/SvnCopyDialog.ui", + "eric6/Plugins/VcsPlugins/vcsSubversion/SvnDialog.ui", + "eric6/Plugins/VcsPlugins/vcsSubversion/SvnDiffDialog.ui", + "eric6/Plugins/VcsPlugins/vcsSubversion/SvnLogBrowserDialog.ui", + "eric6/Plugins/VcsPlugins/vcsSubversion/SvnMergeDialog.ui", + "eric6/Plugins/VcsPlugins/vcsSubversion/SvnNewProjectOptionsDialog.ui", + "eric6/Plugins/VcsPlugins/vcsSubversion/SvnOptionsDialog.ui", + "eric6/Plugins/VcsPlugins/vcsSubversion/SvnPropListDialog.ui", + "eric6/Plugins/VcsPlugins/vcsSubversion/SvnPropSetDialog.ui", + "eric6/Plugins/VcsPlugins/vcsSubversion/SvnRelocateDialog.ui", + "eric6/Plugins/VcsPlugins/vcsSubversion/SvnRepoBrowserDialog.ui", + "eric6/Plugins/VcsPlugins/vcsSubversion/SvnRevisionSelectionDialog.ui", + "eric6/Plugins/VcsPlugins/vcsSubversion/SvnStatusDialog.ui", + "eric6/Plugins/VcsPlugins/vcsSubversion/SvnSwitchDialog.ui", + "eric6/Plugins/VcsPlugins/vcsSubversion/SvnTagBranchListDialog.ui", + "eric6/Plugins/VcsPlugins/vcsSubversion/SvnTagDialog.ui", + "eric6/Plugins/VcsPlugins/vcsSubversion/SvnUrlSelectionDialog.ui", + "eric6/Plugins/WizardPlugins/ColorDialogWizard/ColorDialogWizardDialog.ui", + "eric6/Plugins/WizardPlugins/DotDesktopWizard/DotDesktopListSelectionDialog.ui", + "eric6/Plugins/WizardPlugins/DotDesktopWizard/DotDesktopWizardDialog.ui", + "eric6/Plugins/WizardPlugins/E5MessageBoxWizard/E5MessageBoxWizardDialog.ui", + "eric6/Plugins/WizardPlugins/EricPluginWizard/PluginWizardDialog.ui", + "eric6/Plugins/WizardPlugins/FileDialogWizard/FileDialogWizardDialog.ui", + "eric6/Plugins/WizardPlugins/FontDialogWizard/FontDialogWizardDialog.ui", + "eric6/Plugins/WizardPlugins/InputDialogWizard/InputDialogWizardDialog.ui", + "eric6/Plugins/WizardPlugins/MessageBoxWizard/MessageBoxWizardDialog.ui", + "eric6/Plugins/WizardPlugins/PyRegExpWizard/PyRegExpWizardCharactersDialog.ui", + "eric6/Plugins/WizardPlugins/PyRegExpWizard/PyRegExpWizardDialog.ui", + "eric6/Plugins/WizardPlugins/PyRegExpWizard/PyRegExpWizardRepeatDialog.ui", + "eric6/Plugins/WizardPlugins/QRegularExpressionWizard/QRegularExpressionWizardCharactersDialog.ui", + "eric6/Plugins/WizardPlugins/QRegularExpressionWizard/QRegularExpressionWizardDialog.ui", + "eric6/Plugins/WizardPlugins/QRegularExpressionWizard/QRegularExpressionWizardRepeatDialog.ui", + "eric6/Plugins/WizardPlugins/SetupWizard/SetupWizardDialog.ui", + "eric6/Preferences/ConfigurationPages/ApplicationPage.ui", + "eric6/Preferences/ConfigurationPages/CondaPage.ui", + "eric6/Preferences/ConfigurationPages/CooperationPage.ui", + "eric6/Preferences/ConfigurationPages/CorbaPage.ui", + "eric6/Preferences/ConfigurationPages/DebuggerGeneralPage.ui", + "eric6/Preferences/ConfigurationPages/DebuggerPython3Page.ui", + "eric6/Preferences/ConfigurationPages/DiffColoursPage.ui", + "eric6/Preferences/ConfigurationPages/EditorAPIsPage.ui", + "eric6/Preferences/ConfigurationPages/EditorAutocompletionPage.ui", + "eric6/Preferences/ConfigurationPages/EditorAutocompletionQScintillaPage.ui", + "eric6/Preferences/ConfigurationPages/EditorCalltipsPage.ui", + "eric6/Preferences/ConfigurationPages/EditorCalltipsQScintillaPage.ui", + "eric6/Preferences/ConfigurationPages/EditorDocViewerPage.ui", + "eric6/Preferences/ConfigurationPages/EditorExportersPage.ui", + "eric6/Preferences/ConfigurationPages/EditorFilePage.ui", + "eric6/Preferences/ConfigurationPages/EditorGeneralPage.ui", + "eric6/Preferences/ConfigurationPages/EditorHighlightersPage.ui", + "eric6/Preferences/ConfigurationPages/EditorHighlightingStylesPage.ui", + "eric6/Preferences/ConfigurationPages/EditorKeywordsPage.ui", + "eric6/Preferences/ConfigurationPages/EditorLanguageTabIndentOverrideDialog.ui", + "eric6/Preferences/ConfigurationPages/EditorMouseClickHandlerPage.ui", + "eric6/Preferences/ConfigurationPages/EditorPropertiesPage.ui", + "eric6/Preferences/ConfigurationPages/EditorSearchPage.ui", + "eric6/Preferences/ConfigurationPages/EditorSpellCheckingPage.ui", + "eric6/Preferences/ConfigurationPages/EditorStylesPage.ui", + "eric6/Preferences/ConfigurationPages/EditorSyntaxPage.ui", + "eric6/Preferences/ConfigurationPages/EditorTypingPage.ui", + "eric6/Preferences/ConfigurationPages/EmailPage.ui", + "eric6/Preferences/ConfigurationPages/GraphicsPage.ui", + "eric6/Preferences/ConfigurationPages/HelpDocumentationPage.ui", + "eric6/Preferences/ConfigurationPages/HelpViewersPage.ui", + "eric6/Preferences/ConfigurationPages/HexEditorPage.ui", + "eric6/Preferences/ConfigurationPages/IconsPage.ui", + "eric6/Preferences/ConfigurationPages/IconsPreviewDialog.ui", + "eric6/Preferences/ConfigurationPages/InterfacePage.ui", + "eric6/Preferences/ConfigurationPages/IrcPage.ui", + "eric6/Preferences/ConfigurationPages/LogViewerPage.ui", + "eric6/Preferences/ConfigurationPages/MasterPasswordEntryDialog.ui", + "eric6/Preferences/ConfigurationPages/MicroPythonPage.ui", + "eric6/Preferences/ConfigurationPages/MimeTypesPage.ui", + "eric6/Preferences/ConfigurationPages/MultiProjectPage.ui", + "eric6/Preferences/ConfigurationPages/NetworkPage.ui", + "eric6/Preferences/ConfigurationPages/NotificationsPage.ui", + "eric6/Preferences/ConfigurationPages/PipPage.ui", + "eric6/Preferences/ConfigurationPages/PluginManagerPage.ui", + "eric6/Preferences/ConfigurationPages/PrinterPage.ui", + "eric6/Preferences/ConfigurationPages/ProjectBrowserPage.ui", + "eric6/Preferences/ConfigurationPages/ProjectPage.ui", + "eric6/Preferences/ConfigurationPages/ProtobufPage.ui", + "eric6/Preferences/ConfigurationPages/PythonPage.ui", + "eric6/Preferences/ConfigurationPages/QtPage.ui", + "eric6/Preferences/ConfigurationPages/SecurityPage.ui", + "eric6/Preferences/ConfigurationPages/ShellPage.ui", + "eric6/Preferences/ConfigurationPages/TasksPage.ui", + "eric6/Preferences/ConfigurationPages/TemplatesPage.ui", + "eric6/Preferences/ConfigurationPages/TrayStarterPage.ui", + "eric6/Preferences/ConfigurationPages/VcsPage.ui", + "eric6/Preferences/ConfigurationPages/ViewmanagerPage.ui", + "eric6/Preferences/ConfigurationPages/WebBrowserAppearancePage.ui", + "eric6/Preferences/ConfigurationPages/WebBrowserFlashCookieManagerPage.ui", + "eric6/Preferences/ConfigurationPages/WebBrowserInterfacePage.ui", + "eric6/Preferences/ConfigurationPages/WebBrowserPage.ui", + "eric6/Preferences/ConfigurationPages/WebBrowserSpellCheckingPage.ui", + "eric6/Preferences/ConfigurationPages/WebBrowserVirusTotalPage.ui", + "eric6/Preferences/MouseClickDialog.ui", + "eric6/Preferences/ProgramsDialog.ui", + "eric6/Preferences/ShortcutDialog.ui", + "eric6/Preferences/ShortcutsDialog.ui", + "eric6/Preferences/SubstyleDefinitionDialog.ui", + "eric6/Preferences/ToolConfigurationDialog.ui", + "eric6/Preferences/ToolGroupConfigurationDialog.ui", + "eric6/Preferences/ViewProfileSidebarsDialog.ui", + "eric6/Preferences/ViewProfileToolboxesDialog.ui", + "eric6/Project/AddDirectoryDialog.ui", + "eric6/Project/AddFileDialog.ui", + "eric6/Project/AddFoundFilesDialog.ui", + "eric6/Project/AddLanguageDialog.ui", + "eric6/Project/CreateDialogCodeDialog.ui", + "eric6/Project/DebuggerPropertiesDialog.ui", + "eric6/Project/FiletypeAssociationDialog.ui", + "eric6/Project/IdlCompilerDefineNameDialog.ui", + "eric6/Project/IdlCompilerOptionsDialog.ui", + "eric6/Project/LexerAssociationDialog.ui", + "eric6/Project/MakePropertiesDialog.ui", + "eric6/Project/NewDialogClassDialog.ui", + "eric6/Project/NewPythonPackageDialog.ui", + "eric6/Project/PropertiesDialog.ui", + "eric6/Project/QuickFindFile.ui", + "eric6/Project/RccCompilerOptionsDialog.ui", + "eric6/Project/SpellingPropertiesDialog.ui", + "eric6/Project/TranslationPropertiesDialog.ui", + "eric6/Project/UicCompilerOptionsDialog.ui", + "eric6/Project/UserPropertiesDialog.ui", + "eric6/PyUnit/UnittestDialog.ui", + "eric6/PyUnit/UnittestStacktraceDialog.ui", + "eric6/QScintilla/GotoDialog.ui", + "eric6/QScintilla/MarkupProviders/HyperlinkMarkupDialog.ui", + "eric6/QScintilla/MarkupProviders/ImageMarkupDialog.ui", + "eric6/QScintilla/ReplaceWidget.ui", + "eric6/QScintilla/SearchWidget.ui", + "eric6/QScintilla/ShellHistoryDialog.ui", + "eric6/QScintilla/SortOptionsDialog.ui", + "eric6/QScintilla/SpellCheckingDialog.ui", + "eric6/QScintilla/SpellingDictionaryEditDialog.ui", + "eric6/QScintilla/ZoomDialog.ui", + "eric6/Snapshot/SnapWidget.ui", + "eric6/SqlBrowser/SqlBrowserWidget.ui", + "eric6/SqlBrowser/SqlConnectionDialog.ui", + "eric6/Tasks/TaskFilterConfigDialog.ui", + "eric6/Tasks/TaskPropertiesDialog.ui", + "eric6/Templates/TemplatePropertiesDialog.ui", + "eric6/Templates/TemplateSingleVariableDialog.ui", + "eric6/UI/AuthenticationDialog.ui", + "eric6/UI/ClearPrivateDataDialog.ui", + "eric6/UI/CompareDialog.ui", + "eric6/UI/DeleteFilesConfirmationDialog.ui", + "eric6/UI/DiffDialog.ui", + "eric6/UI/EmailDialog.ui", + "eric6/UI/ErrorLogDialog.ui", + "eric6/UI/FindFileDialog.ui", + "eric6/UI/FindFileNameDialog.ui", + "eric6/UI/InstallInfoDialog.ui", + "eric6/UI/NotificationFrame.ui", + "eric6/UI/NumbersWidget.ui", + "eric6/UI/Previewers/PreviewerQSS.ui", + "eric6/UI/PythonDisViewer.ui", + "eric6/UI/SearchWidget.ui", + "eric6/UI/SearchWidgetLine.ui", + "eric6/UI/SymbolsWidget.ui", + "eric6/VCS/CommandOptionsDialog.ui", + "eric6/VCS/RepositoryInfoDialog.ui", + "eric6/ViewManager/BookmarkedFilesDialog.ui", + "eric6/VirtualEnv/VirtualenvAddEditDialog.ui", + "eric6/VirtualEnv/VirtualenvConfigurationDialog.ui", + "eric6/VirtualEnv/VirtualenvExecDialog.ui", + "eric6/VirtualEnv/VirtualenvInterpreterSelectionDialog.ui", + "eric6/VirtualEnv/VirtualenvManagerDialog.ui", + "eric6/VirtualEnv/VirtualenvNameDialog.ui", + "eric6/WebBrowser/AdBlock/AdBlockDialog.ui", + "eric6/WebBrowser/AdBlock/AdBlockExceptionsDialog.ui", + "eric6/WebBrowser/Bookmarks/AddBookmarkDialog.ui", + "eric6/WebBrowser/Bookmarks/BookmarkPropertiesDialog.ui", + "eric6/WebBrowser/Bookmarks/BookmarksDialog.ui", + "eric6/WebBrowser/Bookmarks/BookmarksImportDialog.ui", + "eric6/WebBrowser/CookieJar/CookieDetailsDialog.ui", + "eric6/WebBrowser/CookieJar/CookiesConfigurationDialog.ui", + "eric6/WebBrowser/CookieJar/CookiesDialog.ui", + "eric6/WebBrowser/CookieJar/CookiesExceptionsDialog.ui", + "eric6/WebBrowser/Download/DownloadAskActionDialog.ui", + "eric6/WebBrowser/Download/DownloadItem.ui", + "eric6/WebBrowser/Download/DownloadManager.ui", + "eric6/WebBrowser/FeaturePermissions/FeaturePermissionsDialog.ui", + "eric6/WebBrowser/Feeds/FeedEditDialog.ui", + "eric6/WebBrowser/Feeds/FeedsDialog.ui", + "eric6/WebBrowser/Feeds/FeedsManager.ui", + "eric6/WebBrowser/FlashCookieManager/FlashCookieManagerDialog.ui", + "eric6/WebBrowser/GreaseMonkey/GreaseMonkeyAddScriptDialog.ui", + "eric6/WebBrowser/GreaseMonkey/GreaseMonkeyConfiguration/GreaseMonkeyConfigurationDialog.ui", + "eric6/WebBrowser/GreaseMonkey/GreaseMonkeyConfiguration/GreaseMonkeyConfigurationScriptInfoDialog.ui", + "eric6/WebBrowser/History/HistoryDialog.ui", + "eric6/WebBrowser/Network/ProtocolHandlerManagerDialog.ui", + "eric6/WebBrowser/Network/SendRefererWhitelistDialog.ui", + "eric6/WebBrowser/Network/SslErrorExceptionsDialog.ui", + "eric6/WebBrowser/OpenSearch/OpenSearchDialog.ui", + "eric6/WebBrowser/OpenSearch/OpenSearchEditDialog.ui", + "eric6/WebBrowser/PageScreenDialog.ui", + "eric6/WebBrowser/Passwords/PasswordsDialog.ui", + "eric6/WebBrowser/PersonalInformationManager/PersonalDataDialog.ui", + "eric6/WebBrowser/QtHelp/HelpTopicDialog.ui", + "eric6/WebBrowser/QtHelp/QtHelpDocumentationDialog.ui", + "eric6/WebBrowser/QtHelp/QtHelpDocumentationSelectionDialog.ui", + "eric6/WebBrowser/SafeBrowsing/SafeBrowsingDialog.ui", + "eric6/WebBrowser/SearchWidget.ui", + "eric6/WebBrowser/Session/SessionManagerDialog.ui", + "eric6/WebBrowser/SiteInfo/SiteInfoDialog.ui", + "eric6/WebBrowser/SpellCheck/ManageDictionariesDialog.ui", + "eric6/WebBrowser/StatusBar/JavaScriptSettingsDialog.ui", + "eric6/WebBrowser/Sync/SyncCheckPage.ui", + "eric6/WebBrowser/Sync/SyncDataPage.ui", + "eric6/WebBrowser/Sync/SyncDirectorySettingsPage.ui", + "eric6/WebBrowser/Sync/SyncEncryptionPage.ui", + "eric6/WebBrowser/Sync/SyncFtpSettingsPage.ui", + "eric6/WebBrowser/Sync/SyncHostTypePage.ui", + "eric6/WebBrowser/Tools/PrintToPdfDialog.ui", + "eric6/WebBrowser/Tools/WebIconDialog.ui", + "eric6/WebBrowser/UrlBar/BookmarkActionSelectionDialog.ui", + "eric6/WebBrowser/UrlBar/BookmarkInfoDialog.ui", + "eric6/WebBrowser/UserAgent/UserAgentsDialog.ui", + "eric6/WebBrowser/VirusTotal/VirusTotalDomainReportDialog.ui", + "eric6/WebBrowser/VirusTotal/VirusTotalIpReportDialog.ui", + "eric6/WebBrowser/VirusTotal/VirusTotalWhoisDialog.ui", + "eric6/WebBrowser/WebBrowserClearPrivateDataDialog.ui", + "eric6/WebBrowser/WebBrowserLanguagesDialog.ui", + "eric6/WebBrowser/ZoomManager/ZoomValuesDialog.ui" + ], + "RESOURCES": [], + "INTERFACES": [], + "PROTOCOLS": [], + "OTHERS": [ + ".hgignore", + "DTDs", + "Dictionaries", + "MANIFEST.in", + "docs/LICENSE.GPL3", + "docs/README-MacOSX.rst", + "docs/README-eric6-doc.rst", + "docs/README-i18n.rst", + "docs/README-passive-debugging.rst", + "docs/README.rst", + "docs/THANKS", + "docs/changelog", + "eric6.e4p", + "eric6/APIs/MicroPython/calliope.api", + "eric6/APIs/MicroPython/circuitpython.api", + "eric6/APIs/MicroPython/microbit.api", + "eric6/APIs/MicroPython/micropython.api", + "eric6/APIs/Python/zope-2.10.7.api", + "eric6/APIs/Python/zope-2.11.2.api", + "eric6/APIs/Python/zope-3.3.1.api", + "eric6/APIs/Python3/PyQt4.bas", + "eric6/APIs/Python3/PyQt5.bas", + "eric6/APIs/Python3/PyQtChart.bas", + "eric6/APIs/Python3/PyQtWebEngine.bas", + "eric6/APIs/Python3/QScintilla2.bas", + "eric6/APIs/Python3/eric6.api", + "eric6/APIs/Python3/eric6.bas", + "eric6/APIs/QSS/qss.api", + "eric6/APIs/Ruby/Ruby-1.8.7.api", + "eric6/APIs/Ruby/Ruby-1.8.7.bas", + "eric6/APIs/Ruby/Ruby-1.9.1.api", + "eric6/APIs/Ruby/Ruby-1.9.1.bas", + "eric6/CSSs", + "eric6/CodeTemplates", + "eric6/DebugClients/Python/coverage/doc", + "eric6/DesignerTemplates", + "eric6/Documentation/Help", + "eric6/Documentation/Source", + "eric6/E5Network/data/effective_tld_names.dat", + "eric6/E5Network/data/test_psl.txt", + "eric6/IconEditor/cursors/aim-cursor.xpm", + "eric6/IconEditor/cursors/colorpicker-cursor.xpm", + "eric6/IconEditor/cursors/eraser-cursor.xpm", + "eric6/IconEditor/cursors/fill-cursor.xpm", + "eric6/IconEditor/cursors/paintbrush-cursor.xpm", + "eric6/Plugins/UiExtensionPlugins/Translator/icons/engines/deepl-dark.svg", + "eric6/Plugins/UiExtensionPlugins/Translator/icons/engines/deepl-light.svg", + "eric6/Plugins/UiExtensionPlugins/Translator/icons/engines/glosbe.svg", + "eric6/Plugins/UiExtensionPlugins/Translator/icons/engines/googlev1.svg", + "eric6/Plugins/UiExtensionPlugins/Translator/icons/engines/googlev2.svg", + "eric6/Plugins/UiExtensionPlugins/Translator/icons/engines/ibm_watson-dark.svg", + "eric6/Plugins/UiExtensionPlugins/Translator/icons/engines/ibm_watson-light.svg", + "eric6/Plugins/UiExtensionPlugins/Translator/icons/engines/microsoft-dark.svg", + "eric6/Plugins/UiExtensionPlugins/Translator/icons/engines/microsoft-light.svg", + "eric6/Plugins/UiExtensionPlugins/Translator/icons/engines/mymemory-dark.svg", + "eric6/Plugins/UiExtensionPlugins/Translator/icons/engines/mymemory-light.svg", + "eric6/Plugins/UiExtensionPlugins/Translator/icons/engines/promt.svg", + "eric6/Plugins/UiExtensionPlugins/Translator/icons/engines/yandex-dark.svg", + "eric6/Plugins/UiExtensionPlugins/Translator/icons/engines/yandex-light.svg", + "eric6/Plugins/UiExtensionPlugins/Translator/icons/flag-dark.svg", + "eric6/Plugins/UiExtensionPlugins/Translator/icons/flag-light.svg", + "eric6/Plugins/UiExtensionPlugins/Translator/icons/flags/af.svg", + "eric6/Plugins/UiExtensionPlugins/Translator/icons/flags/ar.svg", + "eric6/Plugins/UiExtensionPlugins/Translator/icons/flags/be.svg", + "eric6/Plugins/UiExtensionPlugins/Translator/icons/flags/bg.svg", + "eric6/Plugins/UiExtensionPlugins/Translator/icons/flags/bs.svg", + "eric6/Plugins/UiExtensionPlugins/Translator/icons/flags/ca.svg", + "eric6/Plugins/UiExtensionPlugins/Translator/icons/flags/cs.svg", + "eric6/Plugins/UiExtensionPlugins/Translator/icons/flags/da.svg", + "eric6/Plugins/UiExtensionPlugins/Translator/icons/flags/de.svg", + "eric6/Plugins/UiExtensionPlugins/Translator/icons/flags/el.svg", + "eric6/Plugins/UiExtensionPlugins/Translator/icons/flags/en.svg", + "eric6/Plugins/UiExtensionPlugins/Translator/icons/flags/es.svg", + "eric6/Plugins/UiExtensionPlugins/Translator/icons/flags/et.svg", + "eric6/Plugins/UiExtensionPlugins/Translator/icons/flags/fi.svg", + "eric6/Plugins/UiExtensionPlugins/Translator/icons/flags/fr.svg", + "eric6/Plugins/UiExtensionPlugins/Translator/icons/flags/ga.svg", + "eric6/Plugins/UiExtensionPlugins/Translator/icons/flags/gl.svg", + "eric6/Plugins/UiExtensionPlugins/Translator/icons/flags/he.svg", + "eric6/Plugins/UiExtensionPlugins/Translator/icons/flags/hi.svg", + "eric6/Plugins/UiExtensionPlugins/Translator/icons/flags/hr.svg", + "eric6/Plugins/UiExtensionPlugins/Translator/icons/flags/hu.svg", + "eric6/Plugins/UiExtensionPlugins/Translator/icons/flags/id.svg", + "eric6/Plugins/UiExtensionPlugins/Translator/icons/flags/is.svg", + "eric6/Plugins/UiExtensionPlugins/Translator/icons/flags/it.svg", + "eric6/Plugins/UiExtensionPlugins/Translator/icons/flags/iw.svg", + "eric6/Plugins/UiExtensionPlugins/Translator/icons/flags/ja.svg", + "eric6/Plugins/UiExtensionPlugins/Translator/icons/flags/ka.svg", + "eric6/Plugins/UiExtensionPlugins/Translator/icons/flags/ko.svg", + "eric6/Plugins/UiExtensionPlugins/Translator/icons/flags/lt.svg", + "eric6/Plugins/UiExtensionPlugins/Translator/icons/flags/lv.svg", + "eric6/Plugins/UiExtensionPlugins/Translator/icons/flags/mk.svg", + "eric6/Plugins/UiExtensionPlugins/Translator/icons/flags/mt.svg", + "eric6/Plugins/UiExtensionPlugins/Translator/icons/flags/nl.svg", + "eric6/Plugins/UiExtensionPlugins/Translator/icons/flags/no.svg", + "eric6/Plugins/UiExtensionPlugins/Translator/icons/flags/pl.svg", + "eric6/Plugins/UiExtensionPlugins/Translator/icons/flags/pt.svg", + "eric6/Plugins/UiExtensionPlugins/Translator/icons/flags/ro.svg", + "eric6/Plugins/UiExtensionPlugins/Translator/icons/flags/ru.svg", + "eric6/Plugins/UiExtensionPlugins/Translator/icons/flags/sk.svg", + "eric6/Plugins/UiExtensionPlugins/Translator/icons/flags/sl.svg", + "eric6/Plugins/UiExtensionPlugins/Translator/icons/flags/sq.svg", + "eric6/Plugins/UiExtensionPlugins/Translator/icons/flags/sr.svg", + "eric6/Plugins/UiExtensionPlugins/Translator/icons/flags/sv.svg", + "eric6/Plugins/UiExtensionPlugins/Translator/icons/flags/th.svg", + "eric6/Plugins/UiExtensionPlugins/Translator/icons/flags/tl.svg", + "eric6/Plugins/UiExtensionPlugins/Translator/icons/flags/tr.svg", + "eric6/Plugins/UiExtensionPlugins/Translator/icons/flags/uk.svg", + "eric6/Plugins/UiExtensionPlugins/Translator/icons/flags/vi.svg", + "eric6/Plugins/UiExtensionPlugins/Translator/icons/flags/zh-CN.svg", + "eric6/Plugins/UiExtensionPlugins/Translator/icons/flags/zh-TW.svg", + "eric6/Plugins/UiExtensionPlugins/Translator/icons/pronounce-dark.svg", + "eric6/Plugins/UiExtensionPlugins/Translator/icons/pronounce-light.svg", + "eric6/Plugins/UiExtensionPlugins/Translator/icons/swap-dark.svg", + "eric6/Plugins/UiExtensionPlugins/Translator/icons/swap-light.svg", + "eric6/Plugins/UiExtensionPlugins/Translator/icons/translate-dark.svg", + "eric6/Plugins/UiExtensionPlugins/Translator/icons/translate-light.svg", + "eric6/Plugins/VcsPlugins/vcsGit/icons/conflict.svg", + "eric6/Plugins/VcsPlugins/vcsGit/icons/git.svg", + "eric6/Plugins/VcsPlugins/vcsGit/icons/git92.svg", + "eric6/Plugins/VcsPlugins/vcsGit/icons/preferences-git.svg", + "eric6/Plugins/VcsPlugins/vcsMercurial/icons/mercurial.svg", + "eric6/Plugins/VcsPlugins/vcsMercurial/icons/preferences-mercurial.svg", + "eric6/Plugins/VcsPlugins/vcsMercurial/icons/startServer-dark.svg", + "eric6/Plugins/VcsPlugins/vcsMercurial/icons/startServer-light.svg", + "eric6/Plugins/VcsPlugins/vcsMercurial/icons/stopServer-dark.svg", + "eric6/Plugins/VcsPlugins/vcsMercurial/icons/stopServer-light.svg", + "eric6/Plugins/VcsPlugins/vcsMercurial/templates/logBrowserBookmarkPhase.tmpl", + "eric6/Plugins/VcsPlugins/vcsPySvn/icons/preferences-subversion.svg", + "eric6/Plugins/VcsPlugins/vcsPySvn/icons/pysvn.svg", + "eric6/Plugins/VcsPlugins/vcsSubversion/icons/preferences-subversion.svg", + "eric6/Plugins/VcsPlugins/vcsSubversion/icons/subversion.svg", + "eric6/Plugins/ViewManagerPlugins/Listspace/preview.png", + "eric6/Plugins/ViewManagerPlugins/Tabview/preview.png", + "eric6/Plugins/WizardPlugins/SetupWizard/data/trove_classifiers.txt", + "eric6/Styles", + "eric6/ThirdParty/CharDet/LICENSE", + "eric6/ThirdParty/CharDet/README.rst", + "eric6/ThirdParty/EditorConfig/COPYING", + "eric6/ThirdParty/EditorConfig/LICENSE.BSD", + "eric6/ThirdParty/EditorConfig/LICENSE.PSF", + "eric6/ThirdParty/EditorConfig/README.rst", + "eric6/ThirdParty/Jasy/jasy/license.md", + "eric6/ThirdParty/Pygments/pygments/AUTHORS", + "eric6/ThirdParty/Pygments/pygments/CHANGES", + "eric6/ThirdParty/Pygments/pygments/LICENSE", + "eric6/ThirdParty/Pygments/pygments/PKG-INFO", + "eric6/ThirdParty/Send2Trash/LICENSE", + "eric6/ThirdParty/Send2Trash/PKG-INFO", + "eric6/ThirdParty/asttokens/asttokens/LICENSE", + "eric6/UI/data/documentViewerStyle-dark.css", + "eric6/UI/data/documentViewerStyle-light.css", + "eric6/WebBrowser/Bookmarks/DefaultBookmarks.xbel", + "eric6/WebBrowser/OpenSearch/DefaultSearchEngines/Amazoncom.xml", + "eric6/WebBrowser/OpenSearch/DefaultSearchEngines/Bing.xml", + "eric6/WebBrowser/OpenSearch/DefaultSearchEngines/DeEn_Beolingus.xml", + "eric6/WebBrowser/OpenSearch/DefaultSearchEngines/DuckDuckGo.xml", + "eric6/WebBrowser/OpenSearch/DefaultSearchEngines/Facebook.xml", + "eric6/WebBrowser/OpenSearch/DefaultSearchEngines/Google.xml", + "eric6/WebBrowser/OpenSearch/DefaultSearchEngines/Google_Im_Feeling_Lucky.xml", + "eric6/WebBrowser/OpenSearch/DefaultSearchEngines/LEO_DeuEng.xml", + "eric6/WebBrowser/OpenSearch/DefaultSearchEngines/LinuxMagazin.xml", + "eric6/WebBrowser/OpenSearch/DefaultSearchEngines/MetaGer_MetaGer2.xml", + "eric6/WebBrowser/OpenSearch/DefaultSearchEngines/PyPI.xml", + "eric6/WebBrowser/OpenSearch/DefaultSearchEngines/Qwant.xml", + "eric6/WebBrowser/OpenSearch/DefaultSearchEngines/Reddit.xml", + "eric6/WebBrowser/OpenSearch/DefaultSearchEngines/StartPage_de.xml", + "eric6/WebBrowser/OpenSearch/DefaultSearchEngines/StartPage_en.xml", + "eric6/WebBrowser/OpenSearch/DefaultSearchEngines/Wikia.xml", + "eric6/WebBrowser/OpenSearch/DefaultSearchEngines/Wikia_en.xml", + "eric6/WebBrowser/OpenSearch/DefaultSearchEngines/Wikipedia.xml", + "eric6/WebBrowser/OpenSearch/DefaultSearchEngines/Wiktionary.xml", + "eric6/WebBrowser/OpenSearch/DefaultSearchEngines/Yahoo.xml", + "eric6/WebBrowser/OpenSearch/DefaultSearchEngines/YouTube.xml", + "eric6/WebBrowser/OpenSearch/DefaultSearchEngines/searxme.xml", + "eric6/WebBrowser/UserAgent/UserAgentDefaults.xml", + "eric6/WebBrowser/data/html/adblockPage.html", + "eric6/WebBrowser/data/html/authenticationErrorPage.html", + "eric6/WebBrowser/data/html/ericErrorPage.html", + "eric6/WebBrowser/data/html/speeddialPage.html", + "eric6/WebBrowser/data/html/startPage.html", + "eric6/WebBrowser/data/html/tabCrashPage.html", + "eric6/WebBrowser/data/icons/adBlockPlus16.png", + "eric6/WebBrowser/data/icons/adBlockPlus64.png", + "eric6/WebBrowser/data/icons/box-border-small.png", + "eric6/WebBrowser/data/icons/brokenPage.png", + "eric6/WebBrowser/data/icons/close.png", + "eric6/WebBrowser/data/icons/edit.png", + "eric6/WebBrowser/data/icons/ericWeb16.png", + "eric6/WebBrowser/data/icons/ericWeb32.png", + "eric6/WebBrowser/data/icons/loading.gif", + "eric6/WebBrowser/data/icons/plus.png", + "eric6/WebBrowser/data/icons/reload.png", + "eric6/WebBrowser/data/icons/setting.png", + "eric6/WebBrowser/data/javascript/jquery-ui.js", + "eric6/WebBrowser/data/javascript/jquery.js", + "eric6/WebBrowser/data/javascript/qwebchannel.js", + "eric6/icons", + "eric6/pixmaps", + "linux/eric6.appdata.xml", + "linux/eric6.appdata.xml.in", + "linux/eric6.desktop", + "linux/eric6.desktop.in", + "linux/eric6_browser.desktop", + "linux/eric6_browser.desktop.in", + "others/default.e4k", + "others/default_Mac.e4k", + "others/pylint.rc" + ], + "TRANSLATIONS": [ + "eric6/i18n/eric6_cs.qm", + "eric6/i18n/eric6_cs.ts", + "eric6/i18n/eric6_de.qm", + "eric6/i18n/eric6_de.ts", + "eric6/i18n/eric6_empty.ts", + "eric6/i18n/eric6_en.qm", + "eric6/i18n/eric6_en.ts", + "eric6/i18n/eric6_es.qm", + "eric6/i18n/eric6_es.ts", + "eric6/i18n/eric6_fr.qm", + "eric6/i18n/eric6_fr.ts", + "eric6/i18n/eric6_it.qm", + "eric6/i18n/eric6_it.ts", + "eric6/i18n/eric6_pt.qm", + "eric6/i18n/eric6_pt.ts", + "eric6/i18n/eric6_ru.qm", + "eric6/i18n/eric6_ru.ts", + "eric6/i18n/eric6_tr.qm", + "eric6/i18n/eric6_tr.ts", + "eric6/i18n/eric6_zh_CN.qm", + "eric6/i18n/eric6_zh_CN.ts" + ], + "TRANSLATIONEXCEPTIONS": [], + "TRANSLATIONPATTERN": "eric6/i18n/eric6_%language%.ts", + "TRANSLATIONSBINPATH": "", + "MAINSCRIPT": "eric6/eric6.py", + "VCS": "Mercurial", + "VCSOPTIONS": { + "global": [ + "" + ], + "commit": [ + "" + ], + "checkout": [ + "" + ], + "update": [ + "" + ], + "add": [ + "" + ], + "remove": [ + "" + ], + "diff": [ + "" + ], + "log": [ + "" + ], + "history": [ + "" + ], + "status": [ + "" + ], + "tag": [ + "" + ], + "export": [ + "" + ] + }, + "VCSOTHERDATA": {}, + "AUTHOR": "Detlev Offenbach", + "EMAIL": "detlev@die-offenbachs.de", + "HASH": "df7daa8781250f7664e6ecaeaf1361fa2efd39ee", + "PROGLANGUAGE": "Python3", + "MIXEDLANGUAGE": true, + "PROJECTTYPE": "PyQt5", + "SPELLLANGUAGE": "en_US", + "SPELLWORDS": "Dictionaries/words.dic", + "SPELLEXCLUDES": "Dictionaries/excludes.dic", + "FILETYPES": { + "*.idl": "INTERFACES", + "*.js": "OTHERS", + "*.py": "SOURCES", + "*.py3": "SOURCES", + "*.pyw": "SOURCES", + "*.pyw3": "SOURCES", + "*.qm": "TRANSLATIONS", + "*.qrc": "RESOURCES", + "*.rb": "SOURCES", + "*.ts": "TRANSLATIONS", + "*.ui": "FORMS", + "*.ui.h": "FORMS", + "Ui_*.py": "__IGNORE__", + "build": "__IGNORE__" + }, + "LEXERASSOCS": {}, + "PROJECTTYPESPECIFICDATA": {}, + "CHECKERSPARMS": { + "Pep8Checker": { + "AnnotationsChecker": { + "MaximumComplexity": 3, + "MinimumCoverage": 75 + }, + "BlankLines": [ + 2, + 1 + ], + "BuiltinsChecker": { + "bytes": [ + "unicode" + ], + "chr": [ + "unichr" + ], + "str": [ + "unicode" + ] + }, + "CommentedCodeChecker": { + "Aggressive": false, + "WhiteList": [ + "pylint", + "pyright", + "noqa", + "type:\\s*ignore", + "fmt:\\s*(on|off)", + "TODO", + "FIXME", + "WARNING", + "NOTE", + "TEST", + "DOCU", + "XXX", + "- " + ] + }, + "CopyrightAuthor": "", + "CopyrightMinFileSize": 0, + "DocstringType": "eric", + "EnabledCheckerCategories": "C, D, E, M, N, W", + "ExcludeFiles": "*/ThirdParty/*, */coverage/*, */Ui_*.py, */Examples/*, */*_rc.py,*/pycodestyle.py,*/pyflakes/checker.py,*/mccabe.py,*/eradicate.py", + "ExcludeMessages": "C101,E265,E266,E305,E402,M201,M301,M302,M303,M304,M305,M306,M307,M308,M311,M312,M313,M314,M315,M321,M701,M702,M811,M834,N802,N803,N807,N808,N821,W293,W504", + "FixCodes": "", + "FixIssues": false, + "FutureChecker": "", + "HangClosing": false, + "IncludeMessages": "", + "LineComplexity": 25, + "LineComplexityScore": 10, + "MaxCodeComplexity": 10, + "MaxDocLineLength": 79, + "MaxLineLength": 79, + "NoFixCodes": "E501", + "RepeatMessages": true, + "SecurityChecker": { + "CheckTypedException": false, + "HardcodedTmpDirectories": [ + "/tmp", + "/var/tmp", + "/dev/shm", + "~/tmp" + ], + "InsecureHashes": [ + "md4", + "md5", + "sha", + "sha1" + ], + "InsecureSslProtocolVersions": [ + "PROTOCOL_SSLv2", + "SSLv2_METHOD", + "SSLv23_METHOD", + "PROTOCOL_SSLv3", + "PROTOCOL_TLSv1", + "SSLv3_METHOD", + "TLSv1_METHOD" + ], + "WeakKeySizeDsaHigh": "1024", + "WeakKeySizeDsaMedium": "2048", + "WeakKeySizeEcHigh": "160", + "WeakKeySizeEcMedium": "224", + "WeakKeySizeRsaHigh": "1024", + "WeakKeySizeRsaMedium": "2048" + }, + "ShowIgnored": false, + "ValidEncodings": "latin-1, utf-8" + }, + "SyntaxChecker": { + "ExcludeFiles": "*/coverage/*, */ThirdParty/*, */Examples/*" + }, + "Tabnanny": { + "ExcludeFiles": "*/coverage/*, */ThirdParty/*, */Examples/*" + }, + "Vulture": { + "ExcludeFiles": "*/ThirdParty/*, */coverage/*, Ui_*.py, */Examples/*", + "SlotsAreUsed": true, + "WhiteLists": { + "__patterns__": [ + "visit_*", + "on_*", + "*Completer", + "visit*" + ], + "attribute": [], + "class": [], + "function": [ + "getOpenEditorsCount", + "_vcsRemove", + "getType", + "getImport", + "readPlistFromBytes", + "vcsSetData", + "_getglobal" + ], + "property": [], + "slot": [], + "variable": [ + "Complexity_Weak", + "Complexity_Good", + "Complexity_Strong" + ] + } + } + }, + "PACKAGERSPARMS": {}, + "DOCUMENTATIONPARMS": { + "ERIC4API": { + "ignoreDirectories": [ + "CSSs", + "DTDs", + "DesignerTemplates", + "Documentation", + "Examples", + "ThirdParty", + "corbatests", + "i18n", + "icons", + "pixmaps", + "tests", + "unittests", + "Styles", + "CodeTemplates", + ".ropeproject", + "patches", + "Dictionaries", + "coverage", + ".eric5project", + "_eric5project", + "_ropeproject", + ".hg", + "_hg", + ".directory", + ".issues", + "data", + "pyflakes", + ".eric6project", + "_eric6project" + ], + "ignoreFilePatterns": [ + "Ui_*" + ], + "languages": [ + "Python3" + ], + "outputFile": "eric6/APIs/%L/eric6.api", + "useRecursion": true + }, + "ERIC4DOC": { + "CFBgColor": "#4fa4ff", + "CFColor": "#ffffff", + "Level1HeaderBgColor": "#4fa4ff", + "Level1HeaderColor": "#ffffff", + "Level2HeaderBgColor": "#00557f", + "Level2HeaderColor": "#ffffff", + "LinkColor": "#aa5500", + "cssFile": "eric6/CSSs/default.css", + "ignoreDirectories": [ + "CSSs", + "DTDs", + "DesignerTemplates", + "Documentation", + "Examples", + "ThirdParty", + "corbatests", + "i18n", + "icons", + "pixmaps", + "tests", + "unittests", + "rb_tests", + "Styles", + "CodeTemplates", + ".ropeproject", + "patches", + "Dictionaries", + "coverage", + ".eric5project", + "_eric5project", + "_ropeproject", + ".hg", + "_hg", + ".directory", + ".issues", + "pyflakes", + ".eric6project", + "_eric6project" + ], + "ignoreFilePatterns": [ + "Ui_*", + "*_rc.py" + ], + "outputDirectory": "eric6/Documentation/Source", + "qtHelpEnabled": true, + "qtHelpFilterAttributes": "eric6:ide", + "qtHelpFilterName": "eric6", + "qtHelpNamespace": "org.eric6.ide", + "qtHelpOutputDirectory": "eric6/Documentation/Help", + "qtHelpTitle": "The eric6 IDE", + "qtHelpVirtualFolder": "eric6", + "useRecursion": true + } + }, + "OTHERTOOLSPARMS": { + "CodeMetrics": { + "ExcludeFiles": "*/ThirdParty/*, */coverage/*, Ui_*.py" + }, + "RadonCodeMetrics": { + "ExcludeFiles": "*/ThirdParty/*, */coverage/*, Ui_*.py, *_rc.py" + } + }, + "MAKEPARAMS": { + "MakeEnabled": false, + "MakeExecutable": "", + "MakeFile": "", + "MakeTarget": "", + "MakeParameters": "", + "MakeTestOnly": true + }, + "IDLPARAMS": { + "IncludeDirs": [], + "DefinedNames": [], + "UndefinedNames": [] + }, + "UICPARAMS": { + "Package": "", + "PackagesRoot": "eric6", + "RcSuffix": "" + }, + "RCCPARAMS": { + "CompressionThreshold": 70, + "CompressLevel": 0, + "CompressionDisable": false, + "PathPrefix": "" + }, + "EOL": 1, + "DOCSTRING": "" + } +} \ No newline at end of file
--- a/eric6/Debugger/BreakPointModel.py Mon Feb 01 10:06:11 2021 +0100 +++ b/eric6/Debugger/BreakPointModel.py Mon Feb 01 13:25:37 2021 +0100 @@ -7,6 +7,8 @@ Module implementing the Breakpoint model. """ +import copy + from PyQt5.QtCore import pyqtSignal, Qt, QAbstractItemModel, QModelIndex @@ -227,6 +229,19 @@ self.breakpoints.append(bp) self.endInsertRows() + def addBreakPoints(self, breakpoints): + """ + Public method to add multiple breakpoints to the list. + + @param breakpoints list of breakpoints with file name, line number, + condition, temporary flag, enabled flag and ignore count each + @type list of (str, int, str, bool, bool, int) + """ + cnt = len(self.breakpoints) + self.beginInsertRows(QModelIndex(), cnt, cnt + len(breakpoints) - 1) + self.breakpoints += breakpoints + self.endInsertRows() + def setBreakPointByIndex(self, index, fn, line, properties): """ Public method to set the values of a breakpoint given by index. @@ -321,7 +336,16 @@ return self.breakpoints[index.row()][:] # return a copy else: return [] - + + def getAllBreakpoints(self): + """ + Public method to get a copy of the breakpoints. + + @return list of breakpoints + @rtype list of list of [str, int, str, bool, bool, int] + """ + return copy.deepcopy(self.breakpoints) + def getBreakPointIndex(self, fn, lineno): """ Public method to get the index of a breakpoint given by filename and
--- a/eric6/Debugger/WatchPointModel.py Mon Feb 01 10:06:11 2021 +0100 +++ b/eric6/Debugger/WatchPointModel.py Mon Feb 01 13:25:37 2021 +0100 @@ -7,6 +7,8 @@ Module implementing the Watch expression model. """ +import copy + from PyQt5.QtCore import pyqtSignal, Qt, QAbstractItemModel, QModelIndex @@ -169,11 +171,13 @@ """ Public method to add a new watch expression to the list. - @param cond expression of the watch expression (string) - @param special special condition of the watch expression (string) + @param cond expression of the watch expression + @type str + @param special special condition of the watch expression + @type str @param properties properties of the watch expression - (tuple of temporary flag (bool), enabled flag (bool), - ignore count (integer)) + (tuple of temporary flag, enabled flag, ignore count) + @type tuple of (bool, bool, int) """ wp = [cond, special] + list(properties) cnt = len(self.watchpoints) @@ -181,6 +185,19 @@ self.watchpoints.append(wp) self.endInsertRows() + def addWatchPoints(self, watchpoints): + """ + Public method to add multiple watch expressions to the list. + + @param watchpoints list of watch expressions with expression, special + condition, temporary flag, enabled flag and ignore count each + @type list of (str, str, bool, bool, int) + """ + cnt = len(self.watchpoints) + self.beginInsertRows(QModelIndex(), cnt, cnt + len(watchpoints) - 1) + self.watchpoints += watchpoints + self.endInsertRows() + def setWatchPointByIndex(self, index, cond, special, properties): """ Public method to set the values of a watch expression given by index. @@ -198,10 +215,7 @@ index2 = self.createIndex( row, len(self.watchpoints[row]), self.watchpoints[row]) self.dataAboutToBeChanged.emit(index1, index2) - i = 0 - for value in [cond, special] + list(properties): - self.watchpoints[row][i] = value - i += 1 + self.watchpoints[row] = [cond, special] + list(properties) self.dataChanged.emit(index1, index2) def setWatchPointEnabledByIndex(self, index, enabled): @@ -265,14 +279,23 @@ @param index index of the watch expression (QModelIndex) @return watch expression (list of six values (expression, - special condition, temporary flag, enabled flag, ignore count, - index)) + special condition, temporary flag, enabled flag, ignore count)) + @rtype tuple of (str, str, bool, bool, int) """ if index.isValid(): return self.watchpoints[index.row()][:] # return a copy else: return [] - + + def getAllWatchpoints(self): + """ + Public method to get the list of watchpoints. + + @return list of watchpoints + @rtype list of list of [str, str, bool, bool, int] + """ + return copy.deepcopy(self.watchpoints) + def getWatchPointIndex(self, cond, special=""): """ Public method to get the index of a watch expression given by
--- a/eric6/E5XML/DebuggerPropertiesWriter.py Mon Feb 01 10:06:11 2021 +0100 +++ b/eric6/E5XML/DebuggerPropertiesWriter.py Mon Feb 01 13:25:37 2021 +0100 @@ -52,7 +52,7 @@ self.name)) self.writeComment( " This file was generated automatically, do not edit. ") - if Preferences.getProject("XMLTimestamp"): + if Preferences.getProject("TimestampFile"): self.writeComment( " Saved: {0} ".format(time.strftime('%Y-%m-%d, %H:%M:%S')))
--- a/eric6/E5XML/HighlightingStylesReader.py Mon Feb 01 10:06:11 2021 +0100 +++ b/eric6/E5XML/HighlightingStylesReader.py Mon Feb 01 13:25:37 2021 +0100 @@ -8,8 +8,6 @@ Module implementing a class for reading a highlighting styles XML file. """ -from PyQt5.QtGui import QColor, QFont - from .Config import highlightingStylesFileFormatVersion from .XMLStreamReaderBase import XMLStreamReaderBase @@ -25,7 +23,8 @@ Constructor @param device reference to the I/O device to read from (QIODevice) - @param lexers list of lexer objects for which to export the styles + @param lexers dictionary of lexer objects for which to import the + styles """ XMLStreamReaderBase.__init__(self, device) @@ -37,6 +36,8 @@ """ Public method to read and parse the XML document. """ + self.__lexersList = [] + while not self.atEnd(): self.readNext() if self.isStartElement(): @@ -52,12 +53,18 @@ self.raiseUnexpectedStartTag(self.name()) self.showErrorMessage() + + return self.__lexersList def __readLexer(self): """ Private method to read the lexer info. """ language = self.attribute("name") + self.__lexersList.append({ + "name": language, + "styles": [], + }) if language and language in self.lexers: lexer = self.lexers[language] else: @@ -87,31 +94,34 @@ substyle = int(self.attribute("substyle", "-1")) # -1 is default for base styles - # add sub-style if not already there - if not lexer.hasStyle(style, substyle): - substyle = lexer.addSubstyle(style) + styleDict = { + "style": style, + "substyle": substyle, + } color = self.attribute("color") if color: - color = QColor(color) + styleDict["color"] = color else: - color = lexer.defaultColor(style, substyle) - lexer.setColor(color, style, substyle) + styleDict["color"] = ( + lexer.defaultColor(style, substyle).name() + ) paper = self.attribute("paper") if paper: - paper = QColor(paper) + styleDict["paper"] = paper else: - paper = lexer.defaultPaper(style, substyle) - lexer.setPaper(paper, style, substyle) + styleDict["paper"] = ( + lexer.defaultPaper(style, substyle).name() + ) fontStr = self.attribute("font") if fontStr: - font = QFont() - font.fromString(fontStr) + styleDict["font"] = fontStr else: - font = lexer.defaultFont(style, substyle) - lexer.setFont(font, style, substyle) + styleDict["font"] = ( + lexer.defaultFont(style, substyle).toString() + ) eolfill = self.attribute("eolfill") if eolfill: @@ -120,26 +130,29 @@ eolfill = lexer.defaulEolFill(style, substyle) else: eolfill = lexer.defaulEolFill(style, substyle) - lexer.setEolFill(eolfill, style, substyle) + styleDict["eolfill"] = eolfill while not self.atEnd(): self.readNext() if self.isStartElement(): - if self.name() == "Description" and substyle >= 0: - # description can only be set for sub-styles + if self.name() == "Description": description = self.readElementText().strip() if not description: description = lexer.defaultDescription( style, substyle) - lexer.setDescription(description, style, substyle) - elif self.name() == "Words" and substyle >= 0: - # words can only be set for sub-styles + styleDict["description"] = description + elif self.name() == "Words": words = self.readElementText().strip() if not words: words = lexer.defaultWords(style, substyle) - lexer.setWords(words, style, substyle) + styleDict["words"] = words if self.isEndElement() and self.name() == "Style": + if "description" not in styleDict: + styleDict["description"] = "" + if "words" not in styleDict: + styleDict["words"] = "" + self.__lexersList[-1]["styles"].append(styleDict) return while not self.atEnd():
--- a/eric6/E5XML/MultiProjectWriter.py Mon Feb 01 10:06:11 2021 +0100 +++ b/eric6/E5XML/MultiProjectWriter.py Mon Feb 01 13:25:37 2021 +0100 @@ -47,7 +47,7 @@ # add some generation comments self.writeComment(" eric multi project file for multi project {0} " .format(self.name)) - if Preferences.getMultiProject("XMLTimestamp"): + if Preferences.getMultiProject("TimestampFile"): self.writeComment( " Saved: {0} ".format(time.strftime('%Y-%m-%d, %H:%M:%S'))) self.writeComment(
--- a/eric6/E5XML/ProjectWriter.py Mon Feb 01 10:06:11 2021 +0100 +++ b/eric6/E5XML/ProjectWriter.py Mon Feb 01 13:25:37 2021 +0100 @@ -67,7 +67,7 @@ # add some generation comments self.writeComment( " eric project file for project {0} ".format(self.name)) - if Preferences.getProject("XMLTimestamp"): + if Preferences.getProject("TimestampFile"): self.writeComment( " Saved: {0} ".format(time.strftime('%Y-%m-%d, %H:%M:%S'))) self.writeComment(" Copyright (C) {0} {1}, {2} ".format(
--- a/eric6/E5XML/SessionWriter.py Mon Feb 01 10:06:11 2021 +0100 +++ b/eric6/E5XML/SessionWriter.py Mon Feb 01 13:25:37 2021 +0100 @@ -58,7 +58,7 @@ " eric session file for project {0} ".format(self.name)) self.writeComment( " This file was generated automatically, do not edit. ") - if Preferences.getProject("XMLTimestamp") or isGlobal: + if Preferences.getProject("TimestampFile") or isGlobal: self.writeComment( " Saved: {0} ".format(time.strftime('%Y-%m-%d, %H:%M:%S'))) @@ -110,7 +110,7 @@ self.writeEndElement() aw = self.vm.getActiveName() - if aw and self.project.isProjectFile(aw): + if aw and (isGlobal or self.project.isProjectFile(aw)): ed = self.vm.getOpenEditor(aw) line, index = ed.getCursorPosition() self.writeStartElement("ActiveWindow")
--- a/eric6/E5XML/TasksReader.py Mon Feb 01 10:06:11 2021 +0100 +++ b/eric6/E5XML/TasksReader.py Mon Feb 01 13:25:37 2021 +0100 @@ -68,7 +68,7 @@ elif self.name() == "ProjectScanFilter": scanFilter = self.readElementText() if self.forProject: - self.viewer.projectTasksScanFilter = scanFilter + self.viewer.setTasksScanFilter(scanFilter) else: self.raiseUnexpectedStartTag(self.name())
--- a/eric6/E5XML/TasksWriter.py Mon Feb 01 10:06:11 2021 +0100 +++ b/eric6/E5XML/TasksWriter.py Mon Feb 01 13:25:37 2021 +0100 @@ -48,7 +48,7 @@ if self.forProject: self.writeComment( " eric tasks file for project {0} ".format(self.name)) - if Preferences.getProject("XMLTimestamp"): + if Preferences.getProject("TimestampFile"): self.writeComment(" Saved: {0} ".format( time.strftime('%Y-%m-%d, %H:%M:%S'))) else: @@ -64,7 +64,7 @@ if self.forProject: self.writeTextElement( "ProjectScanFilter", - e5App().getObject("TaskViewer").projectTasksScanFilter.strip()) + e5App().getObject("TaskViewer").getTasksScanFilter()) # do the tasks if self.forProject:
--- a/eric6/E5XML/UserProjectWriter.py Mon Feb 01 10:06:11 2021 +0100 +++ b/eric6/E5XML/UserProjectWriter.py Mon Feb 01 13:25:37 2021 +0100 @@ -49,7 +49,7 @@ # add some generation comments self.writeComment( " eric user project file for project {0} ".format(self.name)) - if Preferences.getProject("XMLTimestamp"): + if Preferences.getProject("TimestampFile"): self.writeComment( " Saved: {0} ".format(time.strftime('%Y-%m-%d, %H:%M:%S'))) self.writeComment(" Copyright (C) {0} {1}, {2} ".format(
--- a/eric6/MultiProject/MultiProject.py Mon Feb 01 10:06:11 2021 +0100 +++ b/eric6/MultiProject/MultiProject.py Mon Feb 01 13:25:37 2021 +0100 @@ -27,6 +27,8 @@ import Preferences import Utilities +from .MultiProjectFile import MultiProjectFile + class MultiProject(QObject): """ @@ -75,6 +77,8 @@ self.__initData() + self.__multiProjectFile = MultiProjectFile(self) + self.recent = [] self.__loadRecent() @@ -217,43 +221,49 @@ def __readMultiProject(self, fn): """ - Private method to read in a multi project (.e4m, .e5m) file. + Private method to read in a multi project (.emj, .e4m, .e5m) file. @param fn filename of the multi project file to be read (string) @return flag indicating success """ - f = QFile(fn) - if f.open(QIODevice.ReadOnly): + if os.path.splitext(fn)[1] == ".emj": + # new JSON based format with E5OverrideCursor(): - from E5XML.MultiProjectReader import MultiProjectReader - reader = MultiProjectReader(f, self) - reader.readXML() - f.close() - if reader.hasError(): - return False + res = self.__multiProjectFile.readFile(fn) else: - E5MessageBox.critical( - self.ui, - self.tr("Read multiproject file"), - self.tr( - "<p>The multiproject file <b>{0}</b> could not be" - " read.</p>").format(fn)) - return False - - self.pfile = os.path.abspath(fn) - self.ppath = os.path.abspath(os.path.dirname(fn)) + # old XML based format + f = QFile(fn) + if f.open(QIODevice.ReadOnly): + with E5OverrideCursor(): + from E5XML.MultiProjectReader import MultiProjectReader + reader = MultiProjectReader(f, self) + reader.readXML() + f.close() + res = not reader.hasError() + else: + E5MessageBox.critical( + self.ui, + self.tr("Read Multi Project File"), + self.tr( + "<p>The multi project file <b>{0}</b> could not be" + " read.</p>").format(fn)) + res = False - self.__extractCategories() - - # insert filename into list of recently opened multi projects - self.__syncRecent() + if res: + self.pfile = os.path.abspath(fn) + self.ppath = os.path.abspath(os.path.dirname(fn)) + + self.__extractCategories() + + # insert filename into list of recently opened multi projects + self.__syncRecent() + + self.name = os.path.splitext(os.path.basename(fn))[0] + + # check, if the files of the multi project still exist + self.__checkFilesExist() - self.name = os.path.splitext(os.path.basename(fn))[0] - - # check, if the files of the multi project still exist - self.__checkFilesExist() - - return True + return res def __writeMultiProject(self, fn=None): """ @@ -269,22 +279,27 @@ if fn is None: fn = self.pfile - f = QFile(fn) - if f.open(QIODevice.WriteOnly): - from E5XML.MultiProjectWriter import MultiProjectWriter - MultiProjectWriter( - f, - self, os.path.splitext(os.path.basename(fn))[0] - ).writeXML() - res = True + if os.path.splitext(fn)[1] == ".emj": + # new JSON based format + res = self.__multiProjectFile.writeFile(fn) else: - E5MessageBox.critical( - self.ui, - self.tr("Save multiproject file"), - self.tr( - "<p>The multiproject file <b>{0}</b> could not be " - "written.</p>").format(fn)) - res = False + # old XML based format + f = QFile(fn) + if f.open(QIODevice.WriteOnly): + from E5XML.MultiProjectWriter import MultiProjectWriter + MultiProjectWriter( + f, + self, os.path.splitext(os.path.basename(fn))[0] + ).writeXML() + res = True + else: + E5MessageBox.critical( + self.ui, + self.tr("Save Multi Project File"), + self.tr( + "<p>The multi project file <b>{0}</b> could not be " + "written.</p>").format(fn)) + res = False if res: self.pfile = os.path.abspath(fn) @@ -531,9 +546,11 @@ Public slot to open a multi project. @param fn optional filename of the multi project file to be - read (string) + read + @type str @param openMaster flag indicating, that the master project - should be opened depending on the configuration (boolean) + should be opened depending on the configuration + @rtype bool """ if not self.checkDirty(): return @@ -541,10 +558,11 @@ if fn is None: fn = E5FileDialog.getOpenFileName( self.parent(), - self.tr("Open multiproject"), + self.tr("Open Multi Project"), Preferences.getMultiProject("Workspace") or Utilities.getHomeDir(), - self.tr("Multiproject Files (*.e5m *.e4m)")) + self.tr("Multi Project Files (*.emj);;" + "XML Multi Project Files (*.e5m *.e4m)")) if fn == "": fn = None @@ -572,12 +590,15 @@ """ Public slot to save the current multi project. - @return flag indicating success (boolean) + @return flag indicating success + @rtype bool """ if self.isDirty(): if len(self.pfile) > 0: - if self.pfile.endswith(".e4m"): - self.pfile = self.pfile.replace(".e4m", ".e5m") + if self.pfile.endswith((".e4m", ".e5m")): + self.pfile = (self.pfile + .replace(".e4m", ".emj") + .replace(".e5m", ".emj")) self.__syncRecent() ok = self.__writeMultiProject() else: @@ -590,9 +611,10 @@ """ Public slot to save the current multi project to a different file. - @return flag indicating success (boolean) + @return flag indicating success + @rtype bool """ - defaultFilter = self.tr("Multiproject Files (*.e5m)") + defaultFilter = self.tr("Multi Project Files (*.emj)") if self.ppath: defaultPath = self.ppath else: @@ -604,7 +626,8 @@ self.parent(), self.tr("Save multiproject as"), defaultPath, - self.tr("Multiproject Files (*.e5m)"), + self.tr("Multi Project Files (*.emj);;" + "XML Multi Project Files (*.e5m)"), defaultFilter, E5FileDialog.Options(E5FileDialog.DontConfirmOverwrite))
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/eric6/MultiProject/MultiProjectFile.py Mon Feb 01 13:25:37 2021 +0100 @@ -0,0 +1,113 @@ +# -*- coding: utf-8 -*- + +# Copyright (c) 2021 Detlev Offenbach <detlev@die-offenbachs.de> +# + +""" +Module implementing a class representing the multi project JSON file. +""" + +import json +import os +import time +import typing + +from PyQt5.QtCore import QObject + +from E5Gui import E5MessageBox +from E5Gui.E5OverrideCursor import E5OverridenCursor + +import Preferences + +MultiProject = typing.TypeVar("MultiProject") + + +class MultiProjectFile(QObject): + """ + Class representing the multi project JSON file. + """ + def __init__(self, multiProject: MultiProject, parent: QObject = None): + """ + Constructor + + @param multiProject reference to the multi project object + @type MultiProject + @param parent reference to the parent object (defaults to None) + @type QObject (optional) + """ + super(MultiProjectFile, self).__init__(parent) + self.__multiProject = multiProject + + def writeFile(self, filename: str) -> bool: + """ + Public method to write the multi project data to a multi project + JSON file. + + @param filename name of the multi project file + @type str + @return flag indicating a successful write + @rtype bool + """ + name = os.path.splitext(os.path.basename(filename))[0] + + multiProjectDict = {} + multiProjectDict["header"] = { + "comment": f"eric multi project file for multi project {name}", + } + + if Preferences.getMultiProject("TimestampFile"): + multiProjectDict["header"]["saved"] = ( + time.strftime('%Y-%m-%d, %H:%M:%S') + ) + + multiProjectDict["description"] = self.__multiProject.description + multiProjectDict["projects"] = list(self.__multiProject.getProjects()) + + try: + jsonString = json.dumps(multiProjectDict, indent=2) + with open(filename, "w") as f: + f.write(jsonString) + except (TypeError, EnvironmentError) as err: + with E5OverridenCursor(): + E5MessageBox.critical( + None, + self.tr("Save Multi Project File"), + self.tr( + "<p>The multi project file <b>{0}</b> could not be " + "written.</p><p>Reason: {1}</p>" + ).format(filename, str(err)) + ) + return False + + return True + + def readFile(self, filename: str) -> bool: + """ + Public method to read the multi project data from a multi project + JSON file. + + @param filename name of the multi project file + @type str + @return flag indicating a successful read + @rtype bool + """ + try: + with open(filename, "r") as f: + jsonString = f.read() + multiProjectDict = json.loads(jsonString) + except (EnvironmentError, json.JSONDecodeError) as err: + E5MessageBox.critical( + None, + self.tr("Read Multi Project File"), + self.tr( + "<p>The multi project file <b>{0}</b> could not be " + "read.</p><p>Reason: {1}</p>" + ).format(filename, str(err)) + ) + return False + + self.__multiProject.description = multiProjectDict["description"] + for project in multiProjectDict["projects"]: + self.__multiProject.addProject(project) + + return True
--- a/eric6/Preferences/ConfigurationPages/EditorHighlightingStylesPage.py Mon Feb 01 10:06:11 2021 +0100 +++ b/eric6/Preferences/ConfigurationPages/EditorHighlightingStylesPage.py Mon Feb 01 13:25:37 2021 +0100 @@ -7,8 +7,10 @@ Module implementing the Editor Highlighting Styles configuration page. """ +import os + from PyQt5.QtCore import pyqtSlot, Qt, QFileInfo, QFile, QIODevice -from PyQt5.QtGui import QPalette, QFont +from PyQt5.QtGui import QPalette, QFont, QColor from PyQt5.QtWidgets import ( QColorDialog, QFontDialog, QInputDialog, QMenu, QTreeWidgetItem, QDialog ) @@ -116,9 +118,6 @@ self.styleGroup.setEnabled(False) self.lexer = None - self.exportCurrentButton.setEnabled(language != "") - self.importCurrentButton.setEnabled(language != "") - if not language: return @@ -490,47 +489,68 @@ ####################################################################### @pyqtSlot() - def on_importCurrentButton_clicked(self): + def on_importButton_clicked(self): """ - Private slot to import the styles of the current lexer. + Private slot to import styles to be selected. """ - self.__importStyles({self.lexer.language(): self.lexer}) + self.__importStyles(importAll=False) @pyqtSlot() - def on_exportCurrentButton_clicked(self): + def on_exportButton_clicked(self): """ - Private slot to export the styles of the current lexer. + Private slot to export styles to be selected. """ - self.__exportStyles([self.lexer]) + self.__exportStyles(exportAll=False) @pyqtSlot() def on_importAllButton_clicked(self): """ Private slot to import the styles of all lexers. """ - self.__importStyles(self.lexers) + self.__importStyles(importAll=True) @pyqtSlot() def on_exportAllButton_clicked(self): """ Private slot to export the styles of all lexers. """ - self.__exportStyles(list(self.lexers.values())) + self.__exportStyles(exportAll=True) - def __exportStyles(self, lexers): + def __exportStyles(self, exportAll=False): """ - Private method to export the styles of the given lexers. + Private method to export the styles of selectable lexers. - @param lexers list of lexer objects for which to export the styles + @param exportAll flag indicating to export all styles without asking + (defaults to False) + @type bool (optional) """ from eric6config import getConfig stylesDir = getConfig("ericStylesDir") + lexerNames = list(self.lexers.keys()) + if not exportAll: + if self.lexer: + preselect = [self.lexer.language()] + else: + preselect = [] + from .EditorHighlightingStylesSelectionDialog import ( + EditorHighlightingStylesSelectionDialog) + dlg = EditorHighlightingStylesSelectionDialog( + lexerNames, forImport=False, preselect=preselect) + if dlg.exec() == QDialog.Accepted: + lexerNames = dlg.getLexerNames() + else: + # Cancelled by user + return + + lexers = [self.lexers[name] for name in lexerNames] + fn, selectedFilter = E5FileDialog.getSaveFileNameAndFilter( self, self.tr("Export Highlighting Styles"), stylesDir, - self.tr("Highlighting styles file (*.e6h)"), + self.tr("Highlighting Styles File (*.ehj);;" + "XML Highlighting Styles File (*.e6h)"), "", E5FileDialog.Options(E5FileDialog.DontConfirmOverwrite)) @@ -543,27 +563,46 @@ if ex: fn += ex - f = QFile(fn) - if f.open(QIODevice.WriteOnly): - from E5XML.HighlightingStylesWriter import HighlightingStylesWriter - HighlightingStylesWriter(f, lexers).writeXML() - f.close() - else: - E5MessageBox.critical( + if os.path.exists(fn): + ok = E5MessageBox.yesNo( self, self.tr("Export Highlighting Styles"), - self.tr( - """<p>The highlighting styles could not be exported""" - """ to file <b>{0}</b>.</p><p>Reason: {1}</p>""") - .format(fn, f.errorString()) - ) + self.tr("""<p>The highlighting styles file <b>{0}</b> exists""" + """ already. Overwrite it?</p>""").format(fn)) + else: + ok = True + + if ok: + if fn.endswith(".ehj"): + from Preferences.HighlightingStylesFile import ( + HighlightingStylesFile + ) + highlightingStylesFile = HighlightingStylesFile() + highlightingStylesFile.writeFile(fn, lexers) + else: + f = QFile(fn) + if f.open(QIODevice.WriteOnly): + from E5XML.HighlightingStylesWriter import ( + HighlightingStylesWriter + ) + HighlightingStylesWriter(f, lexers).writeXML() + f.close() + else: + E5MessageBox.critical( + self, + self.tr("Export Highlighting Styles"), + self.tr("<p>The highlighting styles file <b>{0}</b>" + " could not be written.</p><p>Reason: {1}</p>") + .format(fn, f.errorString()) + ) - def __importStyles(self, lexers): + def __importStyles(self, importAll=False): """ - Private method to import the styles of the given lexers. + Private method to import the styles of lexers to be selected. - @param lexers dictionary of lexer objects for which to import the - styles + @param importAll flag indicating to import all styles without asking + (defaults to False) + @type bool (optional) """ from eric6config import getConfig stylesDir = getConfig("ericStylesDir") @@ -572,31 +611,91 @@ self, self.tr("Import Highlighting Styles"), stylesDir, - self.tr("Highlighting styles file (*.e6h *.e4h)")) + self.tr("Highlighting Styles File (*.ehj);;" + "XML Highlighting Styles File (*.e6h *.e4h)")) if not fn: return - f = QFile(fn) - if f.open(QIODevice.ReadOnly): - from E5XML.HighlightingStylesReader import HighlightingStylesReader - reader = HighlightingStylesReader(f, lexers) - reader.readXML() - f.close() + if fn.endswith(".ehj"): + # new JSON based file + from Preferences.HighlightingStylesFile import ( + HighlightingStylesFile + ) + highlightingStylesFile = HighlightingStylesFile() + styles = highlightingStylesFile.readFile(fn) + if not styles: + return else: - E5MessageBox.critical( - self, - self.tr("Import Highlighting Styles"), - self.tr( - """<p>The highlighting styles could not be read""" - """ from file <b>{0}</b>.</p><p>Reason: {1}</p>""") - .format(fn, f.errorString()) - ) - return + # old XML based file + f = QFile(fn) + if f.open(QIODevice.ReadOnly): + from E5XML.HighlightingStylesReader import ( + HighlightingStylesReader + ) + reader = HighlightingStylesReader(f, self.lexers) + styles = reader.readXML() + f.close() + if not styles: + return + else: + E5MessageBox.critical( + self, + self.tr("Import Highlighting Styles"), + self.tr( + "<p>The highlighting styles file <b>{0}</b> could not" + " be read.</p><p>Reason: {1}</p>" + ).format(fn, f.errorString()) + ) + return + self.__applyStyles(styles, importAll=importAll) self.on_lexerLanguageComboBox_activated( self.lexerLanguageComboBox.currentText()) + def __applyStyles(self, stylesList, importAll=False): + """ + Private method to apply the imported styles to this dialog. + + @param stylesList list of imported lexer styles + @type list of dict + @param importAll flag indicating to import all styles without asking + (defaults to False) + @type bool (optional) + """ + lexerNames = [d["name"] + for d in stylesList + if d["name"] in self.lexers] + + if not importAll: + from .EditorHighlightingStylesSelectionDialog import ( + EditorHighlightingStylesSelectionDialog) + dlg = EditorHighlightingStylesSelectionDialog( + lexerNames, forImport=True) + if dlg.exec() == QDialog.Accepted: + lexerNames = dlg.getLexerNames() + else: + # Cancelled by user + return + + for lexerDict in stylesList: + if lexerDict["name"] in lexerNames: + lexer = self.lexers[lexerDict["name"]] + for styleDict in lexerDict["styles"]: + style = styleDict["style"] + substyle = styleDict["substyle"] + lexer.setColor(QColor(styleDict["color"]), style, substyle) + lexer.setPaper(QColor(styleDict["paper"]), style, substyle) + font = QFont() + font.fromString(styleDict["font"]) + lexer.setFont(font, style, substyle) + lexer.setEolFill(styleDict["eolfill"], style, substyle) + if substyle >= 0: + # description and words can only be set for sub-styles + lexer.setDescription(styleDict["description"], + style, substyle) + lexer.setWords(styleDict["words"], style, substyle) + ####################################################################### ## Methods to save and restore the state #######################################################################
--- a/eric6/Preferences/ConfigurationPages/EditorHighlightingStylesPage.ui Mon Feb 01 10:06:11 2021 +0100 +++ b/eric6/Preferences/ConfigurationPages/EditorHighlightingStylesPage.ui Mon Feb 01 13:25:37 2021 +0100 @@ -348,12 +348,9 @@ <item> <layout class="QHBoxLayout" name="horizontalLayout"> <item> - <widget class="QPushButton" name="importCurrentButton"> - <property name="enabled"> - <bool>false</bool> - </property> + <widget class="QPushButton" name="importButton"> <property name="toolTip"> - <string>Imports all styles of the currently selected language</string> + <string>Imports all styles of languages to be selected</string> </property> <property name="text"> <string>Import styles</string> @@ -361,12 +358,9 @@ </widget> </item> <item> - <widget class="QPushButton" name="exportCurrentButton"> - <property name="enabled"> - <bool>false</bool> - </property> + <widget class="QPushButton" name="exportButton"> <property name="toolTip"> - <string>Exports all styles of the currently selected language</string> + <string>Exports all styles of languages to be selected</string> </property> <property name="text"> <string>Export styles</string> @@ -415,8 +409,8 @@ <tabstop>allFontsButton</tabstop> <tabstop>allEolFillButton</tabstop> <tabstop>allDefaultButton</tabstop> - <tabstop>importCurrentButton</tabstop> - <tabstop>exportCurrentButton</tabstop> + <tabstop>importButton</tabstop> + <tabstop>exportButton</tabstop> <tabstop>importAllButton</tabstop> <tabstop>exportAllButton</tabstop> </tabstops>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/eric6/Preferences/ConfigurationPages/EditorHighlightingStylesSelectionDialog.py Mon Feb 01 13:25:37 2021 +0100 @@ -0,0 +1,117 @@ +# -*- coding: utf-8 -*- + +# Copyright (c) 2021 Detlev Offenbach <detlev@die-offenbachs.de> +# + +""" +Module implementing a dialog to select the styles to be imported/exported. +""" + +from PyQt5.QtCore import pyqtSlot, Qt +from PyQt5.QtWidgets import ( + QDialog, QDialogButtonBox, QListWidgetItem, QAbstractButton +) + +from .Ui_EditorHighlightingStylesSelectionDialog import ( + Ui_EditorHighlightingStylesSelectionDialog +) + + +class EditorHighlightingStylesSelectionDialog( + QDialog, Ui_EditorHighlightingStylesSelectionDialog +): + """ + Class implementing a dialog to select the styles to be imported/exported. + """ + def __init__(self, lexerNames, forImport, preselect=None, parent=None): + """ + Constructor + + @param lexerNames list of lexer names to select from + @type list of str + @param forImport flag indicating a dialog for importing styles + @type bool + @param preselect list of lexer names to be preselected + @type list of str + @param parent reference to the parent widget + @type QWidget + """ + super(EditorHighlightingStylesSelectionDialog, self).__init__(parent) + self.setupUi(self) + + self.__selectAllButton = self.buttonBox.addButton( + self.tr("Select All"), QDialogButtonBox.ActionRole) + + if forImport: + self.setWindowTitle(self.tr("Import Highlighting Styles")) + self.infoLabel.setText(self.tr( + "Select the highlighting styles to be imported")) + else: + self.setWindowTitle(self.tr("Export Highlighting Styles")) + self.infoLabel.setText(self.tr( + "Select the highlighting styles to be exported")) + + if preselect is None: + preselect = [] + + for name in lexerNames: + itm = QListWidgetItem(name, self.lexersList) + itm.setFlags(Qt.ItemIsUserCheckable | Qt.ItemIsEnabled) + if name in preselect: + itm.setCheckState(Qt.Checked) + else: + itm.setCheckState(Qt.Unchecked) + + self.__updateOkButton() + + @pyqtSlot() + def __updateOkButton(self): + """ + Private slot to update the state of the OK button. + """ + for row in range(self.lexersList.count()): + itm = self.lexersList.item(row) + if itm.checkState() == Qt.Checked: + enable = True + break + else: + enable = False + self.buttonBox.button(QDialogButtonBox.Ok).setEnabled(enable) + + @pyqtSlot(QListWidgetItem) + def on_lexersList_itemChanged(self, item): + """ + Private slot to react on changes in check state. + + @param item reference to the changed item + @type QListWidgetItem + """ + self.__updateOkButton() + + @pyqtSlot(QAbstractButton) + def on_buttonBox_clicked(self, button): + """ + Private slot to handle the user pressing a button. + + @param button reference to the button pressed + @type QAbstractButton + """ + if button is self.__selectAllButton: + for row in range(self.lexersList.count()): + itm = self.lexersList.item(row) + itm.setCheckState(Qt.Checked) + + def getLexerNames(self): + """ + Public method to get the selected lexer names. + + @return list of selected lexer names + @rtype list of str + """ + lexerNames = [] + for row in range(self.lexersList.count()): + itm = self.lexersList.item(row) + if itm.checkState() == Qt.Checked: + lexerNames.append(itm.text()) + + return lexerNames
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/eric6/Preferences/ConfigurationPages/EditorHighlightingStylesSelectionDialog.ui Mon Feb 01 13:25:37 2021 +0100 @@ -0,0 +1,81 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>EditorHighlightingStylesSelectionDialog</class> + <widget class="QDialog" name="EditorHighlightingStylesSelectionDialog"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>400</width> + <height>500</height> + </rect> + </property> + <property name="sizeGripEnabled"> + <bool>true</bool> + </property> + <layout class="QVBoxLayout" name="verticalLayout"> + <item> + <widget class="QLabel" name="infoLabel"> + <property name="wordWrap"> + <bool>true</bool> + </property> + </widget> + </item> + <item> + <widget class="QListWidget" name="lexersList"> + <property name="alternatingRowColors"> + <bool>true</bool> + </property> + <property name="sortingEnabled"> + <bool>true</bool> + </property> + </widget> + </item> + <item> + <widget class="QDialogButtonBox" name="buttonBox"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="standardButtons"> + <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set> + </property> + </widget> + </item> + </layout> + </widget> + <resources/> + <connections> + <connection> + <sender>buttonBox</sender> + <signal>accepted()</signal> + <receiver>EditorHighlightingStylesSelectionDialog</receiver> + <slot>accept()</slot> + <hints> + <hint type="sourcelabel"> + <x>248</x> + <y>254</y> + </hint> + <hint type="destinationlabel"> + <x>157</x> + <y>274</y> + </hint> + </hints> + </connection> + <connection> + <sender>buttonBox</sender> + <signal>rejected()</signal> + <receiver>EditorHighlightingStylesSelectionDialog</receiver> + <slot>reject()</slot> + <hints> + <hint type="sourcelabel"> + <x>316</x> + <y>260</y> + </hint> + <hint type="destinationlabel"> + <x>286</x> + <y>274</y> + </hint> + </hints> + </connection> + </connections> +</ui>
--- a/eric6/Preferences/ConfigurationPages/MultiProjectPage.py Mon Feb 01 10:06:11 2021 +0100 +++ b/eric6/Preferences/ConfigurationPages/MultiProjectPage.py Mon Feb 01 13:25:37 2021 +0100 @@ -34,7 +34,7 @@ self.openMasterAutomaticallyCheckBox.setChecked( Preferences.getMultiProject("OpenMasterAutomatically")) self.multiProjectTimestampCheckBox.setChecked( - Preferences.getMultiProject("XMLTimestamp")) + Preferences.getMultiProject("TimestampFile")) self.multiProjectRecentSpinBox.setValue( Preferences.getMultiProject("RecentNumber")) self.workspacePicker.setText( @@ -50,7 +50,7 @@ "OpenMasterAutomatically", self.openMasterAutomaticallyCheckBox.isChecked()) Preferences.setMultiProject( - "XMLTimestamp", + "TimestampFile", self.multiProjectTimestampCheckBox.isChecked()) Preferences.setMultiProject( "RecentNumber",
--- a/eric6/Preferences/ConfigurationPages/MultiProjectPage.ui Mon Feb 01 10:06:11 2021 +0100 +++ b/eric6/Preferences/ConfigurationPages/MultiProjectPage.ui Mon Feb 01 13:25:37 2021 +0100 @@ -78,16 +78,16 @@ <item> <widget class="QGroupBox" name="groupBox_6"> <property name="title"> - <string>XML</string> + <string>Files</string> </property> <layout class="QVBoxLayout"> <item> <widget class="QCheckBox" name="multiProjectTimestampCheckBox"> <property name="toolTip"> - <string>Select, if a timestamp should be written to all multiproject related XML files</string> + <string>Select, if a timestamp should be written to all Multi Project files</string> </property> <property name="text"> - <string>Include timestamp in multiproject related XML files</string> + <string>Include timestamp in Multi Project files</string> </property> </widget> </item>
--- a/eric6/Preferences/ConfigurationPages/ProjectPage.py Mon Feb 01 10:06:11 2021 +0100 +++ b/eric6/Preferences/ConfigurationPages/ProjectPage.py Mon Feb 01 13:25:37 2021 +0100 @@ -49,7 +49,7 @@ self.projectAutoMakeCheckBox.setChecked( Preferences.getProject("AutoExecuteMake")) self.projectTimestampCheckBox.setChecked( - Preferences.getProject("XMLTimestamp")) + Preferences.getProject("TimestampFile")) self.projectRecentSpinBox.setValue( Preferences.getProject("RecentNumber")) self.pythonVariantCheckBox.setChecked( @@ -99,7 +99,7 @@ "AutoExecuteMake", self.projectAutoMakeCheckBox.isChecked()) Preferences.setProject( - "XMLTimestamp", + "TimestampFile", self.projectTimestampCheckBox.isChecked()) Preferences.setProject( "RecentNumber",
--- a/eric6/Preferences/ConfigurationPages/ProjectPage.ui Mon Feb 01 10:06:11 2021 +0100 +++ b/eric6/Preferences/ConfigurationPages/ProjectPage.ui Mon Feb 01 13:25:37 2021 +0100 @@ -34,16 +34,16 @@ <item> <widget class="QGroupBox" name="groupBox_6"> <property name="title"> - <string>XML</string> + <string>Files</string> </property> <layout class="QVBoxLayout"> <item> <widget class="QCheckBox" name="projectTimestampCheckBox"> <property name="toolTip"> - <string>Select, if a timestamp should be written to all project related XML files</string> + <string>Select, if a timestamp should be written to all Project files</string> </property> <property name="text"> - <string>Include timestamp in project related XML files</string> + <string>Include timestamp in Project files</string> </property> </widget> </item>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/eric6/Preferences/HighlightingStylesFile.py Mon Feb 01 13:25:37 2021 +0100 @@ -0,0 +1,117 @@ +# -*- coding: utf-8 -*- + +# Copyright (c) 2021 Detlev Offenbach <detlev@die-offenbachs.de> +# + +""" +Module implementing a class representing the highlighting styles JSON file. +""" + +import json +import time + +from PyQt5.QtCore import QObject + +from E5Gui import E5MessageBox +from E5Gui.E5OverrideCursor import E5OverridenCursor + +import Preferences + + +class HighlightingStylesFile(QObject): + """ + Class representing the highlighting styles JSON file. + """ + def __init__(self, parent: QObject = None): + """ + Constructor + + @param parent reference to the parent object (defaults to None) + @type QObject (optional) + """ + super(HighlightingStylesFile, self).__init__(parent) + + def writeFile(self, filename: str, lexers: list) -> bool: + """ + Public method to write the highlighting styles data to a highlighting + styles JSON file. + + @param filename name of the highlighting styles file + @type str + @param lexers list of lexers for which to export the styles + @type list of PreferencesLexer + @return flag indicating a successful write + @rtype bool + """ + stylesDict = {} + # step 0: header + stylesDict["header"] = { + "comment": "eric highlighting styles file", + "saved": time.strftime('%Y-%m-%d, %H:%M:%S'), + "author": Preferences.getUser("Email"), + } + + # step 1: add the lexer style data + stylesDict["lexers"] = [] + for lexer in lexers: + lexerDict = { + "name": lexer.language(), + "styles": [], + } + for description, style, substyle in lexer.getStyles(): + lexerDict["styles"].append({ + "description": description, + "style": style, + "substyle": substyle, + "color": lexer.color(style, substyle).name(), + "paper": lexer.paper(style, substyle).name(), + "font": lexer.font(style, substyle).toString(), + "eolfill": lexer.eolFill(style, substyle), + "words": lexer.words(style, substyle).strip(), + }) + stylesDict["lexers"].append(lexerDict) + + try: + jsonString = json.dumps(stylesDict, indent=2) + with open(filename, "w") as f: + f.write(jsonString) + except (TypeError, EnvironmentError) as err: + with E5OverridenCursor(): + E5MessageBox.critical( + None, + self.tr("Export Highlighting Styles"), + self.tr( + "<p>The highlighting styles file <b>{0}</b> could not" + " be written.</p><p>Reason: {1}</p>" + ).format(filename, str(err)) + ) + return False + + return True + + def readFile(self, filename: str) -> list: + """ + Public method to read the highlighting styles data from a highlighting + styles JSON file. + + @param filename name of the highlighting styles file + @type str + @return list of read lexer style definitions + @rtype list of dict + """ + try: + with open(filename, "r") as f: + jsonString = f.read() + stylesDict = json.loads(jsonString) + except (EnvironmentError, json.JSONDecodeError) as err: + E5MessageBox.critical( + None, + self.tr("Import Highlighting Styles"), + self.tr( + "<p>The highlighting styles file <b>{0}</b> could not be" + " read.</p><p>Reason: {1}</p>" + ).format(filename, str(err)) + ) + return [] + + return stylesDict["lexers"]
--- a/eric6/Preferences/Shortcuts.py Mon Feb 01 10:06:11 2021 +0100 +++ b/eric6/Preferences/Shortcuts.py Mon Feb 01 13:25:37 2021 +0100 @@ -200,76 +200,100 @@ """ Module function to export the keyboard shortcuts for the defined QActions. - @param fn filename of the export file (string) + @param fn filename of the export file + @type str @param helpViewer reference to the help window object + @type WebBrowserWindow """ # let the plugin manager create on demand plugin objects pm = e5App().getObject("PluginManager") pm.initOnDemandPlugins() - f = QFile(fn) - if f.open(QIODevice.WriteOnly): - from E5XML.ShortcutsWriter import ShortcutsWriter - ShortcutsWriter(f).writeXML(helpViewer=helpViewer) - f.close() + if fn.endswith(".ekj"): + # new JSON based file + from .ShortcutsFile import ShortcutsFile + shortcutsFile = ShortcutsFile() + shortcutsFile.writeFile(fn, helpViewer) else: - E5MessageBox.critical( - None, - QCoreApplication.translate( - "Shortcuts", "Export Keyboard Shortcuts"), - QCoreApplication.translate( - "Shortcuts", - "<p>The keyboard shortcuts could not be written to file" - " <b>{0}</b>.</p>") - .format(fn)) + # old XML based file + f = QFile(fn) + if f.open(QIODevice.WriteOnly): + from E5XML.ShortcutsWriter import ShortcutsWriter + ShortcutsWriter(f).writeXML(helpViewer=helpViewer) + f.close() + else: + E5MessageBox.critical( + None, + QCoreApplication.translate( + "Shortcuts", "Export Keyboard Shortcuts"), + QCoreApplication.translate( + "Shortcuts", + "<p>The keyboard shortcuts file <b>{0}</b> could not" + " be written.</p>") + .format(fn)) def importShortcuts(fn, helpViewer=None): """ - Module function to import the keyboard shortcuts for the defined E5Actions. + Module function to import the keyboard shortcuts for the defined actions. - @param fn filename of the import file (string) + @param fn filename of the import file + @type str @param helpViewer reference to the help window object + @type WebBrowserWindow """ # let the plugin manager create on demand plugin objects pm = e5App().getObject("PluginManager") pm.initOnDemandPlugins() - f = QFile(fn) - if f.open(QIODevice.ReadOnly): - from E5XML.ShortcutsReader import ShortcutsReader - reader = ShortcutsReader(f) - reader.readXML() - f.close() - if not reader.hasError(): - shortcuts = reader.getShortcuts() + if fn.endswith(".ekj"): + # new JSON based file + from .ShortcutsFile import ShortcutsFile + shortcutsFile = ShortcutsFile() + shortcuts = shortcutsFile.readFile(fn) + if shortcuts: setActions(shortcuts, helpViewer=helpViewer) saveShortcuts() syncPreferences() else: - E5MessageBox.critical( - None, - QCoreApplication.translate( - "Shortcuts", "Import Keyboard Shortcuts"), - QCoreApplication.translate( - "Shortcuts", - "<p>The keyboard shortcuts could not be read from file" - " <b>{0}</b>.</p>") - .format(fn)) - return + # old XML based file + f = QFile(fn) + if f.open(QIODevice.ReadOnly): + from E5XML.ShortcutsReader import ShortcutsReader + reader = ShortcutsReader(f) + reader.readXML() + f.close() + if not reader.hasError(): + shortcuts = reader.getShortcuts() + setActions(shortcuts, helpViewer=helpViewer) + saveShortcuts() + syncPreferences() + else: + E5MessageBox.critical( + None, + QCoreApplication.translate( + "Shortcuts", "Import Keyboard Shortcuts"), + QCoreApplication.translate( + "Shortcuts", + "<p>The keyboard shortcuts file <b>{0}</b> could not be" + " read.</p>") + .format(fn)) -def __setAction(actions, sdict): +def __setAction(actions, shortcutsDict): """ - Private function to write a single keyboard shortcut to the settings. + Private function to set a single keyboard shortcut category shortcuts. - @param actions list of actions to set (list of E5Action) - @param sdict dictionary containg accelerator information for one category + @param actions list of actions to set + @type list of E5Action + @param shortcutsDict dictionary containing accelerator information for + one category + @type dict """ for act in actions: if act.objectName(): try: - accel, altAccel = sdict[act.objectName()] + accel, altAccel = shortcutsDict[act.objectName()] act.setShortcut(QKeySequence(accel)) act.setAlternateShortcut(QKeySequence(altAccel), removeEmpty=True) @@ -279,11 +303,13 @@ def setActions(shortcuts, helpViewer=None): """ - Module function to set actions based on new format shortcuts file. + Module function to set actions based on the imported shortcuts file. @param shortcuts dictionary containing the accelerator information - read from a XML file + read from a JSON or XML file + @type dict @param helpViewer reference to the help window object + @type WebBrowserWindow """ if helpViewer is None: if "Project" in shortcuts:
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/eric6/Preferences/ShortcutsFile.py Mon Feb 01 13:25:37 2021 +0100 @@ -0,0 +1,206 @@ +# -*- coding: utf-8 -*- + +# Copyright (c) 2021 Detlev Offenbach <detlev@die-offenbachs.de> +# + +""" +Module implementing a class representing the shortcuts JSON file. +""" + +import json +import time +import typing + +from PyQt5.QtCore import QObject + +from E5Gui import E5MessageBox +from E5Gui.E5OverrideCursor import E5OverridenCursor +from E5Gui.E5Application import e5App + +import Preferences + +HelpViewer = typing.TypeVar("WebBrowserWindow") + + +class ShortcutsFile(QObject): + """ + Class representing the shortcuts JSON file. + """ + def __init__(self, parent: QObject = None): + """ + Constructor + + @param parent reference to the parent object (defaults to None) + @type QObject (optional) + """ + super(ShortcutsFile, self).__init__(parent) + + def __addActionsToDict(self, category: str, actions: list, + actionsDict: dict): + """ + Private method to add a list of actions to the actions dictionary. + + @param category category of the actions + @type str + @param actions list of actions + @type list of QAction + @param actionsDict reference to the actions dictionary to be modified + @type dict + """ + if actions: + if category not in actionsDict: + actionsDict[category] = {} + for act in actions: + if act.objectName(): + # shortcuts are only exported, if their objectName is set + actionsDict[category][act.objectName()] = ( + act.shortcut().toString(), + act.alternateShortcut().toString() + ) + + def writeFile(self, filename: str, helpViewer: HelpViewer = None) -> bool: + """ + Public method to write the shortcuts data to a shortcuts JSON file. + + @param filename name of the shortcuts file + @type str + @param helpViewer reference to the help window object + @type WebBrowserWindow + @return flag indicating a successful write + @rtype bool + """ + actionsDict = {} + + # step 1: collect all the shortcuts + if helpViewer is None: + self.__addActionsToDict( + "Project", + e5App().getObject("Project").getActions(), + actionsDict + ) + self.__addActionsToDict( + "General", + e5App().getObject("UserInterface").getActions('ui'), + actionsDict + ) + self.__addActionsToDict( + "Wizards", + e5App().getObject("UserInterface").getActions('wizards'), + actionsDict + ) + self.__addActionsToDict( + "Debug", + e5App().getObject("DebugUI").getActions(), + actionsDict + ) + self.__addActionsToDict( + "Edit", + e5App().getObject("ViewManager").getActions('edit'), + actionsDict + ) + self.__addActionsToDict( + "File", + e5App().getObject("ViewManager").getActions('file'), + actionsDict + ) + self.__addActionsToDict( + "Search", + e5App().getObject("ViewManager").getActions('search'), + actionsDict + ) + self.__addActionsToDict( + "View", + e5App().getObject("ViewManager").getActions('view'), + actionsDict + ) + self.__addActionsToDict( + "Macro", + e5App().getObject("ViewManager").getActions('macro'), + actionsDict + ) + self.__addActionsToDict( + "Bookmarks", + e5App().getObject("ViewManager").getActions('bookmark'), + actionsDict + ) + self.__addActionsToDict( + "Spelling", + e5App().getObject("ViewManager").getActions('spelling'), + actionsDict + ) + self.__addActionsToDict( + "Window", + e5App().getObject("ViewManager").getActions('window'), + actionsDict + ) + + for category, ref in e5App().getPluginObjects(): + if hasattr(ref, "getActions"): + self.__addActionsToDict( + category, ref.getActions(), actionsDict + ) + + else: + self.__addActionsToDict( + helpViewer.getActionsCategory(), + helpViewer.getActions(), + actionsDict + ) + + # step 2: assemble the data structure to be written + shortcutsDict = {} + # step 2.0: header + shortcutsDict["header"] = { + "comment": "eric keyboard shortcuts file", + "saved": time.strftime('%Y-%m-%d, %H:%M:%S'), + "author": Preferences.getUser("Email"), + } + # step 2.1: keyboard shortcuts + shortcutsDict["shortcuts"] = actionsDict + + try: + jsonString = json.dumps(shortcutsDict, indent=2) + with open(filename, "w") as f: + f.write(jsonString) + except (TypeError, EnvironmentError) as err: + with E5OverridenCursor(): + E5MessageBox.critical( + None, + self.tr("Export Keyboard Shortcuts"), + self.tr( + "<p>The keyboard shortcuts file <b>{0}</b> could not" + " be written.</p><p>Reason: {1}</p>" + ).format(filename, str(err)) + ) + return False + + return True + + def readFile(self, filename: str) -> bool: + """ + Public method to read the shortcuts data from a shortcuts JSON file. + + @param filename name of the shortcuts file + @type str + @return Dictionary of dictionaries of shortcuts. The keys of the + dictionary are the shortcuts categories, the values are + dictionaries. These dictionaries have the shortcut name as their + key and a tuple of accelerators as their value. + @rtype dict + """ + try: + with open(filename, "r") as f: + jsonString = f.read() + shortcutsDict = json.loads(jsonString) + except (EnvironmentError, json.JSONDecodeError) as err: + E5MessageBox.critical( + None, + self.tr("Import Keyboard Shortcuts"), + self.tr( + "<p>The keyboard shortcuts file <b>{0}</b> could not be" + " read.</p><p>Reason: {1}</p>" + ).format(filename, str(err)) + ) + return {} + + return shortcutsDict["shortcuts"]
--- a/eric6/Preferences/__init__.py Mon Feb 01 10:06:11 2021 +0100 +++ b/eric6/Preferences/__init__.py Mon Feb 01 13:25:37 2021 +0100 @@ -782,7 +782,7 @@ "AutoLoadSession": False, "AutoSaveSession": False, "SessionAllBreakpoints": False, - "XMLTimestamp": True, + "TimestampFile": True, "AutoCompileForms": False, "AutoCompileResources": False, "AutoExecuteMake": False, @@ -804,7 +804,7 @@ # defaults for the multi project settings multiProjectDefaults = { "OpenMasterAutomatically": True, - "XMLTimestamp": True, + "TimestampFile": True, "RecentNumber": 9, "Workspace": "", } @@ -2644,7 +2644,7 @@ if key in ["RecentNumber"]: return int(prefClass.settings.value( "MultiProject/" + key, prefClass.multiProjectDefaults[key])) - elif key in ["OpenMasterAutomatically", "XMLTimestamp"]: + elif key in ["OpenMasterAutomatically", "TimestampFile"]: return toBool(prefClass.settings.value( "MultiProject/" + key, prefClass.multiProjectDefaults[key])) else:
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/eric6/Project/DebuggerPropertiesFile.py Mon Feb 01 13:25:37 2021 +0100 @@ -0,0 +1,115 @@ +# -*- coding: utf-8 -*- + +# Copyright (c) 2021 Detlev Offenbach <detlev@die-offenbachs.de> +# + +""" +Module implementing a class representing the project debugger properties +JSON file. +""" + +import json +import time +import typing + +from PyQt5.QtCore import QObject + +from E5Gui import E5MessageBox +from E5Gui.E5OverrideCursor import E5OverridenCursor + +import Preferences + +Project = typing.TypeVar("Project") + + +class DebuggerPropertiesFile(QObject): + """ + Class representing the project debugger properties JSON file. + """ + def __init__(self, project: Project, parent: QObject = None): + """ + Constructor + + @param project reference to the project object + @type Project + @param parent reference to the parent object (defaults to None) + @type QObject (optional) + """ + super(DebuggerPropertiesFile, self).__init__(parent) + self.__project = project + + def writeFile(self, filename: str) -> bool: + """ + Public method to write the project debugger properties data to a + project debugger properties JSON file. + + @param filename name of the user project file + @type str + @return flag indicating a successful write + @rtype bool + """ + debuggerPropertiesDict = {} + debuggerPropertiesDict["header"] = { + "comment": "eric debugger properties file for project {0}".format( + self.__project.getProjectName()), + "warning": "This file was generated automatically, do not edit.", + } + + if Preferences.getProject("TimestampFile"): + debuggerPropertiesDict["header"]["saved"] = ( + time.strftime('%Y-%m-%d, %H:%M:%S') + ) + + debuggerPropertiesDict["debug_properties"] = ( + self.__project.debugProperties + ) + + try: + jsonString = json.dumps(debuggerPropertiesDict, indent=2) + with open(filename, "w") as f: + f.write(jsonString) + except (TypeError, EnvironmentError) as err: + with E5OverridenCursor(): + E5MessageBox.critical( + None, + self.tr("Save Debugger Properties"), + self.tr( + "<p>The project debugger properties file" + " <b>{0}</b> could not be written.</p>" + "<p>Reason: {1}</p>" + ).format(filename, str(err)) + ) + return False + + return True + + def readFile(self, filename: str) -> bool: + """ + Public method to read the project debugger properties data from a + project debugger properties JSON file. + + @param filename name of the project file + @type str + @return flag indicating a successful read + @rtype bool + """ + try: + with open(filename, "r") as f: + jsonString = f.read() + debuggerPropertiesDict = json.loads(jsonString) + except (EnvironmentError, json.JSONDecodeError) as err: + E5MessageBox.critical( + None, + self.tr("Read Debugger Properties"), + self.tr( + "<p>The project debugger properties file <b>{0}</b>" + " could not be read.</p><p>Reason: {1}</p>" + ).format(filename, str(err)) + ) + return False + + self.__project.debugProperties = ( + debuggerPropertiesDict["debug_properties"] + ) + + return True
--- a/eric6/Project/Project.py Mon Feb 01 10:06:11 2021 +0100 +++ b/eric6/Project/Project.py Mon Feb 01 13:25:37 2021 +0100 @@ -41,6 +41,14 @@ import Preferences import Utilities +from .ProjectFile import ProjectFile +from .UserProjectFile import UserProjectFile +from .DebuggerPropertiesFile import DebuggerPropertiesFile + +from Sessions.SessionFile import SessionFile + +from Tasks.TasksFile import TasksFile + class Project(QObject): """ @@ -184,6 +192,12 @@ self.__initData() + self.__projectFile = ProjectFile(self) + self.__userProjectFile = UserProjectFile(self) + self.__debuggerPropertiesFile = DebuggerPropertiesFile(self) + self.__sessionFile = SessionFile(False) + self.__tasksFile = TasksFile(False) + self.recent = [] self.__loadRecent() @@ -582,6 +596,7 @@ "README": "OTHERS", "README.*": "OTHERS", "*.e4p": "OTHERS", + "*.epj": "OTHERS", "GNUmakefile": "OTHERS", "makefile": "OTHERS", "Makefile": "OTHERS", @@ -787,34 +802,50 @@ def __readProject(self, fn): """ - Private method to read in a project (.e4p) file. + Private method to read in a project (.epj or .e4p) file. @param fn filename of the project file to be read (string) @return flag indicating success """ - f = QFile(fn) - if f.open(QIODevice.ReadOnly): - from E5XML.ProjectReader import ProjectReader - reader = ProjectReader(f, self) - reader.readXML() - res = not reader.hasError() - f.close() + if os.path.splitext(fn)[1] == ".epj": + # new JSON based format + with E5OverrideCursor(): + res = self.__projectFile.readFile(fn) else: - E5MessageBox.critical( - self.ui, - self.tr("Read project file"), - self.tr( - "<p>The project file <b>{0}</b> could not be read.</p>") - .format(fn)) - return False - - self.pfile = os.path.abspath(fn) - self.ppath = os.path.abspath(os.path.dirname(fn)) - - # insert filename into list of recently opened projects - self.__syncRecent() + # old XML based format + f = QFile(fn) + if f.open(QIODevice.ReadOnly): + from E5XML.ProjectReader import ProjectReader + reader = ProjectReader(f, self) + reader.readXML() + res = not reader.hasError() + f.close() + + # create hash value, if it doesn't have one + if reader.version.startswith("5.") and not self.pdata["HASH"]: + hashStr = str(QCryptographicHash.hash( + QByteArray(self.ppath.encode("utf-8")), + QCryptographicHash.Sha1).toHex(), + encoding="utf-8") + self.pdata["HASH"] = hashStr + self.setDirty(True) + else: + E5MessageBox.critical( + self.ui, + self.tr("Read Project File"), + self.tr( + "<p>The project file <b>{0}</b> could not be read." + "</p>") + .format(fn)) + res = False if res: + self.pfile = os.path.abspath(fn) + self.ppath = os.path.abspath(os.path.dirname(fn)) + + # insert filename into list of recently opened projects + self.__syncRecent() + if self.pdata["TRANSLATIONPATTERN"]: self.translationsRoot = self.pdata["TRANSLATIONPATTERN"].split( "%language%")[0] @@ -859,15 +890,6 @@ if dn not in self.otherssubdirs: self.otherssubdirs.append(dn) - # create hash value, if it doesn't have one - if reader.version.startswith("5.") and not self.pdata["HASH"]: - hashStr = str(QCryptographicHash.hash( - QByteArray(self.ppath.encode("utf-8")), - QCryptographicHash.Sha1).toHex(), - encoding="utf-8") - self.pdata["HASH"] = hashStr - self.setDirty(True) - return res def __writeProject(self, fn=None): @@ -896,20 +918,26 @@ if fn is None: fn = self.pfile - f = QFile(fn) - if f.open(QIODevice.WriteOnly): - from E5XML.ProjectWriter import ProjectWriter - ProjectWriter(f, os.path.splitext( - os.path.basename(fn))[0]).writeXML() - res = True + if os.path.splitext(fn)[1] == ".epj": + # new JSON based format + with E5OverrideCursor(): + res = self.__projectFile.writeFile(fn) else: - E5MessageBox.critical( - self.ui, - self.tr("Save project file"), - self.tr( - "<p>The project file <b>{0}</b> could not be" - " written.</p>").format(fn)) - res = False + # old XML based format + f = QFile(fn) + if f.open(QIODevice.WriteOnly): + from E5XML.ProjectWriter import ProjectWriter + ProjectWriter(f, os.path.splitext( + os.path.basename(fn))[0]).writeXML() + res = True + else: + E5MessageBox.critical( + self.ui, + self.tr("Save Project File"), + self.tr( + "<p>The project file <b>{0}</b> could not be" + " written.</p>").format(fn)) + res = False if res: self.pfile = os.path.abspath(fn) @@ -924,52 +952,50 @@ def __readUserProperties(self): """ - Private method to read in the user specific project file (.e4q). + Private method to read in the user specific project file (.eqj or + .e4q). + """ + if self.pfile is None: + return + + fn1, ext = os.path.splitext(os.path.basename(self.pfile)) + fn = os.path.join(self.getProjectManagementDir(), + '{0}.eqj'.format(fn1)) + if os.path.exists(fn): + # try the new JSON based format first + self.__userProjectFile.readFile(fn) + else: + # try the old XML based format second + fn = os.path.join(self.getProjectManagementDir(), + '{0}.e4q'.format(fn1)) + if os.path.exists(fn): + f = QFile(fn) + if f.open(QIODevice.ReadOnly): + from E5XML.UserProjectReader import UserProjectReader + reader = UserProjectReader(f, self) + reader.readXML() + f.close() + else: + E5MessageBox.critical( + self.ui, + self.tr("Read User Project Properties"), + self.tr( + "<p>The user specific project properties file" + " <b>{0}</b> could not be read.</p>").format(fn)) + + def __writeUserProperties(self): + """ + Private method to write the user specific project data to a JSON file. """ if self.pfile is None: return fn, ext = os.path.splitext(os.path.basename(self.pfile)) - fn = os.path.join(self.getProjectManagementDir(), '{0}.e4q'.format(fn)) - if os.path.exists(fn): - f = QFile(fn) - if f.open(QIODevice.ReadOnly): - from E5XML.UserProjectReader import UserProjectReader - reader = UserProjectReader(f, self) - reader.readXML() - f.close() - else: - E5MessageBox.critical( - self.ui, - self.tr("Read user project properties"), - self.tr( - "<p>The user specific project properties file" - " <b>{0}</b> could not be read.</p>").format(fn)) - - def __writeUserProperties(self): - """ - Private method to write the project data to an XML file. - """ - if self.pfile is None: - return - - fn, ext = os.path.splitext(os.path.basename(self.pfile)) - fn = os.path.join(self.getProjectManagementDir(), '{0}.e4q'.format(fn)) - - f = QFile(fn) - if f.open(QIODevice.WriteOnly): - from E5XML.UserProjectWriter import UserProjectWriter - UserProjectWriter( - f, os.path.splitext(os.path.basename(fn))[0]).writeXML() - f.close() - else: - E5MessageBox.critical( - self.ui, - self.tr("Save user project properties"), - self.tr( - "<p>The user specific project properties file <b>{0}</b>" - " could not be written.</p>").format(fn)) - + fn = os.path.join(self.getProjectManagementDir(), '{0}.eqj'.format(fn)) + + with E5OverrideCursor(): + self.__userProjectFile.writeFile(fn) + def __showContextMenuSession(self): """ Private slot called before the Session menu is shown. @@ -980,9 +1006,9 @@ else: fn, ext = os.path.splitext(os.path.basename(self.pfile)) fn_new = os.path.join(self.getProjectManagementDir(), - '{0}.e5s'.format(fn)) + '{0}.esj'.format(fn)) fn_old = os.path.join(self.getProjectManagementDir(), - '{0}.e4s'.format(fn)) + '{0}.e5s'.format(fn)) enable = os.path.exists(fn_new) or os.path.exists(fn_old) self.sessActGrp.findChild( QAction, "project_load_session").setEnabled(enable) @@ -992,46 +1018,7 @@ @pyqtSlot() def __readSession(self, quiet=False, indicator=""): """ - Private method to read in the project session file (.e5s or .e4s). - - @param quiet flag indicating quiet operations. - If this flag is true, no errors are reported. - @param indicator indicator string (string) - """ - if self.pfile is None: - if not quiet: - E5MessageBox.critical( - self.ui, - self.tr("Read project session"), - self.tr("Please save the project first.")) - return - - fn1, ext = os.path.splitext(os.path.basename(self.pfile)) - fn = os.path.join(self.getProjectManagementDir(), - '{0}{1}.e5s'.format(fn1, indicator)) - if not os.path.exists(fn): - fn = os.path.join(self.getProjectManagementDir(), - '{0}{1}.e4s'.format(fn1, indicator)) - - f = QFile(fn) - if f.open(QIODevice.ReadOnly): - from E5XML.SessionReader import SessionReader - reader = SessionReader(f, False) - reader.readXML(quiet=quiet) - f.close() - else: - if not quiet: - E5MessageBox.critical( - self.ui, - self.tr("Read project session"), - self.tr( - "<p>The project session file <b>{0}</b> could not be" - " read.</p>").format(fn)) - - @pyqtSlot() - def __writeSession(self, quiet=False, indicator=""): - """ - Private method to write the session data to an XML file (.e5s). + Private method to read in the project session file (.esj or .e5s). @param quiet flag indicating quiet operations. If this flag is true, no errors are reported. @@ -1041,29 +1028,59 @@ if not quiet: E5MessageBox.critical( self.ui, - self.tr("Save project session"), + self.tr("Read Project Session"), + self.tr("Please save the project first.")) + return + + fn1, ext = os.path.splitext(os.path.basename(self.pfile)) + fn = os.path.join(self.getProjectManagementDir(), + '{0}{1}.esj'.format(fn1, indicator)) + if os.path.exists(fn): + # try the new JSON based format first + self.__sessionFile.readFile(fn) + else: + # try the old XML based format second + fn = os.path.join(self.getProjectManagementDir(), + '{0}{1}.e5s'.format(fn1, indicator)) + if os.path.exists(fn): + f = QFile(fn) + if f.open(QIODevice.ReadOnly): + from E5XML.SessionReader import SessionReader + reader = SessionReader(f, False) + reader.readXML(quiet=quiet) + f.close() + else: + if not quiet: + E5MessageBox.critical( + self.ui, + self.tr("Read project session"), + self.tr( + "<p>The project session file <b>{0}</b> could" + " not be read.</p>").format(fn)) + + @pyqtSlot() + def __writeSession(self, quiet=False, indicator=""): + """ + Private method to write the session data to an XML file (.esj). + + @param quiet flag indicating quiet operations. + If this flag is true, no errors are reported. + @param indicator indicator string (string) + """ + if self.pfile is None: + if not quiet: + E5MessageBox.critical( + self.ui, + self.tr("Save Project Session"), self.tr("Please save the project first.")) return fn, ext = os.path.splitext(os.path.basename(self.pfile)) fn = os.path.join(self.getProjectManagementDir(), - '{0}{1}.e5s'.format(fn, indicator)) - - f = QFile(fn) - if f.open(QIODevice.WriteOnly): - from E5XML.SessionWriter import SessionWriter - SessionWriter( - f, os.path.splitext(os.path.basename(fn))[0]).writeXML() - f.close() - else: - if not quiet: - E5MessageBox.critical( - self.ui, - self.tr("Save project session"), - self.tr( - "<p>The project session file <b>{0}</b> could not be" - " written.</p>").format(fn)) - + '{0}{1}.esj'.format(fn, indicator)) + + self.__sessionFile.writeFile(fn) + def __deleteSession(self): """ Private method to delete the session file. @@ -1071,88 +1088,76 @@ if self.pfile is None: E5MessageBox.critical( self.ui, - self.tr("Delete project session"), + self.tr("Delete Project Session"), self.tr("Please save the project first.")) return fname, ext = os.path.splitext(os.path.basename(self.pfile)) - for fn in [ - os.path.join( - self.getProjectManagementDir(), "{0}.e5s".format(fname)), - os.path.join( - self.getProjectManagementDir(), "{0}.e4s".format(fname))]: + for ext in (".esj", ".e5s", ".e4s"): + fn = os.path.join( + self.getProjectManagementDir(), "{0}{1}".format(fname, ext)), if os.path.exists(fn): try: os.remove(fn) except OSError: E5MessageBox.critical( self.ui, - self.tr("Delete project session"), + self.tr("Delete Project Session"), self.tr( "<p>The project session file <b>{0}</b> could" " not be deleted.</p>").format(fn)) def __readTasks(self): """ - Private method to read in the project tasks file (.e6t). + Private method to read in the project tasks file (.etj or .e6t). """ if self.pfile is None: E5MessageBox.critical( self.ui, - self.tr("Read tasks"), + self.tr("Read Tasks"), self.tr("Please save the project first.")) return - + base, ext = os.path.splitext(os.path.basename(self.pfile)) fn = os.path.join(self.getProjectManagementDir(), - '{0}.e6t'.format(base)) - if not os.path.exists(fn): - # try again with the old extension + '{0}.etj'.format(base)) + if os.path.exists(fn): + # try new style JSON file first + self.__tasksFile.readFile(fn) + else: + # try old style XML file second fn = os.path.join(self.getProjectManagementDir(), - '{0}.e4t'.format(base)) - if not os.path.exists(fn): - return - f = QFile(fn) - if f.open(QIODevice.ReadOnly): - from E5XML.TasksReader import TasksReader - reader = TasksReader(f, True) - reader.readXML() - f.close() - else: - E5MessageBox.critical( - self.ui, - self.tr("Read tasks"), - self.tr( - "<p>The tasks file <b>{0}</b> could not be read.</p>") - .format(fn)) + '{0}.e6t'.format(base)) + if os.path.exists(fn): + f = QFile(fn) + if f.open(QIODevice.ReadOnly): + from E5XML.TasksReader import TasksReader + reader = TasksReader(f, True) + reader.readXML() + f.close() + else: + E5MessageBox.critical( + self.ui, + self.tr("Read Tasks"), + self.tr( + "<p>The tasks file <b>{0}</b> could not be read." + "</p>") + .format(fn)) def writeTasks(self): """ - Public method to write the tasks data to an XML file (.e6t). + Public method to write the tasks data to a JSON file (.etj). """ if self.pfile is None: return fn, ext = os.path.splitext(os.path.basename(self.pfile)) - fn = os.path.join(self.getProjectManagementDir(), '{0}.e6t'.format(fn)) - f = QFile(fn) - ok = f.open(QIODevice.WriteOnly) - if not ok: - E5MessageBox.critical( - self.ui, - self.tr("Save tasks"), - self.tr( - "<p>The tasks file <b>{0}</b> could not be written.</p>") - .format(fn)) - return - - from E5XML.TasksWriter import TasksWriter - TasksWriter( - f, True, os.path.splitext(os.path.basename(fn))[0]).writeXML() - f.close() - + fn = os.path.join(self.getProjectManagementDir(), + '{0}.etj'.format(fn)) + self.__tasksFile.writeFile(fn) + def __showContextMenuDebugger(self): """ Private slot called before the Debugger menu is shown. @@ -1173,43 +1178,54 @@ @pyqtSlot() def __readDebugProperties(self, quiet=False): """ - Private method to read in the project debugger properties file (.e4d). + Private method to read in the project debugger properties file + (.edj or .e4d). @param quiet flag indicating quiet operations. - If this flag is true, no errors are reported. + If this flag is true, no errors are reported. """ if self.pfile is None: if not quiet: E5MessageBox.critical( self.ui, - self.tr("Read debugger properties"), + self.tr("Read Debugger Properties"), self.tr("Please save the project first.")) return + + fn1, ext = os.path.splitext(os.path.basename(self.pfile)) + fn = os.path.join(self.getProjectManagementDir(), + '{0}.edj'.format(fn1)) + if os.path.exists(fn): + # try the new JSON based format first + self.__debuggerPropertiesFile.readFile(fn) + else: + # try the old XML based format second + fn = os.path.join(self.getProjectManagementDir(), + '{0}.e4d'.format(fn1)) - fn, ext = os.path.splitext(os.path.basename(self.pfile)) - fn = os.path.join(self.getProjectManagementDir(), '{0}.e4d'.format(fn)) - - f = QFile(fn) - if f.open(QIODevice.ReadOnly): - from E5XML.DebuggerPropertiesReader import DebuggerPropertiesReader - reader = DebuggerPropertiesReader(f, self) - reader.readXML(quiet=quiet) - f.close() - self.debugPropertiesLoaded = True - self.debugPropertiesChanged = False - else: - if not quiet: - E5MessageBox.critical( - self.ui, - self.tr("Read debugger properties"), - self.tr( - "<p>The project debugger properties file <b>{0}</b>" - " could not be read.</p>").format(fn)) - + f = QFile(fn) + if f.open(QIODevice.ReadOnly): + from E5XML.DebuggerPropertiesReader import ( + DebuggerPropertiesReader + ) + reader = DebuggerPropertiesReader(f, self) + reader.readXML(quiet=quiet) + f.close() + self.debugPropertiesLoaded = True + self.debugPropertiesChanged = False + else: + if not quiet: + E5MessageBox.critical( + self.ui, + self.tr("Read Debugger Properties"), + self.tr( + "<p>The project debugger properties file" + " <b>{0}</b> could not be read.</p>").format(fn)) + @pyqtSlot() def __writeDebugProperties(self, quiet=False): """ - Private method to write the project debugger properties file (.e4d). + Private method to write the project debugger properties file (.edj). @param quiet flag indicating quiet operations. If this flag is true, no errors are reported. @@ -1218,51 +1234,40 @@ if not quiet: E5MessageBox.critical( self.ui, - self.tr("Save debugger properties"), + self.tr("Save Debugger Properties"), self.tr("Please save the project first.")) return - + fn, ext = os.path.splitext(os.path.basename(self.pfile)) - fn = os.path.join(self.getProjectManagementDir(), '{0}.e4d'.format(fn)) - - f = QFile(fn) - if f.open(QIODevice.WriteOnly): - from E5XML.DebuggerPropertiesWriter import DebuggerPropertiesWriter - DebuggerPropertiesWriter( - f, os.path.splitext(os.path.basename(fn))[0]).writeXML() - f.close() - self.debugPropertiesChanged = False - else: - if not quiet: - E5MessageBox.critical( - self.ui, - self.tr("Save debugger properties"), - self.tr( - "<p>The project debugger properties file <b>{0}</b>" - " could not be written.</p>").format(fn)) - + fn = os.path.join(self.getProjectManagementDir(), '{0}.edj'.format(fn)) + + with E5OverrideCursor(): + self.__debuggerPropertiesFile.writeFile(fn) + def __deleteDebugProperties(self): """ - Private method to delete the project debugger properties file (.e4d). + Private method to delete the project debugger properties file + (.edj or .e4d). """ if self.pfile is None: E5MessageBox.critical( self.ui, - self.tr("Delete debugger properties"), + self.tr("Delete Debugger Properties"), self.tr("Please save the project first.")) return fname, ext = os.path.splitext(os.path.basename(self.pfile)) - for fn in [os.path.join(self.getProjectManagementDir(), - "{0}.e4d".format(fname))]: + for ext in (".edj", ".e4d"): + fn = os.path.join(self.getProjectManagementDir(), + "{0}{1}".format(fname, ext)) if os.path.exists(fn): try: os.remove(fn) except OSError: E5MessageBox.critical( self.ui, - self.tr("Delete debugger properties"), + self.tr("Delete Debugger Properties"), self.tr( "<p>The project debugger properties file" " <b>{0}</b> could not be deleted.</p>") @@ -2940,7 +2945,7 @@ self.tr("Open project"), Preferences.getMultiProject("Workspace") or Utilities.getHomeDir(), - self.tr("Project Files (*.e4p)")) + self.tr("Project Files (*.epj);;XML Project Files (*.e4p)")) QApplication.processEvents() @@ -3110,6 +3115,9 @@ """ if self.isDirty(): if len(self.pfile) > 0: + if self.pfile.endswith(".e4p"): + self.pfile = self.pfile.replace(".e4p", ".epj") + self.__syncRecent() ok = self.__writeProject() else: ok = self.saveProjectAs() @@ -3125,7 +3133,7 @@ @return flag indicating success (boolean) """ - defaultFilter = self.tr("Project Files (*.e4p)") + defaultFilter = self.tr("Project Files (*.epj)") if self.ppath: defaultPath = self.ppath else: @@ -3137,7 +3145,8 @@ self.parent(), self.tr("Save project as"), defaultPath, - self.tr("Project Files (*.e4p)"), + self.tr("Project Files (*.epj);;" + "XML Project Files (*.e4p)"), defaultFilter, E5FileDialog.Options(E5FileDialog.DontConfirmOverwrite)) @@ -4031,9 +4040,9 @@ self.filetypesAct = E5Action( self.tr('Filetype Associations'), self.tr('Filetype Associations...'), 0, 0, - self, 'project_filetype_associatios') + self, 'project_filetype_associations') self.filetypesAct.setStatusTip( - self.tr('Show the project filetype associations')) + self.tr('Show the project file type associations')) self.filetypesAct.setWhatsThis(self.tr( """<b>Filetype Associations...</b>""" """<p>This shows a dialog to edit the file type associations of""" @@ -4049,7 +4058,7 @@ self.lexersAct = E5Action( self.tr('Lexer Associations'), self.tr('Lexer Associations...'), 0, 0, - self, 'project_lexer_associatios') + self, 'project_lexer_associations') self.lexersAct.setStatusTip(self.tr( 'Show the project lexer associations (overriding defaults)')) self.lexersAct.setWhatsThis(self.tr(
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/eric6/Project/ProjectFile.py Mon Feb 01 13:25:37 2021 +0100 @@ -0,0 +1,110 @@ +# -*- coding: utf-8 -*- + +# Copyright (c) 2021 Detlev Offenbach <detlev@die-offenbachs.de> +# + +""" +Module implementing a class representing the project JSON file. +""" + +import json +import time +import typing + +from PyQt5.QtCore import QObject + +from E5Gui import E5MessageBox +from E5Gui.E5OverrideCursor import E5OverridenCursor + +import Preferences + +Project = typing.TypeVar("Project") + + +class ProjectFile(QObject): + """ + Class representing the project JSON file. + """ + def __init__(self, project: Project, parent: QObject = None): + """ + Constructor + + @param project reference to the project object + @type Project + @param parent reference to the parent object (defaults to None) + @type QObject (optional) + """ + super(ProjectFile, self).__init__(parent) + self.__project = project + + def writeFile(self, filename: str) -> bool: + """ + Public method to write the project data to a project JSON file. + + @param filename name of the project file + @type str + @return flag indicating a successful write + @rtype bool + """ + projectDict = {} + projectDict["header"] = { + "comment": "eric project file for project {0}".format( + self.__project.getProjectName()), + "copyright": "Copyright (C) {0} {1}, {2}".format( + time.strftime('%Y'), + self.__project.pdata["AUTHOR"], + self.__project.pdata["EMAIL"]) + } + + if Preferences.getProject("TimestampFile"): + projectDict["header"]["saved"] = ( + time.strftime('%Y-%m-%d, %H:%M:%S') + ) + + projectDict["project"] = self.__project.pdata + + try: + jsonString = json.dumps(projectDict, indent=2) + with open(filename, "w") as f: + f.write(jsonString) + except (TypeError, EnvironmentError) as err: + with E5OverridenCursor(): + E5MessageBox.critical( + None, + self.tr("Save Project File"), + self.tr( + "<p>The project file <b>{0}</b> could not be " + "written.</p><p>Reason: {1}</p>" + ).format(filename, str(err)) + ) + return False + + return True + + def readFile(self, filename: str) -> bool: + """ + Public method to read the project data from a project JSON file. + + @param filename name of the project file + @type str + @return flag indicating a successful read + @rtype bool + """ + try: + with open(filename, "r") as f: + jsonString = f.read() + projectDict = json.loads(jsonString) + except (EnvironmentError, json.JSONDecodeError) as err: + E5MessageBox.critical( + None, + self.tr("Read Project File"), + self.tr( + "<p>The project file <b>{0}</b> could not be " + "read.</p><p>Reason: {1}</p>" + ).format(filename, str(err)) + ) + return False + + self.__project.pdata = projectDict["project"] + + return True
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/eric6/Project/UserProjectFile.py Mon Feb 01 13:25:37 2021 +0100 @@ -0,0 +1,109 @@ +# -*- coding: utf-8 -*- + +# Copyright (c) 2021 Detlev Offenbach <detlev@die-offenbachs.de> +# + +""" +Module implementing a class representing the user project JSON file. +""" + +import json +import time +import typing + +from PyQt5.QtCore import QObject + +from E5Gui import E5MessageBox +from E5Gui.E5OverrideCursor import E5OverridenCursor + +import Preferences + +Project = typing.TypeVar("Project") + + +class UserProjectFile(QObject): + """ + Class representing the user project JSON file. + """ + def __init__(self, project: Project, parent: QObject = None): + """ + Constructor + + @param project reference to the project object + @type Project + @param parent reference to the parent object (defaults to None) + @type QObject (optional) + """ + super(UserProjectFile, self).__init__(parent) + self.__project = project + + def writeFile(self, filename: str) -> bool: + """ + Public method to write the user project data to a user project + JSON file. + + @param filename name of the user project file + @type str + @return flag indicating a successful write + @rtype bool + """ + userProjectDict = {} + userProjectDict["header"] = { + "comment": "eric user project file for project {0}".format( + self.__project.getProjectName()), + } + + if Preferences.getProject("TimestampFile"): + userProjectDict["header"]["saved"] = ( + time.strftime('%Y-%m-%d, %H:%M:%S') + ) + + userProjectDict["user_data"] = self.__project.pudata + + try: + jsonString = json.dumps(userProjectDict, indent=2) + with open(filename, "w") as f: + f.write(jsonString) + except (TypeError, EnvironmentError) as err: + with E5OverridenCursor(): + E5MessageBox.critical( + None, + self.tr("Save User Project Properties"), + self.tr( + "<p>The user specific project properties file" + " <b>{0}</b> could not be written.</p>" + "<p>Reason: {1}</p>" + ).format(filename, str(err)) + ) + return False + + return True + + def readFile(self, filename: str) -> bool: + """ + Public method to read the user project data from a user project + JSON file. + + @param filename name of the project file + @type str + @return flag indicating a successful read + @rtype bool + """ + try: + with open(filename, "r") as f: + jsonString = f.read() + userProjectDict = json.loads(jsonString) + except (EnvironmentError, json.JSONDecodeError) as err: + E5MessageBox.critical( + None, + self.tr("Read User Project Properties"), + self.tr( + "<p>The user specific project properties file <b>{0}</b>" + " could not be read.</p><p>Reason: {1}</p>" + ).format(filename, str(err)) + ) + return False + + self.__project.pudata = userProjectDict["user_data"] + + return True
--- a/eric6/QScintilla/Lexers/LexerPygments.py Mon Feb 01 10:06:11 2021 +0100 +++ b/eric6/QScintilla/Lexers/LexerPygments.py Mon Feb 01 13:25:37 2021 +0100 @@ -187,9 +187,12 @@ if name.startswith("Pygments|"): self.__forcedPygmentsName = True self.__pygmentsName = name.replace("Pygments|", "") - else: + elif name: self.__pygmentsName = name self.__forcedPygmentsName = True + else: + self.__pygmentsName = "" + self.__forcedPygmentsName = False self.descriptions = { PYGMENTS_DEFAULT: self.tr("Default"), @@ -317,10 +320,7 @@ @return language of the lexer (string) """ if self.__pygmentsName: - if self.__forcedPygmentsName: - return "Guessed" - else: - return self.__pygmentsName + return self.__pygmentsName else: return "Guessed"
--- a/eric6/QScintilla/Lexers/__init__.py Mon Feb 01 10:06:11 2021 +0100 +++ b/eric6/QScintilla/Lexers/__init__.py Mon Feb 01 13:25:37 2021 +0100 @@ -80,85 +80,123 @@ (string, string, string) """ supportedLanguages = { - "Bash": [QCoreApplication.translate('Lexers', "Bash"), 'dummy.sh', - "lexerBash"], - "Batch": [QCoreApplication.translate('Lexers', "Batch"), 'dummy.bat', - "lexerBatch"], - "C++": [QCoreApplication.translate('Lexers', "C/C++"), 'dummy.cpp', - "lexerCPP"], - "C#": [QCoreApplication.translate('Lexers', "C#"), 'dummy.cs', - "lexerCsharp"], - "CMake": [QCoreApplication.translate('Lexers', "CMake"), 'dummy.cmake', - "lexerCMake"], - "CSS": [QCoreApplication.translate('Lexers', "CSS"), 'dummy.css', - "lexerCSS"], - "Cython": [QCoreApplication.translate('Lexers', "Cython"), 'dummy.pyx', - "lexerCython"], - "D": [QCoreApplication.translate('Lexers', "D"), 'dummy.d', - "lexerD"], - "Diff": [QCoreApplication.translate('Lexers', "Diff"), 'dummy.diff', - "lexerDiff"], - "Fortran": [QCoreApplication.translate('Lexers', "Fortran"), - 'dummy.f95', "lexerFortran"], - "Fortran77": [QCoreApplication.translate('Lexers', "Fortran77"), - 'dummy.f', "lexerFortran"], - "HTML": [QCoreApplication.translate('Lexers', "HTML/PHP/XML"), - 'dummy.html', "lexerHTML"], - "IDL": [QCoreApplication.translate('Lexers', "IDL"), 'dummy.idl', - "lexerIDL"], - "Java": [QCoreApplication.translate('Lexers', "Java"), 'dummy.java', - "lexerJava"], - "JavaScript": [QCoreApplication.translate('Lexers', "JavaScript"), - 'dummy.js', "lexerJavaScript"], - "Lua": [QCoreApplication.translate('Lexers', "Lua"), 'dummy.lua', - "lexerLua"], - "Makefile": [QCoreApplication.translate('Lexers', "Makefile"), - 'dummy.mak', "lexerMakefile"], - "Matlab": [QCoreApplication.translate('Lexers', "Matlab"), - 'dummy.m.matlab', "lexerMatlab"], - "Octave": [QCoreApplication.translate('Lexers', "Octave"), - 'dummy.m.octave', "lexerOctave"], - "Pascal": [QCoreApplication.translate('Lexers', "Pascal"), 'dummy.pas', - "lexerPascal"], - "Perl": [QCoreApplication.translate('Lexers', "Perl"), 'dummy.pl', - "lexerPerl"], - "PostScript": [QCoreApplication.translate('Lexers', "PostScript"), - 'dummy.ps', "lexerPostscript"], - "Povray": [QCoreApplication.translate('Lexers', "Povray"), 'dummy.pov', - "lexerPOV"], - "Properties": [QCoreApplication.translate('Lexers', "Properties"), - 'dummy.ini', "lexerProperties"], - "Protocol": [QCoreApplication.translate('Lexers', - "Protocol (protobuf)"), - 'dummy.proto', "protobuf"], - "Python3": [QCoreApplication.translate('Lexers', "Python3"), - 'dummy.py', "lexerPython3"], - "MicroPython": [QCoreApplication.translate('Lexers', "MicroPython"), - 'dummy.py', "micropython"], - "QSS": [QCoreApplication.translate('Lexers', "QSS"), 'dummy.qss', - "lexerCSS"], - "Ruby": [QCoreApplication.translate('Lexers', "Ruby"), 'dummy.rb', - "lexerRuby"], - "SQL": [QCoreApplication.translate('Lexers', "SQL"), 'dummy.sql', - "lexerSQL"], - "TCL": [QCoreApplication.translate('Lexers', "TCL"), 'dummy.tcl', - "lexerTCL"], - "TeX": [QCoreApplication.translate('Lexers', "TeX"), 'dummy.tex', - "lexerTeX"], - "VHDL": [QCoreApplication.translate('Lexers', "VHDL"), 'dummy.vhd', - "lexerVHDL"], - "XML": [QCoreApplication.translate('Lexers', "XML"), 'dummy.xml', - "lexerXML"], - "YAML": [QCoreApplication.translate('Lexers', "YAML"), 'dummy.yml', - "lexerYAML"], - "Gettext": [QCoreApplication.translate('Lexers', "Gettext"), - 'dummy.po', "lexerGettext"], - "CoffeeScript": [QCoreApplication.translate('Lexers', "CoffeeScript"), - 'dummy.coffee', "lexerCoffeeScript"], - "JSON": [QCoreApplication.translate('Lexers', "JSON"), 'dummy.json', - "lexerJSON"], - "Markdown": [QCoreApplication.translate('Lexers', "Markdown"), - 'dummy.md', "lexerMarkdown"], + "Bash": + [QCoreApplication.translate('Lexers', "Bash"), 'dummy.sh', + "lexerBash"], + "Batch": + [QCoreApplication.translate('Lexers', "Batch"), 'dummy.bat', + "lexerBatch"], + "C++": + [QCoreApplication.translate('Lexers', "C/C++"), 'dummy.cpp', + "lexerCPP"], + "C#": + [QCoreApplication.translate('Lexers', "C#"), 'dummy.cs', + "lexerCsharp"], + "CMake": + [QCoreApplication.translate('Lexers', "CMake"), 'dummy.cmake', + "lexerCMake"], + "CSS": + [QCoreApplication.translate('Lexers', "CSS"), 'dummy.css', + "lexerCSS"], + "Cython": + [QCoreApplication.translate('Lexers', "Cython"), 'dummy.pyx', + "lexerCython"], + "D": + [QCoreApplication.translate('Lexers', "D"), 'dummy.d', + "lexerD"], + "Diff": + [QCoreApplication.translate('Lexers', "Diff"), 'dummy.diff', + "lexerDiff"], + "Fortran": + [QCoreApplication.translate('Lexers', "Fortran"), 'dummy.f95', + "lexerFortran"], + "Fortran77": + [QCoreApplication.translate('Lexers', "Fortran77"), 'dummy.f', + "lexerFortran"], + "HTML": + [QCoreApplication.translate('Lexers', "HTML/PHP/XML"), + 'dummy.html', "lexerHTML"], + "IDL": + [QCoreApplication.translate('Lexers', "IDL"), 'dummy.idl', + "lexerIDL"], + "Java": + [QCoreApplication.translate('Lexers', "Java"), 'dummy.java', + "lexerJava"], + "JavaScript": + [QCoreApplication.translate('Lexers', "JavaScript"), 'dummy.js', + "lexerJavaScript"], + "Lua": + [QCoreApplication.translate('Lexers', "Lua"), 'dummy.lua', + "lexerLua"], + "Makefile": + [QCoreApplication.translate('Lexers', "Makefile"), 'dummy.mak', + "lexerMakefile"], + "Matlab": + [QCoreApplication.translate('Lexers', "Matlab"), 'dummy.m.matlab', + "lexerMatlab"], + "Octave": + [QCoreApplication.translate('Lexers', "Octave"), 'dummy.m.octave', + "lexerOctave"], + "Pascal": + [QCoreApplication.translate('Lexers', "Pascal"), 'dummy.pas', + "lexerPascal"], + "Perl": + [QCoreApplication.translate('Lexers', "Perl"), 'dummy.pl', + "lexerPerl"], + "PostScript": + [QCoreApplication.translate('Lexers', "PostScript"), 'dummy.ps', + "lexerPostscript"], + "Povray": + [QCoreApplication.translate('Lexers', "Povray"), 'dummy.pov', + "lexerPOV"], + "Properties": + [QCoreApplication.translate('Lexers', "Properties"), 'dummy.ini', + "lexerProperties"], + "Protocol Buffer": [ + QCoreApplication.translate('Lexers', "Protocol Buffer (protobuf)"), + 'dummy.proto', "protobuf"], + "Python3": + [QCoreApplication.translate('Lexers', "Python3"), 'dummy.py', + "lexerPython3"], + "MicroPython": + [QCoreApplication.translate('Lexers', "MicroPython"), 'dummy.py', + "micropython"], + "QSS": + [QCoreApplication.translate('Lexers', "QSS"), 'dummy.qss', + "lexerCSS"], + "Ruby": + [QCoreApplication.translate('Lexers', "Ruby"), 'dummy.rb', + "lexerRuby"], + "SQL": + [QCoreApplication.translate('Lexers', "SQL"), 'dummy.sql', + "lexerSQL"], + "TCL": + [QCoreApplication.translate('Lexers', "TCL"), 'dummy.tcl', + "lexerTCL"], + "TeX": + [QCoreApplication.translate('Lexers', "TeX"), 'dummy.tex', + "lexerTeX"], + "VHDL": + [QCoreApplication.translate('Lexers', "VHDL"), 'dummy.vhd', + "lexerVHDL"], + "XML": + [QCoreApplication.translate('Lexers', "XML"), 'dummy.xml', + "lexerXML"], + "YAML": + [QCoreApplication.translate('Lexers', "YAML"), 'dummy.yml', + "lexerYAML"], + "Gettext": + [QCoreApplication.translate('Lexers', "Gettext"), 'dummy.po', + "lexerGettext"], + "CoffeeScript": + [QCoreApplication.translate('Lexers', "CoffeeScript"), + 'dummy.coffee', "lexerCoffeeScript"], + "JSON": + [QCoreApplication.translate('Lexers', "JSON"), 'dummy.json', + "lexerJSON"], + "Markdown": + [QCoreApplication.translate('Lexers', "Markdown"), 'dummy.md', + "lexerMarkdown"], } for name in LexerRegistry: @@ -214,7 +252,7 @@ @param language language of the lexer (string) @param parent reference to the parent object (QObject) @param pyname name of the pygments lexer to use (string) - @return reference to the instanciated lexer object (QsciLexer) + @return reference to the instantiated lexer object (QsciLexer) """ if not pyname: try: @@ -329,7 +367,7 @@ from .LexerMarkdown import LexerMarkdown return LexerMarkdown(parent) - elif language == "Protocol": + elif language == "Protocol Buffer": return __getPygmentsLexer(parent, name="Protocol Buffer") elif language in LexerRegistry: @@ -393,7 +431,7 @@ 'IDL Files (*.idl)'), QCoreApplication.translate( 'Lexers', - 'Protocol Files (*.proto)'), + 'Protocol Buffer Files (*.proto)'), QCoreApplication.translate( 'Lexers', 'C Files (*.h *.c)'), @@ -569,7 +607,7 @@ "IDL Files (*.idl)"), QCoreApplication.translate( 'Lexers', - 'Protocol Files (*.proto)'), + 'Protocol Buffer Files (*.proto)'), QCoreApplication.translate( 'Lexers', "C Files (*.c)"), @@ -842,6 +880,7 @@ '*.m': "Matlab", '*.m.matlab': "Matlab", '*.m.octave': "Octave", + '*.e4c': "XML", '*.e4d': "XML", '*.e4k': "XML", '*.e4m': "XML", @@ -863,7 +902,16 @@ '*.e6q': "XML", '*.e6s': "XML", '*.e6t': "XML", - '*.proto': "Protocol", + '*.ecj': "JSON", + '*.edj': "JSON", + '*.ehj': "JSON", + '*.ekj': "JSON", + '*.emj': "JSON", + '*.epj': "JSON", + '*.eqj': "JSON", + '*.esj': "JSON", + '*.etj': "JSON", + '*.proto': "Protocol Buffer", '*.po': "Gettext", '*.coffee': "CoffeeScript", '*.json': "JSON",
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/eric6/Sessions/SessionFile.py Mon Feb 01 13:25:37 2021 +0100 @@ -0,0 +1,364 @@ +# -*- coding: utf-8 -*- + +# Copyright (c) 2021 Detlev Offenbach <detlev@die-offenbachs.de> +# + +""" +Module implementing a class representing the session JSON file. +""" + +import json +import time + +from PyQt5.QtCore import QObject + +from E5Gui import E5MessageBox +from E5Gui.E5OverrideCursor import E5OverridenCursor +from E5Gui.E5Application import e5App + +import Preferences + + +class SessionFile(QObject): + """ + Class representing the session JSON file. + """ + def __init__(self, isGlobal: bool, parent: QObject = None): + """ + Constructor + + @param isGlobal flag indicating a file for a global session + @type bool + @param parent reference to the parent object (defaults to None) + @type QObject (optional) + """ + super(SessionFile, self).__init__(parent) + + self.__isGlobal = isGlobal + + def writeFile(self, filename: str) -> bool: + """ + Public method to write the session data to a session JSON file. + + @param filename name of the session file + @type str + @return flag indicating a successful write + @rtype bool + """ + # get references to objects we need + project = e5App().getObject("Project") + projectBrowser = e5App().getObject("ProjectBrowser") + multiProject = e5App().getObject("MultiProject") + vm = e5App().getObject("ViewManager") + dbg = e5App().getObject("DebugUI") + dbs = e5App().getObject("DebugServer") + + # prepare the session data dictionary + # step 0: header + sessionDict = {} + sessionDict["header"] = {} + if not self.__isGlobal: + sessionDict["header"]["comment"] = ( + "eric session file for project {0}" + .format(project.getProjectName()) + ) + sessionDict["header"]["warning"] = ( + "This file was generated automatically, do not edit." + ) + + if Preferences.getProject("TimestampFile") or self.__isGlobal: + sessionDict["header"]["saved"] = ( + time.strftime('%Y-%m-%d, %H:%M:%S') + ) + + # step 1: open multi project and project for global session + sessionDict["MultiProject"] = "" + sessionDict["Project"] = "" + if self.__isGlobal: + if multiProject.isOpen(): + sessionDict["MultiProject"] = ( + multiProject.getMultiProjectFile() + ) + if project.isOpen(): + sessionDict["Project"] = project.getProjectFile() + + # step 2: all open (project) filenames and the active editor + if vm.canSplit(): + sessionDict["ViewManagerSplits"] = { + "Count": vm.splitCount(), + "Orientation": vm.getSplitOrientation(), + } + else: + sessionDict["ViewManagerSplits"] = { + "Count": 0, + "Orientation": 1, + } + + editorsDict = {} # remember editors by file name to detect clones + sessionDict["Editors"] = [] + allOpenEditorLists = vm.getOpenEditorsForSession() + for splitIndex, openEditorList in enumerate(allOpenEditorLists): + for editorIndex, editor in enumerate(openEditorList): + fileName = editor.getFileName() + if self.__isGlobal or project.isProjectFile(fileName): + if fileName in editorsDict: + isClone = editorsDict[fileName].isClone(editor) + else: + isClone = False + editorsDict[fileName] = editor + editorDict = { + "Filename": fileName, + "Cursor": editor.getCursorPosition(), + "Folds": editor.contractedFolds(), + "Zoom": editor.getZoom(), + "Clone": isClone, + "Splitindex": splitIndex, + "Editorindex": editorIndex, + } + sessionDict["Editors"].append(editorDict) + + aw = vm.getActiveName() + sessionDict["ActiveWindow"] = {} + if aw and (self.__isGlobal or project.isProjectFile(aw)): + ed = vm.getOpenEditor(aw) + sessionDict["ActiveWindow"] = { + "Filename": aw, + "Cursor": ed.getCursorPosition(), + } + + # step 3: breakpoints + allBreaks = Preferences.getProject("SessionAllBreakpoints") + projectFiles = project.getSources(True) + bpModel = dbs.getBreakPointModel() + if self.__isGlobal or allBreaks: + sessionDict["Breakpoints"] = bpModel.getAllBreakpoints() + else: + sessionDict["Breakpoints"] = [ + bp + for bp in bpModel.getAllBreakpoints() + if bp[0] in projectFiles + ] + + # step 4: watch expressions + wpModel = dbs.getWatchPointModel() + sessionDict["Watchpoints"] = wpModel.getAllWatchpoints() + + # step 5: debug info + if self.__isGlobal: + if len(dbg.argvHistory): + dbgCmdline = dbg.argvHistory[0] + else: + dbgCmdline = "" + if len(dbg.wdHistory): + dbgWd = dbg.wdHistory[0] + else: + dbgWd = "" + if len(dbg.envHistory): + dbgEnv = dbg.envHistory[0] + else: + dbgEnv = "" + if len(dbg.multiprocessNoDebugHistory): + dbgMultiprocessNoDebug = ( + dbg.multiprocessNoDebugHistory[0] + ) + else: + dbgMultiprocessNoDebug = "" + sessionDict["DebugInfo"] = { + "VirtualEnv": dbg.lastUsedVenvName, + "CommandLine": dbgCmdline, + "WorkingDirectory": dbgWd, + "Environment": dbgEnv, + "ReportExceptions": dbg.exceptions, + "Exceptions": dbg.excList, + "IgnoredExceptions": dbg.excIgnoreList, + "AutoClearShell": dbg.autoClearShell, + "TracePython": dbg.tracePython, + "AutoContinue": dbg.autoContinue, + "EnableMultiprocess": dbg.enableMultiprocess, + "MultiprocessNoDebug": dbgMultiprocessNoDebug + } + else: + sessionDict["DebugInfo"] = { + "VirtualEnv": project.dbgVirtualEnv, + "CommandLine": project.dbgCmdline, + "WorkingDirectory": project.dbgWd, + "Environment": project.dbgEnv, + "ReportExceptions": project.dbgReportExceptions, + "Exceptions": project.dbgExcList, + "IgnoredExceptions": project.dbgExcIgnoreList, + "AutoClearShell": project.dbgAutoClearShell, + "TracePython": project.dbgTracePython, + "AutoContinue": project.dbgAutoContinue, + "EnableMultiprocess": project.dbgEnableMultiprocess, + "MultiprocessNoDebug": project.dbgMultiprocessNoDebug, + } + + # step 6: bookmarks + bookmarksList = [] + for fileName in editorsDict: + if self.__isGlobal or project.isProjectFile(fileName): + editor = editorsDict[fileName] + bookmarks = editor.getBookmarks() + if bookmarks: + bookmarksList.append({ + "Filename": fileName, + "Lines": bookmarks, + }) + sessionDict["Bookmarks"] = bookmarksList + + # step 7: state of the various project browsers + browsersList = [] + for browserName in projectBrowser.getProjectBrowserNames(): + expandedItems = ( + projectBrowser.getProjectBrowser(browserName) + .getExpandedItemNames() + ) + if expandedItems: + browsersList.append({ + "Name": browserName, + "ExpandedItems": expandedItems, + }) + sessionDict["ProjectBrowserStates"] = browsersList + + try: + jsonString = json.dumps(sessionDict, indent=2) + with open(filename, "w") as f: + f.write(jsonString) + except (TypeError, EnvironmentError) as err: + with E5OverridenCursor(): + E5MessageBox.critical( + None, + self.tr("Save Session"), + self.tr( + "<p>The session file <b>{0}</b> could not be" + " written.</p><p>Reason: {1}</p>" + ).format(filename, str(err)) + ) + return False + + return True + + def readFile(self, filename: str) -> bool: + """ + Public method to read the session data from a session JSON file. + + @param filename name of the project file + @type str + @return flag indicating a successful read + @rtype bool + """ + try: + with open(filename, "r") as f: + jsonString = f.read() + sessionDict = json.loads(jsonString) + except (EnvironmentError, json.JSONDecodeError) as err: + E5MessageBox.critical( + None, + self.tr("Read Session"), + self.tr( + "<p>The session file <b>{0}</b> could not be read.</p>" + "<p>Reason: {1}</p>" + ).format(filename, str(err)) + ) + return False + + # get references to objects we need + project = e5App().getObject("Project") + projectBrowser = e5App().getObject("ProjectBrowser") + multiProject = e5App().getObject("MultiProject") + vm = e5App().getObject("ViewManager") + dbg = e5App().getObject("DebugUI") + dbs = e5App().getObject("DebugServer") + + # step 1: multi project and project + if sessionDict["MultiProject"]: + multiProject.openMultiProject(sessionDict["MultiProject"], False) + if sessionDict["Project"]: + project.openProject(sessionDict["Project"], False) + + # step 2: (project) filenames and the active editor + vm.setSplitOrientation(sessionDict["ViewManagerSplits"]["Orientation"]) + vm.setSplitCount(sessionDict["ViewManagerSplits"]["Count"]) + + editorsDict = {} + for editorDict in sessionDict["Editors"]: + if editorDict["Clone"] and editorDict["Filename"] in editorsDict: + editor = editorsDict[editorDict["Filename"]] + ed = vm.newEditorView( + editorDict["Filename"], editor, editor.getFileType(), + indexes=(editorDict["Splitindex"], + editorDict["Editorindex"]) + ) + else: + ed = vm.openSourceFile( + editorDict["Filename"], + indexes=(editorDict["Splitindex"], + editorDict["Editorindex"]) + ) + editorsDict[editorDict["Filename"]] = ed + if ed is not None: + ed.zoomTo(editorDict["Zoom"]) + if editorDict["Folds"]: + ed.recolor() + ed.setContractedFolds(editorDict["Folds"]) + ed.setCursorPosition(*editorDict["Cursor"]) + + # step 3: breakpoints + bpModel = dbs.getBreakPointModel() + bpModel.addBreakPoints(sessionDict["Breakpoints"]) + + # step 4: watch expressions + wpModel = dbs.getWatchPointModel() + wpModel.addWatchPoints(sessionDict["Watchpoints"]) + + # step 5: debug info + debugInfoDict = sessionDict["DebugInfo"] + dbg.lastUsedVenvName = debugInfoDict["VirtualEnv"] + dbg.setArgvHistory(debugInfoDict["CommandLine"]) + dbg.setWdHistory(debugInfoDict["WorkingDirectory"]) + dbg.setEnvHistory(debugInfoDict["Environment"]) + dbg.setExceptionReporting(debugInfoDict["ReportExceptions"]) + dbg.setExcList(debugInfoDict["Exceptions"]) + dbg.setExcIgnoreList(debugInfoDict["IgnoredExceptions"]) + dbg.setAutoClearShell(debugInfoDict["AutoClearShell"]) + dbg.setTracePython(debugInfoDict["TracePython"]) + dbg.setAutoContinue(debugInfoDict["AutoContinue"]) + dbg.setEnableMultiprocess(debugInfoDict["EnableMultiprocess"]) + dbg.setMultiprocessNoDebugHistory(debugInfoDict["MultiprocessNoDebug"]) + if not self.__isGlobal: + project.setDbgInfo( + debugInfoDict["VirtualEnv"], + debugInfoDict["CommandLine"], + debugInfoDict["WorkingDirectory"], + debugInfoDict["Environment"], + debugInfoDict["ReportExceptions"], + debugInfoDict["Exceptions"], + debugInfoDict["IgnoredExceptions"], + debugInfoDict["AutoClearShell"], + debugInfoDict["TracePython"], + debugInfoDict["AutoContinue"], + debugInfoDict["EnableMultiprocess"], + debugInfoDict["MultiprocessNoDebug"] + ) + + # step 6: bookmarks + for bookmark in sessionDict["Bookmarks"]: + editor = vm.getOpenEditor(bookmark["Filename"]) + if editor is not None: + for lineno in bookmark["Lines"]: + editor.toggleBookmark(lineno) + + # step 7: state of the various project browsers + for browserState in sessionDict["ProjectBrowserStates"]: + browser = projectBrowser.getProjectBrowser(browserState["Name"]) + if browser is not None: + browser.expandItemsByName(browserState["ExpandedItems"]) + + # step 8: active window + vm.openFiles(sessionDict["ActiveWindow"]["Filename"]) + ed = vm.getOpenEditor(sessionDict["ActiveWindow"]["Filename"]) + if ed is not None: + ed.setCursorPosition(*sessionDict["ActiveWindow"]["Cursor"]) + ed.ensureCursorVisible() + + return True
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/eric6/Sessions/__init__.py Mon Feb 01 13:25:37 2021 +0100 @@ -0,0 +1,8 @@ +# -*- coding: utf-8 -*- + +# Copyright (c) 2021 Detlev Offenbach <detlev@die-offenbachs.de> +# + +""" +Package containing session related modules. +"""
--- a/eric6/Tasks/Task.py Mon Feb 01 10:06:11 2021 +0100 +++ b/eric6/Tasks/Task.py Mon Feb 01 13:25:37 2021 +0100 @@ -292,3 +292,24 @@ @return flag indicating a project file task (boolean) """ return self._isProjectTask and self.filename != "" + + def toDict(self): + """ + Public method to convert the task data to a dictionary. + + @return dictionary containing the task data + @rtype dict + """ + return { + "summary": self.summary.strip(), + "description": self.description.strip(), + "priority": self.priority, + "lineno": self.lineno, + "completed": self.completed, + "created": self.created, + "type": self.taskType, + "uid": self.uid, + "parent_uid": self.parentUid, + "expanded": self.isExpanded(), + "filename": self.getFilename(), + }
--- a/eric6/Tasks/TaskViewer.py Mon Feb 01 10:06:11 2021 +0100 +++ b/eric6/Tasks/TaskViewer.py Mon Feb 01 13:25:37 2021 +0100 @@ -71,7 +71,7 @@ self.copyTask = None self.projectOpen = False self.project = project - self.projectTasksScanFilter = "" + self.__projectTasksScanFilter = "" from .TaskFilter import TaskFilter self.taskFilter = TaskFilter() @@ -337,13 +337,24 @@ Task.TypeWarning, Task.TypeNote) @param description explanatory text of the task (string) @param uid unique id of the task (string) - @param parentTask reference to the parent task item (Task) + @param parentTask reference to the parent task item (Task) or the + UID of the parent task @return reference to the task item (Task) """ - if parentTask: - parentUid = parentTask.getUuid() + if isinstance(parentTask, str): + # UID of parent task + if parentTask == "": + parentUid = "" + parentTask = None + else: + parentUid = parentTask + parentTask = self.findParentTask(parentUid) else: - parentUid = "" + # parent task item + if parentTask: + parentUid = parentTask.getUuid() + else: + parentUid = "" task = Task(summary, priority, filename, lineno, completed, _time, isProjectTask, taskType, self.project, description, uid, parentUid) @@ -681,9 +692,9 @@ self.tr("Enter filename patterns of files" " to be excluded separated by a comma:"), QLineEdit.Normal, - self.projectTasksScanFilter) + self.__projectTasksScanFilter) if ok: - self.projectTasksScanFilter = scanFilter + self.__projectTasksScanFilter = scanFilter def regenerateProjectTasks(self, quiet=False): """ @@ -699,7 +710,7 @@ files = self.project.pdata["SOURCES"] # apply file filter - filterList = [f.strip() for f in self.projectTasksScanFilter.split(",") + filterList = [f.strip() for f in self.__projectTasksScanFilter.split(",") if f.strip()] if filterList: for scanFilter in filterList: @@ -785,6 +796,24 @@ """ self.__projectTaskExtractionThread.requestInterrupt() self.__projectTaskExtractionThread.wait() + + def getTasksScanFilter(self) -> str: + """ + Public method to get the project scan filter. + + @return project scan filter + @rtype str + """ + return self.__projectTasksScanFilter.strip() + + def setTasksScanFilter(self, filter: str): + """ + Public method to set the project scan filter. + + @param filter project scan filter + @type str + """ + self.__projectTasksScanFilter = filter class ProjectTaskExtractionThread(QThread):
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/eric6/Tasks/TasksFile.py Mon Feb 01 13:25:37 2021 +0100 @@ -0,0 +1,149 @@ +# -*- coding: utf-8 -*- + +# Copyright (c) 2021 Detlev Offenbach <detlev@die-offenbachs.de> +# + +""" +Module implementing a class representing the tasks JSON file. +""" + +import json +import time + +from PyQt5.QtCore import QObject + +from E5Gui import E5MessageBox +from E5Gui.E5OverrideCursor import E5OverridenCursor +from E5Gui.E5Application import e5App + +import Preferences + + +class TasksFile(QObject): + """ + Class representing the tasks JSON file. + """ + def __init__(self, isGlobal: bool, parent: QObject = None): + """ + Constructor + + @param isGlobal flag indicating a file for global tasks + @type bool + @param parent reference to the parent object (defaults to None) + @type QObject (optional) + """ + super(TasksFile, self).__init__(parent) + self.__isGlobal = isGlobal + + def writeFile(self, filename: str) -> bool: + """ + Public method to write the tasks data to a tasks JSON file. + + @param filename name of the tasks file + @type str + @return flag indicating a successful write + @rtype bool + """ + # prepare the tasks data dictionary + # step 0: header + tasksDict = {} + if self.__isGlobal: + tasksDict["header"] = { + "comment": "eric tasks file", + "saved": time.strftime('%Y-%m-%d, %H:%M:%S'), + "warning": ( + "This file was generated automatically, do not edit." + ), + } + # step 1: project scan filter + tasksDict["ProjectScanFilter"] = "" + + # step 2: tasks + tasksDict["Tasks"] = [ + task.toDict() + for task in e5App().getObject("TaskViewer").getGlobalTasks() + ] + else: + tasksDict["header"] = { + "comment": "eric tasks file for project {0}".format( + e5App().getObject("Project").getProjectName()), + "warning": ( + "This file was generated automatically, do not edit." + ), + } + if Preferences.getProject("TimestampFile"): + tasksDict["header"]["saved"] = ( + time.strftime('%Y-%m-%d, %H:%M:%S') + ) + # step 1: project scan filter + tasksDict["ProjectScanFilter"] = ( + e5App().getObject("TaskViewer").getTasksScanFilter() + ) + + # step 2: tasks + tasksDict["Tasks"] = [ + task.toDict() + for task in e5App().getObject("TaskViewer").getProjectTasks() + ] + + try: + jsonString = json.dumps(tasksDict, indent=2) + with open(filename, "w") as f: + f.write(jsonString) + except (TypeError, EnvironmentError) as err: + with E5OverridenCursor(): + E5MessageBox.critical( + None, + self.tr("Save Tasks"), + self.tr( + "<p>The tasks file <b>{0}</b> could not be" + " written.</p><p>Reason: {1}</p>" + ).format(filename, str(err)) + ) + return False + + return True + + def readFile(self, filename: str) -> bool: + """ + Public method to read the tasks data from a task JSON file. + + @param filename name of the project file + @type str + @return flag indicating a successful read + @rtype bool + """ + try: + with open(filename, "r") as f: + jsonString = f.read() + tasksDict = json.loads(jsonString) + except (EnvironmentError, json.JSONDecodeError) as err: + E5MessageBox.critical( + None, + self.tr("Read Tasks"), + self.tr( + "<p>The tasks file <b>{0}</b> could not be read.</p>" + "<p>Reason: {1}</p>" + ).format(filename, str(err)) + ) + return False + + viewer = e5App().getObject("TaskViewer") + if tasksDict["ProjectScanFilter"]: + viewer.setTasksScanFilter(tasksDict["ProjectScanFilter"]) + + addedTasks = [] + for task in tasksDict["Tasks"]: + addedTask = viewer.addTask( + task["summary"], priority=task["priority"], + filename=task["filename"], lineno=task["lineno"], + completed=task["completed"], _time=task["created"], + isProjectTask=not self.__isGlobal, taskType=task["type"], + description=task["description"], uid=task["uid"], + parentTask=task["parent_uid"]) + addedTasks.append((addedTask, task["expanded"])) + + for task, expanded in addedTasks: + task.setExpanded(expanded) + + return True
--- a/eric6/Templates/TemplateViewer.py Mon Feb 01 10:06:11 2021 +0100 +++ b/eric6/Templates/TemplateViewer.py Mon Feb 01 13:25:37 2021 +0100 @@ -24,6 +24,8 @@ import UI.PixmapCache import Utilities +from .TemplatesFile import TemplatesFile + class TemplateGroup(QTreeWidgetItem): """ @@ -432,6 +434,8 @@ self.__activating = False self.__dirty = False + self.__templatesFile = TemplatesFile(self) + self.setContextMenuPolicy(Qt.CustomContextMenu) self.customContextMenuRequested.connect(self.__showContextMenu) self.itemActivated.connect(self.__templateItemActivated) @@ -563,7 +567,9 @@ self, self.tr("Import Templates"), "", - self.tr("Templates Files (*.e4c);; All Files (*)")) + self.tr("Templates Files (*.ecj);;" + "XML Templates Files (*.e4c);;" + "All Files (*)")) if fn: self.readTemplates(fn) @@ -577,7 +583,9 @@ self, self.tr("Export Templates"), "", - self.tr("Templates Files (*.e4c);; All Files (*)"), + self.tr("Templates Files (*.ecj);;" + "XML Templates Files (*.e4c);;" + "All Files (*)"), "", E5FileDialog.Options(E5FileDialog.DontConfirmOverwrite)) @@ -587,7 +595,17 @@ ex = selectedFilter.split("(*")[1].split(")")[0] if ex: fn += ex - self.writeTemplates(fn) + if os.path.exists(fn): + ok = E5MessageBox.yesNo( + self, + self.tr("Export Templates"), + self.tr("""<p>The templates file <b>{0}</b> exists""" + """ already. Overwrite it?</p>""").format(fn)) + else: + ok = True + + if ok: + self.writeTemplates(fn) def __reload(self): """ @@ -948,60 +966,78 @@ tmpl.setDescription(description) tmpl.setTemplateText(template) self.__resort() - + def writeTemplates(self, filename=None): """ - Public method to write the templates data to an XML file (.e4c). + Public method to write the templates data to a JSON file (.ecj). - @param filename name of a templates file to read (string) - @return flag indicating success (boolean) + @param filename name of a templates file to write + @type str + @return flag indicating success + @rtype bool """ if filename is None: filename = os.path.join( - Utilities.getConfigDir(), "eric6templates.e4c") - f = QFile(filename) - ok = f.open(QIODevice.WriteOnly) - if not ok: - E5MessageBox.critical( - self, - self.tr("Save templates"), - self.tr( - "<p>The templates file <b>{0}</b> could not be" - " written.</p>") - .format(filename)) - return False + Utilities.getConfigDir(), "eric6templates.ecj") + if filename.endswith(".ecj"): + # new JSON based file + res = self.__templatesFile.writeFile(filename) + else: + # old XML based file + f = QFile(filename) + ok = f.open(QIODevice.WriteOnly) + if not ok: + E5MessageBox.critical( + self, + self.tr("Save Templates"), + self.tr( + "<p>The templates file <b>{0}</b> could not be" + " written.</p>") + .format(filename)) + res = False + else: + from E5XML.TemplatesWriter import TemplatesWriter + TemplatesWriter(f, self).writeXML() + f.close() + res = True - from E5XML.TemplatesWriter import TemplatesWriter - TemplatesWriter(f, self).writeXML() - f.close() - - return True + return res def readTemplates(self, filename=None): """ Public method to read in the templates file (.e4c). - @param filename name of a templates file to read (string) + @param filename name of a templates file to read + @type str """ if filename is None: + # new JSON based file first filename = os.path.join( - Utilities.getConfigDir(), "eric6templates.e4c") + Utilities.getConfigDir(), "eric6templates.ecj") if not os.path.exists(filename): - return + # old XML based file second + filename = os.path.join( + Utilities.getConfigDir(), "eric6templates.e4c") + if not os.path.exists(filename): + return - f = QFile(filename) - if f.open(QIODevice.ReadOnly): - from E5XML.TemplatesReader import TemplatesReader - reader = TemplatesReader(f, viewer=self) - reader.readXML() - f.close() + if filename.endswith(".ecj"): + self.__templatesFile.readFile(filename) else: - E5MessageBox.critical( - self, - self.tr("Read templates"), - self.tr( - "<p>The templates file <b>{0}</b> could not be read.</p>") - .format(filename)) + f = QFile(filename) + if f.open(QIODevice.ReadOnly): + from E5XML.TemplatesReader import TemplatesReader + reader = TemplatesReader(f, viewer=self) + reader.readXML() + f.close() + else: + E5MessageBox.critical( + self, + self.tr("Read Templates"), + self.tr( + "<p>The templates file <b>{0}</b> could not be read." + "</p>") + .format(filename)) def __configure(self): """
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/eric6/Templates/TemplatesFile.py Mon Feb 01 13:25:37 2021 +0100 @@ -0,0 +1,127 @@ +# -*- coding: utf-8 -*- + +# Copyright (c) 2021 Detlev Offenbach <detlev@die-offenbachs.de> +# + +""" +Module implementing a class representing the templates JSON file. +""" + +import json +import time +import typing + +from PyQt5.QtCore import QObject + +from E5Gui import E5MessageBox +from E5Gui.E5OverrideCursor import E5OverridenCursor + + +TemplateViewer = typing.TypeVar("TemplateViewer") + + +class TemplatesFile(QObject): + """ + Class representing the templates JSON file. + """ + def __init__(self, viewer: TemplateViewer, parent: QObject = None): + """ + Constructor + + @param viewer reference to the template viewer object + @type TemplateViewer + @param parent reference to the parent object (defaults to None) + @type QObject (optional) + """ + super(TemplatesFile, self).__init__(parent) + self.__viewer = viewer + + def writeFile(self, filename: str) -> bool: + """ + Public method to write the templates data to a templates JSON file. + + @param filename name of the templates file + @type str + @return flag indicating a successful write + @rtype bool + """ + templatesDict = {} + # step 0: header + templatesDict["header"] = { + "comment": "eric templates file", + "saved": time.strftime('%Y-%m-%d, %H:%M:%S'), + "warning": ( + "This file was generated automatically, do not edit." + ), + } + + # step 1: template groups and templates + templateGroups = [] + for group in self.__viewer.getAllGroups(): + templates = [] + for template in group.getAllEntries(): + templates.append({ + "name": template.getName(), + "description": template.getDescription().strip(), + "text": template.getTemplateText() + }) + templateGroups.append({ + "name": group.getName(), + "language": group.getLanguage(), + "templates": templates, + }) + templatesDict["template_groups"] = templateGroups + + try: + jsonString = json.dumps(templatesDict, indent=2) + with open(filename, "w") as f: + f.write(jsonString) + except (TypeError, EnvironmentError) as err: + with E5OverridenCursor(): + E5MessageBox.critical( + None, + self.tr("Save Templates"), + self.tr( + "<p>The templates file <b>{0}</b> could not be" + " written.</p><p>Reason: {1}</p>" + ).format(filename, str(err)) + ) + return False + + return True + + def readFile(self, filename: str) -> bool: + """ + Public method to read the templates data from a templates JSON file. + + @param filename name of the templates file + @type str + @return flag indicating a successful read + @rtype bool + """ + try: + with open(filename, "r") as f: + jsonString = f.read() + templatesDict = json.loads(jsonString) + except (EnvironmentError, json.JSONDecodeError) as err: + E5MessageBox.critical( + None, + self.tr("Read Templates"), + self.tr( + "<p>The templates file <b>{0}</b> could not be read.</p>" + "<p>Reason: {1}</p>" + ).format(filename, str(err)) + ) + return False + + for templateGroup in templatesDict["template_groups"]: + self.__viewer.addGroup(templateGroup["name"], + templateGroup["language"]) + for template in templateGroup["templates"]: + self.__viewer.addEntry(templateGroup["name"], + template["name"], + template["description"], + template["text"], + quiet=True) + + return True
--- a/eric6/UI/UserInterface.py Mon Feb 01 10:06:11 2021 +0100 +++ b/eric6/UI/UserInterface.py Mon Feb 01 13:25:37 2021 +0100 @@ -51,6 +51,10 @@ import UI.PixmapCache +from Sessions.SessionFile import SessionFile + +from Tasks.TasksFile import TasksFile + from E5Network.E5NetworkProxyFactory import ( E5NetworkProxyFactory, proxyAuthenticationRequired ) @@ -610,6 +614,10 @@ self.__inVersionCheck = False self.__versionCheckProgress = None + # create the various JSON file interfaces + self.__sessionFile = SessionFile(True) + self.__tasksFile = TasksFile(True) + # Initialize the actions, menus, toolbars and statusbar splash.showMessage(self.tr("Initializing Actions...")) self.__initActions() @@ -6288,7 +6296,8 @@ None, self.tr("Export Keyboard Shortcuts"), "", - self.tr("Keyboard shortcut file (*.e4k)"), + self.tr("Keyboard Shortcuts File (*.ekj);;" + "XML Keyboard Shortcuts File (*.e4k)"), "", E5FileDialog.Options(E5FileDialog.DontConfirmOverwrite)) @@ -6301,8 +6310,18 @@ if ex: fn += ex - from Preferences import Shortcuts - Shortcuts.exportShortcuts(fn) + if os.path.exists(fn): + ok = E5MessageBox.yesNo( + self, + self.tr("Export Keyboard Shortcuts"), + self.tr("""<p>The keyboard shortcuts file <b>{0}</b> exists""" + """ already. Overwrite it?</p>""").format(fn)) + else: + ok = True + + if ok: + from Preferences import Shortcuts + Shortcuts.exportShortcuts(fn) def __importShortcuts(self): """ @@ -6312,7 +6331,8 @@ None, self.tr("Import Keyboard Shortcuts"), "", - self.tr("Keyboard shortcut file (*.e4k)")) + self.tr("Keyboard Shortcuts File (*.ekj);;" + "XML Keyboard shortcut file (*.e4k)")) if fn: from Preferences import Shortcuts @@ -6472,51 +6492,41 @@ def __writeTasks(self): """ - Private slot to write the tasks data to an XML file (.e6t). - """ - fn = os.path.join(Utilities.getConfigDir(), "eric6tasks.e6t") - f = QFile(fn) - ok = f.open(QIODevice.WriteOnly) - if not ok: - E5MessageBox.critical( - self, - self.tr("Save tasks"), - self.tr( - "<p>The tasks file <b>{0}</b> could not be written.</p>") - .format(fn)) - return - - from E5XML.TasksWriter import TasksWriter - TasksWriter(f, False).writeXML() - f.close() - + Private slot to write the tasks data to a JSON file (.etj). + """ + fn = os.path.join(Utilities.getConfigDir(), "eric6tasks.etj") + self.__tasksFile.writeFile(fn) + def __readTasks(self): """ - Private slot to read in the tasks file (.e6t). - """ - fn = os.path.join(Utilities.getConfigDir(), "eric6tasks.e6t") - if not os.path.exists(fn): - # try again with the old extension - fn = os.path.join(Utilities.getConfigDir(), "eric6tasks.e4t") - if not os.path.exists(fn): - return - f = QFile(fn) - if f.open(QIODevice.ReadOnly): - from E5XML.TasksReader import TasksReader - reader = TasksReader(f, viewer=self.taskViewer) - reader.readXML() - f.close() + Private slot to read in the tasks file (.etj or .e6t). + """ + fn = os.path.join(Utilities.getConfigDir(), "eric6tasks.etj") + if os.path.exists(fn): + # try new style JSON file first + self.__tasksFile.readFile(fn) else: - E5MessageBox.critical( - self, - self.tr("Read tasks"), - self.tr( - "<p>The tasks file <b>{0}</b> could not be read.</p>") - .format(fn)) + # try old style XML file second + fn = os.path.join(Utilities.getConfigDir(), "eric6tasks.e6t") + if os.path.exists(fn): + f = QFile(fn) + if f.open(QIODevice.ReadOnly): + from E5XML.TasksReader import TasksReader + reader = TasksReader(f, viewer=self.taskViewer) + reader.readXML() + f.close() + else: + E5MessageBox.critical( + self, + self.tr("Read Tasks"), + self.tr( + "<p>The tasks file <b>{0}</b> could not be" + " read.</p>") + .format(fn)) def __writeSession(self, filename="", crashSession=False): """ - Private slot to write the session data to an XML file (.e5s). + Private slot to write the session data to a JSON file (.esj). @param filename name of a session file to write @type str @@ -6525,33 +6535,38 @@ @return flag indicating success @rtype bool """ - res = False if filename: fn = filename elif crashSession: fn = os.path.join(Utilities.getConfigDir(), - "eric6_crash_session.e5s") + "eric6_crash_session.esj") else: fn = os.path.join(Utilities.getConfigDir(), - "eric6session.e5s") - f = QFile(fn) - if f.open(QIODevice.WriteOnly): - from E5XML.SessionWriter import SessionWriter - SessionWriter(f, None).writeXML() - f.close() - res = True + "eric6session.esj") + + if fn.endswith(".esj"): + res = self.__sessionFile.writeFile(fn) else: - E5MessageBox.critical( - self, - self.tr("Save session"), - self.tr("<p>The session file <b>{0}</b> could not be" - " written.</p>") - .format(fn)) + f = QFile(fn) + if f.open(QIODevice.WriteOnly): + from E5XML.SessionWriter import SessionWriter + SessionWriter(f, None).writeXML() + f.close() + res = True + else: + E5MessageBox.critical( + self, + self.tr("Save Session"), + self.tr("<p>The session file <b>{0}</b> could not be" + " written.</p>") + .format(fn)) + res = False + return res - + def __readSession(self, filename=""): """ - Private slot to read in the session file (.e5s or .e4s). + Private slot to read in the session file (.esj or .e5s). @param filename name of a session file to read @type str @@ -6562,14 +6577,14 @@ fn = filename else: fn = os.path.join(Utilities.getConfigDir(), - "eric6session.e5s") + "eric6session.esj") if not os.path.exists(fn): fn = os.path.join(Utilities.getConfigDir(), - "eric6session.e4s") + "eric6session.e5s") if not os.path.exists(fn): E5MessageBox.critical( self, - self.tr("Read session"), + self.tr("Read Session"), self.tr("<p>The session file <b>{0}</b> could not" " be read.</p>") .format(fn)) @@ -6577,22 +6592,29 @@ res = False if fn: - f = QFile(fn) - if f.open(QIODevice.ReadOnly): - from E5XML.SessionReader import SessionReader + if fn.endswith(".esj"): + # new JSON based format self.__readingSession = True - reader = SessionReader(f, True) - reader.readXML() + res = self.__sessionFile.readFile(fn) self.__readingSession = False - f.close() - res = True else: - E5MessageBox.critical( - self, - self.tr("Read session"), - self.tr("<p>The session file <b>{0}</b> could not be" - " read.</p>") - .format(fn)) + # old XML based format + f = QFile(fn) + if f.open(QIODevice.ReadOnly): + from E5XML.SessionReader import SessionReader + self.__readingSession = True + reader = SessionReader(f, True) + reader.readXML() + self.__readingSession = False + f.close() + res = True + else: + E5MessageBox.critical( + self, + self.tr("Read session"), + self.tr("<p>The session file <b>{0}</b> could not be" + " read.</p>") + .format(fn)) # Write a crash session after a session was read. self.__writeCrashSession() @@ -6605,9 +6627,10 @@ """ sessionFile, selectedFilter = E5FileDialog.getSaveFileNameAndFilter( self, - self.tr("Save session"), + self.tr("Save Session"), Utilities.getHomeDir(), - self.tr("eric Session Files (*.e5s)"), + self.tr("eric Session Files (*.esj);;" + "eric XML Session Files (*.e5s)"), "") if not sessionFile: @@ -6629,7 +6652,8 @@ self, self.tr("Load session"), Utilities.getHomeDir(), - self.tr("eric Session Files (*.e5s)")) + self.tr("eric Session Files (*.esj);;" + "eric XML Session Files (*.e5s)")) if not sessionFile: return @@ -6640,14 +6664,15 @@ """ Private slot to delete the crash session file. """ - fn = os.path.join(Utilities.getConfigDir(), - "eric6_crash_session.e5s") - if os.path.exists(fn): - try: - os.remove(fn) - except OSError: - # ignore it silently - pass + for ext in (".esj", ".e5s"): + fn = os.path.join(Utilities.getConfigDir(), + f"eric6_crash_session{ext}") + if os.path.exists(fn): + try: + os.remove(fn) + except OSError: + # ignore it silently + pass def __writeCrashSession(self): """ @@ -6674,7 +6699,7 @@ Preferences.getUI("OpenCrashSessionOnStartup") ): fn = os.path.join(Utilities.getConfigDir(), - "eric6_crash_session.e5s") + "eric6_crash_session.esj") if os.path.exists(fn): yes = E5MessageBox.yesNo( self,
--- a/eric6/WebBrowser/WebBrowserWindow.py Mon Feb 01 10:06:11 2021 +0100 +++ b/eric6/WebBrowser/WebBrowserWindow.py Mon Feb 01 13:25:37 2021 +0100 @@ -5019,7 +5019,8 @@ None, self.tr("Export Keyboard Shortcuts"), "", - self.tr("Keyboard shortcut file (*.e4k)"), + self.tr("Keyboard Shortcuts File (*.ekj);;" + "XML Keyboard Shortcuts File (*.e4k)"), "", E5FileDialog.Options(E5FileDialog.DontConfirmOverwrite)) @@ -5032,8 +5033,18 @@ if ex: fn += ex - from Preferences import Shortcuts - Shortcuts.exportShortcuts(fn, helpViewer=self) + if os.path.exists(fn): + ok = E5MessageBox.yesNo( + self, + self.tr("Export Keyboard Shortcuts"), + self.tr("""<p>The keyboard shortcuts file <b>{0}</b> exists""" + """ already. Overwrite it?</p>""").format(fn)) + else: + ok = True + + if ok: + from Preferences import Shortcuts + Shortcuts.exportShortcuts(fn, helpViewer=self) def __importShortcuts(self): """ @@ -5043,7 +5054,8 @@ None, self.tr("Import Keyboard Shortcuts"), "", - self.tr("Keyboard shortcut file (*.e4k)")) + self.tr("Keyboard Shortcuts File (*.ekj);;" + "XML Keyboard shortcut file (*.e4k)")) if fn: from Preferences import Shortcuts
--- a/others/default.e4k Mon Feb 01 10:06:11 2021 +0100 +++ b/others/default.e4k Mon Feb 01 13:25:37 2021 +0100 @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE Shortcuts SYSTEM "Shortcuts-3.6.dtd"> -<!-- Eric6 keyboard shortcuts --> -<!-- Saved: 2012-01-01, 15:38:59--> +<!-- eric keyboard shortcuts --> +<!-- Saved: 2021-01-28, 16:15:01--> <!-- Author: Detlev Offenbach <detlev@die-offenbachs.de> --> <Shortcuts version="3.6"> <Shortcut category="Project"> @@ -50,6 +50,11 @@ <AltAccel></AltAccel> </Shortcut> <Shortcut category="Project"> + <Name>project_search_project_file</Name> + <Accel>Ctrl+Alt+P</Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Project"> <Name>project_properties</Name> <Accel></Accel> <AltAccel></AltAccel> @@ -60,12 +65,12 @@ <AltAccel></AltAccel> </Shortcut> <Shortcut category="Project"> - <Name>project_filetype_associatios</Name> + <Name>project_filetype_associations</Name> <Accel></Accel> <AltAccel></AltAccel> </Shortcut> <Shortcut category="Project"> - <Name>project_lexer_associatios</Name> + <Name>project_lexer_associations</Name> <Accel></Accel> <AltAccel></AltAccel> </Shortcut> @@ -130,6 +135,11 @@ <AltAccel></AltAccel> </Shortcut> <Shortcut category="Project"> + <Name>project_load_diagram</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Project"> <Name>project_plugin_pkglist</Name> <Accel></Accel> <AltAccel></AltAccel> @@ -145,7 +155,17 @@ <AltAccel></AltAccel> </Shortcut> <Shortcut category="Project"> - <Name>packagers_cxfreeze</Name> + <Name>project_make_execute</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Project"> + <Name>project_make_test</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Project"> + <Name>project_check_pep8</Name> <Accel></Accel> <AltAccel></AltAccel> </Shortcut> @@ -160,7 +180,17 @@ <AltAccel></AltAccel> </Shortcut> <Shortcut category="Project"> - <Name>project_check_pep8</Name> + <Name>project_show_radon_raw</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Project"> + <Name>project_show_radon_mi</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Project"> + <Name>project_show_radon_cc</Name> <Accel></Accel> <AltAccel></AltAccel> </Shortcut> @@ -170,7 +200,7 @@ <AltAccel></AltAccel> </Shortcut> <Shortcut category="Project"> - <Name>project_check_indentations</Name> + <Name>project_check_vulture</Name> <Accel></Accel> <AltAccel></AltAccel> </Shortcut> @@ -180,6 +210,21 @@ <AltAccel></AltAccel> </Shortcut> <Shortcut category="General"> + <Name>restart_eric</Name> + <Accel>Ctrl+Shift+Q</Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="General"> + <Name>save_session_to_file</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="General"> + <Name>load_session_from_file</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="General"> <Name>new_window</Name> <Accel>Ctrl+Shift+N</Accel> <AltAccel></AltAccel> @@ -195,93 +240,48 @@ <AltAccel></AltAccel> </Shortcut> <Shortcut category="General"> - <Name>project_viewer</Name> - <Accel></Accel> - <AltAccel></AltAccel> - </Shortcut> - <Shortcut category="General"> <Name>project_viewer_activate</Name> <Accel>Alt+Shift+P</Accel> <AltAccel></AltAccel> </Shortcut> <Shortcut category="General"> - <Name>multi_project_viewer</Name> - <Accel></Accel> - <AltAccel></AltAccel> - </Shortcut> - <Shortcut category="General"> <Name>multi_project_viewer_activate</Name> <Accel>Alt+Shift+M</Accel> <AltAccel></AltAccel> </Shortcut> <Shortcut category="General"> - <Name>debug_viewer</Name> - <Accel></Accel> - <AltAccel></AltAccel> - </Shortcut> - <Shortcut category="General"> <Name>debug_viewer_activate</Name> <Accel>Alt+Shift+D</Accel> <AltAccel></AltAccel> </Shortcut> <Shortcut category="General"> - <Name>interpreter_shell</Name> - <Accel></Accel> - <AltAccel></AltAccel> - </Shortcut> - <Shortcut category="General"> - <Name>interprter_shell_activate</Name> + <Name>interpreter_shell_activate</Name> <Accel>Alt+Shift+S</Accel> <AltAccel></AltAccel> </Shortcut> <Shortcut category="General"> - <Name>terminal</Name> - <Accel></Accel> - <AltAccel></AltAccel> - </Shortcut> - <Shortcut category="General"> - <Name>terminal_activate</Name> - <Accel>Alt+Shift+R</Accel> - <AltAccel></AltAccel> - </Shortcut> - <Shortcut category="General"> - <Name>file_browser</Name> - <Accel></Accel> - <AltAccel></AltAccel> - </Shortcut> - <Shortcut category="General"> <Name>file_browser_activate</Name> <Accel>Alt+Shift+F</Accel> <AltAccel></AltAccel> </Shortcut> <Shortcut category="General"> - <Name>log_viewer</Name> - <Accel></Accel> - <AltAccel></AltAccel> - </Shortcut> - <Shortcut category="General"> <Name>log_viewer_activate</Name> <Accel>Alt+Shift+G</Accel> <AltAccel></AltAccel> </Shortcut> <Shortcut category="General"> - <Name>task_viewer</Name> - <Accel></Accel> - <AltAccel></AltAccel> - </Shortcut> - <Shortcut category="General"> <Name>task_viewer_activate</Name> <Accel>Alt+Shift+T</Accel> <AltAccel></AltAccel> </Shortcut> <Shortcut category="General"> - <Name>template_viewer</Name> - <Accel></Accel> + <Name>template_viewer_activate</Name> + <Accel>Alt+Shift+A</Accel> <AltAccel></AltAccel> </Shortcut> <Shortcut category="General"> - <Name>template_viewer_activate</Name> - <Accel>Alt+Shift+A</Accel> + <Name>vertical_toolbox</Name> + <Accel></Accel> <AltAccel></AltAccel> </Shortcut> <Shortcut category="General"> @@ -300,12 +300,12 @@ <AltAccel></AltAccel> </Shortcut> <Shortcut category="General"> - <Name>bottom_sidebar</Name> + <Name>right_sidebar</Name> <Accel></Accel> <AltAccel></AltAccel> </Shortcut> <Shortcut category="General"> - <Name>cooperation_viewer</Name> + <Name>bottom_sidebar</Name> <Accel></Accel> <AltAccel></AltAccel> </Shortcut> @@ -315,8 +315,8 @@ <AltAccel></AltAccel> </Shortcut> <Shortcut category="General"> - <Name>symbols_viewer</Name> - <Accel></Accel> + <Name>irc_widget_activate</Name> + <Accel>Ctrl+Alt+Shift+I</Accel> <AltAccel></AltAccel> </Shortcut> <Shortcut category="General"> @@ -325,13 +325,28 @@ <AltAccel></AltAccel> </Shortcut> <Shortcut category="General"> - <Name>numbers_viewer</Name> - <Accel></Accel> + <Name>numbers_viewer_activate</Name> + <Accel>Alt+Shift+B</Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="General"> + <Name>code_documentation_viewer_activate</Name> + <Accel>Ctrl+Alt+Shift+D</Accel> <AltAccel></AltAccel> </Shortcut> <Shortcut category="General"> - <Name>numbers_viewer_activate</Name> - <Accel>Alt+Shift+B</Accel> + <Name>pip_widget_activate</Name> + <Accel>Ctrl+Alt+Shift+P</Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="General"> + <Name>conda_widget_activate</Name> + <Accel>Ctrl+Alt+Shift+C</Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="General"> + <Name>micropython_widget_activate</Name> + <Accel>Ctrl+Alt+Shift+M</Accel> <AltAccel></AltAccel> </Shortcut> <Shortcut category="General"> @@ -345,12 +360,22 @@ <AltAccel></AltAccel> </Shortcut> <Shortcut category="General"> - <Name>qt4_documentation</Name> + <Name>qt5_documentation</Name> <Accel></Accel> <AltAccel></AltAccel> </Shortcut> <Shortcut category="General"> - <Name>pyqt4_documentation</Name> + <Name>qt6_documentation</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="General"> + <Name>pyqt5_documentation</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="General"> + <Name>pyqt6_documentation</Name> <Accel></Accel> <AltAccel></AltAccel> </Shortcut> @@ -360,17 +385,17 @@ <AltAccel></AltAccel> </Shortcut> <Shortcut category="General"> - <Name>python2_documentation</Name> - <Accel></Accel> - <AltAccel></AltAccel> - </Shortcut> - <Shortcut category="General"> <Name>eric_documentation</Name> <Accel></Accel> <AltAccel></AltAccel> </Shortcut> <Shortcut category="General"> - <Name>pyside_documentation</Name> + <Name>pyside2_documentation</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="General"> + <Name>pyside6_documentation</Name> <Accel></Accel> <AltAccel></AltAccel> </Shortcut> @@ -390,6 +415,16 @@ <AltAccel></AltAccel> </Shortcut> <Shortcut category="General"> + <Name>show_error_log</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="General"> + <Name>show_install_info</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="General"> <Name>report_bug</Name> <Accel></Accel> <AltAccel></AltAccel> @@ -465,6 +500,11 @@ <AltAccel></AltAccel> </Shortcut> <Shortcut category="General"> + <Name>hex_editor</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="General"> <Name>web_browser</Name> <Accel></Accel> <AltAccel></AltAccel> @@ -475,6 +515,11 @@ <AltAccel></AltAccel> </Shortcut> <Shortcut category="General"> + <Name>snapshot</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="General"> <Name>preferences</Name> <Accel></Accel> <AltAccel></AltAccel> @@ -525,6 +570,21 @@ <AltAccel></AltAccel> </Shortcut> <Shortcut category="General"> + <Name>manage_ssl_certificates</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="General"> + <Name>manage_message_filters</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="General"> + <Name>clear_private_data</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="General"> <Name>viewmanager_activate</Name> <Accel>Alt+Shift+E</Accel> <AltAccel></AltAccel> @@ -565,6 +625,16 @@ <AltAccel></AltAccel> </Shortcut> <Shortcut category="General"> + <Name>virtualenv_manager</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="General"> + <Name>virtualenv_configurator</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="General"> <Name>about_eric</Name> <Accel></Accel> <AltAccel></AltAccel> @@ -574,12 +644,37 @@ <Accel></Accel> <AltAccel></AltAccel> </Shortcut> + <Shortcut category="General"> + <Name>time_tracker_activate</Name> + <Accel>Alt+Shift+I</Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="General"> + <Name>translator_activate</Name> + <Accel>Alt+Shift+R</Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Wizards"> + <Name>wizards_datauriencoder</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Wizards"> + <Name>wizards_dotdesktop</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> <Shortcut category="Wizards"> <Name>wizards_e5messagebox</Name> <Accel></Accel> <AltAccel></AltAccel> </Shortcut> <Shortcut category="Wizards"> + <Name>wizards_eric_plugin</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Wizards"> <Name>wizards_python_re</Name> <Accel></Accel> <AltAccel></AltAccel> @@ -595,6 +690,11 @@ <AltAccel></AltAccel> </Shortcut> <Shortcut category="Wizards"> + <Name>wizards_e5filedialog</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Wizards"> <Name>wizards_qfontdialog</Name> <Accel></Accel> <AltAccel></AltAccel> @@ -614,6 +714,16 @@ <Accel></Accel> <AltAccel></AltAccel> </Shortcut> + <Shortcut category="Wizards"> + <Name>wizards_qregularexpression</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Wizards"> + <Name>wizards_setup_py</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> <Shortcut category="Debug"> <Name>dbg_run_script</Name> <Accel>F2</Accel> @@ -675,6 +785,16 @@ <AltAccel></AltAccel> </Shortcut> <Shortcut category="Debug"> + <Name>dbg_continue_until</Name> + <Accel>Ctrl+F6</Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Debug"> + <Name>dbg_jump_to_cursor</Name> + <Accel>F12</Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Debug"> <Name>dbg_single_step</Name> <Accel>F7</Accel> <AltAccel></AltAccel> @@ -695,16 +815,6 @@ <AltAccel></AltAccel> </Shortcut> <Shortcut category="Debug"> - <Name>dbg_evaluate</Name> - <Accel></Accel> - <AltAccel></AltAccel> - </Shortcut> - <Shortcut category="Debug"> - <Name>dbg_execute</Name> - <Accel></Accel> - <AltAccel></AltAccel> - </Shortcut> - <Shortcut category="Debug"> <Name>dbg_variables_filter</Name> <Accel></Accel> <AltAccel></AltAccel> @@ -741,7 +851,7 @@ </Shortcut> <Shortcut category="Debug"> <Name>dbg_clear_breakpoint</Name> - <Accel>Ctrl+Shift+C</Accel> + <Accel></Accel> <AltAccel></AltAccel> </Shortcut> <Shortcut category="Edit"> @@ -762,7 +872,7 @@ <Shortcut category="Edit"> <Name>vm_edit_cut</Name> <Accel>Ctrl+X</Accel> - <AltAccel>Shift+Del</AltAccel> + <AltAccel></AltAccel> </Shortcut> <Shortcut category="Edit"> <Name>vm_edit_copy</Name> @@ -796,7 +906,7 @@ </Shortcut> <Shortcut category="Edit"> <Name>vm_edit_smart_indent</Name> - <Accel>Ctrl+Alt+I</Accel> + <Accel></Accel> <AltAccel></AltAccel> </Shortcut> <Shortcut category="Edit"> @@ -806,7 +916,7 @@ </Shortcut> <Shortcut category="Edit"> <Name>vm_edit_uncomment</Name> - <Accel>Ctrl+Alt+M</Accel> + <Accel></Accel> <AltAccel></AltAccel> </Shortcut> <Shortcut category="Edit"> @@ -875,6 +985,21 @@ <AltAccel></AltAccel> </Shortcut> <Shortcut category="Edit"> + <Name>vm_edit_codeinfo</Name> + <Accel>Ctrl+Alt+I</Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Edit"> + <Name>vm_edit_sort</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Edit"> + <Name>vm_edit_generate_docstring</Name> + <Accel>Ctrl+Alt+D</Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Edit"> <Name>vm_edit_move_left_char</Name> <Accel>Left</Accel> <AltAccel></AltAccel> @@ -1120,6 +1245,11 @@ <AltAccel></AltAccel> </Shortcut> <Shortcut category="Edit"> + <Name>vm_edit_reverse selected_lines</Name> + <Accel>Meta+Alt+R</Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Edit"> <Name>vm_edit_cut_current_line</Name> <Accel>Alt+Shift+L</Accel> <AltAccel></AltAccel> @@ -1135,16 +1265,6 @@ <AltAccel></AltAccel> </Shortcut> <Shortcut category="Edit"> - <Name>vm_edit_convert_selection_lower</Name> - <Accel>Alt+Shift+U</Accel> - <AltAccel></AltAccel> - </Shortcut> - <Shortcut category="Edit"> - <Name>vm_edit_convert_selection_upper</Name> - <Accel>Ctrl+Shift+U</Accel> - <AltAccel></AltAccel> - </Shortcut> - <Shortcut category="Edit"> <Name>vm_edit_move_end_displayed_line</Name> <Accel>Alt+End</Accel> <AltAccel></AltAccel> @@ -1329,6 +1449,16 @@ <Accel></Accel> <AltAccel></AltAccel> </Shortcut> + <Shortcut category="Edit"> + <Name>vm_edit_convert_selection_lower</Name> + <Accel>Alt+Shift+U</Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Edit"> + <Name>vm_edit_convert_selection_upper</Name> + <Accel>Ctrl+Shift+U</Accel> + <AltAccel></AltAccel> + </Shortcut> <Shortcut category="File"> <Name>vm_file_new</Name> <Accel>Ctrl+N</Accel> @@ -1360,6 +1490,11 @@ <AltAccel></AltAccel> </Shortcut> <Shortcut category="File"> + <Name>vm_file_save_copy</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="File"> <Name>vm_file_save_all</Name> <Accel></Accel> <AltAccel></AltAccel> @@ -1400,11 +1535,36 @@ <AltAccel></AltAccel> </Shortcut> <Shortcut category="Search"> + <Name>vm_search_word_next</Name> + <Accel>Ctrl+.</Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Search"> + <Name>vm_search_word_previous</Name> + <Accel>Ctrl+,</Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Search"> <Name>vm_search_replace</Name> <Accel>Ctrl+R</Accel> <AltAccel></AltAccel> </Shortcut> <Shortcut category="Search"> + <Name>vm_replace_search</Name> + <Accel>Meta+R</Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Search"> + <Name>vm_replace_occurrence</Name> + <Accel>Meta+Ctrl+R</Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Search"> + <Name>vm_replace_all</Name> + <Accel>Meta+Shift+R</Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Search"> <Name>vm_quicksearch</Name> <Accel>Ctrl+Shift+K</Accel> <AltAccel></AltAccel> @@ -1454,6 +1614,16 @@ <Accel>Ctrl+Shift+R</Accel> <AltAccel></AltAccel> </Shortcut> + <Shortcut category="Search"> + <Name>vm_search_in_open_files</Name> + <Accel>Ctrl+Alt+Shift+F</Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Search"> + <Name>vm_replace_in_open_files</Name> + <Accel>Ctrl+Alt+Shift+R</Accel> + <AltAccel></AltAccel> + </Shortcut> <Shortcut category="View"> <Name>vm_view_zoom_in</Name> <Accel>Ctrl++</Accel> @@ -1490,11 +1660,26 @@ <AltAccel></AltAccel> </Shortcut> <Shortcut category="View"> + <Name>vm_view_clear_all_folds</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="View"> <Name>vm_view_unhighlight</Name> <Accel></Accel> <AltAccel></AltAccel> </Shortcut> <Shortcut category="View"> + <Name>vm_view_new_document_view</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="View"> + <Name>vm_view_new_document_split_view</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="View"> <Name>vm_view_split_view</Name> <Accel></Accel> <AltAccel></AltAccel> @@ -1516,7 +1701,7 @@ </Shortcut> <Shortcut category="View"> <Name>vm_previous_split</Name> - <Accel>Ctrl+Alt+P</Accel> + <Accel></Accel> <AltAccel></AltAccel> </Shortcut> <Shortcut category="View"> @@ -1524,6 +1709,16 @@ <Accel></Accel> <AltAccel></AltAccel> </Shortcut> + <Shortcut category="View"> + <Name>vm_python_ast_viewer</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="View"> + <Name>vm_python_dis_viewer</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> <Shortcut category="Macro"> <Name>vm_macro_start_recording</Name> <Accel></Accel> @@ -1571,7 +1766,7 @@ </Shortcut> <Shortcut category="Bookmarks"> <Name>vm_bookmark_clear</Name> - <Accel>Ctrl+Alt+C</Accel> + <Accel></Accel> <AltAccel></AltAccel> </Shortcut> <Shortcut category="Bookmarks"> @@ -1619,6 +1814,16 @@ <Accel></Accel> <AltAccel></AltAccel> </Shortcut> + <Shortcut category="Bookmarks"> + <Name>vm_change_next</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Bookmarks"> + <Name>vm_change_previous</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> <Shortcut category="Spelling"> <Name>vm_spelling_spellcheck</Name> <Accel>Shift+F7</Accel> @@ -1629,151 +1834,6 @@ <Accel></Accel> <AltAccel></AltAccel> </Shortcut> - <Shortcut category="Subversion"> - <Name>subversion_new</Name> - <Accel></Accel> - <AltAccel></AltAccel> - </Shortcut> - <Shortcut category="Subversion"> - <Name>subversion_update</Name> - <Accel>Meta+Alt+U</Accel> - <AltAccel></AltAccel> - </Shortcut> - <Shortcut category="Subversion"> - <Name>subversion_commit</Name> - <Accel>Meta+Alt+O</Accel> - <AltAccel></AltAccel> - </Shortcut> - <Shortcut category="Subversion"> - <Name>subversion_add</Name> - <Accel></Accel> - <AltAccel></AltAccel> - </Shortcut> - <Shortcut category="Subversion"> - <Name>subversion_remove</Name> - <Accel></Accel> - <AltAccel></AltAccel> - </Shortcut> - <Shortcut category="Subversion"> - <Name>subversion_log</Name> - <Accel></Accel> - <AltAccel></AltAccel> - </Shortcut> - <Shortcut category="Subversion"> - <Name>subversion_log_browser</Name> - <Accel>Meta+Alt+G</Accel> - <AltAccel></AltAccel> - </Shortcut> - <Shortcut category="Subversion"> - <Name>subversion_diff</Name> - <Accel>Meta+Alt+D</Accel> - <AltAccel></AltAccel> - </Shortcut> - <Shortcut category="Subversion"> - <Name>subversion_extendeddiff</Name> - <Accel></Accel> - <AltAccel></AltAccel> - </Shortcut> - <Shortcut category="Subversion"> - <Name>subversion_urldiff</Name> - <Accel></Accel> - <AltAccel></AltAccel> - </Shortcut> - <Shortcut category="Subversion"> - <Name>subversion_status</Name> - <Accel>Meta+Alt+S</Accel> - <AltAccel></AltAccel> - </Shortcut> - <Shortcut category="Subversion"> - <Name>subversion_tag</Name> - <Accel></Accel> - <AltAccel></AltAccel> - </Shortcut> - <Shortcut category="Subversion"> - <Name>subversion_export</Name> - <Accel></Accel> - <AltAccel></AltAccel> - </Shortcut> - <Shortcut category="Subversion"> - <Name>subversion_options</Name> - <Accel></Accel> - <AltAccel></AltAccel> - </Shortcut> - <Shortcut category="Subversion"> - <Name>subversion_revert</Name> - <Accel></Accel> - <AltAccel></AltAccel> - </Shortcut> - <Shortcut category="Subversion"> - <Name>subversion_merge</Name> - <Accel>Meta+Alt+M</Accel> - <AltAccel></AltAccel> - </Shortcut> - <Shortcut category="Subversion"> - <Name>subversion_switch</Name> - <Accel></Accel> - <AltAccel></AltAccel> - </Shortcut> - <Shortcut category="Subversion"> - <Name>subversion_resolve</Name> - <Accel></Accel> - <AltAccel></AltAccel> - </Shortcut> - <Shortcut category="Subversion"> - <Name>subversion_cleanup</Name> - <Accel></Accel> - <AltAccel></AltAccel> - </Shortcut> - <Shortcut category="Subversion"> - <Name>subversion_command</Name> - <Accel></Accel> - <AltAccel></AltAccel> - </Shortcut> - <Shortcut category="Subversion"> - <Name>subversion_list_tags</Name> - <Accel></Accel> - <AltAccel></AltAccel> - </Shortcut> - <Shortcut category="Subversion"> - <Name>subversion_list_branches</Name> - <Accel></Accel> - <AltAccel></AltAccel> - </Shortcut> - <Shortcut category="Subversion"> - <Name>subversion_contents</Name> - <Accel></Accel> - <AltAccel></AltAccel> - </Shortcut> - <Shortcut category="Subversion"> - <Name>subversion_property_set</Name> - <Accel></Accel> - <AltAccel></AltAccel> - </Shortcut> - <Shortcut category="Subversion"> - <Name>subversion_property_list</Name> - <Accel></Accel> - <AltAccel></AltAccel> - </Shortcut> - <Shortcut category="Subversion"> - <Name>subversion_property_delete</Name> - <Accel></Accel> - <AltAccel></AltAccel> - </Shortcut> - <Shortcut category="Subversion"> - <Name>subversion_relocate</Name> - <Accel></Accel> - <AltAccel></AltAccel> - </Shortcut> - <Shortcut category="Subversion"> - <Name>subversion_repo_browser</Name> - <Accel></Accel> - <AltAccel></AltAccel> - </Shortcut> - <Shortcut category="Subversion"> - <Name>subversion_configure</Name> - <Accel></Accel> - <AltAccel></AltAccel> - </Shortcut> <Shortcut category="RefactoringRope"> <Name>refactoring_rename</Name> <Accel></Accel> @@ -1895,32 +1955,12 @@ <AltAccel></AltAccel> </Shortcut> <Shortcut category="RefactoringRope"> - <Name>refactoring_undo</Name> - <Accel></Accel> - <AltAccel></AltAccel> - </Shortcut> - <Shortcut category="RefactoringRope"> - <Name>refactoring_redo</Name> + <Name>refactoring_show_project_history</Name> <Accel></Accel> <AltAccel></AltAccel> </Shortcut> <Shortcut category="RefactoringRope"> - <Name>refactoring_show_project_undo_history</Name> - <Accel></Accel> - <AltAccel></AltAccel> - </Shortcut> - <Shortcut category="RefactoringRope"> - <Name>refactoring_show_project_redo_history</Name> - <Accel></Accel> - <AltAccel></AltAccel> - </Shortcut> - <Shortcut category="RefactoringRope"> - <Name>refactoring_show_file_undo_history</Name> - <Accel></Accel> - <AltAccel></AltAccel> - </Shortcut> - <Shortcut category="RefactoringRope"> - <Name>refactoring_show_file_redo_history</Name> + <Name>refactoring_show_file_history</Name> <Accel></Accel> <AltAccel></AltAccel> </Shortcut> @@ -1964,153 +2004,433 @@ <Accel></Accel> <AltAccel></AltAccel> </Shortcut> - <Shortcut category="PySvn"> - <Name>subversion_new</Name> - <Accel></Accel> - <AltAccel></AltAccel> - </Shortcut> - <Shortcut category="PySvn"> - <Name>subversion_update</Name> - <Accel>Meta+Alt+U</Accel> - <AltAccel></AltAccel> - </Shortcut> - <Shortcut category="PySvn"> - <Name>subversion_commit</Name> - <Accel>Meta+Alt+O</Accel> - <AltAccel></AltAccel> - </Shortcut> - <Shortcut category="PySvn"> - <Name>subversion_add</Name> - <Accel></Accel> - <AltAccel></AltAccel> - </Shortcut> - <Shortcut category="PySvn"> - <Name>subversion_remove</Name> - <Accel></Accel> - <AltAccel></AltAccel> - </Shortcut> - <Shortcut category="PySvn"> - <Name>subversion_log</Name> - <Accel></Accel> - <AltAccel></AltAccel> - </Shortcut> - <Shortcut category="PySvn"> - <Name>subversion_log_browser</Name> - <Accel>Meta+Alt+G</Accel> - <AltAccel></AltAccel> - </Shortcut> - <Shortcut category="PySvn"> - <Name>subversion_diff</Name> - <Accel>Meta+Alt+D</Accel> - <AltAccel></AltAccel> - </Shortcut> - <Shortcut category="PySvn"> - <Name>subversion_extendeddiff</Name> - <Accel></Accel> - <AltAccel></AltAccel> - </Shortcut> - <Shortcut category="PySvn"> - <Name>subversion_urldiff</Name> - <Accel></Accel> - <AltAccel></AltAccel> - </Shortcut> - <Shortcut category="PySvn"> - <Name>subversion_status</Name> - <Accel>Meta+Alt+S</Accel> - <AltAccel></AltAccel> - </Shortcut> - <Shortcut category="PySvn"> - <Name>subversion_repoinfo</Name> - <Accel></Accel> - <AltAccel></AltAccel> - </Shortcut> - <Shortcut category="PySvn"> - <Name>subversion_tag</Name> - <Accel></Accel> - <AltAccel></AltAccel> - </Shortcut> - <Shortcut category="PySvn"> - <Name>subversion_export</Name> - <Accel></Accel> - <AltAccel></AltAccel> - </Shortcut> - <Shortcut category="PySvn"> - <Name>subversion_options</Name> - <Accel></Accel> - <AltAccel></AltAccel> - </Shortcut> - <Shortcut category="PySvn"> - <Name>subversion_revert</Name> - <Accel></Accel> - <AltAccel></AltAccel> - </Shortcut> - <Shortcut category="PySvn"> - <Name>subversion_merge</Name> - <Accel>Meta+Alt+M</Accel> - <AltAccel></AltAccel> - </Shortcut> - <Shortcut category="PySvn"> - <Name>subversion_switch</Name> - <Accel></Accel> - <AltAccel></AltAccel> - </Shortcut> - <Shortcut category="PySvn"> - <Name>subversion_resolve</Name> - <Accel></Accel> - <AltAccel></AltAccel> - </Shortcut> - <Shortcut category="PySvn"> - <Name>subversion_cleanup</Name> - <Accel></Accel> - <AltAccel></AltAccel> - </Shortcut> - <Shortcut category="PySvn"> - <Name>subversion_command</Name> - <Accel></Accel> - <AltAccel></AltAccel> - </Shortcut> - <Shortcut category="PySvn"> - <Name>subversion_list_tags</Name> - <Accel></Accel> - <AltAccel></AltAccel> - </Shortcut> - <Shortcut category="PySvn"> - <Name>subversion_list_branches</Name> - <Accel></Accel> - <AltAccel></AltAccel> - </Shortcut> - <Shortcut category="PySvn"> - <Name>subversion_contents</Name> - <Accel></Accel> - <AltAccel></AltAccel> - </Shortcut> - <Shortcut category="PySvn"> - <Name>subversion_property_set</Name> - <Accel></Accel> - <AltAccel></AltAccel> - </Shortcut> - <Shortcut category="PySvn"> - <Name>subversion_property_list</Name> - <Accel></Accel> - <AltAccel></AltAccel> - </Shortcut> - <Shortcut category="PySvn"> - <Name>subversion_property_delete</Name> - <Accel></Accel> - <AltAccel></AltAccel> - </Shortcut> - <Shortcut category="PySvn"> - <Name>subversion_relocate</Name> - <Accel></Accel> - <AltAccel></AltAccel> - </Shortcut> - <Shortcut category="PySvn"> - <Name>subversion_repo_browser</Name> - <Accel></Accel> - <AltAccel></AltAccel> - </Shortcut> - <Shortcut category="PySvn"> - <Name>subversion_configure</Name> + <Shortcut category="Git"> + <Name>git_new</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Git"> + <Name>git_fetch</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Git"> + <Name>git_pull</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Git"> + <Name>git_commit</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Git"> + <Name>git_push</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Git"> + <Name>git_export_repo</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Git"> + <Name>git_log_browser</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Git"> + <Name>git_reflog_browser</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Git"> + <Name>git_diff</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Git"> + <Name>git_extendeddiff</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Git"> + <Name>git_status</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Git"> + <Name>git_switch</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Git"> + <Name>git_tag</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Git"> + <Name>git_list_tags</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Git"> + <Name>git_describe_tag</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Git"> + <Name>git_list_branches</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Git"> + <Name>git_list_merged_branches</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Git"> + <Name>git_list_non_merged_branches</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Git"> + <Name>git_branch</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Git"> + <Name>git_delete_remote_branch</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Git"> + <Name>git_show_branch</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Git"> + <Name>git_revert</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Git"> + <Name>git_revert</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Git"> + <Name>git_merge</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Git"> + <Name>git_cancel_merge</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Git"> + <Name>git_commit_merge</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Git"> + <Name>git_cleanup</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Git"> + <Name>git_command</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Git"> + <Name>git_configure</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Git"> + <Name>git_show_remotes</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Git"> + <Name>git_show_remote_info</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Git"> + <Name>git_add_remote</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Git"> + <Name>git_remove_remote</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Git"> + <Name>git_prune_remote</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Git"> + <Name>git_rename_remote</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Git"> + <Name>git_change_remote_url</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Git"> + <Name>git_remote_credentials</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Git"> + <Name>git_cherrypick</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Git"> + <Name>git_cherrypick_continue</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Git"> + <Name>git_cherrypick_quit</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Git"> + <Name>git_cherrypick_abort</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Git"> + <Name>git_stash</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Git"> + <Name>git_stash_browser</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Git"> + <Name>git_stash_show</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Git"> + <Name>git_stash_apply</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Git"> + <Name>git_stash_pop</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Git"> + <Name>git_stash_branch</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Git"> + <Name>git_stash_delete</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Git"> + <Name>git_stash_delete_all</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Git"> + <Name>git_user_configure</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Git"> + <Name>git_repo_configure</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Git"> + <Name>git_create_ignore</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Git"> + <Name>git_show_config</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Git"> + <Name>git_verify</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Git"> + <Name>git_housekeeping</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Git"> + <Name>git_statistics</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Git"> + <Name>git_create_archive</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Git"> + <Name>mercurial_bundle_create</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Git"> + <Name>mercurial_bundle_verify</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Git"> + <Name>mercurial_bundle_list_heads</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Git"> + <Name>mercurial_bundle_apply_fetch</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Git"> + <Name>mercurial_bundle_apply_pull</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Git"> + <Name>git_bisect_start</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Git"> + <Name>git_bisect_start_extended</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Git"> + <Name>git_bisect_good</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Git"> + <Name>git_bisect_bad</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Git"> + <Name>git_bisect_skip</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Git"> + <Name>git_bisect_reset</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Git"> + <Name>git_bisect_log_browser</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Git"> + <Name>git_bisect_create_replay</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Git"> + <Name>git_bisect_edit_replay</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Git"> + <Name>git_bisect_replay</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Git"> + <Name>git_check_patches</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Git"> + <Name>git_apply_patches</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Git"> + <Name>git_show_patches_statistics</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Git"> + <Name>git_submodule_add</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Git"> + <Name>git_submodules_list</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Git"> + <Name>git_submodules_init</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Git"> + <Name>git_submodules_deinit</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Git"> + <Name>git_submodules_update</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Git"> + <Name>git_submodules_update_init</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Git"> + <Name>git_submodules_update_remote</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Git"> + <Name>git_submodules_update_options</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Git"> + <Name>git_submodules_sync</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Git"> + <Name>git_submodules_status</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Git"> + <Name>git_submodules_summary</Name> <Accel></Accel> <AltAccel></AltAccel> </Shortcut> @@ -2136,12 +2456,12 @@ </Shortcut> <Shortcut category="Mercurial"> <Name>mercurial_commit</Name> - <Accel>Meta+Alt+O</Accel> + <Accel>Meta+Alt+C</Accel> <AltAccel></AltAccel> </Shortcut> <Shortcut category="Mercurial"> <Name>mercurial_outgoing</Name> - <Accel></Accel> + <Accel>Meta+Alt+O</Accel> <AltAccel></AltAccel> </Shortcut> <Shortcut category="Mercurial"> @@ -2155,28 +2475,13 @@ <AltAccel></AltAccel> </Shortcut> <Shortcut category="Mercurial"> - <Name>subversion_export</Name> - <Accel></Accel> - <AltAccel></AltAccel> - </Shortcut> - <Shortcut category="Mercurial"> - <Name>mercurial_add</Name> - <Accel></Accel> - <AltAccel></AltAccel> - </Shortcut> - <Shortcut category="Mercurial"> - <Name>mercurial_remove</Name> - <Accel></Accel> - <AltAccel></AltAccel> - </Shortcut> - <Shortcut category="Mercurial"> - <Name>mercurial_log</Name> + <Name>mercurial_export_repo</Name> <Accel></Accel> <AltAccel></AltAccel> </Shortcut> <Shortcut category="Mercurial"> <Name>mercurial_log_browser</Name> - <Accel>Meta+Alt+G</Accel> + <Accel>Meta+Alt+L</Accel> <AltAccel></AltAccel> </Shortcut> <Shortcut category="Mercurial"> @@ -2195,6 +2500,11 @@ <AltAccel></AltAccel> </Shortcut> <Shortcut category="Mercurial"> + <Name>mercurial_summary</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Mercurial"> <Name>mercurial_heads</Name> <Accel></Accel> <AltAccel></AltAccel> @@ -2220,13 +2530,38 @@ <AltAccel></AltAccel> </Shortcut> <Shortcut category="Mercurial"> + <Name>mercurial_commit_merge</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Mercurial"> + <Name>mercurial_cancel_merge</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Mercurial"> + <Name>mercurial_remerge</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Mercurial"> + <Name>mercurial_show_conflicts</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Mercurial"> <Name>mercurial_resolve</Name> <Accel></Accel> <AltAccel></AltAccel> </Shortcut> <Shortcut category="Mercurial"> + <Name>mercurial_unresolve</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Mercurial"> <Name>mercurial_tag</Name> - <Accel></Accel> + <Accel>Meta+Alt+T</Accel> <AltAccel></AltAccel> </Shortcut> <Shortcut category="Mercurial"> @@ -2275,11 +2610,6 @@ <AltAccel></AltAccel> </Shortcut> <Shortcut category="Mercurial"> - <Name>mercurial_options</Name> - <Accel></Accel> - <AltAccel></AltAccel> - </Shortcut> - <Shortcut category="Mercurial"> <Name>mercurial_configure</Name> <Accel></Accel> <AltAccel></AltAccel> @@ -2335,11 +2665,6 @@ <AltAccel></AltAccel> </Shortcut> <Shortcut category="Mercurial"> - <Name>mercurial_identify_bundle</Name> - <Accel></Accel> - <AltAccel></AltAccel> - </Shortcut> - <Shortcut category="Mercurial"> <Name>mercurial_unbundle</Name> <Accel></Accel> <AltAccel></AltAccel> @@ -2385,57 +2710,112 @@ <AltAccel></AltAccel> </Shortcut> <Shortcut category="Mercurial"> - <Name>mercurial_import</Name> + <Name>mercurial_export</Name> <Accel></Accel> <AltAccel></AltAccel> </Shortcut> <Shortcut category="Mercurial"> - <Name>mercurial_rebase</Name> + <Name>mercurial_change_phase</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Mercurial"> + <Name>mercurial_graft</Name> + <Accel>Meta+Alt+G</Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Mercurial"> + <Name>mercurial_graft_continue</Name> <Accel></Accel> <AltAccel></AltAccel> </Shortcut> <Shortcut category="Mercurial"> - <Name>mercurial_rebase_continue</Name> + <Name>mercurial_graft_stop</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Mercurial"> + <Name>mercurial_graft_abort</Name> <Accel></Accel> <AltAccel></AltAccel> </Shortcut> <Shortcut category="Mercurial"> - <Name>mercurial_rebase_abort</Name> + <Name>mercurial_add_subrepo</Name> <Accel></Accel> <AltAccel></AltAccel> </Shortcut> <Shortcut category="Mercurial"> - <Name>mercurial_gpg_list</Name> + <Name>mercurial_remove_subrepos</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Mercurial"> + <Name>mercurial_archive</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Mercurial"> + <Name>mercurial_list_bookmarks</Name> <Accel></Accel> <AltAccel></AltAccel> </Shortcut> <Shortcut category="Mercurial"> - <Name>mercurial_gpg_verify</Name> + <Name>mercurial_define_bookmark</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Mercurial"> + <Name>mercurial_delete_bookmark</Name> <Accel></Accel> <AltAccel></AltAccel> </Shortcut> <Shortcut category="Mercurial"> - <Name>mercurial_gpg_sign</Name> + <Name>mercurial_rename_bookmark</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Mercurial"> + <Name>mercurial_move_bookmark</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Mercurial"> + <Name>mercurial_incoming_bookmarks</Name> <Accel></Accel> <AltAccel></AltAccel> </Shortcut> <Shortcut category="Mercurial"> - <Name>mercurial_purge</Name> + <Name>mercurial_pull_bookmark</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Mercurial"> + <Name>mercurial_outgoing_bookmarks</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Mercurial"> + <Name>mercurial_push_bookmark</Name> <Accel></Accel> <AltAccel></AltAccel> </Shortcut> <Shortcut category="Mercurial"> - <Name>mercurial_purge_all</Name> + <Name>mercurial_push_current_bookmark</Name> <Accel></Accel> <AltAccel></AltAccel> </Shortcut> <Shortcut category="Mercurial"> - <Name>mercurial_purge_list</Name> + <Name>mercurial_delete_all_backups</Name> <Accel></Accel> <AltAccel></AltAccel> </Shortcut> <Shortcut category="Mercurial"> - <Name>mercurial_purge_all_list</Name> + <Name>mercurial_queues_init</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Mercurial"> + <Name>mercurial_queues_commit</Name> <Accel></Accel> <AltAccel></AltAccel> </Shortcut> @@ -2490,6 +2870,16 @@ <AltAccel></AltAccel> </Shortcut> <Shortcut category="Mercurial"> + <Name>mercurial_queues_status</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Mercurial"> + <Name>mercurial_queues_summary</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Mercurial"> <Name>mercurial_queues_push_next</Name> <Accel></Accel> <AltAccel></AltAccel> @@ -2625,363 +3015,438 @@ <AltAccel></AltAccel> </Shortcut> <Shortcut category="Mercurial"> - <Name>mercurial_list_bookmarks</Name> + <Name>mercurial_purge</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Mercurial"> + <Name>mercurial_purge_all</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Mercurial"> + <Name>mercurial_purge_list</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Mercurial"> + <Name>mercurial_purge_all_list</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Mercurial"> + <Name>mercurial_gpg_list</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Mercurial"> + <Name>mercurial_gpg_verify</Name> <Accel></Accel> <AltAccel></AltAccel> </Shortcut> <Shortcut category="Mercurial"> - <Name>mercurial_define_bookmark</Name> + <Name>mercurial_gpg_sign</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Mercurial"> + <Name>mercurial_rebase</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Mercurial"> + <Name>mercurial_rebase_continue</Name> <Accel></Accel> <AltAccel></AltAccel> </Shortcut> <Shortcut category="Mercurial"> - <Name>mercurial_delete_bookmark</Name> + <Name>mercurial_rebase_abort</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Mercurial"> + <Name>mercurial_shelve</Name> <Accel></Accel> <AltAccel></AltAccel> </Shortcut> <Shortcut category="Mercurial"> - <Name>mercurial_rename_bookmark</Name> + <Name>mercurial_shelve_browser</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Mercurial"> + <Name>mercurial_unshelve</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Mercurial"> + <Name>mercurial_unshelve_abort</Name> <Accel></Accel> <AltAccel></AltAccel> </Shortcut> <Shortcut category="Mercurial"> - <Name>mercurial_move_bookmark</Name> + <Name>mercurial_unshelve_continue</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Mercurial"> + <Name>mercurial_shelve_delete</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Mercurial"> + <Name>mercurial_shelve_cleanup</Name> <Accel></Accel> <AltAccel></AltAccel> </Shortcut> <Shortcut category="Mercurial"> - <Name>mercurial_incoming_bookmarks</Name> + <Name>mercurial_convert_to_largefiles</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut> + <Shortcut category="Mercurial"> + <Name>mercurial_convert_to_normal</Name> + <Accel></Accel> + <AltAccel></AltAccel> + </Shortcut>