不知是不是Eclipse的生态策略和用户考虑,没有把MyEclipse那个Open in Explorer的小功能到整合到IDE。很多时候,是需要直接操作文件系统的。没有这个小功能,就只能:文件选中->右键快捷菜单Properties (Alt+Enter)->复制文件路径->Win+R->粘贴回车。这个是在Windows下的。如果经常打开命令行,以当前目录作为命令行的工作目录,还要手动输入CD命令,相当繁琐。于是就有了需求啦。在网上参考资料,最终效果图。为了简化操作,快捷键的必需的。这里我设了Ctrl +`和Ctril+1

代码和设定主要参考了下面的链接:
http://melord.iteye.com/blog/630339
http://www.ibm.com/developerworks/library/os-eclipse-3.3menu/
经过本人的阉割改造,plugin.xml设定如下
<?xml version="1.0" encoding="UTF-8"?>
<?eclipse version="3.4"?>
<plugin>
<extension point="org.eclipse.ui.commands">
<category id="welsney.floyd.eclipse.plugin.fsresource"
name="File System">
</category>
<command
name="Open Directory"
categoryId="welsney.floyd.eclipse.plugin.fsresource"
id="welsney.floyd.eclipse.plugin.fsresource.openDir">
</command>
<command
name="Open Command"
categoryId="welsney.floyd.eclipse.plugin.fsresource"
id="welsney.floyd.eclipse.plugin.fsresource.openCmd">
</command>
</extension>
<extension
point="org.eclipse.ui.menus">
<menuContribution
locationURI="toolbar:org.eclipse.ui.main.toolbar?after=additions">
<toolbar id="welsney.floyd.eclipse.plugin.fsresource.toolbar">
<command
commandId="welsney.floyd.eclipse.plugin.fsresource.openDir"
icon="icons/openHS.png"
label="Open Directory"
id="welsney.floyd.eclipse.plugin.fsresource.openDirMenuCommand">
</command>
<command
commandId="welsney.floyd.eclipse.plugin.fsresource.openCmd"
icon="icons/MS-DOS.ico"
label="Open Command"
id="welsney.floyd.eclipse.plugin.fsresource.openCmdMenuCommand">
</command>
</toolbar>
</menuContribution>
</extension>
<extension
point="org.eclipse.ui.handlers">
<handler
commandId="welsney.floyd.eclipse.plugin.fsresource.openDir"
class="filesystemresource.command.handler.OpenWinDirAction">
</handler>
<handler
commandId="welsney.floyd.eclipse.plugin.fsresource.openCmd"
class="filesystemresource.command.handler.OpenWinCmdAction">
</handler>
</extension>
<extension
point="org.eclipse.ui.bindings">
<key
commandId="welsney.floyd.eclipse.plugin.fsresource.openDir"
sequence="CTRL+`"
schemeId="org.eclipse.ui.defaultAcceleratorConfiguration">
</key>
<key
commandId="welsney.floyd.eclipse.plugin.fsresource.openCmd"
sequence="CTRL+1"
schemeId="org.eclipse.ui.defaultAcceleratorConfiguration">
</key>
</extension>
</plugin>
事件响应处理Java Code如下,只把关键的获取文件路径的代码保留下来。
public abstract class AbstractFileSystemResourceAction extends AbstractHandler {
@Override
public Object execute(ExecutionEvent event) throws ExecutionException {
IWorkbenchWindow window = HandlerUtil
.getActiveWorkbenchWindowChecked(event);
ISelection selection = window.getSelectionService().getSelection();
if (selection instanceof IStructuredSelection) {
Object element = ((IStructuredSelection) selection).getFirstElement();
IResource resource = null;
if ((element instanceof IResource)) {
resource = (IResource) element;
} else if (element instanceof IAdaptable) {
resource = (IResource) ((IAdaptable) element)
.getAdapter(IResource.class);
}
if(resource != null) {
doExecute(resource.getLocation().toFile());
}
}
return null;
}
protected abstract void doExecute(File file);
}
编写具体执行的Action响应处理,如果不是目录的话,为了不把文件打开,做了特殊的处理。
public class OpenWinDirAction extends AbstractFileSystemResourceAction {
@Override
protected void doExecute(File file) {
if (file != null) {
if(file.isFile()) {
file = file.getParentFile();
}
try {
Runtime.getRuntime().exec("explorer.exe " + file.getAbsolutePath());
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
打开命令行的事件响应处理Action如下。Windows Platform的那条cmd命令有点闹心,折腾许久才把黑色小窗口给弄出来。
public class OpenWinCmdAction extends AbstractFileSystemResourceAction {
@Override
protected void doExecute(File file) {
if(file != null) {
if(file.isFile()) {
file = file.getParentFile();
}
try {
Runtime.getRuntime().exec("cmd /k start cd /d " + file.getAbsolutePath());
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
本文介绍如何在Eclipse中自定义快捷操作,实现快速打开文件系统目录与命令行功能,提高开发效率。
339

被折叠的 条评论
为什么被折叠?



