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!

0

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);
0

请先登录再写评论。