使用org.eclipse.ui.binding绑定键

时间:2018-05-04 08:47:47

标签: eclipse-plugin eclipse-rcp

我正在尝试将快捷键( Ctrl + Shift + f )引入我们的自定义编辑器以格式化内容。

我已经实施了以下更改。

  1. 通过添加带有定义ID /架构/上下文的密钥扩展,添加了对插件xml的更改。

  2. 通过扩展TextEditorAction类实现Action,如下所示。

    @Override
    public void run() {
        this.doOperation(ISourceViewer.FORMAT);
    }
    
  3. 通过实施IContentFormatter实现了一个Formatter类。

  4. 通过覆盖sourceVIewConfiguration将上述Formatter类传递给我们的cutomized SourceViewerConfiguration(扩展getContentFormatter)类。

  5. 在我们定制的编辑器类中覆盖了createActions() API,该类扩展了TextEditor

  6. 由于某种原因,我的快捷键无效。我在我的动作类中放了一个调试点,当我按下快捷键时,注意到控制器没有进入那里。

    我还注意到新创建的密钥不会显示在首选项下 - >键列表。

    有人可以提供指针或示例来解决问题。

    plugin.xml条目:

     <key
                commandId="com.language.javascripteditor.XJSFormatAction"
                schemeId="myScheme"
                sequence="M1+M2+z"/>
          <scheme
                id="myScheme"
                name="myScheme">
          </scheme>
    

    Formatter类:

    public class JavaScriptEditorFormatter implements IContentFormatter {
    
        @Override
        public void format(IDocument document, IRegion region) {
            try {
                String content =document.get(region.getOffset(), region.getLength());
                String formatted = new JSBeautifier().js_beautify(content,null);
                document.replace(region.getOffset(), region.getLength(), formatted);
            } catch (BadLocationException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
        }
    
        @Override
        public IFormattingStrategy getFormattingStrategy(String contentType) {
            throw new UnsupportedOperationException();
        }
    
    }
    

    为自定义架构添加了一个新属性文件,名称为plugin_customization.ini,内容如下所示 org.eclipse.ui/KEY_CONFIGURATION_ID=myScheme

    plugin.xml中的命令部分

    <command
                defaultHandler="com.cisco.nm.workflowbuilder.language.javascripteditor.XJSFormatAction"
        id="com.language.javascripteditor.XJSFormatAction"
        name="%action.label.format.xjs">
    </command>
    

    我写了一个Action类而不是处理程序。如果这种方法不起作用,请告诉我

1 个答案:

答案 0 :(得分:0)

1.为现有编辑器的扩展添加了贡献者类。 2.Created命令,格式为..eg:com.javascript.text.format 3.with格式方法的Action类

@Override
    public void run() {
        this.doOperation(ISourceViewer.FORMAT);
    }

4。插件xml条目

  <key
            commandId="com.javascript.text.format"
            schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"
            sequence="M1+M2+F"/>

5。覆盖createActions()。在此方法中实例化Action类和setActionDefinitionId。