最前面のアプリケーションに命令する
たまにしか覗かないツイッターの、たまたま覗いたタイムラインにたまたまこういうツイート

「今最前列にあるウィンドウ以外のすべてのウィンドウを閉じる」という指示をMacOSX SnowLeopard上でだすにはどうしたらいいかねえ。

を見かけて、ちょっと興味を持った。 AppleScript にはどうも「最前面のアプリ名を取得する命令」というのがあるらしい。そんならとりあえず「最前面のアプリの、最前面以外のすべてのウィンドウを閉じる(他のアプリには無力)」というスクリプトはできるわけだ。

tell application "System Events"
set front_app to name of (path to frontmost application)
end tell
tell application front_app
try
repeat 20 times
close window 2
end repeat
end try
end tell

「2番目のウィンドウを閉じよ」というのを何回も繰り返すことで、結果的に最前面以外のウィンドウをすべて閉じる。バカみたいだけど間違ってはいない。10.5 で、少なくとも Finder と Safari では有効。mi では機能しない。Finder で使うと案外便利。

これは

最前面のアプリを取得する(Aとする)
Aに tell
  try
    20回繰り返せ
      「2番目のウィンドウを閉じよ」(×20)
    繰り返し終わり
  end try
end tell

という感じなんだけど、これを

最前面のアプリを取得する(Aとする)
A以外の起動中のアプリのうち whose visible is true であるものすべてに tell
  すべてのウィンドウを閉じよ
end tell
Aに tell
  try
    20回繰り返せ
      「2番目のウィンドウを閉じよ」(×20)
    繰り返し終わり
  end try
end tell

とかすることが、できるのかも知れない。
http://www.fsight.co.jp/asqs/practicalscripting/quitapplications.pdf

■後記:
偶然 わかばマークさん で解を発見しました。
「every application process whose background only is false and frontmost is false」。
なるほどねえ。background only というのは 1PasswordAgent だとか Dropbox だとか、
「実行中だけど見えないプロセス」のことか?
frontmost は最前面か。
「background only is false and frontmost is false」で、
見えるプロセスのうち、最前面でないヤツすべて」か。

-- http://wakabamac.blog95.fc2.com/blog-entry-992.html#t3_auto_hide_others
-- +
-- http://www.hw2-suito.com/archives/327
-- http://www.drycarbon.com/applescript/manuals/controls/ctrl_rep.html#times

property excludeAppList : {""}
-- property excludeAppList : {"Finder", "Safari", "firefox-bin"}
-- 除外アプリケーションのプロセス名を、上の行の {} 内に入力する
-- "プロセス名" と引用府で囲って、「,」で区切って入力
-- Firefox のように アプリ名 とプロセス名 が異なるものもあるので注意。

tell application "System Events"
set notFrontmostApp to name of every application process whose background only is false and frontmost is false
repeat with eachAppProcess in notFrontmostApp
if excludeAppList does not contain eachAppProcess then
tell application process eachAppProcess to set visible to false
end if
end repeat
set front_app to name of (path to frontmost application)
end tell

tell application front_app
try
repeat 20 times
close window 2
end repeat
end try
end tell

使ってみたけど、すげー。便利かどうかはよくわからないけど、気持ちいい。
wakaba さんは「ちょうど『Spirited Away』の機能と書いておられるけど、
Spirited Away ではこうはいかない。
[PR]
by nobiox | 2011-10-19 16:33 | ├バカスクリプト | Comments(0) |
<< 中日新聞一人不買運動 | このままでいいらしい。 >>