用于自定义编辑器的 Eclipse RCP 处理程序

Posted

技术标签:

【中文标题】用于自定义编辑器的 Eclipse RCP 处理程序【英文标题】:Eclipse RCP Handler for custom editor 【发布时间】:2022-01-14 04:25:45 【问题描述】:

在我的自定义编辑器中,我希望处理程序仅在它在编辑器中执行时才被激活。

<?xml version="1.0" encoding="UTF-8"?>
<?eclipse version="3.4"?>
<plugin>
   <extension
         point="org.eclipse.ui.editors">
      <editor
            id="testingpluginproject.editors.XMLEditor"
            name="Sample XML Editor"
            icon="icons/sample.png"
            extensions="xxml"
            class="testingpluginproject.editors.XMLEditor"
            contributorClass="org.eclipse.ui.texteditor.BasicTextEditorActionContributor">
      </editor>
   </extension>
   
   <extension
      point="org.eclipse.ui.contexts">
    <context
         id="com.my.ui.definition.activatedEditorContext"
         name="Editor Context"
         parentId="org.eclipse.ui.textEditorScope">
    </context>
   </extension>
 
  <extension point="org.eclipse.ui.commands">
    <command id="com.my.handler" name="Hello"/>
 </extension>
    
 <extension point="org.eclipse.ui.handlers">
    <handler commandId="com.my.handler" class="com.my.handler.HelloHandler"/>
 </extension>
   
 <extension
       point="org.eclipse.ui.bindings">
    <key
          commandId="com.my.handler"
          schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"
          contextId="com.my.ui.definition.activatedEditorContext"
          sequence="Ctrl+7">
    </key>
 </extension>
</plugin>

这是编辑器中的激活。

   public XMLEditor() 
      colorManager = new ColorManager();
      setSourceViewerConfiguration(new XMLConfiguration(colorManager));
      setDocumentProvider(new XMLDocumentProvider());
      IContextService contextService = (IContextService) PlatformUI
               .getWorkbench().getService(IContextService.class);
      contextService.activateContext("com.my.ui.definition.activatedEditorContext");
   

所以我认为在 plugin.xml 的配置中 antyhing 出了问题。

【问题讨论】:

【参考方案1】:

在文本编辑器中,您不会为此使用上下文服务。相反,您覆盖 AbstractDecoratedTextEditor#initializeKeyBindingScopes 并设置键绑定范围:

/*
 * @see org.eclipse.ui.texteditor.AbstractDecoratedTextEditor#initializeKeyBindingScopes()
 */
@Override
protected void initializeKeyBindingScopes() 
    setKeyBindingScopes(new String[]  "com.my.ui.definition.activatedEditorContext" );  

最终使用IKeyBindingService

【讨论】:

以上是关于用于自定义编辑器的 Eclipse RCP 处理程序的主要内容,如果未能解决你的问题,请参考以下文章

Eclipse RCP 资源管理(自定义Project)一 (转)

Eclipse RCP Content Assist 无法使用自动激活的字符

RCP表单编辑器---》一打开编辑器

在 Eclipse RCP 3.x 中将信息从一个实例复制并粘贴到另一个实例

什么是Eclipse?

如何从 Eclipse RCP 到“主机”Eclipse IDE 进行通信