Eclipse自定义文本编辑器更新语法突出显示

时间:2013-09-04 21:15:39

标签: eclipse-plugin

我正在编写一个Eclipse插件(Indigo / Juno),其中包含一个自定义文本格式的文本编辑器。我在这里遵循教程:http://www.realsolve.co.uk/site/tech/jface-text.php

到目前为止,我的一切都在运作。 Eclipse将使用我的编辑器编辑文件。我有分区,破坏,修复,语法突出显示所有工作。

我添加了一个带颜色选择器的首选项页面来控制语法突出显示。它工作大多是正确的。如果我更新颜色,编辑器会在下次打开或重新打开文件时使用它们。

如何在不打开新标签的情况下让编辑器标签更新?内置的JDT Java编辑器可以做到这一点,但到目前为止我还无法破译它(它是一个非常大而复杂的编辑器)。

我认为我需要创建一个首选项侦听器(http://www.vogella.com/articles/EclipsePreferences/article.html)。我已经完成了这个,并且可以在我设置断点时验证我的侦听器代码是否被调用。

缺少的部分是监听器和重新初始化编辑器之间的连线。我试过重建分区逻辑,颜色逻辑,破坏者/修理者等,但似乎没有任何效果。它要么做什么我什么都看不到,或者最坏的情况会破坏显示,直到我将当前文本滚动到视图之外重绘它...用旧颜色。

有什么想法吗?

4 个答案:

答案 0 :(得分:1)

我认为需要调用SourceViewer.invalidatePresentation()

答案 1 :(得分:0)

你可能已经很晚了,但是如果你想要你可以使用LiClipse(http://brainwy.github.io/liclipse/) - 它的一个目标很容易做一个带语法高亮,基本代码完成,轮廓的编辑器,等等以Eclipse为目标。

添加新语言不需要java技能(主要是创建一个新的.liclipse - 这是一个YAML文件在适当的位置并创建一些基本规则来说明如何对您的语言进行分区 - 即:通常只是将代码与字符串中的注释分开 - 并指定分区中的关键字已经为您提供了正确的语法突出显示。)

如果您下载它,插件\ com.brainwy.liclipse.editor \ languages中有很多示例,http://brainwy.github.io/liclipse/supported_languages.htmlhttp://brainwy.github.io/liclipse/scope_definition.html有一些基本文档,说明如何操作。< / p>

答案 2 :(得分:0)

对于像我一样遇到此问题的任何人: 我的解决方案涉及将以下几行添加到我的编辑器的构造函数中

Activator.getActivator().getPreferenceStore().addPropertyChangeListener(new IPropertyChangeListener() {

            @Override
            public void propertyChange(PropertyChangeEvent event) {
                getSourceViewer().invalidateTextPresentation();
                handlePreferenceStoreChanged(event);
            }
        });

,然后创建扩展IToken的自定义类。在构造函数中,我传递首选项字段的String,然后在“ getObject”方法中,创建TextAttribute:下面的代码段

public class MyToken extends Token implements IToken {

    public MyToken(Object data) {
        super(data);
    }

    @Override
    public Object getData() {
        String dataString = (String) super.getData();
        return getAttributeFromColorName(dataString);
    }

    private TextAttribute getAttributeFromColorName(String preferenceField) {
        Color color =  new Color(Display.getCurrent(), StringConverter.asRGB(Activator.getActivator().getPreferenceStore().getString(preferenceField)));
        return new TextAttribute(color);
    }

}

生成规则时,我将所有标记作为自定义类,这使我可以动态更改语法颜色。

答案 3 :(得分:0)

我还添加了一个示例,用于在首选项更改为https://www.vogella.com/tutorials/EclipseEditors/article.html#exercise-allow-user-to-customize-the-colors

时更新颜色

这是使用通用编辑器(当前是实现客户编辑器的最佳方法),但是应该可以将其调整为任何Eclipse编辑器实现。