<?xml version="1.0" encoding="UTF-8"?>
<?eclipse version="3.0"?>
<plugin>

<!-- Python editor -->
   <extension point="org.eclipse.ui.editors">
      <editor
            class="org.python.pydev.editor.PyEdit"
            contributorClass="org.eclipse.ui.editors.text.TextEditorActionContributor"
            default="true"
            extensions="py,pyw,pyx,pxd,pxi,pyi"
            icon="platform:/plugin/org.python.pydev.shared_ui/icons/python_file.gif"
            id="org.python.pydev.editor.PythonEditor"
            name="Python Editor">
         <contentTypeBinding
               contentTypeId="org.python.pydev.pythonfile">
         </contentTypeBinding>
      </editor>
   </extension>
<!-- Initialize our preferences -->
   <extension point="org.eclipse.core.runtime.preferences">
      <initializer class="org.python.pydev.plugin.preferences.PydevPrefsInitializer"/>
   </extension>
<!-- Analyze file on request through ctrl+2, c -->
   <extension point="org.python.pydev.pydev_pyedit_listener">
  		<pyedit_listener_participant class="com.python.pydev.analysis.actions.AnalyzeOnRequestSetter"/>
   </extension>

<!-- document provider (even for the external files) -->
   <extension point="org.eclipse.ui.editors.documentProviders">
      <provider
            class="org.python.pydev.editor.PyDocumentProvider"
            id="org.python.pydev.shared_ui.editor_input.PydevFileEditorInput"
            inputTypes="org.python.pydev.shared_ui.editor_input.PydevFileEditorInput"/>
      <provider
            class="org.python.pydev.editor.PyDocumentProvider"
            id="org.python.pydev.shared_ui.editor_input.PydevFileEditorInput"
            inputTypes="org.python.pydev.shared_ui.editor_input.PydevZipFileEditorInput"/>
      <provider
            class="org.python.pydev.editor.PyDocumentProvider"
            id="org.python.pydev.editor.PyDocumentProvider"
            extensions=".py,.pyw,.pyx,.pxd,.pxi"/>
   </extension>
   <extension
         id="PyDocumentSetupParticipant"
         point="org.eclipse.core.filebuffers.documentSetup">
      <participant
            class="org.python.pydev.editor.PyDocumentSetupParticipant"
            extensions="py,pyw,pyx,pxd,pxi,pyi"/>
   </extension>

<!-- Python file content type (so that it is regarded as text) -->
  <extension point="org.eclipse.core.contenttype.contentTypes">
      <content-type
            base-type="org.eclipse.core.runtime.text"
            file-extensions="py,pyw,pyx,pxd,pxi,pyi"
            file-names="SConstruct"
            id="org.python.pydev.pythonfile"
            name="Python File"
            priority="high"/>
   </extension>



<!-- Python nature -->
   <extension
         point="org.eclipse.ui.ide.projectNatureImages">
      <image
            icon="platform:/plugin/org.python.pydev.shared_ui/icons/pythonNature.gif"
            natureId="org.python.pydev.pythonNature"
            id="org.python.pydev.ui.projectNatureImage">
      </image>
   </extension>



<!-- PyDev project properties -->
   <extension point="org.eclipse.ui.propertyPages">
      <page name="PyDev - PYTHONPATH"
            class="org.python.pydev.ui.PyProjectProperties"
            id="org.python.pydev.ui.pyProjectProperties">
         <filter name="projectNature"
               value="org.python.pydev.pythonNature"/>
         <enabledWhen>
            <adapt type="org.eclipse.core.resources.IProject"/>
         </enabledWhen>
      </page>
   </extension>
   <extension point="org.eclipse.ui.propertyPages">

      <page name="PyDev - Interpreter/Grammar"
            class="org.python.pydev.ui.PyProjectPythonDetails"
            id="org.python.pydev.ui.pyProjectPythonDetails">
         <filter name="projectNature" value="org.python.pydev.pythonNature"/>
         <enabledWhen>
            <adapt type="org.eclipse.core.resources.IProject"/>
         </enabledWhen>
      </page>
   </extension>


<!-- PyDev nature/project related actions -->

   <extension point="org.eclipse.ui.popupMenus">

      <!-- Force analysis of tree -->
      <objectContribution
            adaptable="true"
            id="com.python.pydev.analysis.actions.forceCodeAnalysisOnTree"
            objectClass="org.eclipse.core.resources.IResource">
         <menu id="org.python.pydev.ui.actions.menu" label="PyDev"/>
         <action
               class="com.python.pydev.analysis.actions.ForceCodeAnalysisOnTree"
               enablesFor="+"
               id="com.python.pydev.analysis.actions.forceCodeAnalysisOnTree"
               label="Code analysis"
               menubarPath="org.python.pydev.ui.actions.menu/pydev"
               tooltip="Force a code analysis for the selected elements (recursive)">
         </action>
         <visibility><objectState name="projectNature" value="org.python.pydev.pythonNature"/></visibility>
      </objectContribution>
   </extension>

   <extension point="org.eclipse.ui.popupMenus">

      <!-- add to PYTHONPATH -->
      <objectContribution
            adaptable="false"
            id="org.python.pydev.ui.actions.container.PyAddSrcFolder"
            objectClass="org.eclipse.core.resources.IContainer">
         <menu id="org.python.pydev.ui.actions.menu" label="PyDev"/>
         <action
               class="org.python.pydev.ui.actions.container.PyAddSrcFolder"
               enablesFor="+"
               id="org.python.pydev.ui.actions.container.pyAddNature"
               label="Set as Source Folder (add to PYTHONPATH)"
               icon="platform:/plugin/org.python.pydev.shared_ui/icons/packagefolder_obj.gif"
               menubarPath="org.python.pydev.ui.actions.menu/pydev"
               tooltip="Include this folder in its project's PYTHONPATH">
         </action>
      </objectContribution>


      <!-- remove from PYTHONPATH -->
      <objectContribution
            adaptable="false"
            id="org.python.pydev.ui.actions.container.PyRemSrcFolder"
            objectClass="org.python.pydev.navigator.elements.PythonSourceFolder">
         <menu id="org.python.pydev.ui.actions.menu" label="PyDev"/>
         <action
               class="org.python.pydev.ui.actions.container.PyRemSrcFolder"
               enablesFor="+"
               id="org.python.pydev.ui.actions.container.pyAddNature"
               label="Set as non-source folder (remove from PYTHONPATH)"
               icon="platform:/plugin/org.python.pydev.shared_ui/icons/packagefolder_obj_remove.gif"
               menubarPath="org.python.pydev.ui.actions.menu/pydev"
               tooltip="Remove this folder from its project's PYTHONPATH">
         </action>
      </objectContribution>


      <!-- remove .pyc -->
      <objectContribution
            adaptable="true"
            id="org.python.pydev.ui.actions.container.pyDeletePycAndClassFiles"
            objectClass="org.eclipse.core.resources.IContainer">
         <menu id="org.python.pydev.ui.actions.menu" label="PyDev"/>
         <action
               class="org.python.pydev.ui.actions.container.PyDeletePycAndClassFiles"
               enablesFor="+"
               id="org.python.pydev.ui.actions.container.pyDeletePycAndClassFiles"
               label="Remove *.pyc, *.pyo and *$py.class Files"
               menubarPath="org.python.pydev.ui.actions.menu/pydev"
               tooltip="Removes all the .pyc, .pyo and $py.class files.">
         </action>
      </objectContribution>

      <!-- Code Formatting -->
      <objectContribution
            adaptable="true"
            id="org.python.pydev.ui.actions.container.pySourceFormatAction"
            objectClass="org.eclipse.core.resources.IContainer">
         <menu id="org.python.pydev.ui.actions.menu" label="PyDev"/>
         <action
               class="org.python.pydev.ui.actions.container.PySourceFormatAction"
               enablesFor="+"
               id="org.python.pydev.ui.actions.container.pySourceFormatAction"
               label="Source format python files"
               menubarPath="org.python.pydev.ui.actions.menu/pydev"
               tooltip="Applies the code-formatting to the selected python files.">
         </action>
      </objectContribution>


      <!-- Organize Imports -->
      <objectContribution
            adaptable="true"
            id="org.python.pydev.ui.actions.container.pyOrganizeImportsAction"
            objectClass="org.eclipse.core.resources.IContainer">
         <menu id="org.python.pydev.ui.actions.menu" label="PyDev"/>
         <action
               class="org.python.pydev.ui.actions.container.PyOrganizeImportsAction"
               enablesFor="+"
               id="org.python.pydev.ui.actions.container.pyOrganizeImportsAction"
               label="Organize Imports ..."
               icon="platform:/plugin/org.python.pydev.shared_ui/icons/new/imp_obj.gif"
               menubarPath="org.python.pydev.ui.actions.menu/pydev"
               tooltip="Organizes imports in the selected python files.">
         </action>
      </objectContribution>

      <!-- 2To3 -->
      <objectContribution
            adaptable="true"
            id="org.python.pydev.ui.actions.resources.py2To3"
            objectClass="org.eclipse.core.resources.IResource">
         <menu id="org.python.pydev.ui.actions.menu" label="PyDev"/>
         <action
               class="org.python.pydev.ui.actions.resources.Py2To3"
               enablesFor="+"
               id="org.python.pydev.ui.actions.resources.py2To3"
               label="Apply 2To3 (lib2to3 must be in PYTHONPATH)"
               menubarPath="org.python.pydev.ui.actions.menu/pydev"
               tooltip="Apply 2To3 (lib2to3 must be available in the interpreter PYTHONPATH)">
         </action>
         <visibility><objectState name="projectNature" value="org.python.pydev.pythonNature"/></visibility>
      </objectContribution>

      <!-- remove errors -->
      <objectContribution
            adaptable="true"
            id="org.python.pydev.ui.actions.container.pyDeleteErrors"
            objectClass="org.eclipse.core.resources.IContainer">
         <menu id="org.python.pydev.ui.actions.menu" label="PyDev"/>
         <action
               class="org.python.pydev.ui.actions.container.PyDeleteErrors"
               enablesFor="+"
               id="org.python.pydev.ui.actions.container.pyDeleteErrors"
               label="Remove error markers"
               menubarPath="org.python.pydev.ui.actions.menu/pydev"
               tooltip="Remove error markers">
         </action>
      </objectContribution>


      <!-- remove nature -->
      <objectContribution
            adaptable="true"
            id="org.python.pydev.ui.actions.project.PyRemoveNature"
            objectClass="org.eclipse.core.resources.IProject">
         <menu id="org.python.pydev.ui.actions.menu" label="PyDev"/>
         <action
               class="org.python.pydev.ui.actions.project.PyRemoveNature"
               enablesFor="1"
               icon="platform:/plugin/org.python.pydev.shared_ui/icons/remove_nature.png"
               id="org.python.pydev.ui.actions.project.pyRemoveNature"
               label="Remove PyDev Project Config"
               menubarPath="org.python.pydev.ui.actions.menu/pydev"
               tooltip="Remove the PyDev project configuration">
         </action>
         <visibility><objectState name="projectNature" value="org.python.pydev.pythonNature"/></visibility>
      </objectContribution>


      <!-- add nature -->
      <objectContribution
            adaptable="true"
            id="org.python.pydev.ui.actions.project.PyAddNature"
            objectClass="org.eclipse.core.resources.IProject">
         <menu id="org.python.pydev.ui.actions.menu" label="PyDev"/>
         <action
               class="org.python.pydev.ui.actions.project.PyAddNature"
               enablesFor="1"
               icon="platform:/plugin/org.python.pydev.shared_ui/icons/python_nature.png"
               id="org.python.pydev.ui.actions.project.pyAddNature"
               label="Set as PyDev Project"
               menubarPath="org.python.pydev.ui.actions.menu/pydev"
               tooltip="Set project as a PyDev project">
         </action>
         <visibility><not><objectState name="projectNature" value="org.python.pydev.pythonNature"/></not></visibility>
      </objectContribution>


   </extension>

<!-- Preferences Keywords -->
	<extension point="org.eclipse.ui.keywords" name="Interpreter Keywords">
	    <keyword id="org.python.pydev.interpreter.keywords"  label="forced builtins pythonpath"/>
	</extension>
	<extension point="org.eclipse.ui.keywords" name="PyDev Preferences">
	    <keyword id="org.python.pydev.preferences.keywords"  label="tabs spaces colors folding"/>
	</extension>
	<extension point="org.eclipse.ui.keywords" name="Save actions">
	    <keyword id="org.python.pydev.preferences.save"  label="formatter"/>
	</extension>
	<extension point="org.eclipse.ui.keywords" name="Code formatter">
	    <keyword id="org.python.pydev.preferences.formatter"  label="autopep8 pep8 pycodestyle"/>
	</extension>
	<extension point="org.eclipse.ui.keywords" name="Typing">
	    <keyword id="org.python.pydev.typing"  label="indentation new line parentheses"/>
	</extension>
	<extension point="org.eclipse.ui.keywords" name="Tabs">
	    <keyword id="org.python.pydev.tabs"  label="tabs indentation"/>
	</extension>
	<extension point="org.eclipse.ui.keywords" name="Minimap">
	    <keyword id="org.python.pydev.minimap"  label="minimap horizontal vertical scrollbar ruler birds"/>
	</extension>
	<extension point="org.eclipse.ui.keywords" name="PyUnit">
	    <keyword id="org.python.pydev.pyunit"  label="py.test pytest unittest nose pyunit"/>
	</extension>
	<extension point="org.eclipse.ui.keywords" name="Imports">
	    <keyword id="org.python.pydev.imports"  label="isort imports sort pep8"/>
	</extension>

