打造定制的Eclipse File System Plugin

 


不知是不是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();
			} 
		}

	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值