AppleScript Mac プログラミング 周辺機器

Finderに切り替えてウインドウが無かったらひとつ開くAppleScriptをマウスボタンに割り当てると便利

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の代わりに使える

-AppleScript, Mac, プログラミング, 周辺機器