automatorを使ってサービスを書いています。no input
で受け取りany application
ます。
この単純なスクリプトを実行するだけです。
on run {input, parameters}
--FIRST BLOCK
tell application "System Events"
set app_name to name of the first process whose frontmost is true
end tell
--SECOND BLOCK
if (do shell script "defaults read com.apple.finder AppleShowAllFiles") is equal to "0" then
do shell script "defaults write com.apple.finder AppleShowAllFiles 1"
else
do shell script "defaults write com.apple.finder AppleShowAllFiles 0"
end if
--THIRD BLOCK
do shell script "killall Finder"
delay 0.5
--FOURTH BLOCK
if (app_name is equal to "Finder") then
tell application "Finder"
activate
end tell
end if
end run
ステップバイステップであなたを歩きます:
最初のブロック:現在の最前面のアプリの名前を取得し、それを変数に格納しますapp_name
。
2番目のブロック:値に応じて、隠しファイルと隠しファイルの変数をオンまたはオフに切り替えます。
3番目のブロック:実行killall Finder
してFinderを再起動し、2番目のブロックからの切り替えを有効にします。秒を一時停止0.5
します。どういうわけかこれが必要です(理由はわかりませんが、これがないと次の命令は無視されます)。
4番目のブロック:変数app_name
が何であったかを確認します。これが等しい場合Finder
は、スクリプトが開始されたときにファインダーがアクティブであったことを意味します。したがって、ファインダーをもう一度アクティブにします(killall Finder
バックグラウンドのままにします)。
問題:すべてが期待どおりに機能しますが、1つは、Finderでこのサービスを使用すると、Finderが再度アクティブ化されないことです。
4番目のブロックのコードに何か問題があるはずだと主張する人もいるかもしれませんが、すべてが期待どおりに機能することを示すために少し実験しました。
Finder以外のアプリに置き換えequal
てnot equal
スクリプトを実行すると、Finderは正常にアクティブ化されます。
したがって、Finderが前面にあるときにスクリプトが起動された場合にのみ問題が発生するようです。
(これはサービスが行うべきことです:任意のアプリ内から、Finderで隠しファイルの表示を切り替えます。Finderが前面にある場合、クリプトの実行後に前面にある必要があります。別のアプリが前面にある場合、このアプリは前面にある必要があります。まだ前にあるはずです。)
私はライオンにいます。