eclipse插件中的文本编辑器未正确执行

eclipse插件中的文本编辑器未正确执行,eclipse,eclipse-plugin,swt,text-editor,undo-redo,Eclipse,Eclipse Plugin,Swt,Text Editor,Undo Redo,我创建了多页HTML编辑器,其中一个选项卡具有文本编辑器。我在源代码编辑器中将全局操作处理程序设置为撤消/重做操作的操作栏。每当我在源代码编辑器中添加一些东西,然后撤消它时,它在第一次尝试时不会返回相同的代码。它正在第二次尝试中完成。谁能帮我解决这个问题 在主编辑器中重写setFocus()方法,并在此方法中调用源编辑器的以下方法 public void setUndoRedoActionHandlers() { final IActionBars actionBars = getEd

我创建了多页HTML编辑器,其中一个选项卡具有文本编辑器。我在源代码编辑器中将全局操作处理程序设置为撤消/重做操作的操作栏。每当我在源代码编辑器中添加一些东西,然后撤消它时,它在第一次尝试时不会返回相同的代码。它正在第二次尝试中完成。谁能帮我解决这个问题

在主编辑器中重写setFocus()方法,并在此方法中调用源编辑器的以下方法

public void setUndoRedoActionHandlers() {

    final IActionBars actionBars = getEditorSite().getActionBars();
    actionBars.setGlobalActionHandler(ActionFactory.UNDO.getId(),
            mUndoAction);
    actionBars.setGlobalActionHandler(ActionFactory.REDO.getId(),
            mRedoAction);
    actionBars.setGlobalActionHandler(ActionFactory.DELETE.getId(),
            mDeleteAction);
    actionBars.setGlobalActionHandler(
            ITextEditorActionConstants.DELETE_LINE, mDeleteLineAction);

    actionBars.updateActionBars();
}

谢谢

您确定通过覆盖setFocus()设置全局操作吗?看看这个: 它说它们需要在方法setActiveEditor()中设置


我想你第二次看到它工作的原因是——当你第一次单击编辑器时,会获得焦点并调用setFocus,然后才设置全局操作。然后第二次它会工作,因为现在已经设置了操作。

如何解决这个问题而不看代码??检查上面的源代码。如果我没记错的话,你应该使用
multigeeditoractionbarcontributor
作为编辑器操作栏contributor类。谢谢你的回答,实际上我明白了这个问题。这是因为as delete操作在源代码编辑器上已经处于活动状态,所以当我从设计器执行单个删除操作时,删除操作在源代码编辑器上发生,删除操作在设计器一侧发生,这再次更改了源代码。因此,一次单击就发生了两个更改。因此,在撤消时,最后一个源代码被更新,但源代码的第一次删除没有更新,因此出现了问题。我在表单编辑器中添加了editorpart和文本编辑器。我想在editorpart和source editor上添加删除功能,这两个编辑器上的行为都会有所不同。你能告诉我怎样才能实现这个功能吗?@ishan我记不清到底要做什么才能实现你的要求。请看我想你需要重写setAction(DELETE)