Eclipse Monkey 入门

简介:  沿着aptana的脚步,我遇到了Snippets,开始我还以为是aptana所特有的东西,原来Snippets来自Monkey-Eclipse Monkey。  什么是Monkey呢?  官方网址为http://www.eclipse.org/dash/  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没影响。

 

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

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

img_a6339ee3e57d1d52bc7d02b338e15a60.gif
// main是执行的方法的入口
img_a6339ee3e57d1d52bc7d02b338e15a60.gif
function  main()
img_405b18b4b6584ae338e0f6ecaf736533.gifimg_1c53668bcee393edac0d7b3b3daff1ae.gif
img_a76e9bb6ed00cf1c9c9f4ee2f04b558b.gif {
img_33d02437d135341f0800e3d415312ae8.gif
var editor = editors.activeEditor;
img_33d02437d135341f0800e3d415312ae8.gif
var range = editor.selectionRange;
img_33d02437d135341f0800e3d415312ae8.gif
var startLine = editor.getLineAtOffset(range.startingOffset);
img_33d02437d135341f0800e3d415312ae8.gifeditor.beginCompoundChange();
img_33d02437d135341f0800e3d415312ae8.gif
var offset = editor.getOffsetAtLine(startLine)
img_33d02437d135341f0800e3d415312ae8.gifeditor.applyEdit(offset,
0,"//");
img_33d02437d135341f0800e3d415312ae8.gifeditor.endCompoundChange();
img_33d02437d135341f0800e3d415312ae8.gif
img_05dd8d549cff04457a6366b0a7c9352a.gif}

img_a6339ee3e57d1d52bc7d02b338e15a60.gif
img_a6339ee3e57d1d52bc7d02b338e15a60.gif


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

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

img_405b18b4b6584ae338e0f6ecaf736533.gifimg_1c53668bcee393edac0d7b3b3daff1ae.gif
/**/ /**
img_33d02437d135341f0800e3d415312ae8.gif* main
img_05dd8d549cff04457a6366b0a7c9352a.gif
*/

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

img_05dd8d549cff04457a6366b0a7c9352a.gif}

img_a6339ee3e57d1d52bc7d02b338e15a60.gif


进一步深入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中,这些内置变量出现的用法为
img_a6339ee3e57d1d52bc7d02b338e15a60.gif   resources // 资源对象
img_a6339ee3e57d1d52bc7d02b338e15a60.gif
   var  files  =  resources.filesMatching( " .*\\.java " ); \\找到所有.java文件
img_a6339ee3e57d1d52bc7d02b338e15a60.gif  views
// 视图对象
img_a6339ee3e57d1d52bc7d02b338e15a60.gif
   var  webView  =  views.getView( " GooleWebView " ); \\生成一个视图
img_a6339ee3e57d1d52bc7d02b338e15a60.gif  editors
// 编辑器对象
img_a6339ee3e57d1d52bc7d02b338e15a60.gif
   var  editor  =  editores.activeEditor;\\得到一个活动的编辑器
img_a6339ee3e57d1d52bc7d02b338e15a60.gif

  具体这些变量还有什么属性和方法,我参考了在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,在其构造函数中找到如下代码:

 

img_405b18b4b6584ae338e0f6ecaf736533.gif img_1c53668bcee393edac0d7b3b3daff1ae.gif    String[] names  =   new  String[]  img_a76e9bb6ed00cf1c9c9f4ee2f04b558b.gif
img_33d02437d135341f0800e3d415312ae8.gif     
//"open", 
img_33d02437d135341f0800e3d415312ae8.gif
     "toString"
img_05dd8d549cff04457a6366b0a7c9352a.gif     }
;
img_a6339ee3e57d1d52bc7d02b338e15a60.gif   
this .defineFunctionProperties(names, Editors.class, PERMANENT  |  READONLY);
img_a6339ee3e57d1d52bc7d02b338e15a60.gif
img_a6339ee3e57d1d52bc7d02b338e15a60.gif   
this .defineProperty( " all " , Editors.class, PERMANENT  |  READONLY);
img_a6339ee3e57d1d52bc7d02b338e15a60.gif   
this .defineProperty( " activeEditor " , Editors.class, PERMANENT  |  READONLY);
img_a6339ee3e57d1d52bc7d02b338e15a60.gif


这就告诉我们这个变量里面,我们可以使用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有很好的发展。

相关文章
|
Android开发
10activiti - 入门demo(Eclipse)
10activiti - 入门demo(Eclipse)
85 0
10activiti - 入门demo(Eclipse)
|
Go Android开发
开心档-软件开发入门之Eclipse 添加书签
Eclipse 中可以在编辑器的任意一行添加书签。 您可以使用书签作为提示信息,或者使用书签快速定位到文件中的指定的行。
|
Java 应用服务中间件 Apache
Java Web入门之开发环境的搭建(包括下载Tomcat和 Eclipse for Java EE)
Java Web入门之开发环境的搭建(包括下载Tomcat和 Eclipse for Java EE)
335 0
Java Web入门之开发环境的搭建(包括下载Tomcat和 Eclipse for Java EE)
|
XML Java API
Spring框架入门以及Eclipse创建 Spring项目
Spring框架入门以及Eclipse创建 Spring项目
Spring框架入门以及Eclipse创建 Spring项目
|
XML Java Android开发
SpringBoot入门:使用IDEA和Eclipse构建第一个SpringBoot项目
Spring Boot是一个简化Spring开发的框架,用来监护spring应用开发,约定大于配置,去繁就简,just run 就能创建一个独立的,产品级的应用。我们在使用Spring Boot时只需要配置相应的Spring Boot就可以用所有的Spring组件,简单的说,spring boot就是整合了很多优秀的框架,不用我们自己手动的去写一堆xml配置然后进行配置。所以springboot在java开发中也变得越来越重要,这里总结一下如何使用IDEA和Eclipse创建一个简单的springboot项目。
579 0
SpringBoot入门:使用IDEA和Eclipse构建第一个SpringBoot项目
|
Java Maven Android开发
Maven入门及在eclipse中配置
Maven入门及在eclipse中配置
244 0
Maven入门及在eclipse中配置
|
Android开发
Eclipse插件开发_学习_02_GEF入门实例
一、前言 这一节,我们将会创建一个GEF入门实例     二、新建RCP项目 1. New 一个 Plug-in Project     2.输入项目名 项目名:com.ray.gef.
1877 0
|
Android开发 数据库
GEF入门实例_总结_04_Eclipse插件启动流程分析
一、前言 本文承接上一节:GEF入门实例_总结_03_显示菜单和工具栏 注意到app目录下的6个类文件。 这6个文件对RCP应用程序而言非常重要,可能我们现在对这几个文件的理解还是云里雾里,这一节我们将通过这几个文件来了解Eclipse插件的启动过程。
1505 0
|
Android开发
[Eclipse]GEF入门系列(五、浅谈布局)
虽然很多GEF应用程序里都会用到连接(Connection),但也有一些应用是不需要用连接来表达关系的,我们目前正在做的这个项目就是这样一个例子。在这类应用中,模型对象间的关系主要通过图形的包含来表达,所以大多是一对多关系。
1654 0