<!-- Preference page -->
   <extension point="org.eclipse.ui.preferencePages">
      <page
            name="PyDev"
            class="org.python.pydev.plugin.preferences.PydevRootPrefs"
            id="org.python.pydev.prefs">
      </page>
      <page
            name="Logging"
            category="org.python.pydev.prefs"
            class="org.python.pydev.logging.PyLoggingPreferencesPage"
            id="org.python.pydev.logging.pyLoggingPreferencesPage">
      </page>
      <page
            name="Editor"
            class="org.python.pydev.editor.preferences.PydevEditorPrefs"
            category="org.python.pydev.prefs"
            id="org.python.pydev.prefs.editor">
            <keywordReference id="org.python.pydev.preferences.keywords"/>
      </page>
      <page
            name="Overview Ruler Minimap"
            category="org.python.pydev.prefs.editor"
            class="org.python.pydev.overview_ruler.MinimapOverviewRulerPreferencesPage"
            id="org.python.pydev.overview_ruler.minimapOverviewRulerPreferencesPage">
            <keywordReference id="org.python.pydev.minimap"/>
      </page>
      <page
            name="Vertical Indent Guide"
            category="org.python.pydev.prefs.editor"
            class="org.python.pydev.editor.preferences.PydevVerticalIndentGuidePreferencesPage"
            id="org.python.pydev.editor.preferences.pydevVerticalIndentGuidePreferencesPage">
      </page>
      <page
            name="Typing"
            category="org.python.pydev.prefs.editor"
            class="org.python.pydev.editor.preferences.PydevTypingPreferencesPage"
            id="org.python.pydev.prefs2">
            <keywordReference id="org.python.pydev.typing"/>
      </page>
      <page
            name="Tabs"
            category="org.python.pydev.prefs.editor"
            class="org.python.pydev.editor.preferences.PyTabPreferencesPage"
            id="org.python.pydev.editor.preferences.PyTabPreferencesPage">
            <keywordReference id="org.python.pydev.tabs"/>
      </page>
      <page
            name="Interpreters"
            category="org.python.pydev.prefs"
            class="org.python.pydev.ui.pythonpathconf.InterpreterGeneralPreferencesPage"
            id="org.python.pydev.ui.pythonpathconf.interpreterPreferencesPageGeneral">
      </page>
      <page
            name="Python Interpreter"
            category="org.python.pydev.ui.pythonpathconf.interpreterPreferencesPageGeneral"
            class="org.python.pydev.ui.pythonpathconf.PythonInterpreterPreferencesPage"
            id="org.python.pydev.ui.pythonpathconf.interpreterPreferencesPagePython">
            <keywordReference id="org.python.pydev.interpreter.keywords"/>
      </page>
      <page
            name="Jython Interpreter"
            category="org.python.pydev.ui.pythonpathconf.interpreterPreferencesPageGeneral"
            class="org.python.pydev.ui.pythonpathconf.JythonInterpreterPreferencesPage"
            id="org.python.pydev.ui.pythonpathconf.interpreterPreferencesPageJython">
	        <keywordReference id="org.python.pydev.interpreter.keywords"/>
      </page>
      <page
            name="IronPython Interpreter"
            category="org.python.pydev.ui.pythonpathconf.interpreterPreferencesPageGeneral"
            class="org.python.pydev.ui.pythonpathconf.IronpythonInterpreterPreferencesPage"
            id="org.python.pydev.ui.pythonpathconf.interpreterPreferencesPageIronpython">
	        <keywordReference
	            id="org.python.pydev.interpreter.keywords">
	        </keywordReference>
      </page>
      <page
      		name="PyUnit"
            category="org.python.pydev.prefs"
            class="org.python.pydev.pyunit.preferences.PyUnitPrefsPage2"
            id="org.python.pydev.prefs.pyunitPage">
            <keywordReference id="org.python.pydev.pyunit"/>
      </page>
      <page
            name="Code Style"
            category="org.python.pydev.prefs.editor"
            class="org.python.pydev.plugin.preferences.PyCodeStylePreferencesPage"
            id="org.python.pydev.plugin.pyCodeStylePreferencesPage"/>


      <page
            name="Editor caption/icon"
            category="org.python.pydev.prefs.editor"
            class="org.python.pydev.plugin.preferences.PyTitlePreferencesPage"
            id="org.python.pydev.plugin.preferences.PyTitlePreferencesPage"/>

      <page
            name="Code Formatter"
            category="org.python.pydev.plugin.pyCodeStylePreferencesPage"
            class="org.python.pydev.plugin.preferences.PyCodeFormatterPage"
            id="org.python.pydev.plugin.pyCodeFormatterPage">
            <keywordReference id="org.python.pydev.preferences.formatter"/>
      </page>
      <page
      		name="Docstrings"
            category="org.python.pydev.plugin.pyCodeStylePreferencesPage"
            class="org.python.pydev.editor.correctionassist.docstrings.DocstringsPrefPage"
            id="org.python.pydev.editor.correctionassist.docstrings.DocstringsPreferencePage"/>

      <page
      		name="Comments"
            category="org.python.pydev.plugin.pyCodeStylePreferencesPage"
            class="org.python.pydev.editor.commentblocks.CommentBlocksPreferences"
            id="org.python.pydev.editor.commentblocks.CommentBlocksPreferences"/>

      <page
      		name="File types"
            category="org.python.pydev.plugin.pyCodeStylePreferencesPage"
            class="org.python.pydev.ui.filetypes.FileTypesPreferencesPage"
            id="org.python.pydev.ui.filetypes.FileTypesPreferencesPage"/>

      <page
      		name="Imports"
            category="org.python.pydev.plugin.pyCodeStylePreferencesPage"
            class="org.python.pydev.ui.importsconf.ImportsPreferencesPage"
            id="org.python.pydev.ui.importsconf.ImportsPreferencesPage">
            <keywordReference id="org.python.pydev.imports"/>
      </page>

      <page
            name="Code Completion"
            class="org.python.pydev.editor.codecompletion.PyCodeCompletionPreferencesPage"
            category="org.python.pydev.prefs.editor"
            id="org.python.pydev.prefs.PyCodeCompletionPage"/>
      <page
            name="Hover"
            class="org.python.pydev.editor.hover.PyHoverPreferencesPage"
            category="org.python.pydev.prefs.editor"
            id="org.python.pydev.editor.hover.PyHoverPreferencesPage"/>
      <page
            name="Templates"
            class="org.python.pydev.editor.templates.PyTemplatePreferencesPage"
            category="org.python.pydev.prefs.editor"
            id="org.python.pydev.prefs.template"/>
      <page
            class="org.python.pydev.builder.pylint.PyLintPrefPage"
            category="org.python.pydev.prefs.extensions.analysis"
            name="PyLint"
            id="org.python.pydev.prefs.pylint"/>
      <page
            class="org.python.pydev.builder.mypy.MypyPrefPage"
            category="org.python.pydev.prefs.extensions.analysis"
            name="Mypy"
            id="org.python.pydev.prefs.mypy"/>
      <page
            class="org.python.pydev.builder.ruff.RuffPrefPage"
            category="org.python.pydev.prefs.extensions.analysis"
            name="Ruff"
            id="org.python.pydev.prefs.ruff"/>
      <page
            class="org.python.pydev.builder.flake8.Flake8PrefPage"
            category="org.python.pydev.prefs.extensions.analysis"
            name="Flake8"
            id="org.python.pydev.prefs.flake8"/>
      <page
            class="org.python.pydev.builder.pyright.PyrightPrefPage"
            category="org.python.pydev.prefs.extensions.analysis"
            name="Pyright"
            id="org.python.pydev.prefs.pyright"/>
      <page
            class="org.python.pydev.builder.todo.PyTodoPrefPage"
            category="org.python.pydev.prefs"
            name="Task Tags"
            id="org.python.pydev.prefs.pytodo"/>
      <page
            name="Builders"
            category="org.python.pydev.prefs"
            class="org.python.pydev.builder.PyDevBuilderPrefPage"
            id="org.python.pydev.builder.pyDevBuilderPrefPage">
      </page>
      <page
            category="org.python.pydev.prefs.editor"
            class="org.python.pydev.editor.codefolding.PyDevCodeFoldingPrefPage"
            id="org.python.pydev.editor.codefolding.PyDevCodeFoldingPrefPage"
            name="Code Folding">
      </page>
      <page
            category="org.python.pydev.prefs.editor"
            class="org.python.pydev.editor.saveactions.PydevSaveActionsPrefPage"
            id="org.python.pydev.editor.saveactions.PydevSaveActionsPrefPage"
            name="Save Actions">
            <keywordReference id="org.python.pydev.preferences.save"/>
      </page>
   </extension>
