获取Preview.app接受AppleScript命令
默认情况下,AppleScripting Preview无法使用,因为Preview缺少必需的字典。要解决此问题,请在此处查看Lauri的答案,其中解释NSAppleScriptEnabled
了Preview.app的设置。
退出Preview.app,然后打开一个终端并输入:
sudo defaults write /Applications/Preview.app/Contents/Info NSAppleScriptEnabled -bool true
sudo chmod 644 /Applications/Preview.app/Contents/Info.plist
sudo codesign -f -s - /Applications/Preview.app
从应用程序关闭窗口
1)通过窗口索引或窗口名称
关闭任何已命名应用程序窗口的命令如下所示:
tell application "Preview" to close window 1
…或者如果您想关闭一个命名文档窗口,例如foo.jpg
:
告诉应用程序“ Preview”关闭(每个名为“ foo.jpg ”的窗口)
因此,在您的shell脚本中,将是:
#!/bin/sh
osascript <<EOF
tell application "Preview"
close (every window whose name is "$1")
end tell
EOF
在这里,传递给脚本的第一个参数是您要关闭的窗口的名称,例如./quit.sh foo.jpg
。请注意,如果文件中包含空格,则必须引用文件名,例如./quit.sh "foo bar.jpg"
。
或者,如果您想从任何应用程序中关闭任意窗口,请使用以下命令:
#!/bin/sh
osascript <<EOF
tell application "$1"
close (every window whose name is "$2")
end tell
EOF
在这里,您将使用./quit.sh Preview foo.jpg
例如。
2)按文件名
如果要关闭属于某个文档的窗口,但要提供文件名,则需要其他操作。这是因为多页PDF可能显示为foo.pdf (Page 1 of 42)
,但是您只想传递foo.pdf
给AppleScript。
在这里,我们遍历窗口,并将文件名与传递给脚本的参数进行比较:
osascript <<EOF
tell application "Preview"
set windowCount to number of windows
repeat with x from 1 to windowCount
set docName to (name of document of window x)
if (docName is equal to "$1") then
close window x
end if
end repeat
end tell
EOF
现在您可以简单地致电./quit.sh foo.pdf
。以一种通用的方式,对于所有具有命名文档窗口的应用程序,将是:
osascript <<EOF
tell application "$1"
set windowCount to number of windows
repeat with x from 1 to windowCount
set docName to (name of document of window x)
if (docName is equal to "$2") then
close window x
end if
end repeat
end tell
EOF
警告:自动关闭Preview.app
Preview.app是这些应用程序之一,一旦关闭了它的最后一个文档窗口,它们就会自动退出。这样做是为了节省内存并“清理”。若要禁用此行为,请运行以下命令:
defaults write -g NSDisableAutomaticTermination -bool TRUE
当然,要撤消该更改,请更改TRUE
为FALSE
。
使用函数代替脚本
最后,我建议将脚本放入外壳中始终可用的函数中。为此,请将脚本添加到中~/.bash_profile
。如果该文件不存在,则创建它。
cw() {
osascript <<EOF
tell application "$1"
set windowCount to number of windows
repeat with x from 1 to windowCount
set docName to (name of document of window x)
if (docName is equal to "$2") then
close window x
end if
end repeat
end tell
EOF
}
保存bash配置文件并重新启动Shell后,您可以cw Preview foo.pdf
从任何地方进行调用。