kav*_*i77 4 java intellij-idea intellij-plugin
我正在为 IntelliJ Idea 13 开发一个插件。我做了一些更改beforeDocumentSaving并使用document.setText:
public class AppendAction implements ApplicationComponent
{
@Override public void initComponent()
{
MessageBus bus = ApplicationManager.getApplication().getMessageBus();
MessageBusConnection connection = bus.connect();
connection.subscribe(AppTopics.FILE_DOCUMENT_SYNC, new FileDocumentManagerAdapter()
{
@Override public void beforeDocumentSaving(Document document)
{
document.setText(appendSomething(document.getText()));
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
这很好用,我唯一的问题是当这个插件运行时,我想撤消更改,我收到以下错误消息:
Cannot Undo
Following files have changes that cannot be undone:
Run Code Online (Sandbox Code Playgroud)
任何Idea?:-)
答案是将 包装document.setText成ApplicationManager.getApplication().runWriteAction和CommandProcessor.getInstance().runUndoTransparentAction。
我在 gitib 上的 intellij-community 资源中找到了一个示例 TrailingSpacesStripper: https://github.com/JetBrains/intellij-community/blob/master/platform/platform-impl/src/com/intellij/openapi/editor/impl/TrailingSpacesStripper .java
public class AppendAction implements ApplicationComponent
{
@Override public void initComponent()
{
MessageBus bus = ApplicationManager.getApplication().getMessageBus();
MessageBusConnection connection = bus.connect();
connection.subscribe(AppTopics.FILE_DOCUMENT_SYNC, new FileDocumentManagerAdapter()
{
@Override public void beforeDocumentSaving(final Document document)
{
ApplicationManager.getApplication().runWriteAction(new DocumentRunnable(document, null)
{
@Override public void run()
{
CommandProcessor.getInstance().runUndoTransparentAction(new Runnable()
{
@Override public void run()
{
document.setText(appendSomething(document.getText()));
}
});
}
});
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
716 次 |
| 最近记录: |