Eclipse JFace:如何将我的文档中的多项更改视为历史记录中的一项更改?
Eclipse JFace : how to make several changes in my document considered as one single change in the history?
我有一个命令通过调用 IDocument#replace(int offset, int length, String text)
方法在文档中执行多项更改。
它工作正常。
问题是每个更改都是操作历史记录中的一个条目。所以当我撤消命令时,我所有的更改都被一一撤消。例如,如果我的命令进行了 40 次更改,我必须按 CTRL+Z 40 次才能完全反转操作并回到初始状态。
为避免这种情况,我一次替换了所有文档内容,但是当我撤消时,所有编辑器的内容都被选中并滚动到底部。它更方便但不够优雅。
所需的行为与 Eclipse 的 Java 编辑器中的 "Refactor > rename" 相同。在视觉上,很容易跟踪 Undo/redo 操作期间的所有更改。
是否有使用 IDocument API 执行此类任务的简单方法,或者我是否必须使用可能更复杂的 Undo/Redo Eclipse 框架?
谢谢。
您可以使用具有 beginCompoundChange()
和 endCompoundChange()
方法的 IRewriteTarget
。
使用
从编辑器获取目标
IRewriteTarget target = editor.getAdapter(IRewriteTarget.class);
如果您有 TextViewer
(或 SourceViewer
)呼叫 TextViewer.getRewriteTarget()
我有一个命令通过调用 IDocument#replace(int offset, int length, String text)
方法在文档中执行多项更改。
它工作正常。
问题是每个更改都是操作历史记录中的一个条目。所以当我撤消命令时,我所有的更改都被一一撤消。例如,如果我的命令进行了 40 次更改,我必须按 CTRL+Z 40 次才能完全反转操作并回到初始状态。
为避免这种情况,我一次替换了所有文档内容,但是当我撤消时,所有编辑器的内容都被选中并滚动到底部。它更方便但不够优雅。
所需的行为与 Eclipse 的 Java 编辑器中的 "Refactor > rename" 相同。在视觉上,很容易跟踪 Undo/redo 操作期间的所有更改。
是否有使用 IDocument API 执行此类任务的简单方法,或者我是否必须使用可能更复杂的 Undo/Redo Eclipse 框架?
谢谢。
您可以使用具有 beginCompoundChange()
和 endCompoundChange()
方法的 IRewriteTarget
。
使用
从编辑器获取目标IRewriteTarget target = editor.getAdapter(IRewriteTarget.class);
如果您有 TextViewer
(或 SourceViewer
)呼叫 TextViewer.getRewriteTarget()