Finderに切り替えてウインドウを開くのに結構時間を食われてる
パソコンで何かを作っていると、プロジェクトが進むにつれてファイルの整理にかかる時間が増えていきます。
MacではFinderでファイルやフォルダの管理を行うので、他のアプリとFinderの間を行ったり来たりすることになります。
最近ちょっとファイルの多い仕事をやっていたら、Finderへの切り替えとウインドウを開く作業に結構時間を取られていることに気付きました。
Finderへの切り替えは、主にコマンド+tabのショートカットで画面中央に出てくるアプリケーション切り替えウインドウを使っていました。
切り替えウインドウには現在起動しているアプリのアイコンが並んでいて、コマンド+Tabを押す度選択アイコンが変わっていきます。前面に出したいアプリアイコンのうえでキーを離します。
このショートカットをマウスのミドルボタンにも割り当てています。
私はロジクールのG300というゲーミングマウスとステアーマウスというマウスユーティリティーを使っています。
G300は左利きの人間にとっては大変ありがたい完全シンメトリーなゲーミングマウスです。マウスはずっとこれ一択です。
ステアーマウスはマウスボタンの機能をカスタマイズできるので、ホイールを押し込む=ミドルボタンに「切り替えウインドウを表示」を設定しています。
これでマウスから手を離さずにFinderに切り替えられます。
この方法は簡単で分かりやすいのですが、ウインドウの重なり順によってアプリケーションアイコンの位置が変わるので、どうしてもFinderアイコンを探す作業が伴います。
ドック上のFinderアイコンをクリックする方法もあります。この方法だとFinderは常にドックの左端にありますから、迷うことはありません。
ドックアイコンをクリックする方法の良いところは、Finderウインドウがひとつも無いときには切り替えと同時に自動的にホームフォルダを開いてくれることです。
ただ、大画面だとちょっと マウスの移動量が大きいのと、私の場合はドックを自動的に隠す設定にしているので、ドックが現れるまでのタイムラグがあります。
そんなわけでもうちょっと簡単にFinderに切り替えられて、ウインドウが無ければ開いてくれる方法を探すことにしました。
マウスボタンにFinder.appを割り当ててみる
ステアーマウスでは、マウスボタンにアプリケーションの起動を割り当てることでできます。
試しに使っていないボタンにFinder.appを割り当ててみました。
Finder.appはアプリケーションフォルダにはありません。以下のパスにあります。
/System/Library/CoreServices
この設定で、ボタンひとつでFinderに切り替えられるようになりました。
しかしひとつ問題がありました。
この方法だと、Finderで複数のウインドウが開いていても、その中の最前面のウインドウしか出てきません。他のウインドウは後ろに隠れたままです。
アプリケーション切り替えでの選択やドックアイコンをクリックした場合には、全部のFinderウインドウが前面に来てくれます。
また、ウインドウがひとつも無いときでも、単にアプリケーションが切り替わるだけです、 自分でウインドウを開く手間がかかります。
コレジャナイよなぁという感じです。
AppleScriptでやってみる
そこでAppleScriptを使ってみることにしました。
Automatorアプリケーションの中に「AppleScriptを実行」ブロックを挿入して以下のようなスクリプトを書きました。
単にFinderをActivateするだけです。
on run {input, parameters}
tell application "Finder"
activate
end tell
return input
end run
ところがActivateでは、Finderを直接起動するのと同じくひとつのFinderウインドウしか前面に来ません。
activateじゃなくてset frontmost trueが正解だった
検索した感じだと、どうやら昔はActivateで全部のウインドウが手前に来たらしんですが、もしかすると仕様が変わったのかもしれません。
他のメソッドがないかと探したところ、frontmost というプロパティをtrueにする方法が見つかりました。
on run {input, parameters}
tell application "Finder"
set frontmost to true
end tell
return input
end run
この方法は見事に働き、全部のFinderウインドウが手前に来ました。
ウインドウが無いときにだけ新規ウインドウを開く
ウインドウが無いときにだけ新規ウインドウを開く機能を加えます。
いろいろと試して以下のスクリプトになりました。
on run {input, parameters}
tell application "Finder"
set frontmost to true
if (count windows) is 0 then
set targetFolder to POSIX file "/Users/kimura/Dropbox/"
open targetFolder
set bounds of window 1 to {400, 300, 2000, 1200}
end if
end tell
return input
end run
パスをUNIX式の書き方で指定するときにはPOSIX fileという型を指定するみたいです。
私はほとんどのファイルをDropbox上に置いているのでとりあえずDropboxフォルダを開くようにしました。
また、デフォルトのウインドウサイズが小さすぎるのでちょっと大きくしています。
このAppleScriptを設定したAutomatorアプリケーションを保存して、ステアーマウスでマウスボタンに設定することで作業効率が大きく向上しました。
新規ウインドウを開くショートカットも追加
ついでに別のマウスボタンには、新しいFinderウインドウ開くだけのAutomatorアプリケーションを設定しました。これも結構便利です。
このスクリプトでは複数ウインドウをサクサク開けるように上のものとは少し変えています。
open ${target} では、すでに同じターゲットのウインドウが開いていると、そちらがアクティブになるだけです。
先にnew Finder windowでウインドウを開いてからターゲットを設定することで、同じパスのウインドウを開くことができます。
on run {input, parameters}
tell application "Finder"
tell application "Finder" to make new Finder window
set targetFolder to POSIX file "/Users/kimura/Dropbox/"
set target of window 1 to targetFolder
set bounds of window 1 to {400, 300, 2000, 1200}
set frontmost to true
end tell
return input
end run
【備忘録】Finderウインドウに関するAppleScriptいろいろ
調べる過程でFinderウインドウ関連のAppleScriptをいろいろ知ったのでメモっておきます。(tell application "Finder" ~ end tellは省略)
Finderウインドウを開く
make new Finder window
#パスを決めずにとりあえずウインドウを開ける
ウインドウの表示フォルダを変更
set targetFolder to POSIX file "/Users/kimura/Dropbox/"
set target of windows 1 to targetFolder
# windows 1 を front windowと書くこともできる
最前面のウインドウと同じフォルダを2番目のウインドウにも表示
set target1 to target of window 1
set target of window 2 to target1
# 変数に格納してコピー
# ただし、windows 1に表示しているのがフォルダ以外だとエラーになる
ウインドウへのリファレンスを取得
set winRef to a reference to window 1
あとは winRef をwindow 1の代わりに使える