1

我想编写一个AppleScript程序来执行以下操作(Automator也可以):

我想TextMate用应用程序打开当前的活动文件(可能有几个选项卡打开和其他窗口)Transmit 2。(这将使用 Transmit 的 DockSend 功能通过 FTP 上传文件。)

在这里,我使用了一个特定的应用程序 ( TextMate),但理想情况下,我希望它适用于任何应用程序中当前处于活动状态的任何文件。

最终我将分配一个键盘快捷键来运行它。

这是我到目前为止所拥有的:

tell application (path to frontmost application as text)
    set p to path of document 1
end tell

tell application "Finder"
     open POSIX file p using "Transmit 2"
end tell

我已经尝试了许多变体,但没有任何效果。

编辑:我找到了这个页面:http ://wiki.macromates.com/Main/Howtos并且有人已经制作了我正在寻找的脚本:

tell application "Transmit" to open POSIX file "$TM_FILEPATH"

这适用于 Transmit [not 2],我认为适用于TextMatepre v2。我收到错误消息(使用 Transmit 2 时):

Transmit 2 got an error: AppleEvent handler failed.

v2 的更新之一破坏了它(不确定是哪一个)。

4

2 回答 2

1

您的问题似乎有两个步骤。一,获取文档的路径(或其他一些允许您稍后打开文档的参考),二,在所需的应用程序中打开文档。

如果 AppleScript 保存为应用程序,则最前面的应用程序是您正在运行的 AppleScript,因此该路径将是 AppleScript 应用程序的路径。在那种情况下,我不知道如何获得第二个最前面的应用程序。

但是,如果应用程序支持脚本文件夹(进入 AppleScript 编辑器的首选项,并启用“在菜单栏中显示脚本菜单”),您可以将脚本保存为用户脚本文件夹中的“脚本”,并在从脚本运行时menu 最前面的应用程序将是您当前所在的应用程序。

您可能希望在测试时显示 p 变量,以确保获得正确的路径而不是 AppleScript 的路径。

至于在另一个应用程序(例如 Transmit)中打开文档,最好的方法是在应用程序支持的情况下直接与应用程序对话:

tell application (path to frontmost application as text)
    set p to path of document 1
end tell

--for testing: verify that the path is for the correct document
display dialog p

tell application "Transmit 2"
    open p
end tell

我没有 Transmit,但我已经验证,如果我将“Transmit 2”替换为 Textastic 或 Smultron 6,这将有效。

如果您确实需要使用 Finder 打开文档,Finder 似乎更喜欢将其路径作为字符串,而且似乎更喜欢应用程序的完整路径。像这样的东西应该工作:

tell application (path to frontmost application as text)
    set p to path of document 1
end tell

--for testing: verify that the path is for the correct document
--display dialog p

set transmitPath to path to application "Transmit 2"
set p to POSIX file p as string

tell application "Finder"
    open file p using transmitPath
end tell

同样,我使用 Textastic 和 Smultron 作为应用程序对此进行了测试。

于 2014-08-21T06:13:40.383 回答
0

对于您要解决的问题,最常见的解决方案是运行一个应用程序,使您的 Web 服务器看起来像是一个已安装的 Mac 磁盘。Transmit 4 具有该功能,Panic 将其称为“传输磁盘”。但还有其他一些应用程序——Transmit 不是第一个。

您的 Mac 应用程序(和 AppleScripts)只看到一个典型的 Mac 磁盘,它们可以将文件保存到该磁盘并从中读取文件(最基本的基本 AppleScript 任务),而 Transmit Disk(或类似的应用程序)透明地镜像该 Mac 磁盘的任何更改在后台发送到您的 Web 服务器。这使得所有网络和 FTP 的东西完全消失,让您编写非常简单的脚本来为您的 Web 服务器做非常强大的事情。您将 HTML 文档保存在那里,您将图像和电影文件导出到那里,就像您将它们保存在您的桌面上一样容易,而且它们会立即发布到您的 Web 服务器。即使是仅有的几乎无法编写脚本的应用程序也可以将其文件保存到特定磁盘上。

例如,如果我在 BBEdit 中打开了一个 HTML 文档,并且我想将该文档的副本保存到我的 Web 服务器,它只需要几行代码,这在任何支持 AppleScript 的文本编辑器中都可能是相似的(这脚本也可以在免费的 TextWrangler 中逐字运行):

tell application "BBEdit"
    set theHTMLSource to the contents of text window 1
    make new document with properties {text:theHTMLSource}
    save document 1 to file "Transmit Disk:index.html"
    close document 1 saving no
end tell

请注意,上面的 AppleScript 不仅不需要了解有关 SFTP 的任何信息或具有任何登录凭据,它甚至不需要弄清楚我当前文档的文件路径,因为它只是将内容直接从当前窗口中取出. 没有 POSIX 路径名,没有 shell 脚本,根本没有猴子业务。而且因为这个任务和代码非常简单,你可以想象你可以为你可能使用的 20 个不同的应用程序重写这个脚本 20 次,这样他们都可以将他们当前文档的副本保存到你的传输磁盘上,从而将该文档发布到您的网络服务器。

如果我有一个包含该 HTML 文档的图像文件夹,我可以要求 Finder 将该文件夹复制到我的传输磁盘上以发布它。只需一行代码:

tell application "Finder"
    duplicate folder "images" of (the path to the desktop folder as alias) to the disk "Transmit Disk" replacing no
end tell

…但这些图像也可以通过 AppleScript 从 Photoshop 或任何应用程序中直接导出到传输磁盘。

简而言之,所有 Mac 应用程序的共同点是它们都可以将文件保存到 Mac 磁盘。他们不一定都给你他们打开的文档的路径名,或者用 Transmit 打开这些文件。Mac 应用程序和 AppleScript 主要设计用于处理从本地磁盘保存或打开的文件。因此,如果您使用 Transmit Disk 之类的东西来使您的 Web 服务器基本上成为 AppleScript 派对的一部分,那么您将获得很多收益,因为它看起来只是一个普通的旧 Mac 磁盘。

于 2014-08-21T10:17:44.043 回答