图形应用之间的重复劳动
AppleScript是苹果公司为Macintosh应用自动化建立的脚本语言。图形界面让用户直接操作文档、窗口和菜单,但需要反复处理一批资料时,逐项点击仍然费时。数据库中的商品资料要转入排版软件,或者一个应用处理好的数据要交给另一个应用,往往需要人工复制和整理。
一些软件已有自己的宏语言,用户却必须逐个学习,而且单个程序难以协调完整工作流程。AppleScript把循环、条件和变量等通用规则与应用自己的词汇结合,使用户可以围绕文档、单元格和图片等对象编写脚本。应用提供已有功能,脚本负责把这些功能按任务顺序组织起来。
从研究构想到实现团队
这一方向与苹果1989年开始的Family Farm研究有关,也受到HyperCard及其HyperTalk语言启发。前期团队探索应用间通信和对象引用,后来相关工作分别发展为Apple Events、AppleScript与OpenDoc。AppleScript侧重协调应用行为和数据处理。
1991年,库尔特·皮尔索尔邀请威廉·库克参加项目。库克负责语言设计与实现的领导工作,随后加入的沃伦·哈里斯成为共同架构设计者和主要实现者。埃德蒙·赖等人开发的Apple Events通信设施则提供底层支持。这些工作需要语言、操作系统、文档和应用开发人员相互配合。
参考:[1]
用对象说明操作目标
开放脚本架构(Open Scripting Architecture,OSA)把脚本处理程序与使用脚本的应用分开。AppleScript是其中一种语言处理程序;应用通过共同接口调用脚本服务,并公开自身能处理的命令和对象。它们还负责真正执行读取、排版或计算等操作。
库克与哈里斯的手稿用“第22段的第一个词”说明对象引用。这个表达式先指定段落,再选择其中的词;它描述的是文档结构,而不是屏幕上的坐标。同样,脚本可以按名称、序号、范围或条件选择对象。命令和对象说明经Apple Events送到目标应用,由应用解释并处理。
这种办法比重放鼠标位置更能适应窗口布局变化。不过,脚本所依赖的对象名称与结构仍须得到应用支持;文档结构改变后,原有选择条件也可能需要调整。
一份商品目录怎样组合多个应用
手稿举出商品目录制作的具体实例:产品说明、价格和优惠信息存放在FileMaker Pro数据库,产品代码对应图像库中的图片,最终页面由QuarkXPress排版。脚本读取资料,把文字与图像放入适当位置,再应用价格样式、颜色和促销标记。
这里的程序并不重新实现数据库或排版引擎,而是向各个应用发出操作请求。例如,把价格的小数部分改成上标,或者根据文字框宽度调整文字,是排版软件接受脚本指令后完成的工作。中间数据可以通过变量和对象引用传递,减少对人工剪贴板操作的依赖。
使用者还可以把脚本连接到按钮等界面元素,由一个小型前端启动整套流程。为不同客户维护脚本的顾问或单位内部开发者,由此能够把既有商业软件组合成专门的生产工具。
参考:[2]
1993年的开发者工具包
AppleScript于1992年进入测试阶段。1993年4月,1.0开发者工具包交付,包含接口声明、示例代码、示例应用和语言指南。这为应用开发者增加脚本接口、试用语言和编写配套工具提供了具体材料。随后面向终端用户的1.1版进入System 7 Pro,1994年又随System 7.5扩大分发。
脚本编辑器让用户编写、编译和运行脚本,也能显示结果。苹果1999年的语言指南说明其工作过程:编辑器将语句交给AppleScript扩展,扩展发送Apple Events,应用执行操作后回传结果。脚本还可以保存为独立小应用,让不负责编程的人重复使用既定流程。
应用支持决定自动化范围
脚本能做多少事,取决于应用公开了什么。苹果指南区分了可由脚本控制、可记录操作和可附加脚本等能力:一个应用支持其中一项,并不保证具备其他各项。用户可查看应用词典,了解可调用命令、参数与对象。
录制操作能帮助用户建立脚本起点,但生成的对象选择不一定适合所有场景。关闭最前面的窗口与关闭某个指定名称的窗口,在批量处理时会产生不同结果。AppleScript的实际价值来自可维护的规则、恰当的对象选择和应用之间稳定的接口;后续版本与系统迁移则继续改变这些接口所覆盖的范围。