【问题标题】:Eclipse - programaticaly highlight multiple lines of an editorEclipse - 以编程方式突出显示编辑器的多行
【发布时间】:2020-03-25 16:42:46
【问题描述】:

我目前正在尝试突出显示编辑器的多行(它们可能不是一个接一个 - 即 cmets 分布在整个源文件中)。我已经能够以编程方式打开一个编辑器并用 - 突出显示一行 -

IDE.openEditor(page, m);

m 是一个 IMarker。

我的问题是如何以编程方式(在 Java 中)选择多行。您可以假设我希望突出显示的每一行都有相关标记,因此所有相关信息(lineNum 等)

非常感谢。

【问题讨论】:

  • 您是否正在尝试为 Eclipse 编写 插件
  • @Abra 是的,目前正在适配 Plantuml 插件。
  • @greg-449 你能澄清一下你的观点吗?我发现很难理解你的意思
  • 这是一个非常复杂的领域,我已经不记得细节了。 Eclipse 编辑器定义了几个扩展点,让您可以定义标记和其他注释的显示方式。但是你需要确切地知道你的目标编辑器支持什么。

标签: java eclipse marker programmatically


【解决方案1】:

好吧,我已经弄明白了——感谢@greg-449

这是一篇很有帮助的文章 - http://cubussapiens.hu/2011/05/custom-markers-and-annotations-the-bright-side-of-eclipse/

因此,您必须在 plugin.xml 文件中定义一个自定义标记以及为其自定义注释;

<extension
      point="org.eclipse.ui.editors.annotationTypes">
   <type
         markerType="FSM.MARKER"
         name="FSM.MARKER">
   </type>
</extension>

<extension
        id="FSM.MARKER"
        name="FSM.MARKER"
        point="org.eclipse.core.resources.markers">
    <super
        type="org.eclipse.core.resources.textmarker">
    </super>
</extension>

<extension
     point="org.eclipse.ui.editors.markerAnnotationSpecification">
  <specification
        annotationType="FSM.MARKER"
        colorPreferenceKey="FSM.MARKER.COLOR"
        colorPreferenceValue="0,125,255"
        contributesToHeader="false"
        highlightPreferenceKey="FSM.MARKER.highlight"
        highlightPreferenceValue="true"
        includeOnPreferencePage="true"
        label="FSM.MARKER"
        overviewRulerPreferenceKey="org.eclipse.viatra2.slice.overview"
        overviewRulerPreferenceValue="true"
        presentationLayer="0"
        textPreferenceKey="org.eclipse.viatra2.slice.text"
        textPreferenceValue="true"
        textStylePreferenceValue="BOX"
        verticalRulerPreferenceKey="org.eclipse.viatra2.slice.ruler"
        verticalRulerPreferenceValue="true">
   </specification>
</extension>

然后你可以在你的代码中创建一个自定义标记;

IMarker marker = root.createMarker("FSM.MARKER");
marker.setAttribute(IMarker.LINE_NUMBER, lineNum);
marker.setAttribute(IMarker.SOURCE_ID, path);
//if (region.getOffset() != 0) {
       marker.setAttribute(IMarker.CHAR_START,charStart);
       marker.setAttribute(IMarker.CHAR_END,charEnd);

这会产生以下类型的注释; enter image description here

【讨论】:

    猜你喜欢
    • 2012-11-27
    • 1970-01-01
    • 2020-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-18
    • 2023-03-16
    相关资源
    最近更新 更多