如何使用脚本定义(sdef)

时间:2017-04-13 08:03:27

标签: applescript sdef

我希望能够使用脚本定义(sdef)反编译和编译AppleScript脚本库(scptd),因此我可以将文本源放在版本控制中。

这个问题的背景是将我的AppleScript资源放在git中。我的大多数问题都已由this stackoverflow question/answer回答,但我在此处描述的问题仍然阻止我将所有脚本放入git中。

在这个库中test.scptd我有一个名为say it loud的处理程序,在sdef文件test.sdef中,它被声明为一个代码为{{1}的命令}}

使用SAYTLOUD时,我会收到AppleScript文本文件osadecompile

test.applescript

但是,此来源无法使用on say it loud whatToSay do shell script "say " & quoted form of whatToSay end on say it loud 进行编译,因为osacompile文件的链接已被破坏且sdef不是有效标识符。

幸运的是,我找到了二进制文件compile_assource here),它是优秀编辑器TextMate的一部分。在反编译时,我得到以下源文件say it loud

test_raw.applescript

这就是我想要的,因为代码仍然是有效的AppleScript,并且它可以运行。唯一的区别是您无法按名称调用处理程序,但您需要使用原始代码。这里没问题。

我的问题:我如何编译 AppleScript文件on «event SAYTLOUD» whatToSay do shell script "say " & quoted form of whatToSay end «event SAYTLOUD» (包含原始代码),并将test_raw.applescript文件与test.sdef结合起来。< / p>

一个明显的答案是使用Objective-C和OSAKit创建我自己的test.scptd(如果可能的话),但我不具备所涉及的技能。

1 个答案:

答案 0 :(得分:0)

理想的解决方案是将您的.scptd软件包直接放入您的git存储库,然后放火烧整个批次。

第二个最佳解决方案是将您的.scptd软件包直接放入您的git存储库,然后编写您自己的'diff'shell脚本,该脚本位于您的git客户端和您的实际diff命令之间(example )。当填充脚本接收带有.scptd后缀的文件时,将它们传递给osadecompile并将输出写入临时文本文件,然后将这些文件路径传递给diff工具。这将为您提供人类可读的差异,而不必破坏AppleScript(固有的scm-hostile)文件格式。显然,如果你想合并也无济于事,但那是在你和你的老神之间。