エアロスナップ風の機能をSparkとAppleScriptで。
Windows 7のエアロスナップ風の機能をAutoHotkeyで実装してみたのに続いて、MacOS Xでも同様の操作を可能にしてみました。Windowsはウインドウ周囲の辺でも隅でもドラッグして、ウインドウの大きさを調整できます。それに対して、MacOS Xの場合には大きさを調整できるのがウインドウの右下隅だけで、ちょっと不便なのです。
Sparkでホットキーを割り当てて、下記のようなスクリプトを実行するように設定します。これは画面左側にウインドウを配置する場合で、やっていることはAutoHotkeyのスクリプトと同様です。複数のホットキーで共通のサブルーチンを呼び出す方法が分からず、下記のコピー&ペーストしてから「* 0.5」の部分を書き換えて使っています。0.5で画面半分の幅、0.7で70%といった指定になります。
-- get Dock height tell application "System Events" to tell process "Dock" set dock_dimensions to size in list 1 set dock_width to item 1 of dock_dimensions end tell -- get the new width and height for the window tell application "Finder" set desktop_dimensions to bounds of window of desktop set desktop_width to (item 3 of desktop_dimensions) set new_width to (desktop_width - dock_width) * 0.5 set new_height to (item 4 of desktop_dimensions) end tell -- get active window tell application "System Events" set frontApp to name of first application process whose frontmost is true end tell -- resize window tell application frontApp activate set bounds of window 1 to {dock_width, 0, dock_width + new_width, new_height} end tell
画面の右側にウインドウを配置する場合は下記の要領です。位置と大きさの指定が異なるだけで、ほとんど上記と同じです。
-- get Dock height tell application "System Events" to tell process "Dock" set dock_dimensions to size in list 1 set dock_width to item 1 of dock_dimensions end tell -- get the new width and height for the window tell application "Finder" set desktop_dimensions to bounds of window of desktop set desktop_width to (item 3 of desktop_dimensions) set new_width to (desktop_width - dock_width) * 0.5 set new_height to (item 4 of desktop_dimensions) end tell -- get active window tell application "System Events" set frontApp to name of first application process whose frontmost is true end tell -- resize window tell application frontApp activate set bounds of window 1 to {desktop_width - new_width, 0, desktop_width, new_height} end tell
当初の目的を達成できたので、ひとまず終了ですが、処理の共通部分を括り出してサブルーチン化したいなぁ…。
コメント
You can follow this conversation by subscribing to the comment feed for this post.