1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
http://wakabamac.blog95.fc2.com/blog-entry-992.html

Task3 : あらゆるタスクを自動化する
Growl対応
OS10.4.11以上(UB)
シェアウェア ¥1,500(銀行振込)、¥1,700(PayPal)
『Task3 / タスクの設定例(2)』のつづき
この回では、主にウインドウ制御に関するタスクの設定例です。
t3_os9_window
1つのウインドウクリックで そのアプリすべてのウインドウを前面に表示させる
OS9風に、あるアプリケーションの1つのウインドウをクリックすると、そのアプリすべてのウインドウを前面に表示させるようにする方法です。
例えば Finder のウインドウをそのように制御する場合は、新規タスクを作成して下のように設定します。
(トリガー)

リストから「アプリケーションを監視」を選択して、Finder が「最前面に移動」したときに実行するようにします。
(アクション)

「アップルスクリプトを実行」を選択して、下の AppleScript を入力します。
これでこのタスクを保存して有効にすると、Finder の1つのウインドウ(デスクトップも含む)をクリックしたときに、Finder のすべてのウインドウが前面に表示されるようになります。
例えば、下のようにSafariが最前面にあるときに、背面のFinderウインドウの1つをクリックします。

すると、Finderのすべてのウインドウが前面に表示されるようになります。

Finderなら、デスクトップのどこかをクリックしても、すべてのFinderのウインドウを前面に表示します。
トリガーのアプリケーションや、AppleScript の記述の "Finder" を別のアプリケーション名に置き換えれば、他のアプリケーションも同様にできます。
ツールウインドウが普通のウインドウと同じように表示される「Gimp」などでは、この機能がないとかなり使いづらいです。
(X11で動くGimpの場合「X11」を最前面にするように設定する)
t3_window_hide
アプリケーションが最前面でないときはウインドウを隠す
Twitterクライアントのアプリケーション「夜フクロウ」を使っていてよく思うのですが、この手のアプリケーションは Growl でタイムラインを表示しているので、つぶやく時以外はウインドウは邪魔で command+H で隠していることが多いです。
こんな風に自分が能動的に使用するとき以外は、そのアプリケーションのウインドウを隠したい場合、Task3 で最前面以外のときに自動で隠すようにできます。
新規タスクを作成して、下のように設定します。
(トリガー)
リストで「アプリケーションを監視」を選択し、
「YoruFukurou」が「バックグラウンドに移動」したときに実行するようにします。
(アクション)
下の AppleScript を実行するようにします。
このタスクを保存すると、夜フクロウを使っているときに、他のアプリケーションのウインドウをクリックして最前面でなくなったときに自動で隠れるようになります。
(YoruFukurou が最前面のとき)

(YoruFukurou が背面に移動したとき)

こんな風に自動的に隠れます。
トリガーのアプリケーションや AppleScript のプロセス名の "YoruFukurou" のところを他のアプリケーション名に変えて設定すると、他のアプリケーションでも同じようにできます。
t3_hide_others
特定のアプリが最前面になったとき、他のアプリを隠す
集中して作業を行いたいときなど、特定のアプリケーションが最前面になったときに、それ以外の他のアプリケーションのウインドウを隠すようにしてみます。
Task3 で新規タスクを作成して、次のように設定します。
(トリガー)

「アプリケーションを監視」をリストで選択し、○○○が「最前面に移動」したときに設定します。
そのアプリケーションが最前面になったときに動作するアプリケーションを指定します。適用させたいアプリケーションごとに複数のトリガーを設定しておきます。
ここの例では、MacNote3 と Safari に設定してみます。
(アクション)
次の AppleScript を実行するようにします。
このタスクを保存して有効にすると、そのアプリが最前面に移動したときに、他のアプリのウインドウを隠します。
例えば、下のようにたくさんのウインドウを開いているときに、MacNote3 を最前面にしてみます。

すると、MacNote3 が最前面になるとすぐに、それ以外のアプリケーションのウインドウが隠れます。

