0
我目前正在使用Eclipse插件。爲了執行某個操作,我需要聽取活動選項卡的脫字符號偵聽器。Eclipse編輯器 - SWT StyledText CaretListener偏移量不對應於真實文件行號
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偏移量「轉換」爲「實際文件」偏移量?我可以將該行作爲字符串檢索並在文件中找到它,但這聽起來像個不好的主意。
謝謝!
謝謝!看起來getSourceViewer是「受保護的」,所以我無法在我的上下文中訪問它。 如果有一些建議,我將在StackOverflow中搜索! – mduruisseau
考慮到這一點,你實際上只需要'ITextViewer',但我不認爲編輯器可以很容易地使用它。所有需要它的東西通常都是在編輯器中創建的,並將查看器作爲參數傳遞。 –
我明白了,我會尋找答案,但到目前爲止我發現的所有內容都與您所說的內容相符(即無法在編輯之外訪問)。 ) – mduruisseau