gpt4 book ai didi

java - 当之前的一些行在我自己的 Eclipse 编辑器中折叠时获取当前行

转载 作者:行者123 更新时间:2023-12-02 04:38:39 25 4
gpt4 key购买 nike

我正在尝试获取键盘光标的当前行。

StyledText styledText = (StyledText) getAdapter(Control.class);
styledText.addCaretListener(event -> {
try {
IDocument document = getDocumentProvider().getDocument(getEditorInput());
// This is the current line
int currentLine = document.getLineOfOffset(event.caretOffset);

} catch (BadLocationException e) {
}
});

但是当某些先前的行折叠时, getLineOfOffset 方法不起作用。如果文档折叠,则 event.caretOffset 会发生变化。

我尝试使用此代码:

ISelectionProvider selectionProvider = ((ITextEditor)editor).getSelectionProvider();
ISelection selection = selectionProvider.getSelection();
if (selection instanceof ITextSelection) {
ITextSelection textSelection = (ITextSelection)selection;
return textSelection.getStartLine();
}

但是最后一个代码返回所选的旧行。我认为 addCaretListener 事件在更改行之前执行(不确定)。

即使文档在 addCaretListener 事件中折叠,如何获取当前行?

最佳答案

如果您的编辑器使用 ProjectionViewer 作为源查看器,您可以使用 ITextViewerExtension5 widgetOffset2ModelOffset 方法:

ISourceViewer sourceViewer = getSourceViewer(); // Get your SourceViewer

StyledText styledText = sourceViewer.getTextWidget();

int docOffset = 0;
if (sourceViewer instanceof ITextViewerExtension5) {
ITextViewerExtension5 extension = (ITextViewerExtension5)sourceViewer;
docOffset = extension.widgetOffset2ModelOffset(styledText.getCaretOffset());
}
else {
int offset = sourceViewer.getVisibleRegion().getOffset();
docOffset = offset + styledText.getCaretOffset();
}

IDocument document = sourceViewer.getDocument();

int currentLine = document.getLineOfOffset(docOffset);

(改编自 JDT JavaEditor)。

关于java - 当之前的一些行在我自己的 Eclipse 编辑器中折叠时获取当前行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30444140/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com