• 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有很好的发展。

  • 相关阅读:
    ETL之Kettle
    java 之webmagic 网络爬虫
    【AC自动机】【树状数组】【dfs序】洛谷 P2414 [NOI2011]阿狸的打字机 题解
    【AC自动机】【字符串】【字典树】AC自动机 学习笔记
    【前缀和】【two-pointer】【贪心】洛谷 P3143 [USACO16OPEN]钻石收藏家Diamond Collector 题解
    【KMP】【矩阵加速】【递推】洛谷 P3193 [HNOI2008]GT考试 题解
    【KMP】洛谷P2375 [NOI2014]动物园 题解
    【KMP】【字符串】KMP字符串匹配算法 学习笔记
    【DP】+【贪心】【前缀和】洛谷P2893 [USACO08FEB]修路Making the Grade 题解
    【字典树】【树】【二进制】bzoj1954/POJ3764The xor-longest Path 题解
  • 原文地址:https://www.cnblogs.com/meetrice/p/1215107.html
Copyright © 2020-2023  润新知