为 Glyphs 编写脚本(三)
所以,既然我们已经理解了对象模型,我们就可以用自己的脚本来扩充“脚本”菜单了。
本教程假定你之前已读过了为 Glyphs 编写脚本(一)和为 Glyphs 编写脚本(二)。
你可能已经注意到了 Glyphs 菜单栏中的 “脚本” 菜单。我们打算编写一个脚本,并把它放在这个菜单里。首先,我们要找一款好用的文本编辑器。个人而言,我喜欢 TextMate($60)和 SublimeText($80),因为这两款都有着能让写代码更加轻松有趣的特别功能。Mac 老手也喜欢 BBEdit($50)、Smultron($15)以及 Coda(\$100)。有可能你已经购买了其中某款软件的许可证,这样的话,你可以直接将其用作写 Python 代码的编辑器。不过如果你手头紧,或者只是想先写写代码试试、以后再决定投入金钱,你可以选择免费的 TextWrangler、SubEthaEdit,或最近非常流行的 Atom。
无论你选择了何种编辑器,敲 Cmd-N 创建一个新文档,保存在这个文件夹中:
~/Library/Application Support/Glyphs/Scripts/
波浪线(~
)代表你的个人文件夹。提示:在 “保存” 对话框中,你可以敲 Cmd-Shift-G 来唤出 “前往文件夹” 功能,将上面这行内容粘贴进去。为你的脚本起个名字,比如 Glyph Shaker.py
,因为我们打算将上次写的 Python 代码变成一个成熟的脚本。没错,.py
后缀名代表 Python 脚本。不过现在,我们看看代码……
最重要的事情优先。我们先来输入菜单项名称,声明文件的编码方式,再加一小段说明文本:
#MenuTitle: 字符形震荡器
__doc__="""
遍历所有选定的字符形,将其中的每个节点移动一小段距离。
"""
第一行实际上是一个注释,因为在 Python 中,井号(#
)后面的内容就是注释。不过,Glyphs 会将 #MenuTitle:
开头的注释解译为脚本的菜单标题。如果你的脚本中没有这一行,Glyphs 会使用文件名作为菜单标题。我们的脚本,就会在 “脚本” 菜单中显示为 “字符形振荡器”。
第二行也是一个注释,不过这次,是 Python 会从其中解读出信息,顾名思义就是 .py
文件的编码方式。除非你有更好的主意、并且知道你在做什么,否则一直选择 UTF-8。
后面几行,我们声明了一个特殊的变量,名为 __doc__
。该变量存储所谓的 “档案字串”(doc string),一小段关于你 Python 对象(本例中即为你的脚本)的档案文本。三个双引号标示着一段多行字符串,因此如果你想的话也可以添加一段长达几个自然段的说明文本。Glyphs 使用 “档案字串” 作为工具提示,当你的鼠标指针在 “脚本” 菜单中的脚本名称上停留时,会显示出来。
然后,像上次一样,我们需要设置随机数生成器:
import random
random.seed()
然后我们获取当前所选的图层,把它们放在 selectedLayers
变量中。(我们不想把所有图层 / 母版混合在一起,只作用与我们能看到的图层上。)我们开始:
selectedLayers = Glyphs.font.selectedLayers
现在,我们可以用 selectedLayers
做一些事情,比如遍历每个图层、每个路径、每个节点,将其移动一个从 -50
和 50
之间的随机数值:
for thisLayer in selectedLayers:
for thisPath in thisLayer.paths:
for thisNode in thisPath.nodes:
thisNode.x += random.randint( -50, 50 )
如果你做得全部正确,它看上去差不多应该是这样:

就是这样了。保存你的脚本,切换回 Glyph,看一下 “脚本” 菜单。什么?!我们的 “字符形振荡器” 不在那里!这是因为,我们必须要先让 Glyphs 重新扫描一下它的脚本文件夹。这样做:打开菜单时,按住 Option 键,“打开脚本文件夹” 一项会变成 “重新载入脚本”。之后,你的脚本就会出现在那里,其名称就是你在 #MenuTitle:
之后所定义的那个。
现在你可以打开你最不喜欢的字体,选择你最讨厌的那个字母,然后选择 “脚本” 菜单中的 “字符形振荡器” 给它来上活该的一拳。使用 Cmd-Opt-R 快捷键来重复打拳。尝尝这个吧,Helvetica!
现在,好好享受你应得的咖啡和冰淇淋小憩吧。当你觉得准备好进行下一步时,请继续阅读这系列 Python 介绍的第四部分。
2014-10-04 更新:添加编码行,更新“档案字串”的解释。
2016-12-08 更新:修正截图(感谢 Friedrich)
2017-05-24 更新:添加第四部分的指引。
2018-12-26 更新:添加更多文本编辑器的链接。
2020-12-02 更新:升级到 Python3。
Chinese translation by Willie Liu (刘育黎) from 3type (三言).