AppleScript:使用其他应用程序打开最前面的文件

时间:2014-08-20 17:42:53

标签: applescript automator textmate2

我想写一个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"

这适用于发送[不是2],我认为TextMate前v2。我收到错误(使用传输2时):

Transmit 2 got an error: AppleEvent handler failed.

对v2的更新之一已经打破了它(不确定是哪一个)。

2 个答案:

答案 0 :(得分:1)

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

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

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

您可能希望在测试时显示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

我没有传输,但我已经证实,如果我用Textastic或Smultron 6替换“传输2”,这是有效的。

如果确实需要使用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作为应用进行了测试。

答案 1 :(得分:0)

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

您的Mac应用程序(和AppleScripts)只看到一个典型的Mac磁盘,他们可以将文件保存到(从最基本的AppleScript任务中读取)文件,而传输磁盘(或类似的应用程序)透明地镜像任何更改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主要用于处理本地磁盘保存或打开的文件。因此,如果您使用像传输磁盘这样的东西来使您的Web服务器基本上成为AppleScript派对的一部分,那么您将获得很多收益,因为它看起来只是一个普通的旧Mac磁盘。