HarmonyOS开发者限时福利来啦!最高10w+现金激励等你拿~ 了解详情
写点什么

用 Ruby 和 Eclipse Monkey 编写 IDE 脚本

  • 2007-11-01
  • 本文字数:1875 字

    阅读完需:约 6 分钟

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

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

如果你不熟悉 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 信息。我们也提供了一些示例脚本,演示如何使用这个功能。

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

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

复制代码
=begin
<br></br>
Menu: Ruby > String to Symbol
<br></br>
Kudos: Christopher Williams
<br></br>
Key: M1+Shift+;
<br></br>
License: EPL 1.0
<br></br>
DOM: http://download.eclipse.org/technology/dash/update/org.eclipse.eclipsemonkey.lang.ruby
<br></br>
=end
<br></br>
# If the current token is a string containing alnums, change it to
<br></br>
# a symbol
<br></br>
editor = $editors.get_active_editor
<br></br>
selection = editor.selection_range
<br></br>
selected_src = editor.source[selection]
<br></br>
# if entire selection is a string with no dynamic content, then
<br></br>
# convert the string to a symbol
<br></br>
match = selected_src.match(/(['"])([_a-zA-Z][_\w]*)\1/)
<br></br>
return if match.nil? || match.size != 3
<br></br>
symbol = ":" + match[2]
<br></br>
editor.apply_edit(selection.first, selection.size - 1, symbol)

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

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

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

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

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

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

查看英文原文: IDE scripting with Ruby and Eclipse Monkey

2007-11-01 06:011444
用户头像

发布了 225 篇内容, 共 63.6 次阅读, 收获喜欢 50 次。

关注

评论

发布
暂无评论
发现更多内容

华为Mate 60必备,这几个保护隐私的设置太实用了

最新动态

2023-11-01:用go语言,沿街有一排连续的房屋。每间房屋内都藏有一定的现金, 现在有一位小偷计划从这些房屋中窃取现金, 由于相邻的房屋装有相互连通的防盗系统,所以小偷 不会窃取相邻的房屋, 小

福大大架构师每日一题

福大大架构师每日一题

Evolving with AR9582: MFC900M - A Legacy of Connectivity and Adaptation

wallyslilly

AR9582

桌面云一体机什么品牌最好?

青椒云云电脑

桌面云 一体机 桌面云一体机

在线涂鸦画板软件哪款好?这7款涂鸦神器值得推荐!

彭宏豪95

效率工具 画图软件 在线白板 涂鸦 绘画软件

陈奕迅全新专辑《CHIN UP!》上线华为音乐,五年后心血之作强势来袭

最新动态

一座 “数智桥梁”,华为助力“天堑变通途”

脑极体

AI

云桌面是否可以运行3D软件

青椒云云电脑

桌面云 云桌面

软件测试/测试开发丨利用ChatGPT自动生成架构图

测试人

人工智能 软件测试 ChatGPT

特权账号管理系统PAM的优势特点

尚思卓越

网络安全 数据安全 PAM

为什么需要对特权账号进行管理

尚思卓越

运维 网络安全 信息安全

低代码可视化逻辑编排工具

树上有只程序猿

低代码 可视化编排 JNPF

影视企业有哪些方式将视频文件快速海外跨国传输国内?

镭速

跨国文件传输

外贸网站建设攻略:如何建设一个高效的外贸网站

九凌网络

自动化混沌工程 ChaosMeta V0.6 版本发布

ChaosMeta

云原生 自动化 稳定性 混沌工程 攻防演练

2023年度openEuler领先商业实践遴选征集工作正式启动

彭飞

客服发送一条消息背后的技术和思考

得物技术

体验 IM 客服

跨国文件传输为什么要用专业的大文件传输软件?

镭速

跨国文件传输

语音识别技术在智能家居领域的创新应用与挑战

来自四九城儿

特权账号安全管理的难点

尚思卓越

网络安全 数据安全 特权账号管理

HarmonyOS数据管理与应用数据持久化(一)

HarmonyOS开发者

陌生链接可能是诈骗网址,谁来保护我们的上网安全?

最新动态

语音识别技术在智能客服领域的应用与优化

来自四九城儿

高能有料 | 第二届OpenHarmony技术大会议程速递

OpenHarmony开发者

第22期 | GPTSecurity周报

云起无垠

Python JSON 使用指南:解析和转换数据

小万哥

Python 程序员 软件 后端 开发

IoT与鸿蒙、低代码、生成式AI,引爆技术浪潮——华为云开发者日南京站成功举办

华为云开发者联盟

人工智能 华为云 华为云开发者联盟 华为云开发者日

语音识别技术在医疗健康领域的应用与挑战

来自四九城儿

缺客户、缺钱、缺时间——实业经营的真挑战,中国企业分别突破

B Impact

用Ruby和Eclipse Monkey编写IDE脚本_Ruby_Werner Schuster_InfoQ精选文章