zoukankan      html  css  js  c++  java
  • 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有很好的发展。

  • 相关阅读:
    Android Media Playback 中的MediaPlayer的用法及注意事项(二)
    Android Media Playback 中的MediaPlayer的用法及注意事项(一)
    34. Search for a Range
    33. Search in Rotated Sorted Array
    32. Longest Valid Parentheses
    31. Next Permutation下一个排列
    30. Substring with Concatenation of All Words找出串联所有词的子串
    29. Divide Two Integers
    28. Implement strStr()子串匹配
    27. Remove Element
  • 原文地址:https://www.cnblogs.com/meetrice/p/1215107.html
Copyright © 2011-2022 走看看