<!-- Editor menus -->
   <extension point="org.eclipse.ui.editorActions"
   		      name="pydevEditorContribution"
   		      id="org.python.pydev.editorContribution">
      <editorContribution
            targetID="org.python.pydev.editor.PythonEditor"
            id="org.python.pydev.editor.editorContribution">
         <menu
               label="&amp;Source"
               path="edit"
               id="org.python.pydev.editor.actions.sourceMenu">
            <separator name="editGroup"/>
            <separator name="addGroup"/>
            <separator name="whitespaceGroup"/>
            <separator name="evaluateGroup"/>
         </menu>
         <menu
               id="org.python.pydev.refactoring.refactoringMenu"
               label="Refac&amp;toring"
               path="org.python.pydev.editor.actions.sourceMenu">
            <separator name="brmGroup"/>
         </menu>
         <!-- Home now handled in VerifyKey (we don't want any conflicts with other places that define HOME)
         <action
               definitionId="org.python.pydev.editor.actions.firstChar"
               label="Goto first char"
               class="org.python.pydev.editor.actions.FirstCharAction"
               menubarPath="org.python.pydev.editor.actions.sourceMenu/editGroup"
               id="org.python.pydev.editor.actions.firstChar">
         </action>
         -->

         <!-- Backspace now handled in VerifyKey (incremental find integration)
         <action
               definitionId="org.python.pydev.editor.actions.pybackspace"
               label="Python Backspace (considers indentation)"
               class="org.python.pydev.editor.actions.PyBackspace"
               menubarPath="org.python.pydev.editor.actions.sourceMenu/editGroup"
               id="org.python.pydev.editor.actions.pybackspace">
         </action>
         -->
         <action
               definitionId="org.python.pydev.editor.actions.convertSpaceToTab"
               label="Convert space-tabs to tabs"
               class="org.python.pydev.editor.actions.PyConvertSpaceToTab"
               menubarPath="org.python.pydev.editor.actions.sourceMenu/whitespaceGroup"
               id="org.python.pydev.editor.actions.convertSpaceToTab">
         </action>
         <action
               definitionId="org.python.pydev.editor.actions.convertTabToSpace"
               label="Convert tabs to space-tabs"
               class="org.python.pydev.editor.actions.PyConvertTabToSpace"
               menubarPath="org.python.pydev.editor.actions.sourceMenu/whitespaceGroup"
               id="org.python.pydev.editor.actions.convertTabToSpace">
         </action>
         <action
               definitionId="org.python.pydev.editor.actions.uncomment"
               label="Uncomment"
               class="org.python.pydev.editor.actions.PyUncomment"
               menubarPath="org.python.pydev.editor.actions.sourceMenu/editGroup"
               id="org.python.pydev.editor.actions.uncomment">
         </action>
         <action
               definitionId="org.python.pydev.editor.actions.comment"
               label="Comment"
               class="org.python.pydev.editor.actions.PyComment"
               menubarPath="org.python.pydev.editor.actions.sourceMenu/editGroup"
               id="org.python.pydev.editor.actions.comment">
         </action>
         <action
               definitionId="org.python.pydev.editor.actions.togglecomment"
               label="Toggle Comment"
               class="org.python.pydev.editor.actions.PyToggleComment"
               menubarPath="org.python.pydev.editor.actions.sourceMenu/editGroup"
               id="org.python.pydev.editor.actions.togglecomment">
         </action>
         <action
               definitionId="org.python.pydev.editor.actions.removeBlockComment"
               label="Remove comment block"
               class="org.python.pydev.editor.actions.PyRemoveBlockComment"
               menubarPath="org.python.pydev.editor.actions.sourceMenu/addGroup"
               id="org.python.pydev.editor.actions.removeBlockComment">
         </action>
         <action
               definitionId="org.python.pydev.editor.actions.addBlockComment"
               label="Add comment block"
               class="org.python.pydev.editor.actions.PyAddBlockComment"
               menubarPath="org.python.pydev.editor.actions.sourceMenu/addGroup"
               id="org.python.pydev.editor.actions.addBlockComment">
         </action>
         <action
               definitionId="org.python.pydev.editor.actions.addSingleBlockComment"
               label="Add single comment block"
               class="org.python.pydev.editor.actions.PyAddSingleBlockComment"
               menubarPath="org.python.pydev.editor.actions.sourceMenu/addGroup"
               id="org.python.pydev.editor.actions.addSingleBlockComment">
         </action>
         <action
               definitionId="org.python.pydev.editor.actions.navigation.nextMethod"
               label="Goto next method or class"
               class="org.python.pydev.editor.actions.PyNextMethod"
               menubarPath="org.python.pydev.editor.actions.sourceMenu/addGroup"
               id="org.python.pydev.editor.actions.navigation.nextMethod">
         </action>
         <action
               definitionId="org.python.pydev.editor.actions.navigation.previousMethod"
               label="Goto previous method or class"
               class="org.python.pydev.editor.actions.PyPreviousMethod"
               menubarPath="org.python.pydev.editor.actions.sourceMenu/addGroup"
               id="org.python.pydev.editor.actions.navigation.previousMethod">
         </action>
         <action
               definitionId="org.python.pydev.editor.actions.navigation.pyCollapse"
               label="Collapse code"
               class="org.python.pydev.editor.actions.codefolding.PyCollapse"
               menubarPath="org.python.pydev.editor.actions.sourceMenu/addGroup"
               id="org.python.pydev.editor.actions.navigation.pyCollapse">
         </action>
         <action
               definitionId="org.python.pydev.editor.actions.navigation.pyUnCollapse"
               label="Un Collapse code"
               class="org.python.pydev.editor.actions.codefolding.PyUnCollapse"
               menubarPath="org.python.pydev.editor.actions.sourceMenu/addGroup"
               id="org.python.pydev.editor.actions.navigation.pyUnCollapse">
         </action>
         <action
               definitionId="org.python.pydev.editor.actions.navigation.pyCollapseAll"
               label="Collapse code (All)"
               class="org.python.pydev.editor.actions.codefolding.PyCollapseAll"
               menubarPath="org.python.pydev.editor.actions.sourceMenu/addGroup"
               id="org.python.pydev.editor.actions.navigation.pyCollapseAll">
         </action>
         <action
               definitionId="org.python.pydev.editor.actions.navigation.pyUnCollapseAll"
               label="Un Collapse code (All)"
               class="org.python.pydev.editor.actions.codefolding.PyUnCollapseAll"
               menubarPath="org.python.pydev.editor.actions.sourceMenu/addGroup"
               id="org.python.pydev.editor.actions.navigation.pyUnCollapseAll">
         </action>
         <action
               definitionId="org.python.pydev.editor.actions.pyShowOutline"
               label="Show Quick Outline"
               class="org.python.pydev.editor.actions.PyShowOutline"
               menubarPath="org.python.pydev.editor.actions.sourceMenu/addGroup"
               id="org.python.pydev.editor.actions.navigation.pyShowOutline">
         </action>
         <action
               definitionId="org.python.pydev.editor.actions.pySelectInterpreter"
               label="Select default interpreter"
               class="org.python.pydev.editor.actions.PySelectInterpreter"
               id="org.python.pydev.editor.actions.pySelectInterpreter">
         </action>
         <action
               definitionId="org.python.pydev.editor.actions.pyShowBrowser"
               label="Show Global Tokens Browser"
               class="org.python.pydev.editor.actions.PyShowBrowser"
               menubarPath="org.python.pydev.editor.actions.sourceMenu/addGroup"
               id="org.python.pydev.editor.actions.navigation.pyShowBrowser">
         </action>
         <action
               definitionId="org.python.pydev.editor.actions.pyOrganizeImports"
               label="Organize Imports"
               class="org.python.pydev.editor.actions.PyOrganizeImports"
               menubarPath="org.python.pydev.editor.actions.sourceMenu/addGroup"
               id="org.python.pydev.editor.actions.navigation.pyOrganizeImports">
         </action>
         <action
               definitionId="org.python.pydev.editor.actions.pyFormatStd"
               label="Format Code"
               class="org.python.pydev.editor.actions.PyFormatAction"
               menubarPath="org.python.pydev.editor.actions.sourceMenu/addGroup"
               id="org.python.pydev.editor.actions.navigation.pyFormatStd">
         </action>
         <action
               definitionId="org.python.pydev.editor.actions.pySelectWord"
               label="Select the current word"
               class="org.python.pydev.editor.actions.PySelectWord"
               menubarPath="org.python.pydev.editor.actions.sourceMenu/addGroup"
               id="org.python.pydev.editor.actions.pySelectWord">
         </action>
         <action
               definitionId="org.python.pydev.editor.actions.wrapparagraph"
               label="Wrap paragraph (Ctrl+2,w)"
               class="org.python.pydev.editor.actions.PyWrapParagraph"
               menubarPath="org.python.pydev.editor.actions.sourceMenu/addGroup"
               id="org.python.pydev.editor.actions.wrapparagraph">
         </action>
         <action
               definitionId="org.python.pydev.editor.actions.copyqualifiedname"
               label="Copy Context Qualified Name"
               class="org.python.pydev.editor.actions.PyCopyQualifiedName"
               menubarPath="edit/copy"
               id="org.python.pydev.editor.actions.copyqualifiedname"
               icon="platform:/plugin/org.python.pydev.shared_ui/icons/cpyqual_menu.gif">
         </action>
         <action
               definitionId="org.python.pydev.editor.actions.goToMatchingBracket"
               label="Go to Matching Bracket"
               class="org.python.pydev.editor.actions.PyGoToMatchingBracket"
               id="org.python.pydev.editor.actions.goToMatchingBracket">
         </action>
         <action
               definitionId="org.python.pydev.editor.actions.selectEnclosingScope"
               label="Select Enclosing Scope"
               class="org.python.pydev.editor.actions.PyScopeSelection"
               id="org.python.pydev.editor.actions.selectEnclosingScope">
         </action>
         <action
               definitionId="org.python.pydev.editor.actions.deselectEnclosingScope"
               label="Deselect Enclosing Scope"
               class="org.python.pydev.editor.actions.PyScopeDeselection"
               id="org.python.pydev.editor.actions.deselectEnclosingScope">
         </action>
         <action
               definitionId="org.python.pydev.editor.actions.openLastConsoleHyperlink"
               label="Open Last Hyperlink in Console"
               class="org.python.pydev.editor.actions.PyOpenLastConsoleHyperlink"
               id="org.python.pydev.editor.actions.openLastConsoleHyperlink">
         </action>
      </editorContribution>
   </extension>


<!-- Editor Context (formerly scope) -->
    <extension point="org.eclipse.ui.contexts">
      <context
            name="PyDev editor scope"
            parentId="org.eclipse.ui.textEditorScope"
            description="PyDev commands"
            id="org.python.pydev.ui.editor.scope">
      </context>
    </extension>
<!-- associates commands with keyboard shortcuts -->
<!-- Commands -->
    <extension point="org.eclipse.ui.commands">

<!--category: Editor Commands-->
      <category
            name="PyDev - Editor"
            description="PyDev editor category"
            id="org.python.pydev.ui.category.source">
      </category>
<!--category: Refactor-->
      <category
            name="PyDev - Refactor"
            description="Python refactor category"
            id="org.python.pydev.ui.category.refactoring">
      </category>

<!-- command: goto first char-
      <command
            description="Goes to the first non space char or first char of the line depending on the cursor position."
            id="org.python.pydev.editor.actions.firstChar"
            categoryId="org.python.pydev.ui.category.source"
            name="First char">
      </command>
-->
<!-- command: backspace considering indentation-->
<!-- Backspace now handled in VerifyKey (incremental find integration)
      <command
            description="Backspace considering indentation for Python."
            id="org.python.pydev.editor.actions.pybackspace"
            categoryId="org.python.pydev.ui.category.source"
            name="Python Backspace (with indentation)">
      </command>
-->
<!-- command: exec line in console-->
      <command
            name="Execute line in console"
            description="Executes the current line in the console."
            categoryId="org.python.pydev.ui.category.source"
            id="org.python.pydev.editor.actions.execLineInConsole">
      </command>
<!-- command: next method / class-->
      <command
            name="Next Method or Class"
            description="Navigates to the next method or class definition"
            categoryId="org.python.pydev.ui.category.source"
            id="org.python.pydev.editor.actions.navigation.nextMethod">
      </command>
<!-- command: previous method / class-->
      <command
            name="Previous Method or Class"
            description="Navigates to the previous method or class definition"
            categoryId="org.python.pydev.ui.category.source"
            id="org.python.pydev.editor.actions.navigation.previousMethod">
      </command>
<!-- command: space to tab-->
      <command
            name="Convert space-tabs to tabs"
            description="Converts tab-width space groups to tabs from selected region or whole document if nothing selected"
            categoryId="org.python.pydev.ui.category.source"
            id="org.python.pydev.editor.actions.convertSpaceToTab">
      </command>
<!-- command: tab to space-->
      <command
            name="Convert tabs to space-tabs"
            description="Converts tabs to tab-width space groups from selected region or whole document if nothing selected"
            categoryId="org.python.pydev.ui.category.source"
            id="org.python.pydev.editor.actions.convertTabToSpace">
      </command>
<!-- command: unblock-->
      <command
            name="Remove Comment Block"
            description="Removes a python comment block"
            categoryId="org.python.pydev.ui.category.source"
            id="org.python.pydev.editor.actions.removeBlockComment">
      </command>
<!-- command: block-->
      <command
            name="Add Comment Block"
            description="Creates a python comment block"
            categoryId="org.python.pydev.ui.category.source"
            id="org.python.pydev.editor.actions.addBlockComment">
      </command>
<!-- command: block-->
      <command
            name="Add Single Comment Block"
            description="Creates a comment block from a single line"
            categoryId="org.python.pydev.ui.category.source"
            id="org.python.pydev.editor.actions.addSingleBlockComment">
      </command>
<!-- command: uncomment-->
      <command
            name="Python Uncomment"
            description="Uncomments a python line (Removes # from the beggining of the line)"
            categoryId="org.python.pydev.ui.category.source"
            id="org.python.pydev.editor.actions.uncomment">
      </command>
<!-- command: comment-->
      <command
            name="Python Comment"
            description="Comments a python line (Adds # to beggining of the line)"
            categoryId="org.python.pydev.ui.category.source"
            id="org.python.pydev.editor.actions.comment">
      </command>
<!-- command: toggle comment-->
      <command
            name="Python Toggle Comment"
            description="Toggles comments of python line/s (Adds/Removes # at beggining of the line)"
            categoryId="org.python.pydev.ui.category.source"
            id="org.python.pydev.editor.actions.togglecomment">
      </command>
<!-- command: Collapse-->
      <command
            name="Python Collapse"
            description="Collapse block of code"
            categoryId="org.python.pydev.ui.category.source"
            id="org.python.pydev.editor.actions.navigation.pyCollapse">
      </command>
<!-- command: Un Collapse-->
      <command
            name="Python Un Collapse"
            description="Un Collapse block of code"
            categoryId="org.python.pydev.ui.category.source"
            id="org.python.pydev.editor.actions.navigation.pyUnCollapse">
      </command>
<!-- command: Collapse All-->
      <command
            name="Python Collapse All"
            description="Collapse all blocks of code"
            categoryId="org.python.pydev.ui.category.source"
            id="org.python.pydev.editor.actions.navigation.pyCollapseAll">
      </command>
<!-- command: Un Collapse-->
      <command
            name="Python Un Collapse All"
            description="Un Collapse all blocks of code"
            categoryId="org.python.pydev.ui.category.source"
            id="org.python.pydev.editor.actions.navigation.pyUnCollapseAll">
      </command>
<!-- command: Show outline-->
      <command
            name="Python Show Outline"
            description="Show Outline"
            categoryId="org.python.pydev.ui.category.source"
            id="org.python.pydev.editor.actions.pyShowOutline">
      </command>
<!-- command: Select default interpreter-->
      <command
            name="PyDev: Select default interpreter"
            description="Select the default interpreter to be used."
            categoryId="org.python.pydev.ui.category.source"
            id="org.python.pydev.editor.actions.pySelectInterpreter">
      </command>
<!-- command: Show browser-->
      <command
            name="Python Show Global Tokens (Editor)"
            description="Python Show Global Tokens (Editor)"
            categoryId="org.python.pydev.ui.category.source"
            id="org.python.pydev.editor.actions.pyShowBrowser">
      </command>
<!-- command: Organize Imports-->
      <command
            name="Python Organize Imports"
            description="Organize Imports"
            categoryId="org.python.pydev.ui.category.source"
            id="org.python.pydev.editor.actions.pyOrganizeImports">
      </command>
<!-- command: Format code-->
      <command
            name="Python Format Code"
            description="Format Code"
            categoryId="org.python.pydev.ui.category.source"
            id="org.python.pydev.editor.actions.pyFormatStd">
      </command>
<!-- command: Select Word-->
      <command
            name="Select Word"
            description="Select the whole word"
            categoryId="org.python.pydev.ui.category.source"
            id="org.python.pydev.editor.actions.pySelectWord">
      </command>
<!-- command: wrap paragraph-->
      <command
            name="Wrap Paragraph (Ctrl+2,w)"
            description="Wraps the current paragraph"
            categoryId="org.python.pydev.ui.category.source"
            id="org.python.pydev.editor.actions.wrapparagraph">
      </command>
<!-- command: Copy Context Qualified Name-->
      <command
            name="Copy Context Qualified Name"
            description="Copies the Path of the selected context"
            categoryId="org.python.pydev.ui.category.source"
            id="org.python.pydev.editor.actions.copyqualifiedname">
      </command>
<!-- command: Toggle Force Tabs-->
      <command
            name="Toggle Force tabs"
            description="Forces or not tabs in the current editor"
            categoryId="org.python.pydev.ui.category.source"
            id="org.python.pydev.editor.actions.toggleforcetabs">
      </command>
  <!-- Offline Command -->
      <command
            name="Offline Action for scripting"
            description="Offline Action for scripting"
            categoryId="org.python.pydev.ui.category.source"
            id="org.python.pydev.editor.actions.scriptEngine"/>
  <!-- Go to matching bracket -->
      <command
            name="Go to Matching Bracket"
            description="Go to Matching Bracket"
            categoryId="org.python.pydev.ui.category.source"
            id="org.python.pydev.editor.actions.goToMatchingBracket"/>
  <!-- Select Enclosing Scope -->
      <command
            name="Select Enclosing Scope"
            description="Select Enclosing Scope"
            categoryId="org.python.pydev.ui.category.source"
            id="org.python.pydev.editor.actions.selectEnclosingScope"/>
  <!-- Deselect Enclosing Scope -->
      <command
            name="Deselect Enclosing Scope"
            description="Deselect Enclosing Scope"
            categoryId="org.python.pydev.ui.category.source"
            id="org.python.pydev.editor.actions.deselectEnclosingScope"/>
  <!-- Open last hyperlink in console -->
      <command
            name="Open last hyperlink in console"
            description="Open last hyperlink in console"
            categoryId="org.python.pydev.ui.category.source"
            id="org.python.pydev.editor.actions.openLastConsoleHyperlink"/>
   </extension>

   <extension point="org.eclipse.ui.bindings">
      <!--
      Note:
      M1=Ctrl
      M2=Shift
      M3=Alt
      -->
      <!--
      <key
            sequence="HOME"
            contextId="org.python.pydev.ui.editor.scope"
            commandId="org.python.pydev.editor.actions.firstChar"
            schemeId="org.eclipse.ui.defaultAcceleratorConfiguration">
      </key>
      -->
      <!--TODO: guessing at name "BACKSPACE, needs verification -->
      <!-- Backspace now handled in VerifyKey (incremental find integration)
      <key
            sequence="BACKSPACE"
            contextId="org.python.pydev.ui.editor.scope"
            commandId="org.python.pydev.editor.actions.pybackspace"
            schemeId="org.eclipse.ui.defaultAcceleratorConfiguration">
      </key>
      -->
      <key
            sequence="M1+M2+Arrow_Up"
            contextId="org.python.pydev.ui.editor.scope"
            commandId="org.python.pydev.editor.actions.navigation.previousMethod"
            schemeId="org.eclipse.ui.defaultAcceleratorConfiguration">
      </key>
      <key
            sequence="M1+5"
            contextId="org.python.pydev.ui.editor.scope"
            commandId="org.python.pydev.editor.actions.removeBlockComment"
            schemeId="org.eclipse.ui.defaultAcceleratorConfiguration">
      </key>
      <key
            sequence="M1+4"
            contextId="org.python.pydev.ui.editor.scope"
            commandId="org.python.pydev.editor.actions.addBlockComment"
            schemeId="org.eclipse.ui.defaultAcceleratorConfiguration">
      </key>
      <key
            sequence="M1+M2+4"
            contextId="org.python.pydev.ui.editor.scope"
            commandId="org.python.pydev.editor.actions.addSingleBlockComment"
            schemeId="org.eclipse.ui.defaultAcceleratorConfiguration">
      </key>
      <key
            sequence="M1+\"
            contextId="org.python.pydev.ui.editor.scope"
            commandId="org.python.pydev.editor.actions.uncomment"
            schemeId="org.eclipse.ui.defaultAcceleratorConfiguration">
      </key>
      <key
            sequence="M1+M2+3"
            contextId="org.python.pydev.ui.editor.scope"
            commandId="org.python.pydev.editor.actions.uncomment"
            schemeId="org.eclipse.ui.defaultAcceleratorConfiguration">
      </key>
      <key
            sequence="M1+M2+Arrow_Down"
            contextId="org.python.pydev.ui.editor.scope"
            commandId="org.python.pydev.editor.actions.navigation.nextMethod"
            schemeId="org.eclipse.ui.defaultAcceleratorConfiguration">
      </key>
      <!-- Note: bound in pyedit_exec_line_in_shell.py -->
      <key
            sequence="F2"
            contextId="org.python.pydev.ui.editor.scope"
            commandId="org.python.pydev.editor.actions.execLineInConsole"
            schemeId="org.eclipse.ui.defaultAcceleratorConfiguration">
      </key>
      <key
            sequence="M1+/"
            contextId="org.python.pydev.ui.editor.scope"
            commandId="org.python.pydev.editor.actions.togglecomment"
            schemeId="org.eclipse.ui.defaultAcceleratorConfiguration">
      </key>
      <!-- Removed: by default Ctrl+3 is the go-to any command/location of Eclipse (user can remap if wanted).
      <key
            sequence="M1+3"
            contextId="org.python.pydev.ui.editor.scope"
            commandId="org.python.pydev.editor.actions.comment"
            schemeId="org.eclipse.ui.defaultAcceleratorConfiguration">
      </key>
      -->
      <key
            sequence="M1+Numpad_Subtract"
            contextId="org.python.pydev.ui.editor.scope"
            commandId="org.python.pydev.editor.actions.navigation.pyCollapse"
            schemeId="org.eclipse.ui.defaultAcceleratorConfiguration">
      </key>
      <key
            sequence="M1+Numpad_Add"
            contextId="org.python.pydev.ui.editor.scope"
            commandId="org.python.pydev.editor.actions.navigation.pyUnCollapse"
            schemeId="org.eclipse.ui.defaultAcceleratorConfiguration">
      </key>
      <key
            sequence="M1+Numpad_Divide"
            contextId="org.python.pydev.ui.editor.scope"
            commandId="org.python.pydev.editor.actions.navigation.pyCollapseAll"
            schemeId="org.eclipse.ui.defaultAcceleratorConfiguration">
      </key>
      <key
            sequence="M1+Numpad_Multiply"
            contextId="org.python.pydev.ui.editor.scope"
            commandId="org.python.pydev.editor.actions.navigation.pyUnCollapseAll"
            schemeId="org.eclipse.ui.defaultAcceleratorConfiguration">
      </key>
      <key
            sequence="M1+O"
            contextId="org.python.pydev.ui.editor.scope"
            commandId="org.python.pydev.editor.actions.pyShowOutline"
            schemeId="org.eclipse.ui.defaultAcceleratorConfiguration">
      </key>
      <key
            sequence="M1+M2+M3+I"
            contextId="org.python.pydev.ui.editor.scope"
            commandId="org.python.pydev.editor.actions.pySelectInterpreter"
            schemeId="org.eclipse.ui.defaultAcceleratorConfiguration">
      </key>
      <key
            sequence="M1+M2+T"
            contextId="org.python.pydev.ui.editor.scope"
            commandId="org.python.pydev.editor.actions.pyShowBrowser"
            schemeId="org.eclipse.ui.defaultAcceleratorConfiguration">
      </key>
      <key
            sequence="M1+M2+O"
            contextId="org.python.pydev.ui.editor.scope"
            commandId="org.python.pydev.editor.actions.pyOrganizeImports"
            schemeId="org.eclipse.ui.defaultAcceleratorConfiguration">
      </key>
      <key
            sequence="M1+M2+F"
            contextId="org.python.pydev.ui.editor.scope"
            commandId="org.python.pydev.editor.actions.pyFormatStd"
            schemeId="org.eclipse.ui.defaultAcceleratorConfiguration">
      </key>
      <key
            sequence="M1+2"
            contextId="org.python.pydev.ui.editor.scope"
            commandId="org.python.pydev.editor.actions.scriptEngine"
            schemeId="org.eclipse.ui.defaultAcceleratorConfiguration">
      </key>
      <key
            sequence="M1+M2+P"
            contextId="org.python.pydev.ui.editor.scope"
            commandId="org.python.pydev.editor.actions.goToMatchingBracket"
            schemeId="org.eclipse.ui.defaultAcceleratorConfiguration">
      </key>
      <key
            sequence="M2+M3+Arrow_Up"
            contextId="org.python.pydev.ui.editor.scope"
            commandId="org.python.pydev.editor.actions.selectEnclosingScope"
            schemeId="org.eclipse.ui.defaultAcceleratorConfiguration">
      </key>
      <key
            sequence="M2+M3+Arrow_Down"
            contextId="org.python.pydev.ui.editor.scope"
            commandId="org.python.pydev.editor.actions.deselectEnclosingScope"
            schemeId="org.eclipse.ui.defaultAcceleratorConfiguration">
      </key>
      <key
            sequence="M1+M2+M3+O"
            contextId="org.python.pydev.ui.editor.scope"
            commandId="org.python.pydev.editor.actions.openLastConsoleHyperlink"
            schemeId="org.eclipse.ui.defaultAcceleratorConfiguration">
      </key>
   </extension>


<extension point="org.eclipse.ui.perspectiveExtensions">
    <perspectiveExtension targetID="org.python.pydev.ui.PythonPerspective">
        <actionSet id="com.python.pydev.navigate.actionSet"/>
    </perspectiveExtension>
    <perspectiveExtension targetID="org.eclipse.debug.ui.DebugPerspective">
        <actionSet id="com.python.pydev.navigate.actionSet"/>
    </perspectiveExtension>
</extension>

<extension point="org.eclipse.ui.commands">
      <command
            name="Python Show Global Tokens (Global)"
            description="Python Show Global Tokens (Global)"
            categoryId="org.python.pydev.ui.category.source"
            id="com.python.pydev.analysis.actions.pyGlobalsBrowserWorkbench">
      </command>
</extension>

<extension point="org.eclipse.ui.contexts">
      <context
            description="PyDev view (PyUnit, PyOutline, etc)."
            id="com.python.pydev.contexts.window"
            name="PyDev view"
            parentId="org.eclipse.ui.contexts.window">
      </context>
</extension>

<extension point="org.eclipse.ui.bindings">
      <key
            sequence="M1+M2+T"
            contextId="com.python.pydev.contexts.window"
            commandId="com.python.pydev.analysis.actions.pyGlobalsBrowserWorkbench"
            schemeId="org.eclipse.ui.defaultAcceleratorConfiguration">
      </key>
</extension>


<!-- file type extensions for the team (CVS) -->
   <extension point="org.eclipse.team.core.fileTypes">
      <fileTypes type="text" extension="py"/>
      <fileTypes type="text" extension="pyw"/>
      <fileTypes type="text" extension="pyx"/>
      <fileTypes type="text" extension="pxd"/>
      <fileTypes type="text" extension="pxi"/>
   </extension>
   <extension point="org.eclipse.team.core.ignore">
      <ignore enabled="true" pattern="*.pyc"/>
      <ignore enabled="true" pattern="*.class"/>
      <ignore enabled="true" pattern="*.pyo"/>
      <ignore enabled="true" pattern="__pycache__"/>
   </extension>
<!-- filter out .pyc files in the navigation view -->
   <extension
         point="org.eclipse.ui.ide.resourceFilters">
      <filter selected="True" pattern="*.pyc"/>
      <filter selected="True" pattern="*.class"/>
      <filter selected="True" pattern="*.pyo"/>
      <filter selected="True" pattern="__pycache__"/>
   </extension>
<!-- add quick-fixes (does nothing right now) -->
    <extension
         point="org.eclipse.ui.ide.markerResolution">
      <markerResolutionGenerator
            class="org.python.pydev.editor.correctionassist.PyQuickFix"
            markerType="org.eclipse.core.resources.problemmarker"/>
    </extension>
<!-- Communicate pylint problems as markers -->
    <extension
        point="org.eclipse.core.resources.markers"
        name="PyLint Problem"
        id="pylintproblemmarker">
       <super type="org.eclipse.core.resources.problemmarker"/>
       <persistent value="true"/>
    </extension>
<!-- Communicate mypy problems as markers -->
    <extension
        point="org.eclipse.core.resources.markers"
        name="Mypy Problem"
        id="mypyproblemmarker">
       <super type="org.eclipse.core.resources.problemmarker"/>
       <persistent value="true"/>
    </extension>
<!-- Communicate ruff problems as markers -->
    <extension
        point="org.eclipse.core.resources.markers"
        name="Ruff Problem"
        id="ruffproblemmarker">
       <super type="org.eclipse.core.resources.problemmarker"/>
       <persistent value="true"/>
    </extension>
    <!-- Communicate flake8 problems as markers -->
    <extension
        point="org.eclipse.core.resources.markers"
        name="Flake8 Problem"
        id="flake8problemmarker">
       <super type="org.eclipse.core.resources.problemmarker"/>
       <persistent value="true"/>
    </extension>
    <!-- Communicate pyright problems as markers -->
    <extension
        point="org.eclipse.core.resources.markers"
        name="PyRight Problem"
        id="pyrightproblemmarker">
       <super type="org.eclipse.core.resources.problemmarker"/>
       <persistent value="true"/>
    </extension>
<!-- Communicate 'invalid' file issues-->
    <extension
        point="org.eclipse.core.resources.markers"
        name="Invalid python file marker"
        id="invalidpythonfilemarker">
       <super type="org.eclipse.core.resources.problemmarker"/>
       <persistent value="false"/>
    </extension>
<!-- Markers for the pydev package explorer -->
    <extension
        point="org.eclipse.core.resources.markers"
        name="PyDev Project Error"
        id="PydevProjectErrorMarkers">
       <super type="org.eclipse.core.resources.problemmarker"/>
       <persistent value="false"/>
    </extension>
<!-- templates -->
    <extension point="org.eclipse.ui.editors.templates">
         <contextType
               class="org.python.pydev.editor.templates.PyContextType"
               id="org.python.pydev.editor.templates.python"
               name="Editor"/>
         <contextType
               class="org.python.pydev.editor.templates.PyContextType"
               id="org.python.pydev.editor.templates.python.modules"
               name="New Module"/>
    </extension>
<!-- extensions -->
<!-- extensions -->
<!-- extensions -->
<!-- extensions -->
<!-- extensions -->
<!-- extensions -->
   <extension-point id="pydev_view_created_observer" name="PyDev view created observer" schema="schema/pydev_view_created_observer.exsd"/>
   <extension-point id="pydev_ctrl_1" name="PyDev M11 participant" schema="schema/pydev_ctrl_1.exsd"/>
   <extension-point id="pydev_organize_imports" name="PyDev Organize Imports" schema="schema/pydev_organize_imports.exsd"/>
   <extension-point id="pydev_quick_outline" name="PyDev Quick Outline" schema="schema/pydev_quick_outline.exsd"/>
   <extension-point id="pydev_pyedit_listener" name="PyEdit Listener" schema="schema/pydev_pyedit_listener.exsd"/>
   <extension-point id="pydev_formatter" name="PyDev Formatter" schema="schema/pydev_formatter.exsd"/>
   <extension-point id="pydev_globals_browser" name="PyDev Globals Browser" schema="schema/pydev_globals_browser.exsd"/>
   <extension-point id="pydev_debug_preferences_page" name="PyDev Debug Preferences Page" schema="schema/pydev_debug_preferences_page.exsd"/>
   <extension-point id="pydev_interpreter_provider" name="PyDev interpreter provider" schema="schema/pydev_interpreter_provider.exsd"/>
   <extension-point id="pydev_hover2" name="PyDev Hover2" schema="schema/pydev_hover2.exsd"/>
<!-- wizards -->
   <extension point="org.eclipse.ui.newWizards">
      <category
            id="org.python.pydev.PythonCategory"
            name="PyDev"/>
      <wizard
            canFinishEarly="false"
            category="org.python.pydev.PythonCategory"
            class="org.python.pydev.ui.wizards.project.PythonProjectWizard"
            finalPerspective="org.python.pydev.ui.PythonPerspective"
            hasPages="true"
            icon="platform:/plugin/org.python.pydev.shared_ui/icons/python_16x16.png"
            id="org.python.pydev.ui.wizards.project.PythonProjectWizard"
            name="PyDev Project"
            preferredPerspectives="org.python.pydev.ui.PythonPerspective"
            project="true"/>

      <!--
      <wizard
            canFinishEarly="false"
            category="org.python.pydev.PythonCategory"
            class="org.python.pydev.ui.wizards.gettingstarted.PythonGettingStartedWizard"
            finalPerspective="org.python.pydev.ui.PythonPerspective"
            hasPages="true"
            icon="platform:/plugin/org.python.pydev.shared_ui/icons/mainfunction.gif"
            id="org.python.pydev.ui.wizards.gettingstarted.PythonGettingStartedWizard"
            name="PyDev Getting Started"
            preferredPerspectives="org.python.pydev.ui.PythonPerspective"
            project="true"/>
      -->
      <wizard
            canFinishEarly="false"
            category="org.python.pydev.PythonCategory"
            class="org.python.pydev.ui.wizards.files.PythonSourceFolderWizard"
            finalPerspective="org.python.pydev.ui.PythonPerspective"
            hasPages="true"
            icon="platform:/plugin/org.python.pydev.shared_ui/icons/packagefolder_obj.gif"
            id="org.python.pydev.ui.wizards.files.PythonSourceFolderWizard"
            name="Source Folder"
            preferredPerspectives="org.python.pydev.ui.PythonPerspective"
            project="false"/>
      <wizard
            canFinishEarly="false"
            category="org.python.pydev.PythonCategory"
            class="org.python.pydev.ui.wizards.files.PythonExistingSourceFolderWizard"
            finalPerspective="org.python.pydev.ui.PythonPerspective"
            hasPages="true"
            icon="platform:/plugin/org.python.pydev.shared_ui/icons/packagefolder_obj.gif"
            id="org.python.pydev.ui.wizards.files.PythonExistingSourceFolderWizard"
            name="Link to Existing Source"
            preferredPerspectives="org.python.pydev.ui.PythonPerspective"
            project="false"/>
      <wizard
            canFinishEarly="false"
            category="org.python.pydev.PythonCategory"
            class="org.python.pydev.ui.wizards.files.PythonPackageWizard"
            finalPerspective="org.python.pydev.ui.PythonPerspective"
            hasPages="true"
            icon="platform:/plugin/org.python.pydev.shared_ui/icons/package_obj.gif"
            id="org.python.pydev.ui.wizards.files.PythonPackageWizard"
            name="PyDev Package"
            preferredPerspectives="org.python.pydev.ui.PythonPerspective"
            project="false"/>
      <wizard
            canFinishEarly="false"
            category="org.python.pydev.PythonCategory"
            class="org.python.pydev.ui.wizards.files.PythonModuleWizard"
            finalPerspective="org.python.pydev.ui.PythonPerspective"
            hasPages="true"
            icon="platform:/plugin/org.python.pydev.shared_ui/icons/python_file.gif"
            id="org.python.pydev.ui.wizards.files.PythonModuleWizard"
            name="PyDev Module"
            preferredPerspectives="org.python.pydev.ui.PythonPerspective"
            project="false"/>
   </extension>
   <extension point="org.eclipse.ui.perspectives">
      <perspective
            class="org.python.pydev.ui.perspective.PythonPerspectiveFactory"
            icon="platform:/plugin/org.python.pydev.shared_ui/icons/python_16x16.png"
            id="org.python.pydev.ui.PythonPerspective"
            name="PyDev"/>
   </extension>
   <extension point="org.eclipse.ui.perspectiveExtensions">
      <perspectiveExtension targetID="org.python.pydev.ui.PythonPerspective">
         <showInPart id="org.python.pydev.navigator.view"/>
         <showInPart id="org.eclipse.ui.navigator.ProjectExplorer"/>
         <showInPart id="org.eclipse.ui.views.ContentOutline"/>
      </perspectiveExtension>
   </extension>



   <extension
         id="org.python.pydev.refactoring.popupContribution"
         point="org.eclipse.ui.popupMenus">
      <viewerContribution
            id="org.python.pydev.popupContribution"
            targetID="#PyEditContext">
         <action
               class="org.python.pydev.editor.actions.PyCopyQualifiedName"
               definitionId="org.python.pydev.editor.actions.copyqualifiedname"
               id="org.python.pydev.editor.actions.copyqualifiedname"
               label="Copy Context Qualified Name"
               menubarPath="copy"
               icon="platform:/plugin/org.python.pydev.shared_ui/icons/cpyqual_menu.gif"/>
         <action
               class="org.python.pydev.editor.actions.PyToggleForceTabs"
               definitionId="org.python.pydev.editor.actions.toggleforcetabs"
               id="org.python.pydev.editor.actions.toggleforcetabs"
               label="Toggle force tabs"
               menubarPath="tabs"
               icon="platform:/plugin/org.python.pydev.shared_ui/icons/tabs_active.png"/>
      </viewerContribution>
      <viewerContribution
            targetID="#PyEditRulerContext"
            id="org.python.pydev.ruler.context.actions">
         <action
               label="%AddTask.label"
               helpContextId="org.eclipse.ui.AddTask_action_context"
               class="org.eclipse.ui.texteditor.TaskRulerAction"
               tooltip="%AddTask.tooltip"
               menubarPath="additions"
               id="org.eclipse.ui.texteditor.TaskRulerAction">
         </action>
         <action
               label="%AddBookmark.label"
               helpContextId="org.eclipse.ui.bookmark_action_context"
               class="org.eclipse.ui.texteditor.BookmarkRulerAction"
               tooltip="%AddBookmark.tooltip"
               menubarPath="additions"
               id="org.eclipse.ui.texteditor.BookmarkRulerAction">
         </action>
      </viewerContribution>
   </extension>


<!-- ********************** PyDev Package Explorer ********************** -->
<!-- ********************** PyDev Package Explorer ********************** -->
<!-- ********************** PyDev Package Explorer ********************** -->
<!-- ********************** PyDev Package Explorer ********************** -->

<!-- Declare the view part to hold the default implementation -->
<extension point="org.eclipse.ui.views">
   <category
        name="PyDev"
        id="org.python.pydev"/>
    <view
        allowMultiple="false"
        category="org.python.pydev"
        class="org.python.pydev.navigator.ui.PydevPackageExplorer"
        id="org.python.pydev.navigator.view"
        icon="platform:/plugin/org.python.pydev.shared_ui/icons/pydev_package_explorer.gif"
        name="PyDev Package Explorer"/>
</extension>


<!-- Declare the python content in the project explorer
-->
<extension point="org.eclipse.ui.navigator.viewer">
    <viewerContentBinding viewerId="org.eclipse.ui.navigator.ProjectExplorer">
        <includes>
            <contentExtension pattern="org.python.pydev.navigator.pythoncontent"/>
            <contentExtension pattern="org.python.pydev.navigator.filters.*"/>
            <contentExtension pattern="org.python.pydev.navigator.actions.pythonLinkHelper"/>
        </includes>
    </viewerContentBinding>
</extension>

<extension point="org.eclipse.ui.navigator.viewer">
    <viewer viewerId="org.python.pydev.navigator.view">
    	<!-- allowsPlatformContributions="true" allows it to show the cvs stuff
        -->
        <popupMenu allowsPlatformContributions="true" id="org.python.pydev.navigator.view#PopupMenu">
             <insertionPoint name="group.new"/>
             <insertionPoint name="group.open" separator="true"/>
             <insertionPoint name="group.openWith"/>
             <insertionPoint name="group.edit" separator="true"/>
             <insertionPoint name="group.reorganize" />
             <insertionPoint name="group.port" separator="true"/>
             <insertionPoint name="group.build" separator="true"/>
             <insertionPoint name="group.generate" separator="true"/>
             <insertionPoint name="group.search" separator="true"/>
             <insertionPoint name="additions" separator="true"/>
             <insertionPoint name="group.properties" separator="true"/>
        </popupMenu>
    </viewer>
    <viewerContentBinding viewerId="org.python.pydev.navigator.view">
        <includes>
            <contentExtension pattern="org.eclipse.ui.navigator.resourceContent"/>
            <contentExtension pattern="org.eclipse.ui.navigator.resources.filters.*"/>
            <contentExtension pattern="org.python.pydev.navigator.pythoncontent"/>
            <contentExtension pattern="org.python.pydev.navigator.filters.*"/>
        </includes>
    </viewerContentBinding>
    <dragAssistant class="org.eclipse.ui.navigator.resources.ResourceDragAdapterAssistant" viewerId="org.python.pydev.navigator.view"/>
</extension>

  <!-- Error decorations -->
    <extension point="org.eclipse.ui.decorators">
      <decorator
            adaptable="false"
            class="org.python.pydev.navigator.decorator.ProblemsLabelDecorator"
            id="org.python.pydev.navigator.decorator.problemsLabelDecorator"
            label="PyDev elements error decorations"
            lightweight="true"
            location="BOTTOM_LEFT"
            state="true">
         <enablement>
            <objectClass
                  name="org.python.pydev.navigator.elements.IWrappedResource">
            </objectClass>
         </enablement>
      </decorator>
    </extension>
  <!-- Declare a content extension that renders the contents of a properties file -->
  <extension point="org.eclipse.ui.navigator.navigatorContent">

      <navigatorContent
            id="org.python.pydev.navigator.pythoncontent"
            name="PyDev Navigator Content"
            icon="platform:/plugin/org.python.pydev.shared_ui/icons/python_16x16.png"
            contentProvider="org.python.pydev.navigator.PythonModelProvider"
            labelProvider="org.python.pydev.navigator.PythonLabelProvider"
            activeByDefault="true"
            priority="higher">
         <triggerPoints>
             <or>
                <instanceof value="org.eclipse.core.resources.IWorkspaceRoot" />
                <instanceof value="org.eclipse.ui.IWorkingSet"/>
                <and>
                   <instanceof value="org.eclipse.core.resources.IProject"/>
                   <test
                         forcePluginActivation="true"
                         property="org.eclipse.core.resources.projectNature"
                         value="org.python.pydev.pythonNature"/>
                </and>
                <instanceof value="org.eclipse.core.resources.IFolder"/>
                <instanceof value="org.eclipse.core.resources.IStorage"/>
                <instanceof value="org.eclipse.core.resources.IFile"/>
                <instanceof value="org.eclipse.core.resources.IResource"/>
                <instanceof value="org.python.pydev.navigator.elements.IWrappedResource"/>
                <instanceof value="org.python.pydev.shared_core.structure.TreeNode"/>
                <instanceof value="org.python.pydev.navigator.elements.PythonNode"/>
                <instanceof value="org.python.pydev.navigator.elements.ProjectConfigError"/>
            </or>
         </triggerPoints>
         <possibleChildren>
            <or>
                <adapt type="org.eclipse.core.resources.IProject" />
                <adapt type="org.eclipse.ui.IWorkingSet" />
                <instanceof value="org.eclipse.core.resources.IWorkspaceRoot" />
                <instanceof value="org.eclipse.core.resources.IFolder" />
                <instanceof value="org.eclipse.core.resources.IStorage"/>
                <instanceof value="org.eclipse.core.resources.IFile" />
                <instanceof value="org.eclipse.core.resources.IResource"/>
                <instanceof value="org.python.pydev.navigator.elements.IWrappedResource"/>
                <instanceof value="org.python.pydev.shared_core.structure.TreeNode"/>
                <instanceof value="org.python.pydev.navigator.elements.PythonNode"/>
            </or>
         </possibleChildren>
         <commonSorter
               class="org.python.pydev.navigator.sorter.PythonModelSorter"
               id="org.python.pydev.navigator.sorter.pythonmodelsorter"/>
         <actionProvider
               class="org.python.pydev.navigator.actions.PythonActionProvider"
               id="org.python.pydev.navigator.actions.pythonActionProvider"
               overrides="org.eclipse.ui.navigator.resources.actions.EditActions"/>
         <actionProvider
               class="org.python.pydev.navigator.actions.PythonRefactorActionProvider"
               id="org.python.pydev.navigator.actions.pythonRefactorActionProvider"
               overrides="org.eclipse.ui.navigator.resources.actions.RefactorActions"/>
         <!-- that's so that we only have the python content shown, and not the resource content -->
		 <override
				policy="InvokeAlwaysRegardlessOfSuppressedExt"
				suppressedExtensionId="org.eclipse.ui.navigator.resourceContent"/>
        <dropAssistant
              class="org.python.pydev.navigator.actions.copied.PyResourceDropAdapterAssistant"
              id="org.python.pydev.navigator.actions.PyResourceDropAdapterAssistant">
           <possibleDropTargets>
              <or>
                 <adapt type="org.eclipse.core.resources.IProject"/>
                 <adapt type="org.eclipse.core.resources.IFolder"/>
                 <adapt type="org.eclipse.core.resources.IFile"/>
              </or>
           </possibleDropTargets>
        </dropAssistant>


      </navigatorContent>
	  <commonWizard menuGroupId="org.python.pydev.ui.wizards" type="new" wizardId="org.python.pydev.ui.wizards.files.PythonPackageWizard">
	     <enablement>
	        <or>
	           <instanceof value="org.python.pydev.navigator.elements.PythonFolder"/>
               <instanceof value="org.python.pydev.navigator.elements.PythonSourceFolder"/>
	           <adapt type="org.eclipse.core.resources.IProject">
	              <test
	                    property="org.eclipse.core.resources.projectNature"
	                    value="org.python.pydev.pythonNature"/>
	           </adapt>
	        </or>
	     </enablement>
	  </commonWizard>
	  <commonWizard menuGroupId="org.python.pydev.ui.wizards" type="new" wizardId="org.python.pydev.ui.wizards.files.PythonModuleWizard">
	     <enablement>
	        <or>
               <instanceof value="org.python.pydev.navigator.elements.PythonFolder"/>
               <instanceof value="org.python.pydev.navigator.elements.PythonSourceFolder"/>
	           <adapt type="org.eclipse.core.resources.IProject">
	              <test
	                    property="org.eclipse.core.resources.projectNature"
	                    value="org.python.pydev.pythonNature"/>
	           </adapt>
	        </or>
	     </enablement>
	  </commonWizard>
	  <commonWizard menuGroupId="org.python.pydev.ui.wizards" type="new" wizardId="org.python.pydev.ui.wizards.files.PythonExistingSourceFolderWizard">
	     <enablement>
	        <or>
	           <adapt type="org.eclipse.core.resources.IProject">
	              <test
	                    property="org.eclipse.core.resources.projectNature"
	                    value="org.python.pydev.pythonNature"/>
	           </adapt>
	        </or>
	     </enablement>
	  </commonWizard>
	  <commonWizard menuGroupId="org.python.pydev.ui.wizards" type="new" wizardId="org.python.pydev.ui.wizards.files.PythonSourceFolderWizard">
	     <enablement>
	        <or>
	           <adapt type="org.eclipse.core.resources.IProject">
	              <test
	                    property="org.eclipse.core.resources.projectNature"
	                    value="org.python.pydev.pythonNature"/>
	           </adapt>
	        </or>
	     </enablement>
	  </commonWizard>

      <commonFilter activeByDefault="false"
	     name="PyDev: non-PyDev Projects"
      	 description="%HideNonPydevProjects.description"
      	 id="org.python.pydev.navigator.filters.hideNonPydevProjects"
      	 class="org.python.pydev.navigator.filters.PydevProjectsFilter">
      </commonFilter>

  	  <commonFilter activeByDefault="true"
	  	  name="PyDev: .pyc files"
	  	  description="PyDev: *.pyc files"
	  	  id="org.python.pydev.navigator.filters.hidePycFiles"
	  	  class="org.python.pydev.navigator.filters.PycFilter">
	  </commonFilter>

  	  <commonFilter activeByDefault="true"
	  	  name="PyDev: .pyo files"
	  	  description="PyDev: *.pyo files"
	  	  id="org.python.pydev.navigator.filters.hidePyoFiles"
	  	  class="org.python.pydev.navigator.filters.PyoFilter">
	  </commonFilter>

  	  <commonFilter activeByDefault="true"
	  	  name="PyDev: *.py~ files"
	  	  description="PyDev: *.py~ files"
	  	  id="org.python.pydev.navigator.filters.hidePyTildaFiles"
	  	  class="org.python.pydev.navigator.filters.PyTildaFilter">
	  </commonFilter>

  	  <commonFilter activeByDefault="true"
	  	  name="PyDev: __pycache__"
	  	  description="PyDev: __pycache__ folders"
	  	  id="org.python.pydev.navigator.filters.hidePycacheFolders"
	  	  class="org.python.pydev.navigator.filters.PyCacheFilter">
	  </commonFilter>

	  <!-- The ones below are copied from org.eclipse.ui.navigator.resources, with changes from 'instanceof' to 'adapt type'

	  It seems that eclipse 3.6 fixed that, so, it's not needed anymore.
      <commonFilter activeByDefault="true"
	      name="PyDev: .* resources"
	      description="PyDev: .*resources"
	      id="org.python.pydev.navigator.filters.startsWithDot"
	  	  class="org.python.pydev.navigator.filters.DotStartFilter">
      </commonFilter>
      -->

      <commonFilter activeByDefault="true"
	      name="PyDev: .class resources"
	      description="PyDev: .class resources"
	      id="org.python.pydev.navigator.filters.endsWithClass"
	  	  class="org.python.pydev.navigator.filters.ClassFilter">
      </commonFilter>


      <commonFilter activeByDefault="false"
	      name="PyDev: closed projects"
	      description="PyDev: closed projects"
	      id="org.python.pydev.navigator.filters.closedProject"
	  	  class="org.python.pydev.navigator.filters.ClosedProjectsFilter">
      </commonFilter>

      <commonFilter activeByDefault="true"
	      name="PyDev: custom specified filters"
	      description="PyDev: custom specified filters"
	      id="org.python.pydev.navigator.filters.customFilters"
	  	  class="org.python.pydev.navigator.filters.CustomFilters">
      </commonFilter>


      <commonFilter activeByDefault="false"
          name="PyDev: Nodes: All"
          description="PyDev: Nodes: (hide all)"
          id="org.python.pydev.navigator.filters.pythonnodefilter"
          class="org.python.pydev.navigator.filters.PythonNodeFilter">
      </commonFilter>

      <commonFilter activeByDefault="true"
          name="PyDev: Nodes: Imports"
          description="PyDev: Nodes: Imports (hide)"
          id="org.python.pydev.navigator.filters.Imports"
          class="org.python.pydev.navigator.filters.ImportsFilter">
      </commonFilter>

      <commonFilter activeByDefault="false"
          name="PyDev: Nodes: Comments"
          description="PyDev: Nodes: Comments (hide)"
          id="org.python.pydev.navigator.filters.Comments"
          class="org.python.pydev.navigator.filters.CommentsFilter">
      </commonFilter>


      <commonFilter activeByDefault="false"
          name="PyDev: Interpreter Info"
          description="PyDev: Interpreter Info (hide)"
          id="org.python.pydev.navigator.filters.interpreterinfofilter"
          class="org.python.pydev.navigator.filters.InterpreterInfoFilter">
      </commonFilter>




    </extension>

    <!-- Bind the content extension to the viewer -->
    <extension point="org.eclipse.ui.navigator.viewer">
        <viewerContentBinding viewerId="org.python.pydev.navigator.view">
            <includes>
                <contentExtension pattern="org.python.pydev.navigator.pythoncontent"/>
                <contentExtension pattern="org.eclipse.ui.navigator.resourceContent"/>
                <contentExtension pattern="org.python.pydev.navigator.actions.pythonLinkHelper"/>
            </includes>
        </viewerContentBinding>
        <viewerActionBinding viewerId="org.python.pydev.navigator.view">
            <includes>
                <actionExtension pattern="org.python.pydev.navigator.actions.*"/>
	            <actionExtension pattern="org.eclipse.ui.navigator.resources.*"/>
            </includes>
        </viewerActionBinding>
    </extension>

    <extension point="org.eclipse.ui.viewActions">
	  <viewContribution
		id="org.python.pydev.navigator.actions.customFilters"
   		targetID="org.python.pydev.navigator.view">
    	<action
           class="org.python.pydev.navigator.actions.PySetupCustomFilters"
           icon="platform:/plugin/org.python.pydev.shared_ui/icons/filter.gif"
           id="org.python.pydev.navigator.actions.PySetupCustomFilters"
           label="Setup custom filters"
           menubarPath="additions"
           toolbarPath="additions"
           tooltip="Setup custom filters.">
  		</action>
      </viewContribution>

   </extension>

   <!--
   If not done we get:

   No property tester contributes a property org.eclipse.core.resources.open to
   type class org.python.pydev.navigator.elements.PythonProjectSourceFolder
   -->
   <extension point="org.eclipse.core.expressions.propertyTesters">
      <propertyTester
            namespace="org.eclipse.core.resources"
            properties="open"
            type="org.python.pydev.navigator.elements.PythonProjectSourceFolder"
            class="org.python.pydev.navigator.properties.PyPropertyTester"
            id="org.python.pydev.navigator.elements.PythonProjectSourceFolder">
      </propertyTester>
      <propertyTester
            namespace="org.eclipse.core.resources"
            properties="name"
            type="org.python.pydev.navigator.elements.IWrappedResource"
            class="org.python.pydev.navigator.properties.PyPropertyTester"
            id="org.python.pydev.navigator.elements.PythonNameProperty">
      </propertyTester>
   </extension>

	<!-- the adapter factory must be registered (otherwise the CNF cannot 'get it' - even if the objects themselves are
	adaptable).
    -->
    <extension point="org.eclipse.core.runtime.adapters">
         <factory class="org.python.pydev.navigator.ModelAdapter" adaptableType="org.python.pydev.navigator.elements.IWrappedResource">
			<adapter type="org.eclipse.core.resources.IResource"/>
			<adapter type="org.eclipse.core.resources.IFolder"/>
			<adapter type="org.eclipse.core.resources.IProject"/>
			<adapter type="org.eclipse.core.resources.IContainer"/>
			<adapter type="org.eclipse.core.resources.IFile"/>
			<adapter type="org.eclipse.debug.ui.actions.ILaunchable"/>
			<adapter type="org.eclipse.ui.IContributorResourceAdapter"/>
         </factory>
    </extension>

    <!-- linking the navigator -->
	<extension point="org.eclipse.ui.navigator.linkHelper">
		<linkHelper
			class="org.python.pydev.navigator.actions.PythonLinkHelper"
			id="org.python.pydev.navigator.actions.pythonLinkHelper">
			<selectionEnablement>
				<or>
					<adapt type="org.eclipse.core.resources.IFile"/>
				</or>
			</selectionEnablement>
			<editorInputEnablement>
				<!-- Not using org.eclipse.ui.IFileEditorInput so that we can match the CompareEditorInput -->
				<instanceof value="org.eclipse.ui.IEditorInput"/>
			</editorInputEnablement>
		</linkHelper>
	</extension>

	<!-- hyperlink: added on 3.3. see also: PyEditConfiguration.getHyperlinkDetectorTargets -->
   <extension point="org.eclipse.ui.workbench.texteditor.hyperlinkDetectorTargets">
      <target id="org.python.pydev.editor.PythonEditor" name="PyDev Editor">
          <context type="org.eclipse.ui.texteditor.ITextEditor"/>
      </target>
   </extension>

   <extension point="org.python.pydev.pydev_pyedit_listener">
  		<pyedit_listener_participant class="org.python.pydev.builder.syntaxchecker.ClearSyntaxMarkersPyeditListener"/>
   </extension>

   <extension point="org.python.pydev.pydev_pyedit_listener">
  		<pyedit_listener_participant class="org.python.pydev.editor.actions.PyNatureReindexer"/>
   </extension>


<extension
     point="org.eclipse.compare.contentViewers">
  <viewer
        extensions="py,pyw,pyx,pxd,pxi,pyi"
        class="org.python.pydev.compare.PyContentViewerCreator"
        id="org.python.pydev.compare.PyContentViewerCreator">
  </viewer>
    <contentTypeBinding
        contentTypeId="org.python.pydev.pythonfile"
        contentViewerId="org.python.pydev.compare.PyContentViewerCreator">
    </contentTypeBinding>
</extension>

<extension
	point="org.eclipse.compare.contentMergeViewers">
	<viewer
		extensions="py,pyw,pyx,pxd,pxi,pyi"
		class="org.python.pydev.compare.PyContentMergeViewerCreator"
		id="org.python.pydev.compare.PyContentMergeViewerCreator">
	</viewer>
	<contentTypeBinding
		contentTypeId="org.python.pydev.pythonfile"
		contentMergeViewerId="org.python.pydev.compare.PyContentMergeViewerCreator">
	</contentTypeBinding>
</extension>

















<!-- templates -->
<!-- templates -->
<!-- templates -->
<!-- templates -->
<!-- templates -->
<!-- templates -->
<!-- templates -->
<!-- templates -->
<!-- templates -->
<!-- templates -->
<!-- templates -->
<!-- templates -->
<!-- templates -->
<!-- templates -->
<!-- templates -->
<!-- templates -->
<!-- templates -->
<!-- templates -->
<!-- templates -->
<!-- templates -->
<!-- templates -->
<!-- templates -->
<!-- templates -->
<!-- templates -->
<!-- templates -->
<!-- templates -->
<!-- templates -->
<!-- templates -->
<!-- templates -->
<!-- templates -->
<!-- templates -->
<!-- templates -->
<!-- templates -->
<!-- templates -->
<!-- templates -->
<!-- templates -->
<!-- templates -->
<!-- templates -->
<!-- templates -->
<!-- templates -->
<!-- templates -->
<!-- templates -->
<!-- templates -->
<!-- templates -->
<!-- templates -->
<!-- templates -->
<!-- templates -->
   <extension
         point="org.eclipse.ui.editors.templates">


      <template
            autoinsert="false"
            name="super"
            icon="platform:/plugin/org.python.pydev.shared_ui/icons/template.gif"
            description="Call super().current_method()"
            contextTypeId="org.python.pydev.editor.templates.python"
            id="org.python.pydev.editor.templates.python.super">
<pattern>
super().${current_method}(${cursor})
</pattern>
      </template>


      <template
            autoinsert="false"
            name="super_raw"
            icon="platform:/plugin/org.python.pydev.shared_ui/icons/template.gif"
            description="Call superclass.current_method(self)"
            contextTypeId="org.python.pydev.editor.templates.python"
            id="org.python.pydev.editor.templates.python.super_raw">
<pattern>
${superclass}.${current_method}(self${cursor})
</pattern>
      </template>



      <template
            autoinsert="true"
            name="main"
            icon="platform:/plugin/org.python.pydev.shared_ui/icons/template.gif"
            description="Main function pattern."
            contextTypeId="org.python.pydev.editor.templates.python"
            id="org.python.pydev.editor.templates.python.main">
<pattern>
if __name__ == '__main__':
    ${cursor}
</pattern>
      </template>


      <template
            autoinsert="true"
            name="ifmain"
            icon="platform:/plugin/org.python.pydev.shared_ui/icons/template.gif"
            description="Main function pattern."
            contextTypeId="org.python.pydev.editor.templates.python"
            id="org.python.pydev.editor.templates.python.main">
<pattern>
if __name__ == '__main__':
    ${cursor}
</pattern>
      </template>
      <template
            autoinsert="true"
            name="pd"
            icon="platform:/plugin/org.python.pydev.shared_ui/icons/template.gif"
            description="pdb"
            contextTypeId="org.python.pydev.editor.templates.python"
            id="org.python.pydev.editor.templates.python.pdb">
         <pattern>import pdb;pdb.set_trace()</pattern>
      </template>
      <template
            autoinsert="true"
            name="pydevd"
            icon="platform:/plugin/org.python.pydev.shared_ui/icons/template.gif"
            description="pydevd.settrace()"
            contextTypeId="org.python.pydev.editor.templates.python"
            id="org.python.pydev.editor.templates.python.pydevd">
<pattern>import sys;sys.path.append(r'${pydevd_dir_location}')
import pydevd;pydevd.settrace()</pattern>
      </template>
      <template
            autoinsert="true"
            name="pydevd_patch_django_auto_reload"
            icon="platform:/plugin/org.python.pydev.shared_ui/icons/template.gif"
            description="pydevd.patch_django_autoreload()"
            contextTypeId="org.python.pydev.editor.templates.python"
            id="org.python.pydev.editor.templates.python.pydevd_patch_django_auto_reload">
<pattern>import sys;sys.path.append(r'${pydevd_dir_location}')
import pydevd;pydevd.patch_django_autoreload(patch_remote_debugger=True, patch_show_console=True)</pattern>
      </template>
      <template
            autoinsert="true"
            name="eq"
            icon="platform:/plugin/org.python.pydev.shared_ui/icons/template.gif"
            description="equals and not equals"
            contextTypeId="org.python.pydev.editor.templates.python"
            id="org.python.pydev.editor.templates.python.eq">
<pattern>
def __eq__(self, o):
    if isinstance(o, ${current_class}):
        ${pass}${cursor}

    return False

def __ne__(self, o):
	return not self == o
</pattern>

      </template>
      <template
            autoinsert="true"
            contextTypeId="org.python.pydev.editor.templates.python"
            description="Class definition (subclass)"
            icon="platform:/plugin/org.python.pydev.shared_ui/icons/template.gif"
            id="org.python.pydev.editor.templates.python.classo"
            name="classs">
         <pattern>class ${class}(${object}):${cursor}</pattern>
      </template>
      <template
            autoinsert="true"
            contextTypeId="org.python.pydev.editor.templates.python"
            description="Class definition (simple)"
            icon="platform:/plugin/org.python.pydev.shared_ui/icons/template.gif"
            id="org.python.pydev.editor.templates.python.class"
            name="class">
         <pattern>class ${class}:${cursor}</pattern>
      </template>
      <template
            autoinsert="true"
            contextTypeId="org.python.pydev.editor.templates.python"
            description="Method definition (class)"
            icon="platform:/plugin/org.python.pydev.shared_ui/icons/template.gif"
            id="org.python.pydev.editor.templates.python.defc"
            name="defc">
         <pattern>def ${method}(self):${cursor}</pattern>
      </template>
      <template
            autoinsert="true"
            contextTypeId="org.python.pydev.editor.templates.python"
            description="def __init__(self):"
            icon="platform:/plugin/org.python.pydev.shared_ui/icons/template.gif"
            id="org.python.pydev.editor.templates.python.ini"
            name="ini">
         <pattern>def __init__(self):${cursor}</pattern>
      </template>
      <template
            autoinsert="true"
            contextTypeId="org.python.pydev.editor.templates.python"
            description="def __init__(self, ${params})"
            icon="platform:/plugin/org.python.pydev.shared_ui/icons/template.gif"
            id="org.python.pydev.editor.templates.python.init"
            name="inip">
         <pattern>def __init__(self, ${params}):${cursor}</pattern>
      </template>
      <template
            autoinsert="true"
            contextTypeId="org.python.pydev.editor.templates.python"
            description="Method definition (class - with parameters)"
            icon="platform:/plugin/org.python.pydev.shared_ui/icons/template.gif"
            id="org.python.pydev.editor.templates.python.defp"
            name="defp">
         <pattern>def ${method}(self, ${params}):${cursor}</pattern>
      </template>
      <template
            autoinsert="true"
            name="def"
            icon="platform:/plugin/org.python.pydev.shared_ui/icons/template.gif"
            description="Method definition (global)"
            contextTypeId="org.python.pydev.editor.templates.python"
            id="org.python.pydev.editor.templates.python.def">
         <pattern>def ${method}():${cursor}</pattern>
      </template>
      <template
            autoinsert="true"
            name="print"
            icon="platform:/plugin/org.python.pydev.shared_ui/icons/template.gif"
            description="print (considers python 2 or 3)"
            contextTypeId="org.python.pydev.editor.templates.python"
            id="org.python.pydev.editor.templates.python.print">
         <pattern>print${space_if_py2}${lparen_if_py3}${cursor}${rparen_if_py3}</pattern>
      </template>
      <template
            autoinsert="true"
            name="printdir"
            icon="platform:/plugin/org.python.pydev.shared_ui/icons/template.gif"
            description="print '\n'.join(sorted(dir(value)))"
            contextTypeId="org.python.pydev.editor.templates.python"
            id="org.python.pydev.editor.templates.python.printdir">
         <pattern>print${space_if_py2}${lparen_if_py3}'\n'.join(sorted(dir(${cursor})))${rparen_if_py3}</pattern>
      </template>
      <template
            autoinsert="true"
            name="printexc"
            icon="platform:/plugin/org.python.pydev.shared_ui/icons/template.gif"
            description="print current traceback"
            contextTypeId="org.python.pydev.editor.templates.python"
            id="org.python.pydev.editor.templates.python.printexc">
         <pattern>import traceback;traceback.print_exc()${cursor}</pattern>
      </template>
      <template
            autoinsert="true"
            name="raiseruntimeerror"
            icon="platform:/plugin/org.python.pydev.shared_ui/icons/template.gif"
            description="raise RuntimeError('desc')"
            contextTypeId="org.python.pydev.editor.templates.python"
            id="org.python.pydev.editor.templates.python.raiseruntimeerror">
         <pattern>raise RuntimeError('${desc}')${cursor}</pattern>
      </template>
      <template
            autoinsert="true"
            name="raise"
            icon="platform:/plugin/org.python.pydev.shared_ui/icons/template.gif"
            description="raise"
            contextTypeId="org.python.pydev.editor.templates.python"
            id="org.python.pydev.editor.templates.python.raise">
         <pattern>raise ${cursor}</pattern>
      </template>
      <template
            autoinsert="false"
            name="testCase"
            icon="platform:/plugin/org.python.pydev.shared_ui/icons/template.gif"
            description="Complete test-case module with pyunit"
            contextTypeId="org.python.pydev.editor.templates.python"
            id="org.python.pydev.editor.templates.python.testCase">
         <pattern>import unittest

class ${TestCase}(unittest.TestCase):

    def setUp(self):
        unittest.TestCase.setUp(self)

    def tearDown(self):
        unittest.TestCase.tearDown(self)

    def test${Met1}(self):
        ${pass}${cursor}

if __name__ == '__main__':
    unittest.main()
</pattern>


      </template>








      <!-- keywords
Done with:
template = '''<template
   autoinsert="true"
   contextTypeId="org.python.pydev.editor.templates.python"
   description="%s keyword"
   icon="platform:/plugin/org.python.pydev.shared_ui/icons/template.gif"
   id="org.python.pydev.editor.templates.python.%s"
   name="%s">
   <pattern>%s ${cursor}</pattern>
</template>'''

import keyword
for k in keyword.kwlist:
   print template % (k,k,k,k)

   but removing the ones that were already there (class def print raise)
       -->
<template
   autoinsert="true"
   contextTypeId="org.python.pydev.editor.templates.python"
   description="and keyword"
   icon="platform:/plugin/org.python.pydev.shared_ui/icons/template.gif"
   id="org.python.pydev.editor.templates.python.and"
   name="and">
   <pattern>and ${cursor}</pattern>
</template>
<template
   autoinsert="true"
   contextTypeId="org.python.pydev.editor.templates.python"
   description="assert keyword"
   icon="platform:/plugin/org.python.pydev.shared_ui/icons/template.gif"
   id="org.python.pydev.editor.templates.python.assert"
   name="assert">
   <pattern>assert ${cursor}</pattern>
</template>
<template
   autoinsert="true"
   contextTypeId="org.python.pydev.editor.templates.python"
   description="break keyword"
   icon="platform:/plugin/org.python.pydev.shared_ui/icons/template.gif"
   id="org.python.pydev.editor.templates.python.break"
   name="break">
   <pattern>break${cursor}</pattern>
</template>
<template
   autoinsert="true"
   contextTypeId="org.python.pydev.editor.templates.python"
   description="continue keyword"
   icon="platform:/plugin/org.python.pydev.shared_ui/icons/template.gif"
   id="org.python.pydev.editor.templates.python.continue"
   name="continue">
   <pattern>continue${cursor}</pattern>
</template>
<template
   autoinsert="true"
   contextTypeId="org.python.pydev.editor.templates.python"
   description="del keyword"
   icon="platform:/plugin/org.python.pydev.shared_ui/icons/template.gif"
   id="org.python.pydev.editor.templates.python.del"
   name="del">
   <pattern>del ${cursor}</pattern>
</template>
<template
   autoinsert="true"
   contextTypeId="org.python.pydev.editor.templates.python"
   description="elif keyword"
   icon="platform:/plugin/org.python.pydev.shared_ui/icons/template.gif"
   id="org.python.pydev.editor.templates.python.elif"
   name="elif">
   <pattern>elif${cursor}</pattern>
</template>
<template
   autoinsert="true"
   contextTypeId="org.python.pydev.editor.templates.python"
   description="else keyword"
   icon="platform:/plugin/org.python.pydev.shared_ui/icons/template.gif"
   id="org.python.pydev.editor.templates.python.else"
   name="else">
   <pattern>else${cursor}</pattern>
</template>
<!-- removed try.. related
<template
   autoinsert="true"
   contextTypeId="org.python.pydev.editor.templates.python"
   description="except keyword"
   icon="platform:/plugin/org.python.pydev.shared_ui/icons/template.gif"
   id="org.python.pydev.editor.templates.python.except"
   name="except">
   <pattern>except${cursor}:</pattern>
</template>
<template
   autoinsert="true"
   contextTypeId="org.python.pydev.editor.templates.python"
   description="exec keyword"
   icon="platform:/plugin/org.python.pydev.shared_ui/icons/template.gif"
   id="org.python.pydev.editor.templates.python.exec"
   name="exec">
   <pattern>exec ${cursor}</pattern>
</template>
<template
   autoinsert="true"
   contextTypeId="org.python.pydev.editor.templates.python"
   description="finally keyword"
   icon="platform:/plugin/org.python.pydev.shared_ui/icons/template.gif"
   id="org.python.pydev.editor.templates.python.finally"
   name="finally">
   <pattern>finally:${cursor}</pattern>
</template>
-->
<template
   autoinsert="true"
   contextTypeId="org.python.pydev.editor.templates.python"
   description="for keyword"
   icon="platform:/plugin/org.python.pydev.shared_ui/icons/template.gif"
   id="org.python.pydev.editor.templates.python.for"
   name="for">
   <pattern>for ${cursor}:</pattern>
</template>
<template
   autoinsert="true"
   contextTypeId="org.python.pydev.editor.templates.python"
   description="from keyword"
   icon="platform:/plugin/org.python.pydev.shared_ui/icons/template.gif"
   id="org.python.pydev.editor.templates.python.from"
   name="from">
   <pattern>from ${cursor}</pattern>
</template>
<template
   autoinsert="true"
   contextTypeId="org.python.pydev.editor.templates.python"
   description="global keyword"
   icon="platform:/plugin/org.python.pydev.shared_ui/icons/template.gif"
   id="org.python.pydev.editor.templates.python.global"
   name="global">
   <pattern>global ${cursor}</pattern>
</template>
<!-- removed short ones
<template
   autoinsert="true"
   contextTypeId="org.python.pydev.editor.templates.python"
   description="if keyword"
   icon="platform:/plugin/org.python.pydev.shared_ui/icons/template.gif"
   id="org.python.pydev.editor.templates.python.if"
   name="if">
   <pattern>if ${cursor}:</pattern>
</template>
-->
<template
   autoinsert="true"
   contextTypeId="org.python.pydev.editor.templates.python"
   description="import keyword"
   icon="platform:/plugin/org.python.pydev.shared_ui/icons/template.gif"
   id="org.python.pydev.editor.templates.python.import"
   name="import">
   <pattern>import ${cursor}</pattern>
</template>
<!-- removed short ones
<template
   autoinsert="true"
   contextTypeId="org.python.pydev.editor.templates.python"
   description="in keyword"
   icon="platform:/plugin/org.python.pydev.shared_ui/icons/template.gif"
   id="org.python.pydev.editor.templates.python.in"
   name="in">
   <pattern>in ${cursor}</pattern>
</template>
<template
   autoinsert="true"
   contextTypeId="org.python.pydev.editor.templates.python"
   description="is keyword"
   icon="platform:/plugin/org.python.pydev.shared_ui/icons/template.gif"
   id="org.python.pydev.editor.templates.python.is"
   name="is">
   <pattern>is ${cursor}</pattern>
</template>
-->
<template
   autoinsert="true"
   contextTypeId="org.python.pydev.editor.templates.python"
   description="lambda keyword"
   icon="platform:/plugin/org.python.pydev.shared_ui/icons/template.gif"
   id="org.python.pydev.editor.templates.python.lambda"
   name="lambda">
   <pattern>lambda ${args}:${cursor}</pattern>
</template>
<template
   autoinsert="true"
   contextTypeId="org.python.pydev.editor.templates.python"
   description="not keyword"
   icon="platform:/plugin/org.python.pydev.shared_ui/icons/template.gif"
   id="org.python.pydev.editor.templates.python.not"
   name="not">
   <pattern>not ${cursor}</pattern>
</template>
<!-- removed short ones
<template
   autoinsert="true"
   contextTypeId="org.python.pydev.editor.templates.python"
   description="or keyword"
   icon="platform:/plugin/org.python.pydev.shared_ui/icons/template.gif"
   id="org.python.pydev.editor.templates.python.or"
   name="or">
   <pattern>or ${cursor}</pattern>
</template>
-->
<template
   autoinsert="true"
   contextTypeId="org.python.pydev.editor.templates.python"
   description="pass keyword"
   icon="platform:/plugin/org.python.pydev.shared_ui/icons/template.gif"
   id="org.python.pydev.editor.templates.python.pass"
   name="pass">
   <pattern>pass${cursor}</pattern>
</template>
<template
   autoinsert="true"
   contextTypeId="org.python.pydev.editor.templates.python"
   description="return keyword"
   icon="platform:/plugin/org.python.pydev.shared_ui/icons/template.gif"
   id="org.python.pydev.editor.templates.python.return"
   name="return">
   <pattern>return ${cursor}</pattern>
</template>
<!-- removed the try.. related because ctrl+1 handles it in a block (and better)
<template
   autoinsert="true"
   contextTypeId="org.python.pydev.editor.templates.python"
   description="try keyword"
   icon="platform:/plugin/org.python.pydev.shared_ui/icons/template.gif"
   id="org.python.pydev.editor.templates.python.try"
   name="try">
   <pattern>try:${cursor}</pattern>
</template>
-->
<template
   autoinsert="true"
   contextTypeId="org.python.pydev.editor.templates.python"
   description="while keyword"
   icon="platform:/plugin/org.python.pydev.shared_ui/icons/template.gif"
   id="org.python.pydev.editor.templates.python.while"
   name="while">
   <pattern>while ${cursor}:</pattern>
</template>
<template
   autoinsert="true"
   contextTypeId="org.python.pydev.editor.templates.python"
   description="yield keyword"
   icon="platform:/plugin/org.python.pydev.shared_ui/icons/template.gif"
   id="org.python.pydev.editor.templates.python.yield"
   name="yield">
   <pattern>yield ${cursor}</pattern>
</template>
<template
   autoinsert="true"
   contextTypeId="org.python.pydev.editor.templates.python"
   description="property creation from inner methods"
   icon="platform:/plugin/org.python.pydev.shared_ui/icons/template.gif"
   id="org.python.pydev.editor.templates.python.property_inner"
   name="property_inner">
   <pattern>def ${prop}(): #@NoSelf
    doc = """${Docstring}""" #@UnusedVariable

    def fget(self):
        return self._${prop}

    def fset(self, value):
        self._${prop} = value

    def fdel(self):
        del self._${prop}

    return locals()

${prop} = property(**${prop}())${cursor}</pattern>
</template>
<template
   autoinsert="true"
   contextTypeId="org.python.pydev.editor.templates.python"
   description="encoding comment"
   icon="platform:/plugin/org.python.pydev.shared_ui/icons/template.gif"
   id="org.python.pydev.editor.templates.python.encoding.comment"
   name="cod">
   <pattern># encoding: ${word_selection}</pattern>
</template>
<template
   autoinsert="true"
   contextTypeId="org.python.pydev.editor.templates.python"
   description="encoding comment: utf-8"
   icon="platform:/plugin/org.python.pydev.shared_ui/icons/template.gif"
   id="org.python.pydev.editor.templates.python.encoding.comment.utf8"
   name="codu8">
   <pattern># encoding: utf-8</pattern>
</template>






<!-- Module Templates -->

<template
   autoinsert="false"
   contextTypeId="org.python.pydev.editor.templates.python.modules"
   description="Module: Unittest with setUp and tearDown"
   icon="platform:/plugin/org.python.pydev.shared_ui/icons/template.gif"
   id="org.python.pydev.editor.templates.python.module.setup_and_teardown"
   name="Module: Unittest with setUp and tearDown">
   <pattern>'''
Created on ${date}

@author: ${user}
'''
import unittest


class Test(unittest.TestCase):


    def setUp(self):
        pass


    def tearDown(self):
        pass


    def test${Name}(self):
        ${pass}${cursor}


if __name__ == "__main__":
    #import sys;sys.argv = ['', 'Test.test${Name}']
    unittest.main()
</pattern>
</template>





<template
   autoinsert="false"
   contextTypeId="org.python.pydev.editor.templates.python.modules"
   description="Module: Main"
   icon="platform:/plugin/org.python.pydev.shared_ui/icons/template.gif"
   id="org.python.pydev.editor.templates.python.module.main"
   name="Module: Main">
   <pattern>'''
Created on ${date}

@author: ${user}
'''

if __name__ == '__main__':
    ${pass}${cursor}
</pattern>
</template>








<template
   autoinsert="false"
   contextTypeId="org.python.pydev.editor.templates.python.modules"
   description="Module: Class"
   icon="platform:/plugin/org.python.pydev.shared_ui/icons/template.gif"
   id="org.python.pydev.editor.templates.python.module.class"
   name="Module: Class">
   <pattern>'''
Created on ${date}

@author: ${user}
'''

class ${MyClass}(${object}):
    '''
    ${classdocs}
    '''


    def __init__(self, ${params}):
        '''
        ${Constructor}
        '''
        ${cursor}
</pattern>
</template>







<template
   autoinsert="false"
   contextTypeId="org.python.pydev.editor.templates.python.modules"
   description="Module: Empty"
   icon="platform:/plugin/org.python.pydev.shared_ui/icons/template.gif"
   id="org.python.pydev.editor.templates.python.module.empty"
   name="&lt;Empty&gt;">
   <pattern>'''
Created on ${date}

@author: ${user}
'''
${cursor}
</pattern>
</template>






<template
   autoinsert="false"
   contextTypeId="org.python.pydev.editor.templates.python.modules"
   description="Module: Unittest"
   icon="platform:/plugin/org.python.pydev.shared_ui/icons/template.gif"
   id="org.python.pydev.editor.templates.python.module.unittest"
   name="Module: Unittest">
   <pattern>'''
Created on ${date}

@author: ${user}
'''
import unittest


class Test(unittest.TestCase):


    def test${Name}(self):
        ${pass}${cursor}


if __name__ == "__main__":
    #import sys;sys.argv = ['', 'Test.test${Name}']
    unittest.main()
</pattern>
</template>







<template
   autoinsert="true"
   contextTypeId="org.python.pydev.editor.templates.python.modules"
   description="Module: Command line tool skeleton using argparse (suitable for Python 2.7+)"
   icon="platform:/plugin/org.python.pydev.shared_ui/icons/template.gif"
   id="org.python.pydev.editor.templates.python.module.cli.argparse"
   name="Module: CLI (argparse)">
   <pattern>#!/usr/local/bin/python2.7
# encoding: utf-8
'''
${module} -- ${shortdesc}

${module} is a ${description}

It defines ${classes_and_methods}

@author:     ${user_name}

@copyright:  ${year} ${organization_name}. All rights reserved.

@license:    ${license}

@contact:    ${user_email}
@deffield    updated: Updated
'''

import sys
import os

from argparse import ArgumentParser
from argparse import RawDescriptionHelpFormatter

__all__ = []
__version__ = 0.1
__date__ = '${isodate}'
__updated__ = '${isodate}'

DEBUG = 1
TESTRUN = 0
PROFILE = 0

class CLIError(Exception):
    '''Generic exception to raise and log different fatal errors.'''
    def __init__(self, msg):
        super(CLIError).__init__(type(self))
        self.msg = "E: %s" % msg
    def __str__(self):
        return self.msg
    def __unicode__(self):
        return self.msg

def main(argv=None): # IGNORE:C0111
    '''Command line options.'''

    if argv is None:
        argv = sys.argv
    else:
        sys.argv.extend(argv)

    program_name = os.path.basename(sys.argv[0])
    program_version = "v%s" % __version__
    program_build_date = str(__updated__)
    program_version_message = '%%(prog)s %s (%s)' % (program_version, program_build_date)
    program_shortdesc = __import__('__main__').__doc__.split("\n")[1]
    program_license = '''%s

  Created by ${user_name} on %s.
  Copyright ${year} ${organization_name}. All rights reserved.

  Licensed under the Apache License 2.0
  http://www.apache.org/licenses/LICENSE-2.0

  Distributed on an "AS IS" basis without warranties
  or conditions of any kind, either express or implied.

USAGE
''' % (program_shortdesc, str(__date__))

    try:
        # Setup argument parser
        parser = ArgumentParser(description=program_license, formatter_class=RawDescriptionHelpFormatter)
        parser.add_argument("-r", "--recursive", dest="recurse", action="store_true", help="recurse into subfolders [default: %(default)s]")
        parser.add_argument("-v", "--verbose", dest="verbose", action="count", help="set verbosity level [default: %(default)s]")
        parser.add_argument("-i", "--include", dest="include", help="only include paths matching this regex pattern. Note: exclude is given preference over include. [default: %(default)s]", metavar="RE" )
        parser.add_argument("-e", "--exclude", dest="exclude", help="exclude paths matching this regex pattern. [default: %(default)s]", metavar="RE" )
        parser.add_argument('-V', '--version', action='version', version=program_version_message)
        parser.add_argument(dest="paths", help="paths to folder(s) with source file(s) [default: %(default)s]", metavar="path", nargs='+')

        # Process arguments
        args = parser.parse_args()

        paths = args.paths
        verbose = args.verbose
        recurse = args.recurse
        inpat = args.include
        expat = args.exclude

        if verbose &gt; 0:
            print("Verbose mode on")
            if recurse:
                print("Recursive mode on")
            else:
                print("Recursive mode off")

        if inpat and expat and inpat == expat:
            raise CLIError("include and exclude pattern are equal! Nothing will be processed.")

        for inpath in paths:
            ### do something with inpath ###
            print(inpath)
        return 0
    except KeyboardInterrupt:
        ### handle keyboard interrupt ###
        return 0
    except Exception as e:
        if DEBUG or TESTRUN:
            raise(e)
        indent = len(program_name) * " "
        sys.stderr.write(program_name + ": " + repr(e) + "\n")
        sys.stderr.write(indent + "  for help use --help")
        return 2

if __name__ == "__main__":
    if DEBUG:
        sys.argv.append("-h")
        sys.argv.append("-v")
        sys.argv.append("-r")
    if TESTRUN:
        import doctest
        doctest.testmod()
    if PROFILE:
        import cProfile
        import pstats
        profile_filename = '${module}_profile.txt'
        cProfile.run('main()', profile_filename)
        statsfile = open("profile_stats.txt", "wb")
        p = pstats.Stats(profile_filename, stream=statsfile)
        stats = p.strip_dirs().sort_stats('cumulative')
        stats.print_stats()
        statsfile.close()
        sys.exit(0)
    sys.exit(main())
</pattern>
</template>







<template
   autoinsert="true"
   contextTypeId="org.python.pydev.editor.templates.python.modules"
   description="Module: Command line tool skeleton using optparse (suitable for Python &lt; 2.6)"
   icon="platform:/plugin/org.python.pydev.shared_ui/icons/template.gif"
   id="org.python.pydev.editor.templates.python.module.cli.optparse"
   name="Module: CLI (optparse)">
   <pattern>#!/usr/bin/env python
# encoding: utf-8
'''
${module} -- ${shortdesc}

${module} is a ${description}

It defines ${classes_and_methods}

@author:     ${user_name}

@copyright:  ${year} ${organization_name}. All rights reserved.

@license:    ${license}

@contact:    ${user_email}
@deffield    updated: Updated
'''

import sys
import os

from optparse import OptionParser

__all__ = []
__version__ = 0.1
__date__ = '${isodate}'
__updated__ = '${isodate}'

DEBUG = 1
TESTRUN = 0
PROFILE = 0

def main(argv=None):
    '''Command line options.'''

    program_name = os.path.basename(sys.argv[0])
    program_version = "v0.1"
    program_build_date = "%s" % __updated__

    program_version_string = '%%prog %s (%s)' % (program_version, program_build_date)
    #program_usage = '''usage: spam two eggs''' # optional - will be autogenerated by optparse
    program_longdesc = '''''' # optional - give further explanation about what the program does
    program_license = "Copyright ${year} ${user_name} (${organization_name})                                            \
                Licensed under the Apache License 2.0\nhttp://www.apache.org/licenses/LICENSE-2.0"

    if argv is None:
        argv = sys.argv[1:]
    try:
        # setup option parser
        parser = OptionParser(version=program_version_string, epilog=program_longdesc, description=program_license)
        parser.add_option("-i", "--in", dest="infile", help="set input path [default: %default]", metavar="FILE")
        parser.add_option("-o", "--out", dest="outfile", help="set output path [default: %default]", metavar="FILE")
        parser.add_option("-v", "--verbose", dest="verbose", action="count", help="set verbosity level [default: %default]")

        # set defaults
        parser.set_defaults(outfile="./out.txt", infile="./in.txt")

        # process options
        (opts, args) = parser.parse_args(argv)

        if opts.verbose &gt; 0:
            print("verbosity level = %d" % opts.verbose)
        if opts.infile:
            print("infile = %s" % opts.infile)
        if opts.outfile:
            print("outfile = %s" % opts.outfile)

        # MAIN BODY #

    except Exception as e:
        indent = len(program_name) * " "
        sys.stderr.write(program_name + ": " + repr(e) + "\n")
        sys.stderr.write(indent + "  for help use --help")
        return 2


if __name__ == "__main__":
    if DEBUG:
        sys.argv.append("-h")
    if TESTRUN:
        import doctest
        doctest.testmod()
    if PROFILE:
        import cProfile
        import pstats
        profile_filename = '${module}_profile.txt'
        cProfile.run('main()', profile_filename)
        statsfile = open("profile_stats.txt", "wb")
        p = pstats.Stats(profile_filename, stream=statsfile)
        stats = p.strip_dirs().sort_stats('cumulative')
        stats.print_stats()
        statsfile.close()
        sys.exit(0)
    sys.exit(main())
</pattern>
</template>








   </extension>
   <extension
         point="org.eclipse.core.runtime.adapters">
      <factory
            adaptableType="org.eclipse.jface.viewers.ISelection"
            class="org.python.pydev.shared_interactive_console.console.codegen.ScriptConsoleCodeGeneratorFactory">
         <adapter
               type="org.python.pydev.shared_interactive_console.console.codegen.IScriptConsoleCodeGenerator">
         </adapter>
      </factory>
   </extension>
   <extension
         point="org.eclipse.core.expressions.definitions">
      <definition
            id="org.python.pydev.editor.PythonEditor.activeEditor">
         <with
               variable="activeEditorId">
            <equals
                  value="org.python.pydev.editor.PythonEditor">
            </equals>
         </with>
      </definition>
   </extension>
   <extension
         point="org.python.pydev.pydev_interpreter_provider">
      <interpreter_provider_participant
            class="org.python.pydev.ui.pythonpathconf.PythonInterpreterProviderFactory">
      </interpreter_provider_participant>
      <interpreter_provider_participant
            class="org.python.pydev.ui.pythonpathconf.JythonInterpreterProviderFactory">
      </interpreter_provider_participant>
      <interpreter_provider_participant
            class="org.python.pydev.ui.pythonpathconf.IronpythonInterpreterProviderFactory">
      </interpreter_provider_participant>
   </extension>
   <extension
         point="org.eclipse.e4.ui.css.swt.theme">
      <stylesheet
            uri="css/dark/e4-pydev-dark_preferencestyle.css">
         <themeid
               refid="org.eclipse.e4.ui.css.theme.e4_dark">
         </themeid>
      </stylesheet>
   </extension>
   <extension
         point="org.python.pydev.pydev_hover2">
      <pyTextHover
            activate="false"
            class="org.python.pydev.editor.hover.PyDocstringTextHover"
            description="Provides hover text for Python docstrings"
            enable="true"
            id="org.python.pydev.editor.hover.pyDocstringTextHover"
            label="PyDev Docstring Hover"
            preempt="false"
            priority="100">
      </pyTextHover>
   </extension>
   <extension
         point="org.python.pydev.pydev_hover2">
      <pyTextHover
            activate="false"
            class="org.python.pydev.editor.hover.PyMarkerTextHover"
            description="Provides hover text for Python markers"
            enable="true"
            id="org.python.pydev.editor.hover.pyMarkerTextHover"
            label="PyDev Marker Hover"
            preempt="false"
            priority="10"> <!-- Marker hover should appear first -->
      </pyTextHover>
   </extension>


   <extension point="org.python.pydev.pydev_quick_outline">
   		<quick_outline_participant class="com.python.pydev.actions.PyShowOutline"/>
   </extension>

<!-- command: hierarchy view (F4)-->
   <extension point="org.eclipse.ui.commands">
      <command
            description="Show the class hierarchy for a python class"
            id="com.python.pydev.actions.pyShowHierarchy"
            categoryId="org.python.pydev.ui.category.source"
            name="Show Python Class Hierarchy">
      </command>
   </extension>
<!-- binding: hierarchy view (F4)-->
   <extension point="org.eclipse.ui.bindings">
      <key
            sequence="F4"
            contextId="org.python.pydev.ui.editor.scope"
            commandId="com.python.pydev.actions.pyShowHierarchy"
            schemeId="org.eclipse.ui.defaultAcceleratorConfiguration">
      </key>
   </extension>
<!-- action: hierarchy view (F4)-->
   <extension point="org.eclipse.ui.editorActions">
      <editorContribution
            targetID="org.python.pydev.editor.PythonEditor"
            id="org.python.pydev.editor.editorContribution">
         <action
               definitionId="com.python.pydev.actions.pyShowHierarchy"
               label="Show Python Class Hierarchy"
               class="com.python.pydev.actions.PyShowHierarchy"
               id="com.python.pydev.actions.pyShowHierarchy">
         </action>
      </editorContribution>
   </extension>


<!-- view: hierarchy view-->
<extension point="org.eclipse.ui.views">
   <view
        class="com.python.pydev.ui.hierarchy.PyHierarchyView"
        icon="platform:/plugin/org.python.pydev.shared_ui/icons/class_hi.gif"
        category="org.python.pydev"
        name="Hierarchy View"
        id="com.python.pydev.ui.hierarchy.PyHierarchyView"/>
</extension>
<!-- occurrences annotation-->
<extension point="org.eclipse.ui.editors.annotationTypes">
	<type name="com.python.pydev.occurrences"/>
</extension>

<extension point="org.eclipse.ui.editors.markerAnnotationSpecification">
	  <specification
            annotationType="com.python.pydev.occurrences"
            label="Occurrences (PyDev)"
            icon="platform:/plugin/org.python.pydev.shared_ui/icons/searchm_obj.gif"
            textPreferenceKey="pydevOccurrenceIndication"
            textPreferenceValue="false"
            textStylePreferenceKey="pydevOccurrenceIndicationTextStyle"
            textStylePreferenceValue="NONE"
            highlightPreferenceKey="pydevOccurrenceHighlighting"
            highlightPreferenceValue="true"
            contributesToHeader="false"
            overviewRulerPreferenceKey="pydevOccurrenceIndicationInOverviewRuler"
            overviewRulerPreferenceValue="true"
            verticalRulerPreferenceKey="pydevOccurrenceIndicationInVerticalRuler"
            verticalRulerPreferenceValue="false"
            colorPreferenceKey="pydevOccurrenceIndicationColor"
            colorPreferenceValue="255,255,150"
            presentationLayer="4"
            showInNextPrevDropdownToolbarActionKey="pydevShowOccurrenceInNextPrevDropdownToolbarAction"
            showInNextPrevDropdownToolbarAction="true"
            isGoToNextNavigationTargetKey="pydevIsOccurrenceGoToNextNavigationTarget"
	        isGoToNextNavigationTarget="true"
            isGoToPreviousNavigationTargetKey="pydevIsOccurrenceGoToPreviousNavigationTarget"
	        isGoToPreviousNavigationTarget="true">
	  </specification>
</extension>
<!--
This was removed because of a bug where multiple interactive consoles were appearing in the toolbar
(and apparently, it's impossible to remove them, even if this action is removed and the additional
entries appear to live forever in all perspectives).

This definitely seems an Eclipse bug... I (Fabio) do have some workspaces where the toolbar becomes
trashed because of it and apparently there's no way to recover and the only solution is creating a new
workspace or manually removing the com.python.pydev.toolbars.evaluateActionSetterToolbar
from .metadata/.plugins/org.eclipse.e4.workbench/workbench.xmi.

There's also a bug report with it: https://www.brainwy.com/tracker/PyDev/708

The related image showing the error is at: http://i.stack.imgur.com/IfNFY.png

<extension
      point="org.eclipse.ui.menus">
   <menuContribution
         locationURI="toolbar:org.eclipse.ui.main.toolbar?after=additions">
      <toolbar
            id="com.python.pydev.toolbars.evaluateActionSetterToolbar">
         <command
               commandId="org.python.pydev.interactiveconsole.evaluateActionSetter"
               icon="platform:/plugin/org.python.pydev.shared_ui/icons/python_16x16.png">
            <visibleWhen
                  checkEnabled="false">
               <reference
                     definitionId="org.python.pydev.editor.PythonEditor.activeEditor">
               </reference>
            </visibleWhen>
         </command>
      </toolbar>
   </menuContribution>
</extension>
-->


<extension point="org.python.pydev.pydev_view_created_observer">
      <view_created_observer
            class="com.python.pydev.analysis.PyContextActivatorViewCreatedObserver">
      </view_created_observer>
</extension>

<extension point="org.eclipse.ui.actionSets">
  <actionSet
        label="PyDev Navigate"
        visible="false"
        id="com.python.pydev.navigate.actionSet">
     <menu
           label="P&amp;ydev"
           id="pyGeneralMenu">
        <separator name="pyNavigateGroup"/>
     </menu>
     <action
           label="&amp;Globals Browser"
           icon="icons/opentype.gif"
           class="com.python.pydev.analysis.actions.PyGlobalsBrowserWorkbench"
           tooltip="PyDev: Globals Browser"
           menubarPath="pyGeneralMenu/pyNavigateGroup"
           toolbarPath="pyNavigateGroup"
           id="com.python.pydev.analysis.actions.pyGlobalsBrowserWorkbench"
           definitionId="com.python.pydev.analysis.actions.pyGlobalsBrowserWorkbench"
           >
     </action>
  </actionSet>
</extension>

   <extension point="org.python.pydev.pydev_globals_browser">
   		<globals_browser_participant class="com.python.pydev.analysis.actions.PyGlobalsBrowser"/>
   </extension>

    <extension point="org.python.pydev.pydev_ctrl_1">
		<ctrl_1_participant class="com.python.pydev.analysis.ctrl_1.AnalysisMarkersParticipants"/>
   </extension>

   <extension point="org.python.pydev.pydev_ctrl_1">
		<ctrl_1_participant class="com.python.pydev.analysis.ctrl_1.pylint.PyLintAnalysisMarkersParticipants"/>
   </extension>

   <extension point="org.python.pydev.pydev_ctrl_1">
		<ctrl_1_participant class="com.python.pydev.analysis.ctrl_1.flake8.Flake8AnalysisMarkersParticipants"/>
   </extension>

   <extension point="org.python.pydev.pydev_ctrl_1">
		<ctrl_1_participant class="com.python.pydev.analysis.marker_quick_fixes.DontAnalyzeFileMarkerParticipant"/>
   </extension>

 <!-- Adds ctrl+2+ - - d -->
   <extension point="org.python.pydev.pydev_pyedit_listener">
  		<pyedit_listener_participant class="com.python.pydev.analysis.additionalinfo.AdditionalInfoIntegrityChecker"/>
   </extension>
   <extension point="org.python.pydev.pydev_pyedit_listener">
  		<pyedit_listener_participant class="com.python.pydev.analysis.builder.ClearAnalysisMarkersPyEditListener"/>
   </extension>
   <extension point="org.python.pydev.pydev_pyedit_listener">
  		<pyedit_listener_participant class="com.python.pydev.analysis.builder.PreloadAdditionalInfoPyEditListener"/>
   </extension>
   <extension point="org.python.pydev.pydev_pyedit_listener">
  		<pyedit_listener_participant class="com.python.pydev.analysis.builder.MarkEditorOnSave"/>
   </extension>

   <extension point="org.python.pydev.pydev_builder">
   		<builder_participant class="org.python.pydev.builder.todo.PyTodoVisitor"/>
   </extension>
   <extension point="org.python.pydev.pydev_builder">
   		<builder_participant class="org.python.pydev.builder.syntaxchecker.PySyntaxChecker"/>
   </extension>

   <extension point="org.python.pydev.parser.pydev_parser_observer">
   		<parser_observer class="com.python.pydev.analysis.builder.AnalysisParserObserver"/>
   </extension>



 <!-- search page-->
   <extension
         point="org.eclipse.search.searchPages">
      <page
            canSearchEnclosingProjects="false"
            class="com.python.pydev.analysis.search_index.PySearchIndexPage"
            extensions="py:90, pyw:90"
            icon="icons/python_file.gif"
            id="com.python.pydev.analysis.search_index.PySearchIndexPage"
            label="PyDev Search"
            showScopeSection="false"/>
   </extension>
   <extension
         id="com.python.pydev.analysis.search_index.SearchIndexResultPage"
         point="org.eclipse.search.searchResultViewPages">
      <viewPage
            class="com.python.pydev.analysis.search_index.PySearchIndexResultPage"
            id="com.python.pydev.analysis.search_index.SearchIndexResultPage"
            label="PyDev Search Result"
            searchResultClass="com.python.pydev.analysis.search_index.PySearchResult"/>
   </extension>


<!-- organize imports participant -->
   <extension point="org.python.pydev.pydev_organize_imports">
		<organize_imports_participant class="com.python.pydev.analysis.organizeimports.OrganizeImports"/>
   </extension>


<!-- view: indexing info -->
<extension point="org.eclipse.ui.views">
   <view
        class="com.python.pydev.analysis.indexview.PyIndexView"
        icon="icons/opentype.gif"
        category="org.python.pydev"
        name="Index View"
        id="com.python.pydev.analysis.indexview.PyIndexView"/>
</extension>

   <extension point="org.eclipse.ui.preferencePages">
      <page
            class="com.python.pydev.codecompletion.ui.CodeCompletionPreferencesPage"
            category="org.python.pydev.prefs.editor"
            id="org.python.pydev.prefs.extensions.codecompletion"
            name="Code Completion (ctx insensitive and common tokens)"/>
   </extension>


    <extension point="org.eclipse.ui.keywords" name="Analysis Preferences">
        <keyword id="com.python.pydev.analysis.keywords"  label="pep8 pycodestyle builtins globals tokens"/>
    </extension>

   <extension point="org.eclipse.ui.preferencePages">
      <page
            class="com.python.pydev.analysis.ui.AnalysisPreferencesPage"
            category="org.python.pydev.prefs.editor"
            id="org.python.pydev.prefs.extensions.analysis"
            name="Code Analysis">
            <keywordReference id="com.python.pydev.analysis.keywords"/>
      </page>
   </extension>

   <extension point="org.eclipse.ui.preferencePages">
      <page
            class="com.python.pydev.analysis.ui.AutoImportsPreferencesPage"
            category="org.python.pydev.prefs.editor"
            id="org.python.pydev.prefs.extensions.autoimports"
            name="Auto Imports"/>
   </extension>

 </plugin>