Eclipse Monkey 入门

 沿着aptana的脚步,我遇到了Snippets,开始我还以为是aptana所特有的东西,原来Snippets来自Monkey-Eclipse Monkey。
  什么是Monkey呢?
  官方网址为http://www.eclipse.org/dash/
  Monkey是一个用于自动完成繁琐的编程任务的动枋态脚本工具。他使用javascript的语法,有其自带的开发库又可以使用某些java的函数。因为它的简单性,我认为它是区别于plugs-in的另外一种对eclipse的扩展的好工具。
  来,看看Eclipse Monkey Example带给了我们什么应用。
  属于Editors的命令有:Commont Lines,Leading Spaces to Tabs,Leading Tabs to Spaces。
  属于Experimental的命令有:Colorize as HTML,Exercise Editor,Load Metadata,Show Lexemes,Show Parse Tree.
  ......
  不一一列举了。
  学习的资料是少,我看了看代码,理解出了用法。仿照着写了两个Snippets,分别完成两个单独的功能。注意,由我自己的经验是需要3.2以上版本才对aptana与monkey有很好的支持。如果先装了aptana之后再装monkey的话,如monkey的文档所说到的monkey example很难加载到菜单上,需要手动修改配置,具体方法还没确定,如果先装了monkey,就可以先新建出monkey example再装aptana,这样我们开发Snippets就简单多了,直接生成了个workplace中的项目,写完Snippets保存,马上就能通过Snippets视图中双击加载上的Snippets来运行。就建出的项目的Snippets也能马上保存到Snippets视图中。
  一.给某行代码加上"//"的注释符号,这样类似于eclipse中的Ctrl+?键的功能,但简单实现当以经是"//"注释的时候依然加上"//",文件所处的位置对Snippets没影响。

 

/*
* Menu: Editor > lines
* Kudos: Kevin Lindsey
* License: EPL 1.0
* DOM: http://download.eclipse.org/technology/dash/update/org.eclipse.eclipsemonkey.lang.javascript
* DOM: http://localhost/com.aptana.ide.scripting
*/


//文件头必须这样定义好,在开头,还有其它可定义的属性,Menu就是加载到eclipse中的执行命令的位置
//
DOM应该是类似于类库的一样东西,选择需要加入
/**
* main
*/

//main是执行的方法的入口
function main()
{
var editor = editors.activeEditor;
var range = editor.selectionRange;
var startLine = editor.getLineAtOffset(range.startingOffset);
editor.beginCompoundChange();
var offset = editor.getOffsetAtLine(startLine)
editor.applyEdit(offset,
0,"//");
editor.endCompoundChange();

}



  二.这是一个很有用的功能,打开所编辑文件的所在文件夹,并对该文件选定。不知道为什么 editors.activeEditor.textEditor.getFileContext()只对aptana方式打开的文件有效。

/*
* Menu: File > OpenDir
* Kudos: Kevin Lindsey
* License: EPL 1.0
* DOM: http://download.eclipse.org/technology/dash/update/org.eclipse.eclipsemonkey.lang.javascript
* DOM: http://localhost/com.aptana.ide.scripting
*/

/**
* main
*/


function main()
{
try {
       
//获取文件路径
       var filename = editors.activeEditor.textEditor.getFileContext().getSourceProvider().getSourceURI();
       filename 
= filename.replace("%20"," ");
       
//调用系统命令
       java.lang.Runtime.getRuntime().exec("rundll32 SHELL32.DLL,ShellExec_RunDLL Explorer.exe /select," + filename); 
}
 catch(e) {
       Packages.org.eclipse.jface.dialogs.MessageDialog.openInformation(  
        window.getShell(),  
        
"Monkey Dialog"
        e
       )
}

}



进一步深入Snippets。
  在Script头里面有一个DOM属性,他确实是库的引入功能。如DOM:http://download.eclipse.org/technology/dash/update/org.eclipse.eclipsemonkey.lang.javascript就是引入了在plug-in中org.eclipse.eclipsemonkey.lang.javascript_0.1.10.15171.jar中所包函的类库,他是DOM的一个扩展,所以带给了我们了一些内置的变量来提高我们的开发效率,如:resources,views,io,editors。在Eclipse Monkey Example中,这些内置变量出现的用法为
  resources//资源对象
  var files = resources.filesMatching(".*\\.java"); \\找到所有.java文件
  views
//视图对象
  var webView = views.getView("GooleWebView"); \\生成一个视图
  editors
//编辑器对象
  var editor = editores.activeEditor;\\得到一个活动的编辑器

  具体这些变量还有什么属性和方法,我参考了在org.eclipse.eclipsemonkey.lang.javascript_0.1.10.15171中的原代码,如resources类,找到org.eclipse.eclipsemonkey.lang.javascript_0.1.10.15171\src\org\eclipse\eclipsemonkey\lang\javascript\doms\resources下的Resources.java,可以发现类里面就对应有一个filesMatching方法,而对于editores,在其构造函数中找到如下代码:

 

   String[] names = new String[] 
     
//"open", 
     "toString"
     }
;
   
this.defineFunctionProperties(names, Editors.class, PERMANENT | READONLY);

   
this.defineProperty("all", Editors.class, PERMANENT | READONLY);
   
this.defineProperty("activeEditor", Editors.class, PERMANENT | READONLY);


这就告诉我们这个变量里面,我们可以使用all,activeEditor属性和toString方法。
  另外在plugins\com.aptana.ide.scripting_0.2.8.15171\docs中,提供了部分的js的接口,里面有描述部份变量和对象的使用,如Editors.js,File.js,Global.js等。

  在上一节中,我提到了一个问题就是在我编写的打开程序所在的文件夹时候,只能打开aptana方式打开的视图的文件,通过追查源码,我发现,aptana中提供的editor有css,html,js,php,xml这些编辑器类中都有提供了一个getFileContext()方法,而这是eclipse原来的视图所不一定具有的,所以提示错误为找不到getFileContext()方法。

  Snippets是一个辅助工具,灵活简单,特别是在文本处理上能提供很好的帮助。但是他的功能还是受到局限,开发复杂的操作还是选用eclipse的plug-in功能为好。其待Snippets有很好的发展。

posted @ 2008-06-06 13:28  meetrice  阅读(1384)  评论(0编辑  收藏  举报