我有一个应用程序,想要挂钩现有命令。但我不想替换任何现有的处理程序,我想添加功能(最好在默认处理程序完成执行后)。
这可能吗?或者我必须找到另一种方法来做到这一点吗?
场景是这样的:当有人在Eclipse中复制内容时,我想注册。然后我想用用户复制的东西做些什么。由于现有的复制功能很棒,我不想改变它。但我想知道有人执行了复制命令。
注意:这只需要在Eclipse内部工作! ;)我不需要在Eclipse之外监视剪贴板。
答案 0 :(得分:1)
我想我找到了办法!在研究 lot 后,我找到了这个界面:IExecutionListener。 javadoc说:
执行命令的监听器。如果命令即将执行,并且该执行完成,将通知此侦听器。监听器不可能阻止执行,只能以某种方式响应它。
这完全我想要的:不要干扰现有命令,但在执行时会收到通知。
所以这是将执行监听器添加到默认复制命令的代码:
public void addListenerToCopyCommand() {
ICommandService commandService = (ICommandService) PlatformUI
.getWorkbench().getAdapter(ICommandService.class);
Command defaultCopyCommand = commandService
.getCommand(org.eclipse.ui.IWorkbenchCommandConstants.EDIT_COPY);
defaultCopyCommand.addExecutionListener(new MyCopyListener());
}
public class MyCopyListener implements IExecutionListener {
@Override
public void preExecute(String commandId, ExecutionEvent event) {
// do nothing
}
@Override
public void postExecuteSuccess(String commandId, Object returnValue) {
// !!! Do stuff with the copied things here !!!!
System.out.println("copy command has executed");
}
@Override
public void postExecuteFailure(String commandId,
ExecutionException exception) {
// do nothing
}
@Override
public void notHandled(String commandId, NotHandledException exception) {
// do nothing
}
}
我现在需要做的就是为我的插件添加一个Activator,它将在插件启动时运行,并且只要用户复制任何内容,就会通知我的插件!