読者です 読者をやめる 読者になる 読者になる

ウィンドウのサイズを変えたり位置を動かしたりするAppleScript を QuickSilverに登録すると快適

現在使用中のアプリケーションのウィンドウを「全画面表示/全画面表示の半分のサイズ表示で切り替える」スクリプトと、ウィンドウを「画面の右隅に寄せる/左隅に寄せる」スクリプトを書きました(ソースは下記)。

なんてことない機能のスクリプトですけど、QuickSilverのランチャーとしてショーットカット登録しておくと、ボタンひとつでウィンドウを操作できるので快適です。(ノートPCのトラックパッドでウィンドウのサイズを変えるのって指がしんどい。キレイに並べるのも大変だし)


言葉だと実際の動き方がいまいち分かりにくいので画像を。

  • 全画面表示が


  • 半画面(?)表示に切り替わる。

半画面表示の時にスクリプトを走らせると全画面表示にスイッチします。



  • 右寄せになっているアプリケーションウィンドウを


  • 左寄せにします。

すでに左寄せになっているウィンドウにたいして使うと右寄せにスイッチしてくれます。



なんでウィンドウが全画面表示の半分のサイズで切り替えてるのか?って言うと、リファレンスを見ながらコードを打ちたいときに下の図のように左にエディタ右にリファレンスを配置する事が多いので このサイズで操作できると便利かなあと。(外付けディスプレイがあれば解決する悩みですね)




ということでソース(画像クリックすると色付きのソース画像が見れます。でかいので注意)

    • 動かないアプリもある / Firefoxとか.
    • 外部ディスプレイをつけてるとうまく動きません!そのうち直します...

[ウィンドウのサイズを全画面/半画面で切り替えるスクリプト]

ダウンロード


-- main
-- ウィンドウのサイズをでかくしたり小さくしたり
set target_app to frontmostAppName()
set target_win to window 1 of application target_app
switchWindowSize(target_win)

-- functions 
on screenSize()
	-- スクリーンのサイズ(解像度?)を得る
	-- ex. {0,0,1440,900 }
	
	tell application "Finder"
		bounds of the window of the desktop
	end tell
end screenSize

on HorizontalhalfOfScreenSize()
	-- 画面半分のサイズを得る
	-- ex. {0,0,720,900}
	
	set s_size to screenSize()
	set h_half to (round (item 3 of s_size) / 2)
	set third item of s_size to h_half
	return s_size
end HorizontalhalfOfScreenSize


on screenSizeDiviedBy(int)
	-- 画面のサイズを得る int=2 で半分サイズ、int=3で1/3サイズを得られたり
	-- ex. if int=2 => {0,0,720,900}
	
	set s_size to screenSize()
	set h_half to (round (item 3 of s_size) / int)
	set third item of s_size to h_half
	return s_size
end screenSizeDiviedBy


on frontmostAppName()
	-- 一番前に出ているアプリ名を文字列として取得	
	-- ex. "Finder" "iTunes" 
	
	set fmApp to path to frontmost application
	tell application "Finder"
		set appName to name of fmApp
	end tell
	
	--アプリの名前を切り出す
	if appName ends with ".app" then
		set appName to text 1 thru -5 of appName
	end if
	return appName
end frontmostAppName

on switchWindowSize(__window)
	-- ウィンドウのサイズを画面半分サイズ or フルサイズ にスイッチする
	-- ex. (null)	l	set fullsize to screenSize()
	set fullsize to screenSize()
	set halfsize to screenSizeDiviedBy(2)
	set current_size to bounds of __window
	
	--サイズの切り替え
	if third item of current_size > third item of halfsize then
		
		if first item of current_size > 0 then
			set bounds of __window to fullsize
			return
		end if
		
		set bounds of __window to halfsize
	else
		
		set bounds of __window to fullsize
	end if
	return
end switchWindowSize

[ウィンドウを右寄せ/左寄せするスクリプト]

http://hiroya.dyndns.org/file/applescript/moveWindowLeftOrRight.scpt.zip


-- main 
set target_app to FrontAppName()
set target_win to window 1 of application target_app
moveWindowLeftOrRight(target_win)

--functions 
on FrontAppName()
	-- 一番前に出ているアプリ名を文字列として取得	
	-- ex. "Finder" "iTunes" 
	set fmApp to path to frontmost application
	tell application "Finder"
		set appName to name of fmApp
	end tell
	
	--アプリの名前を切り出す
	if appName ends with ".app" then
		set appName to text 1 thru -5 of appName
	end if
	return appName
end FrontAppName

on screenSize()
	-- スクリーンのサイズ(解像度?)を得る
	-- ex. {0,0,1440,900 }
	
	tell application "Finder"
		bounds of the window of the desktop
	end tell
end screenSize

on moveWindowLeftOrRight(app_window)
	-- set app_window to window 1 of application app_Name
	-- 対象とするアプリケーションのboundsを取得
	set {app_X_LEFT, app_Y_LEFT, app_X_RIGHT, app_Y_RIGHT} to bounds of app_window
	
	--スクリーンのサイズを取得
	set {X_LEFT, Y_LEFT, X_RIGHT, Y_RIGHT} to screenSize()
	
	if app_X_LEFT = 0 then
		-- アプリが右隅が{0,0}あるのならば、右隅が真ん中に移動
		set bounds of app_window to {X_RIGHT / 2, Y_LEFT, X_RIGHT, Y_RIGHT}
	else
		-- アプリの右隅が中央にあるならば、右隅を{0,0}になるように移動
		set bounds of app_window to {X_LEFT, Y_LEFT, X_RIGHT / 2, Y_RIGHT}
	end if
	
end moveWindowLeftOrRight

on size_X_LEFT(app_bound)
	return first item of app_bound
end size_X_LEFT

こんな感じで。hogehoge.scptという名前のスクリプトとして登録すればいいはず

雑記

  • 動作保証しません 
    • 動かねーよって方は適当にコメントお願いします
  • 実行するとごとに数ピクセルずつ上下左右に動かせるスクリプトもできるけど、さすがにそれはバッドHackな感じっぽくなるのでやめた
  • WindowsでもWSH?を使えば似たようなことできるんだよなと思った。
  • Firefoxで動かないのはなんでなんだろう?(Cocoa/Carbonの違いのせいかな)
    • Open Scripting Architecture -- OSAに対応/非対応 か?