我目前正在开发一个 Eclipse 插件。为了执行操作,我需要收听活动选项卡的插入符号侦听器。
public void partOpened(IWorkbenchPartReference partRef) {
AbstractTextEditor e = (AbstractTextEditor) ((IEditorReference) partRef).getEditor(false);
StyledText sText = ((StyledText) e.getAdapter(Control.class));
sText.addCaretListener(new CaretListener() {
@Override
public void caretMoved(CaretEvent event) {
IDocument d = e.getDocumentProvider().getDocument(e.getEditorInput());
...
int line = d.getLineOfOffset(event.caretOffset);
Point p = sText.getLocationAtOffset(event.caretOffset);
}
});
}
我使用此代码在最新打开的选项卡上添加 CaretListener。
line
仅当没有代码块被折叠时,该变量才是正确的。实际上,事件返回的偏移量是链接到StyledText的,但我想获取文件的行号。
这张图片显示了一个折叠文本的例子。StyledText 插入符号偏移量会给我类似于第 6、7 和 8 行的内容,而不是 6、7 和 12(就像 Eclipse 一样)。
有没有办法将 StyledText 偏移“转换”为“真实文件”偏移?我可以将该行作为字符串检索并在文件中找到它,但这听起来是个坏主意。
谢谢 !