Task3 とは関係ないことですが、似たようなことで、Dockのアプリケーションアイコンをクリックしたときに、それ以外のアプリケーションを隠す「シングルアプリケーションモード」とうものも、OSの隠し機能として存在するようです。
参考『シングルアプリケーションモード - soundscape out』
t3_auto_hide_others
一定時間ごとにチェックして 最前面のアプリ以外のウインドウを自動的に隠す
上記の「特定のアプリが最前面になったとき、他のアプリを隠す」と似た内容ですが、一定時間ごとにアプリケーションの状態をチェックして、最前面以外のアプリのウインドウを隠すタスクを設定してみます。
(ちょうど「Spirited Away」の機能を Task3 で実現してみます。)
新規タスクを作成して、下のように設定します。
(トリガー)
「繰り返し」を選択して、3分ごとに実行するように設定。
(時間間隔はお好みで)
(アクション)
次の 最前面以外のプロセスを隠す AppleScript を実行させます。
この例では Finder, Safari, Firefox は最前面に表示されていなくても、自動的に隠されることはありません。
このタスクを保存して有効にします。
例えば、いろいろなアプリケーションのウインドウを開いている状態で、Safari を最前面に表示しているとします。

これで所定の時間が来ると、最前面の Safari 以外のアプリのウインドウは隠されます。

(背面にある Finder のウインドウは AppleScript 上で「除外」アプリに指定しているので隠されない)
t3_dock_autohide
特定のアプリが最前面のときだけ Dock を表示させる
僕は Dockを「自動的に隠す」設定にしていて、普段は Dock を隠しているようにしています。しかし、Dock にドラッグ&ドロップするときなど、特定のアプリケーションの場合には、ずっと表示させておいた方が便利な場面もあります。
そこで Task3 を使って、2つのタスクを登録しし、特定のアプリが最前面のときだけ Dock を表示させるようにします。
例えば、Finder が最前面のときだけ Dock を表示させるように設定します。
まずは「Dock を表示させる」タスクから。
(トリガー)
「アプリケーションを監視」を選択して、Finder が最前面に移動したときに設定します。

(他にもDockを表示させたいアプリがあるなら、複数のトリガー項目を作って、そのアプリが最前面に移動したときに設定します)
(アクション)
以下の AppleScript を実行するようにします。
まずはこの1つ目のタスクを作成し、もう一つ新規タスクを作成します。
2つ目の「Dock を隠す」タスク
(トリガー)
「アプリケーションを監視」を選択して、Finder がバックグラウンドに移動したときに設定します。

(他にもDockを表示させたいアプリがあるなら、複数のトリガー項目を作って、そのアプリがバックグラウンドに移動したときに設定します)
(アクション)
以下の AppleScript を実行するようにします。
これらの2つのタスクを有効にして保存します。
すると、Finder が最前面でないときは、Dock は隠された状態です。

Finder が最前面のアプリケーションになると

