DocumentListener for getting what line was changed
Hello. I am trying to have an event listener for any document changes. I want to keep track of the file changed and the last line number changed since the last commit. I am able to register a DocumentListener for all editors, but I cannot find a method to provide me with the line number that was changed in the DocumentEvent class. Here is my proof of concept:
public void initComponent() {
FileEditor[] editors = FileEditorManager.getInstance(project).getAllEditors();
for (FileEditor editor: editors) {
PsiManager.getInstance(project).findFile(editor.getFile()).getViewProvider().getDocument().addDocumentListener(new DocumentListener() {
@Override
public void beforeDocumentChange(@NotNull DocumentEvent event) {
// Line number of change ?
}
});
}
}
Thanks!
请先登录再写评论。
You can do it like this:
EditorFactory.getInstance().getEventMulticaster().addDocumentListener(new DocumentListener() {
@Override
public void documentChanged(@NotNull DocumentEvent event) {
Document document = event.getDocument();
VirtualFile file = FileDocumentManager.getInstance().getFile(document);
int offset = event.getOffset();
int newLength = event.getNewLength();
// actual logic depends on which line we want to call 'changed' when '\n' is inserted
int firstLine = document.getLineNumber(offset);
int lastLine = newLength == 0 ? firstLine : document.getLineNumber(offset + newLength - 1);
}
}, disposable);