如何在不丢失功能的情况下将另一个 EditorActionHandler 添加到单个 IdeAction?
How can I add another EditorActionHandler to a single IdeAction without losing functionality?
我有一个插件,我想在用户触发 BACKSPACE 和 DELETE 键时添加额外的功能,而不会丢失初始功能(在本例中为字符删除)。
我正在尝试覆盖指定 ideActions.<ACTION_EDITOR_VALUE>
的 EditorActionHandler
:
public class MyPlugin implements BaseComponent {
@Override
public void initializeComponent() {
final EditorActionManager editorActionManager = EditorActionManager.getInstance();
EditorActionHandler originalBackspaceHandler = editorActionManager.getActionHandler(IdeActions.ACTION_EDITOR_BACKSPACE);
EditorActionHandler eaHandler = new EditorActionHandler() {
@Override
protected void doExecute(@NotNull Editor editor, @Nullable Caret caret, DataContext dataContext) {
super.doExecute(editor, caret, dataContext);
originalBackspaceHandler.execute(editor,caret,dataContext);
PsiElement e = dataContext.getData(CommonDataKeys.PSI_ELEMENT);
if(e != null) {
System.out.println("psi Element" + e.toString());
}
}
};
editorActionManager.setActionHandler(IdeActions.ACTION_EDITOR_DELETE, eaHandler);
} //initalizeComponent()
} //MyPlugin
这是在保持当前功能的同时覆盖 editorAction
处理程序的首选方式吗?我想针对其他 IdeActions.<VALUES>
并重复使用相同的 EditorActionHandler
。
没有覆盖操作处理程序的通用方法。您的方法是其中一种可能性。
例如Here 是 smart step into
处理程序的代码,用于 "right arrow"、"left arrow" 等。使用类似的方法。
我有一个插件,我想在用户触发 BACKSPACE 和 DELETE 键时添加额外的功能,而不会丢失初始功能(在本例中为字符删除)。
我正在尝试覆盖指定 ideActions.<ACTION_EDITOR_VALUE>
的 EditorActionHandler
:
public class MyPlugin implements BaseComponent {
@Override
public void initializeComponent() {
final EditorActionManager editorActionManager = EditorActionManager.getInstance();
EditorActionHandler originalBackspaceHandler = editorActionManager.getActionHandler(IdeActions.ACTION_EDITOR_BACKSPACE);
EditorActionHandler eaHandler = new EditorActionHandler() {
@Override
protected void doExecute(@NotNull Editor editor, @Nullable Caret caret, DataContext dataContext) {
super.doExecute(editor, caret, dataContext);
originalBackspaceHandler.execute(editor,caret,dataContext);
PsiElement e = dataContext.getData(CommonDataKeys.PSI_ELEMENT);
if(e != null) {
System.out.println("psi Element" + e.toString());
}
}
};
editorActionManager.setActionHandler(IdeActions.ACTION_EDITOR_DELETE, eaHandler);
} //initalizeComponent()
} //MyPlugin
这是在保持当前功能的同时覆盖 editorAction
处理程序的首选方式吗?我想针对其他 IdeActions.<VALUES>
并重复使用相同的 EditorActionHandler
。
没有覆盖操作处理程序的通用方法。您的方法是其中一种可能性。
例如Here 是 smart step into
处理程序的代码,用于 "right arrow"、"left arrow" 等。使用类似的方法。