Dock が表示されるようになります。
ただ、
key code
で option+command+D のショートカットキーを入力しているだけのスクリプトなので、素早く最前面のアプリケーションを切り替えたときなど、失敗することが多いです。
(
killall Dock
でDock を再起動させながら 初期設定ファイルを書き換える内容のスクリプトにすると、失敗することはほぼ無くなるけど、Dashboard も再起動されてしまうので採用せず)
t3_itunes_toggle_player
iTunes が最前面のときはウインドウ表示、背面に移動したはミニプレイヤー表示
(Task3 の作者の sekn さん のアイデア)
iTunes が最前面に移動したときにはブラウザウインドウを表示、背面に移動したときにはミニプレイヤー表示させるように、2つのタスクを作成して実現させます。
まずは iTunes が最前面になったときにタスク
(トリガー)
「アプリケーションを監視」で
iTunes が最前面に移動したときに設定します。
(アクション)
以下の AppleScript を実行します。
('09/11/04修正)
続いて iTunes が背面になったときにタスク
(トリガー)
「アプリケーションを監視」で
iTunes がバックグラウンドに移動したときに設定します。
(アクション)
以下の AppleScript を実行します。
('09/11/04修正)
修正前の AppleScript では、iTunes をメニューから終了できない欠陥がりました。
(詳細はコメント欄参照。sekn さん、教えてくれてありがとう)
以下の内容に変更して下さい。
これら2つのタスクを有効にして保存します。
すると、iTunes が最前面に移動したときには、自動的にブラウザウインドウを表示

iTunes が背面に移動したときには、自動的にミニプレイヤー表示に切り替わります。

この回ではウインドウ制御についてのタスクの設定例でした。
こういった「ウインドウ制御」的な使い方をするときは、そのタスクのON/OFFの切り替えがもっと楽にできたらいいのに・・・と思い、作者の sekn さんにリクエストしてみました。
次回のバージョンアップでは、Task3メニューからそのタスクのON/OFFの切り替えができるようになるでしょう。(たぶん?)

『Task3 / タスクの設定例(4)』につづく
この記事では Task3 version 1.1.0 を使用しています。
(ダウンロードリンク)
Site top page : Spread Your Wings
Download page : Task3
(関連記事)
Task3 --- 基本的な「タスク」の設定のやり方など
Task3 / タスクの設定例(1)
- Safariのダウンロード完了をGrowlでお知らせする
- 複数のアプリケーションをセットで起動するようにする
- 定期的に使っていないメモリを解放する
- スクリーンセーバの代わりにiTunesのビジュアライザを使用
- スクリーンセーバ起動中にアクセス権の修復を行う
- メニューバーに表示するランチャとして使用する
- メニューバーから各種メンテナンスをする
- メニュー、ホットキーで開くブックマークとして使う
Task3 / タスクの設定例(2)
- ホットキーを使ってアクションを実行する
- 留守のときに誰かがMacを起動したらメールで知らせる
- フォルダに変化があったら Growl でお知らせ
- 特定のアプリが最前面になったときに「英数」入力に切り替える
- ボリュームをマウントしたらバックアップアプリを起動する
- ボリュームをまとめてアンマウント
Task3 / タスクの設定例(3)
- 1つのウインドウクリックで そのアプリすべてのウインドウを前面に表示させる
- アプリケーションが最前面でないときはウインドウを隠す
- 特定のアプリが最前面になったとき、他のアプリを隠す
- 一定時間ごとにチェックして 最前面のアプリ以外のウインドウを自動的に隠す
- 特定のアプリが最前面のときだけ Dock を表示させる
- iTunes が最前面のときはウインドウ表示、背面に移動したはミニプレイヤー表示
Task3 / タスクの設定例(4)
- ホットキーで iTunes を操作したら便利そうな AppleScript
- 曜日ごとにログインアイテムを変更する
- ClamXav で定期的にウイルススキャン
- タスクを AppleScript で実行する
- タスクのアクションで実行する AppleScript について
▽同じ「タグ」が付いた関連記事
終了を選択→iTunesが「終了前に」バックグラウンドに移動→Task3がスクリプトを起動→スクリプトが走る前にiTunesが終了→時間差でtell app "iTunes"が走って終了したiTunesが復活
Task3にiTunes起動中という条件を設定しても、Task3が移動を感知した瞬間は確かにiTunesが生きているのでダメで、
スクリプトの方でiTunesの生死を確認する必要があります
面倒ですがこんな感じ
set isRunning to "Not Running"
tell application "Finder"
set appList to every process that file type is "APPL"
repeat with anApp in appList
if (name of anApp as text) is "iTunes" then
set isRunning to "running"
end if
end repeat
end tell
if isRunning is "running" then
tell application "iTunes"
repeat with aWindow in browser windows
set the minimized of aWindow to true
end repeat
end tell
end if
タスクのオンオフはメニューバーから切り替えるようになります。
(コマンドキーを押しながら選択するとトグル)
あとスクリプトでも切り替えられるようにしたので、タスクに組み込んでホットキーやその他の条件と組み合わせて切り替えることもできます。
ますます設定がややこしくなりますね・・・
ありがとうございます。
テスト不足でした。
タスクのオンオフはメニューバーから切り替えるようになります。
(コマンドキーを押しながら選択するとトグル)
あとスクリプトでも切り替えられるようにしたので、タスクに組み込んでホットキーやその他の条件と組み合わせて切り替えることもできます。
ますます設定がややこしくなりますね・・・
Task3本体を起動中に各タスクのON/OFFをトグルした場合の、本体でのそのタスクの処理が難しそうですね。
trackback URL