【发布时间】:2011-11-10 04:53:23
【问题描述】:
我有不同的项目和几个具有不同目标的构建文件。
通常,如果我想运行一个目标,我会使用导航到“Ant”视图,然后选择构建文件,然后选择要运行的目标。
有没有办法为特定目标分配键盘快捷键,而不是每次都执行几个步骤,以便我可以轻松运行该目标。
【问题讨论】:
标签: java eclipse keyboard-shortcuts
我有不同的项目和几个具有不同目标的构建文件。
通常,如果我想运行一个目标,我会使用导航到“Ant”视图,然后选择构建文件,然后选择要运行的目标。
有没有办法为特定目标分配键盘快捷键,而不是每次都执行几个步骤,以便我可以轻松运行该目标。
【问题讨论】:
标签: java eclipse keyboard-shortcuts
可以在 Window > Preferences > General > Keys 下找到键的主要首选项页面(或更快:按 Ctrl+3,键入 Keys 并按 Enter)。请参阅How to manage keyboard shortcuts in Eclipse and why you should 文章以实现您想要的。
【讨论】:
好的,我尝试了“EASE-script + 键盘快捷键”技术,效果更好:
我在我的工作区/项目的基础上创建了一个“my_build_target.js”javascript 文件:
/**
* keyboard: Alt+Shift+2
*/
targetmanager = org.eclipse.cdt.make.core.MakeCorePlugin.getDefault().getTargetManager()
projects = targetmanager.getTargetBuilderProjects()
folder = projects[0].getFolder("Test/Scenarios/Win32")
// targets = targetmanager.getTargets(folder)
target = targetmanager.findTarget(folder, "MyBuildTargetName")
target.build(new org.eclipse.core.runtime.NullProgressMonitor())
注意标题注释中“魔术关键字”的使用,它指定了脚本所需的快捷键。
然后,您需要指定要加载脚本的位置,方法是:
就我个人而言,我点击了“添加工作区”按钮并指定了我的工作区/项目的基础(这是我存放脚本的地方)。
我重新启动了 Eclipse,然后使用了我指定的“Alt+Shift+2”快捷键。
太棒了,它有效:)
一个问题是我无法取消正在使用此方法进行的构建。我怀疑这是因为我在调用 .build() 时使用了 NullProgressMonitor 类。如果我知道一种在此处添加适当进度监视器的方法(可让您取消正在进行的构建),那么我将更新此答案...
【讨论】:
注意:这是我最初的“Practical Macro + Beanshell script”技术,我已经放弃了。我更喜欢第二个答案中提到的其他技术。
我也一直在寻找一种方法来为特定的 make 目标执行此操作。唯一可用的内置快捷方式是“重建最后一个目标”,如果您经常在目标之间交换,这并不是很有帮助。
虽然我还没有具体的解决方案,但我正在努力解决。
我正在评估“Practical Macro”插件。它能够为宏分配快捷键。它还可以将宏定义为 beanshell 脚本。
所以剩下的就是弄清楚什么样的 beanshell 脚本能够运行特定的 make 目标。
我尝试通过 EASE 脚本工具探索 Eclipse API。
我将分享我如何以编程方式(通过他们的 javascript 界面)成功运行 make-target 的步骤/笔记:
targetmanager = org.eclipse.cdt.make.core.MakeCorePlugin.getDefault().getTargetManager()
projects = targetmanager.getTargetBuilderProjects()
folder = projects[0].getFolder("Path/To/My/Build/Targets/")
// targets = targetmanager.getTargets(folder)
target = targetmanager.findTarget(folder, "MyBuildTargetName")
target.build(new org.eclipse.core.runtime.NullProgressMonitor())
所以我认为剩下的就是让我(或其他感兴趣的人):
...这是一个相当复杂的方法,所以如果有人有任何更简单的替代方案,我愿意听取他们的意见。
更新:
FWIW,我设法以这种形式为“Practical Macro”创建了一个 beanshell 脚本:
//Scripts are beanshell format (see http://www.beanshell.org/)
//variable type
//styledText the org.eclipse.swt.custom.StyledText instance for the current editor
//console write output to the macro console via console.write(String), .writeln(String), .write(Exception)
//findTarget the instance of org.eclipse.jface.text.IFindReplaceTarget
import org.eclipse.swt.custom.StyledText;
import org.eclipse.jface.text.IFindReplaceTarget;
c = org.eclipse.core.runtime.Platform.getBundle("org.eclipse.cdt.make.core").loadClass("org.eclipse.cdt.make.core.MakeCorePlugin");
m = c.getMethod("getDefault", null);
dflt = m.invoke(null, null);
targetmanager = dflt.getTargetManager();
projects = targetmanager.getTargetBuilderProjects();
folder = projects[0].getFolder("Path/To/My/Build/Targets/");
target = targetmanager.findTarget(folder, "MyBuildTargetName");
target.build(new org.eclipse.core.runtime.NullProgressMonitor());
是的,它确实起到了一定的作用,但唯一的问题是 eclipse ide 在没有任何刷新的情况下停止。只有在构建完成后,控制台窗格才会更新为最终的构建输出(一次点击),并且 Eclipse 会再次响应。
所以它并不完美,但我想这是我所追求的方向的渐进式进步......至于在构建过程中导致冻结/失速的原因,我不能肯定地说,但我怀疑实际上宏插件会锁定 Eclipse,直到宏完成。
下次:
也许如果我有另一个时间窗口再次查看此问题,我会尝试查看是否可以通过键盘快捷键触发 EASE-javascript 脚本。这个页面似乎暗示这是可能的:
【讨论】: