0

我正在编写一个 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

4 回答 4

2

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

于 2013-09-05T07:13:42.433 回答
0

对你来说可能已经晚了,但如果你愿意的话,你可以使用 LiClipse ( http://brainwy.github.io/liclipse/)——它的目标之一是轻松地做一个带有语法高亮、基本代码的编辑器——针对 Eclipse 的完成、大纲等。

添加新语言不需要Java技能(主要是在适当的位置创建一个新的.liclipse——它是一个YAML——文件并创建一些基本规则来说明如何划分你的语言——即:通常只是分离代码来自字符串的注释——并指定分区中的关键字已经可以为您提供正确的语法突出显示)。

如果您下载它,在 plugins\com.brainwy.liclipse.editor\languages 有许多示例,在http://brainwy.github.io/liclipse/supported_languages.htmlhttp://brainwy有一些基本文档.github.io/liclipse/scope_definition.html如何做到这一点。

于 2013-10-24T15:41:22.000 回答
0

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

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

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

然后创建一个扩展 IToken 的自定义类。在构造函数中,我传递首选项字段的字符串,然后在“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);
    }

}

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

于 2020-03-13T13:37:00.660 回答
0

如果偏好更改为https://www.vogella.com/tutorials/EclipseEditors/article.html#exercise-allow-user-to-customize-the-colors,我还添加了一个更新着色的示例

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

于 2020-11-11T13:39:02.067 回答