현재 이클립스 플러그인을 작성 중입니다. 액션을 수행하려면 활성 탭의 캐럿 리스너를 청취해야합니다.Eclipse Editor - 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, 12 대신에 6, 7, 8 행을 제공합니다 (Eclipse처럼).
StyledText 오프셋을 "실제 파일"오프셋으로 "변환"할 수 있습니까? 내가 줄로 문자열을 검색하고 파일에서 찾을 수 있지만 나쁜 생각처럼 들리 네요.
감사합니다.
감사합니다! getSourceViewer는 "보호"되어 있으므로 내 컨텍스트에서 액세스 할 수 없습니다. 제안이있는 경우 StackOverflow에서 검색합니다! – mduruisseau
이것에 대해 생각해 보면 실제로는 'ITextViewer'만 필요하지만 편집자는 이것을 쉽게 사용할 수 있다고 생각하지 않습니다. 그것을 필요로하는 모든 것은 보통 편집기 내에서 생성되고 뷰어를 매개 변수로 전달됩니다. –
알기로 답변을 찾겠습니다.하지만 지금까지 발견 한 모든 내용은 사용자가 말하는 내용과 일치합니다 (즉, 편집자가 액세스 할 수 없음). 감사합니다;) – mduruisseau