Eclipse 编辑器 - SWT StyledText CaretListener 偏移量与实际文件行号不对应
Eclipse Editor - SWT StyledText CaretListener offset not corresponding to real file line number
我目前正在开发 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 相关联,但我想获取文件的行号。
This picture 显示折叠文本的示例。 StyledText 插入符偏移量会给我类似第 6、7 和 8 行的内容,而不是第 6、7 和 12 行(就像 Eclipse 那样)。
有没有办法将 StyledText 偏移 "transform" 偏移为 "real file" 偏移?我可以将该行作为字符串检索并在文件中找到它,但这听起来像个坏主意。
谢谢!
对于折叠编辑器,编辑器的源代码查看器将实现 ITextViewerExtension5
,它提供了 widgetOffset2ModelOffset
方法来进行此调整。
使用类似的方法获取插入符位置:
ISourceViewer sourceViewer = e.getSourceViewer();
int caret;
if (sourceViewer instanceof ITextViewerExtension5) {
ITextViewerExtension5 extension = (ITextViewerExtension5)sourceViewer;
caret = extension.widgetOffset2ModelOffset(styledText.getCaretOffset());
} else {
int offset = sourceViewer.getVisibleRegion().getOffset();
caret = offset + styledText.getCaretOffset();
}
我目前正在开发 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 相关联,但我想获取文件的行号。
This picture 显示折叠文本的示例。 StyledText 插入符偏移量会给我类似第 6、7 和 8 行的内容,而不是第 6、7 和 12 行(就像 Eclipse 那样)。
有没有办法将 StyledText 偏移 "transform" 偏移为 "real file" 偏移?我可以将该行作为字符串检索并在文件中找到它,但这听起来像个坏主意。
谢谢!
对于折叠编辑器,编辑器的源代码查看器将实现 ITextViewerExtension5
,它提供了 widgetOffset2ModelOffset
方法来进行此调整。
使用类似的方法获取插入符位置:
ISourceViewer sourceViewer = e.getSourceViewer();
int caret;
if (sourceViewer instanceof ITextViewerExtension5) {
ITextViewerExtension5 extension = (ITextViewerExtension5)sourceViewer;
caret = extension.widgetOffset2ModelOffset(styledText.getCaretOffset());
} else {
int offset = sourceViewer.getVisibleRegion().getOffset();
caret = offset + styledText.getCaretOffset();
}