【问题标题】:Shell Script to typeset Lilypond files with Textwrangler使用 Textwrangler 排版 Lilypond 文件的 Shell 脚本
【发布时间】:2011-07-22 14:13:36
【问题描述】:

我需要一个 shell 脚本,它允许我从 TextWrangler(一个 Mac 应用程序)排版 Lilypond 文件。 到目前为止,我想出了这个:

#!/bin/sh
/Applications/LilyPond.app/Contents/Resources/bin/lilypond -o $1

这当然是行不通的。 (这就是我在 Stack Overflow 的原因。)

当我从 TextWrangler 的 shebang 菜单运行该脚本时,我得到以下输出:

/Applications/LilyPond.app/Contents/Resources/bin/lilypond: option faultpaper,
--output'' requires an argument

什么给了?

我正在运行 Snow Leopard、TextWrangler 和 Lilypond。 帮助表示赞赏。

【问题讨论】:

    标签: osx-snow-leopard textwrangler lilypond


    【解决方案1】:

    编辑:找到了一种在 TextWrangler 启动的 Unix 脚本中获取文档路径的方法,所以我重写了这个。

    通过 #! 菜单在 TextWrangler 中使用脚本有多种方法,我不确定您要使用哪一种。不过,看起来您正在尝试创建一个 Unix 脚本来转换您的 LilyPond 文档。

    正如您的错误提示,不幸的是,Unix 脚本根本没有给出任何参数,因此 $1 将为空。然而,事实证明,最新版本的 BBEdit/TextWrangler 确实 在运行脚本之前设置了一些环境变量(请参阅 BBEdit 9.3 Release Notes 并向下滚动到 Changes)。特别是,您可以使用以下环境变量:

    BB_DOC_PATH            path of the document (not set if doc is unsaved)
    

    所以,将this script 保存到~/Library/Application Support/TextWrangler/Unix Support/Unix Scripts,你应该很高兴。

    您可能正在尝试执行此操作但效果不佳的其他方法:

    • 使用 Unix 过滤器: 为此,您必须选择文档中的所有 LilyPond 代码,并将其保存到一个临时文件中,该文件作为参数传递给您的脚本。好的,这样就可以得到一个输入文件名,但代价是一些麻烦。但随后该脚本的输出(即 LiiyPond 编译器输出)默认替换您刚刚选择的任何内容,这可能不是您想要的。错误的工作工具。
    • 使用 #! → 在 LilyPond 文件上运行 这包括在文件顶部放置 #! 行并让 TextWrangler 尝试将文件作为脚本执行,使用 #! 作为指导选择脚本解释器。不幸的是,#! 行仅适用于某些脚本语言,而 LilyPond(不完全是脚本语言)不是其中之一。这就是 Peter Hilton 正在尝试做的事情,正如他所指出的,如果您尝试将 #! 行添加到 LilyPond 文件的顶部,则会出现 LilyPond 语法错误。 (如果你很好奇,从技术上讲,有一种方法可以让 #! → Run 工作,即使用 here-document 语法将你的 LilyPond 代码嵌入到可执行的 shell 或 perl 脚本中。但是这是一个粗俗的 hack,很快就会变得笨拙。)

    上面链接的脚本有一些限制:

    • 在运行 LilyPond 之前,它不会检查您是否保存了文档。最好在运行 LilyPond 之前让 TextWrangler 自动保存。
    • 它不能将文本或未保存​​文档的 sn-ps 作为输入,只能将保存的文档作为输入。

    您可以通过转向 AppleScript 来制定更复杂的解决方案来解决这些问题。两种方法:

    • 创建一个特定于 TextWrangler 的脚本并将其放入 ~/Library/Application Support/TextWrangler/Scripts。然后它会显示在 AppleScript 菜单中(奇怪的滚动 S),或者您可以通过调出 Window → Palettes → Scripts 来获得它。我相信有两个人已经走上了这条路并分享了他们的结果:
    • 创建一个 Mac OS 服务,这可能是一种可以在几乎任何文本编辑器中重复使用的方法。这就是我们在 NeXT 时代编译 Common Music 文件的方式,所以我可以证明它的优雅。不幸的是,我没有一个很好的最新示例。

    【讨论】:

    • 仅供参考,截至我发表此评论时,与 Henk van Voorthuijsen 和 Nicola Vitacolonna 博士的作品的链接都已失效。有没有人镜像这些脚本以便可以用这些脚本更新答案?
    • 经过一番调查后,我再次找到了它们。前者我放在 GitHub Gist 上以确保它不会再次丢失。后者似乎确实是特定于 TeXShop 的,因此对于 TextWrangler 可能没有多大用处。我发现一个线程顺便提到 Nicola 对 TextWrangler 有其他支持;您可以尝试与他联系以获取详细信息。祝你好运!
    【解决方案2】:

    好问题。如果你这样做,它实际上会在我的系统上运行 Lilypond:

    #!/Applications/LilyPond.app/Contents/Resources/bin/lilypond -o $1
    

    …但失败了,因为# 不是行注释字符,所以 Lilypond 尝试解析该行。

    用块注释包围它会失败,因为 TextWrangler 找不到“shebang”行。

    %{
    #!/Applications/LilyPond.app/Contents/Resources/bin/lilypond -o $1
    %}
    

    另一种方法是使用Smultron 3,它允许您定义可以使用键盘快捷键运行的commands

    【讨论】:

      猜你喜欢
      • 2017-12-30
      • 1970-01-01
      • 2021-01-25
      • 2017-12-03
      • 2021-02-13
      • 1970-01-01
      • 1970-01-01
      • 2018-09-25
      • 2011-09-08
      相关资源
      最近更新 更多