热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

用Ruby和EclipseMonkey编写IDE脚本

Eclipse等IDE靠着从SmalltalkIDEs里吸收养分已经赢得了很多用户——增量编译、本地版本管理就是其中的两个。不过SmalltalkIDEs(或Emac

Eclipse等IDE靠着从Smalltalk IDEs里吸收养分已经赢得了很多用户——增量编译、本地版本管理就是其中的两个。不过Smalltalk IDEs(或Emacs等编辑器)仍然占据优势的一个领域,就是IDE本身的自动化:在IDE里将重复性的工作变成脚本。Smalltalk用户可以直接用Smalltalk去访问IDE的对象,Emacs用户用LISP可以完成同样的工作——不但可以交互式地完成,还可以在运行时进行

\u0026#xD;\n

Eclipse Monkey为Eclipse提供了一个方案——Eclipse Monkey的名字来自著名的Firefox插件GreaseMonkey。它的第一版用Javascript(基于Java的Rhino)作为脚本语言,但Christopher Williams最近宣布也可以用Ruby(采用JRuby)来编写脚本了:

\u0026#xD;\n
如果你不熟悉EclipseMonkey,它是一组Eclipse插件,可以和用户交互,并用非Java的其他语言(最初仅支持Javascript)来给IDE写脚本。更详细的信息你可以查阅http://www.eclipse.org/dash/monkey-help.php?key=writing。

EclipseMonkey的Ruby扩展开启了用Ruby代码编写IDE脚本的能力。

最初的版本暴露了一个Editor DOM,让你可以用脚本去操纵编辑器。我们在Wiki上已经准备了一些帮助,里面描述了很多细节以及Editor DOM的API信息。我们也提供了一些示例脚本,演示如何使用这个功能。

\u0026#xD;\n

Eclipse Monkey的设计实践了“简单”原则——这么做是有原因的:这个项目的发起人和设计者之一是 Ward Cunningham,他与其他人一起在1990年代发明了Wiki。脚本是项目中的一些文本文件;任何元数据都保存在文件自身里面。元数据包括依赖性,或者运行脚本的一个快捷方式的声明。你可以把一个脚本与Eclipse中的任意事件挂钩,比如文件变更、文件保存或者程序启动。

\u0026#xD;\n

下面是一段用Ruby写的Eclipse Monkey脚本,用来把编辑器里的String转成Symbol:

\u0026#xD;\n

=begin\u0026#xD;\n
\u0026#xD;\nMenu: Ruby \u0026gt; String to Symbol\u0026#xD;\n
\u0026#xD;\nKudos: Christopher Williams\u0026#xD;\n
\u0026#xD;\nKey: M1+Shift+;\u0026#xD;\n
\u0026#xD;\nLicense: EPL 1.0\u0026#xD;\n
\u0026#xD;\nDOM: http://download.eclipse.org/technology/dash/update/org.eclipse.eclipsemonkey.lang.ruby\u0026#xD;\n
\u0026#xD;\n=end\u0026#xD;\n
\u0026#xD;\n# If the current token is a string containing alnums, change it to\u0026#xD;\n
\u0026#xD;\n# a symbol\u0026#xD;\n
\u0026#xD;\neditor = $editors.get_active_editor\u0026#xD;\n
\u0026#xD;\nselection = editor.selection_range\u0026#xD;\n
\u0026#xD;\nselected_src = editor.source[selection]\u0026#xD;\n
\u0026#xD;\n# if entire selection is a string with no dynamic content, then\u0026#xD;\n
\u0026#xD;\n# convert the string to a symbol\u0026#xD;\n
\u0026#xD;\nmatch = selected_src.match(/(['\"])([_a-zA-Z][_\\w]*)\\1/)\u0026#xD;\n
\u0026#xD;\nreturn if match.nil? || match.size != 3\u0026#xD;\n
\u0026#xD;\nsymbol = \":\" + match[2]\u0026#xD;\n
\u0026#xD;\neditor.apply_edit(selection.first, selection.size - 1, symbol) \u0026#xD;\n

Eclipse Monkey中的另一个概念是DOM,别跟HTML或者XML DOM搞混了,它代表的是Domain Object Model。它是一个为特定领域的某些功能提供简化接口的一个对象。

\u0026#xD;\n

以上面的代码为例,$editors变量指向一个处理所有与Editors相关之事的DOM。为Eclipse这类IDE编写脚本,DOM是必要的简化之举。通过直接访问Eclipse对象、系统及API来完成相同的事情也是可以的,不过写出来的脚本很可能会变得更加复杂。这是由于Eclipse的设计非常灵活,它具备的若干概念也造就了它的扩展能力——但也意味着像$editors.get_active_editor这样简单的一句表达式要变成2-3行代码。

\u0026#xD;\n

这些DOM都是普通的Eclipse插件,贡献到org.eclipse.eclipsemonkey.dom扩展点,因此在Eclipse的插件开发环境(PDE)中编写一个简化的功能接口是很容易的。Eclipse Monkey的元数据也有助于DOM的配置管理:脚本的元数据段可以指定它所需DOM的update site,当脚本运行的时候系统就会自动去获取需要的DOM。

\u0026#xD;\n

由于Eclipse Monkey脚本在Eclipse的JVM里运行,因此可以在脚本里使用所有的Java API和所有的JRuby标准库。现在已经存在很多Eclipse Monkey DOM,让开发者得以访问Eclipse和Eclipse插件元系统提供的丰富代码和功能。

\u0026#xD;\n

例如用JMX DOM就可以通过JMX来控制JVM。通过简单的脚本就能够调用所有的JMX操作,查询所有的JMX属性。在实用中可以用它来从Eclipse启动一个程序,设置程序的属性(比如日志级别),调用程序的操作(比如执行垃圾收集)——只需简单的一步。别的DOM还可访问比如CVS/SVN插件、工作区、JDT等等。

\u0026#xD;\n

更多信息可参阅Aptana的Eclipse Monkey网站,或者Eclipse Monkey网站的官方页面。

\u0026#xD;\n查看英文原文:IDE scripting with Ruby and Eclipse Monkey

推荐阅读
  • 实践指南:使用Express、Create React App与MongoDB搭建React开发环境
    本文详细介绍了如何利用Express、Create React App和MongoDB构建一个高效的React应用开发环境,旨在为开发者提供一套完整的解决方案,包括环境搭建、数据模拟及前后端交互。 ... [详细]
  • 本文介绍了多种Eclipse插件,包括XML Schema Infoset Model (XSD)、Graphical Editing Framework (GEF)、Eclipse Modeling Framework (EMF)等,涵盖了从Web开发到图形界面编辑的多个方面。 ... [详细]
  • 华为云openEuler环境下的Web应用部署实践
    本文详细记录了在华为云openEuler系统上进行Web应用部署的具体步骤,包括配置yum源、安装Apache、MariaDB、PHP及其相关组件,并完成WordPress的安装与配置过程。 ... [详细]
  • 利用Python与Android进行高效移动应用开发
    通过结合Python和Android,可以实现高效的移动应用开发。首先,需要安装Scripting Layer for Android (SL4A),这是一个开源项目,旨在为Android系统提供脚本语言支持。SL4A不仅简化了开发流程,还允许开发者使用Python等高级语言编写脚本,从而提高开发效率和代码可维护性。此外,SL4A还支持多种其他脚本语言,进一步扩展了其应用范围。通过这种方式,开发者可以快速构建功能丰富的移动应用,同时保持较高的灵活性和可扩展性。 ... [详细]
  • 本文探讨了如何选择一个合适的序列化版本ID(serialVersionUID),包括使用生成器还是简单的整数,以及在不同情况下应如何处理序列化版本ID。 ... [详细]
  • 本文提供了一个详尽的前端开发资源列表,涵盖了从基础入门到高级应用的各个方面,包括HTML5、CSS3、JavaScript框架及库、移动开发、API接口、工具与插件等。 ... [详细]
  • 利用 Calcurse 在 Linux 终端高效管理日程与任务
    对于喜爱使用 Linux 终端进行日常操作的系统管理员来说,Calcurse 提供了一种强大的方式来管理日程安排、待办事项及会议。本文将详细介绍如何在 Linux 上安装和使用 Calcurse,帮助用户更有效地组织工作。 ... [详细]
  • Jupyter Notebook多语言环境搭建指南
    本文详细介绍了如何在Linux环境下为Jupyter Notebook配置Python、Python3、R及Go四种编程语言的环境,包括必要的软件安装和配置步骤。 ... [详细]
  • 小编给大家分享一下Vue3中如何提高开发效率,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获, ... [详细]
  • 本文详细探讨了在Web开发中常见的UTF-8编码问题及其解决方案,包括HTML页面、PHP脚本、MySQL数据库以及JavaScript和Flash应用中的乱码问题。 ... [详细]
  • 本文介绍了如何使用开源工具ChkBugReport来解析和分析Android设备的Bugreport。ChkBugReport能够将复杂的Bugreport转换为易于阅读的HTML报告,并提供详细的图表和分析结论。 ... [详细]
  • 我正在使用 Ruby on Rails 构建个人网站。总体而言,RoR 是一个非常出色的工具,它提供了丰富的功能和灵活性,使得创建自定义页面变得既高效又便捷。通过利用其强大的框架和模块化设计,我可以轻松实现复杂的功能,同时保持代码的整洁和可维护性。此外,Rails 的社区支持也非常强大,为开发过程中遇到的问题提供了丰富的资源和解决方案。 ... [详细]
  • 为何Serverless将成为未来十年的主导技术领域?
    为何Serverless将成为未来十年的主导技术领域? ... [详细]
  • 综合实训 201521440015
    Chinesepeople’publicsecurityuniversity网络对抗技术实验报告实验五综合渗透学生姓名常泽远年级15区队4指导教师高见信息技术与网络安全学院2018 ... [详细]
  • JetBrains RubyMine 2021 for Mac(Ruby代码编辑工具) v2021.2.2中文激活版
    内容介绍RubyMine2021一款全面的Ruby代码编辑器,可以识别动态语言细节。RubyMine破解版提供智能编码辅助,智能代码重构和深度代码分析功能。通过简单的项目配置,自动 ... [详细]
author-avatar
雨天是最美
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有