現在使用中のアプリケーションのウィンドウを「全画面表示/全画面表示の半分のサイズ表示で切り替える」スクリプトと、ウィンドウを「画面の右隅に寄せる/左隅に寄せる」スクリプトを書きました(ソースは下記)。
なんてことない機能のスクリプトですけど、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