現在使用中のアプリケーションのウィンドウを「全画面表示/全画面表示の半分のサイズ表示で切り替える」スクリプトと、ウィンドウを「画面の右隅に寄せる/左隅に寄せる」スクリプトを書きました(ソースは下記)。
なんてことない機能のスクリプトですけど、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
- QuickSilverで登録する時は
こんな感じで。hogehoge.scptという名前のスクリプトとして登録すればいいはず
参考にした記事
http://docs.info.apple.com/help/guide.html?path=AppleScript/2.1/jp/
http://www33.ocn.ne.jp/~xinoue/mactipsx/resolution.html
http://www.tonbi.jp/AppleScript/dic/index.html
http://mtlab.ecn.fpu.ac.jp/WSM_2004/040606222701.html
雑記
- 動作保証しません
- 動かねーよって方は適当にコメントお願いします
- 実行するとごとに数ピクセルずつ上下左右に動かせるスクリプトもできるけど、さすがにそれはバッドHackな感じっぽくなるのでやめた
- WindowsでもWSH?を使えば似たようなことできるんだよなと思った。
- 追記: AutoHotkeyで似たよな事ができるらしい malaさんのコメントより
- http://la.ma.la/blog/diary_200608281736.htm






