如何告诉Applescript对查询结果进行分组?

时间:2016-05-20 17:33:43

标签: fonts applescript

我在OSX 10.11.4上。我想获得所有已安装字体的stdout列表。具体来说,我喜欢"友好"名称和文件名。 Applescript似乎是最本土的"本地"要走的路,但我是新手 - 也许这是一个简单的问题。到目前为止,我有这个几乎可以工作:

osascript -e 'tell application "Font Book" to {name, files} of typefaces'

这给了我想要的东西,但名称和文件名作为两个连接列表返回。例如:

Arial, Arial Bold, file Arial.ttf, file ArialBold.ttf ...

是否有一种简单的方法可以让Applescript输出更像:

{Arial, file Arial.ttf}, {Arial Bold, file ArialBold.ttf} ...

我不在乎它是否恰好是那种格式,但我需要能够轻松解析输出并将结果分组为元组。

2 个答案:

答案 0 :(得分:1)

对于这类事情,请考虑AS记录:

set fontData to {}

tell application "Font Book"
    set fff to every typeface
    repeat with fx in fff
        set end of fontData to {FontFile:fx's files, FontDisplayName:fx's displayed name}
    end repeat
end tell

获得记录后,可以将列表保存到文件中,然后以多种方式解析,而无需反复执行脚本。

答案 1 :(得分:0)

这个 bash oneliner 可以方便地按名称或任何其他属性(文件路径、类型等)获取所有已安装字体的列表,格式设置为易于解析/管道:

osascript -e 'tell app "Font Book"’ \
-e 'set myf to the name of every font family as list’ \
-e "set AppleScript's text item delimiters to linefeed” \
-e 'return myf as string’ \
-e 'end tell’

它运行 - 但我让每个人都来判断:time : real 0.273 user 0.067 (时间命令与 396 字体库和 Apple Terminal - MacOS11.1 上的 bash5.1)

与任何其他字体属性一起使用,即列出您的字体 file path 而不是它们的姓氏:只需将 font family 更改为 font containers 在代码中。

注意:所有各种字体属性都在 Font Book 的 applescript 字典中定义 - 最好通过 Apple 值得信赖和经过测试的(如果有的话)脚本编辑器Applications/Utilities/Script Editor >File >Open Dictionary :Font Book >

<块引用>

步骤

  • 代码在applescript中创建了一个空列表:“myf”
  • 它要求应用Font Book用每个字体系列
  • 的名称填充该列表
  • 它将列表“myf”转换成字符串,其中每个列表项都由“换行符”字符分隔(例如\ n)
  • 最后它返回整个字符串,现在很容易在 shell 中解析(以 “while.. read.. loop..” 为例)