如何将快捷键分配给 运行 特定的 EASE 脚本
How to assign a shortcut key to run a particular EASE script
我很好奇是否可以将快捷键分配给 运行 特定的 EASE 脚本。我知道我可以 add scripts to UI,但对我来说,应用快捷键是更熟悉和方便的工作方式。
也许,首先我应该创建一个弹出菜单项,然后为该项目分配一个键。所以我添加了 the context menu item 但我在 首选项 >> 常规 >> 键 .
中找不到对该项目的任何引用
我找到了 运行 键入一系列键的特定 EASE 脚本的方法:
- 创建一个 eclipse 插件项目;
- 添加扩展点以定义键绑定、命令处理程序和简易模块;
- 编写模块 class 和命令处理程序 class。
当我键入键序列时调用命令处理程序的方法 "execute"。因为我可以使用该模块同步访问命令处理程序,所以我可以从 "execute" 方法中将代码分配为 运行。
这是plugin.xml:
<?xml version="1.0" encoding="UTF-8"?>
<?eclipse version="3.4"?>
<plugin>
<extension point="org.eclipse.ui.bindings">
<key sequence="Ctrl+Shift+D"
commandId="m5.command_0"
schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"
contextId="org.eclipse.jdt.ui.javaEditorScope"/>
</extension>
<extension point="org.eclipse.ui.commands">
<command name="Execute custom command"
defaultHandler="m5.handlers.CustomHandler_0"
description="Execute custom command"
categoryId="org.eclipse.jdt.ui.category.source"
id="m5.command_0">
</command>
</extension>
<extension
point="org.eclipse.ease.modules">
<module
category="org.eclipse.ease.category.system"
class="m5.handlers.Module1"
id="M5.module1"
name="M5.module1"
visible="true">
</module>
</extension>
</plugin>
这是命令处理程序:
package m5.handlers;
import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
public class CustomHandler_0 extends AbstractHandler {
private static Runnable runnable;
protected synchronized static void setRunnableToExecute(Runnable codeToRun){
runnable = codeToRun;
}
@Override
public Object execute(ExecutionEvent arg0) throws ExecutionException {
System.out.println("command_0");
if(runnable != null){
runnable.run();
}
return null;
}
}
这是模块:
package m5.handlers;
import org.eclipse.ease.modules.AbstractScriptModule;
import org.eclipse.ease.modules.WrapToScript;
import m5.handlers.CustomHandler_0;
public class Module1 extends AbstractScriptModule{
@WrapToScript
public void setCommand_0(String code){
CustomHandler_0.setRunnableToExecute(new Runnable(){
@Override
public void run() {
getScriptEngine().executeAsync(code);
}
});
}
}
我很好奇是否可以将快捷键分配给 运行 特定的 EASE 脚本。我知道我可以 add scripts to UI,但对我来说,应用快捷键是更熟悉和方便的工作方式。
也许,首先我应该创建一个弹出菜单项,然后为该项目分配一个键。所以我添加了 the context menu item 但我在 首选项 >> 常规 >> 键 .
中找不到对该项目的任何引用我找到了 运行 键入一系列键的特定 EASE 脚本的方法:
- 创建一个 eclipse 插件项目;
- 添加扩展点以定义键绑定、命令处理程序和简易模块;
- 编写模块 class 和命令处理程序 class。
当我键入键序列时调用命令处理程序的方法 "execute"。因为我可以使用该模块同步访问命令处理程序,所以我可以从 "execute" 方法中将代码分配为 运行。
这是plugin.xml:
<?xml version="1.0" encoding="UTF-8"?>
<?eclipse version="3.4"?>
<plugin>
<extension point="org.eclipse.ui.bindings">
<key sequence="Ctrl+Shift+D"
commandId="m5.command_0"
schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"
contextId="org.eclipse.jdt.ui.javaEditorScope"/>
</extension>
<extension point="org.eclipse.ui.commands">
<command name="Execute custom command"
defaultHandler="m5.handlers.CustomHandler_0"
description="Execute custom command"
categoryId="org.eclipse.jdt.ui.category.source"
id="m5.command_0">
</command>
</extension>
<extension
point="org.eclipse.ease.modules">
<module
category="org.eclipse.ease.category.system"
class="m5.handlers.Module1"
id="M5.module1"
name="M5.module1"
visible="true">
</module>
</extension>
</plugin>
这是命令处理程序:
package m5.handlers;
import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
public class CustomHandler_0 extends AbstractHandler {
private static Runnable runnable;
protected synchronized static void setRunnableToExecute(Runnable codeToRun){
runnable = codeToRun;
}
@Override
public Object execute(ExecutionEvent arg0) throws ExecutionException {
System.out.println("command_0");
if(runnable != null){
runnable.run();
}
return null;
}
}
这是模块:
package m5.handlers;
import org.eclipse.ease.modules.AbstractScriptModule;
import org.eclipse.ease.modules.WrapToScript;
import m5.handlers.CustomHandler_0;
public class Module1 extends AbstractScriptModule{
@WrapToScript
public void setCommand_0(String code){
CustomHandler_0.setRunnableToExecute(new Runnable(){
@Override
public void run() {
getScriptEngine().executeAsync(code);
}
});
}
}