AppleScriptコマンドを受け入れるようにPreview.appを取得する
デフォルトでは、プレビューに必要な辞書がないため、AppleScriptingプレビューは機能しません。これを修正するには、Preview.appの設定を説明するLauriの回答をこちらで確認してくださいNSAppleScriptEnabled
。
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
。
アプリケーションに「プレビュー」を閉じるように指示します(名前が「foo.jpg」であるすべてのウィンドウ)
したがって、シェルスクリプトでは次のようになります。
#!/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はこれらのアプリケーションの1つで、最後のドキュメントウィンドウが閉じられると自動的に終了します。これは、メモリを節約して「クリーンアップ」するために行われます。この動作を無効にするには、次を実行します。
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プロファイルを保存してシェルを再起動するとcw Preview foo.pdf
、どこからでも呼び出すことができます。