スクリプトの都合によりDockは右に
hibomaのはてなダイアリー - ウィンドウのサイズを変えたり位置を動かしたりするAppleScript を QuickSilverに登録すると快適でhibomaさんの紹介しているスクリプトは、小気味のいいハックでとても重宝しているのですが、僕の場合Dockを左側に配置しているのでウィンドウを最大化した時、ドックと重なってしまい、スクロールバーがDockの背後に隠れてしまうのが気になりだして、ちょっと小細工してみました。
Dockの位置情報はプロパティリストに設定されていてそこから取るのが定石みたいでこんなカンジになります。
try set dock_pos to do shell script "defaults read com.apple.dock orientation" on error set doc_pos to "bottom" end try
自分でカスタマイズ等を施している場合などエラーになることがあるようでその場合はデフォルトボトムとします。同じ調子でサイズも取得できるかと~/Library/Preferences/com.apple.dock.plistの中身をザラッと確認してみたのですがそれらしいkeyは見当たらず諦めかけていたのですがApple Mailing ListsのアーカイブでずばりDock position and sizeを発見。こんなやり方が載っていました。
activate application "Dock"
tell application "System Events"
tell process "Dock"
get position of list 1
end tell
end tell
マルチモニタは考慮していないとのことですが、とりあえず僕には関係なし。ドックサイズを考慮したウィンドウサイズを計算するfactoringDockSize()を追加し、以下のようにしてみました。なかなかに快適です。
on factoringDockSize(ds)
-- ドックの位置
try
set dock_pos to do shell script "defaults read com.apple.dock orientation"
on error
set dock_pos to "bottom"
end try
-- ドックのサイズ
activate application "Dock"
tell application "System Events"
tell process "Dock"
set x1y1 to (get position of list 1)
end tell
end tell
-- ドックの位置によりサイズを調整
if dock_pos is equal to "right" then
set item 3 of ds to item 1 of x1y1
end if
if dock_pos is equal to "bottom" then
set item 4 of ds to item 2 of x1y1
end if
return ds
end factoringDockSize
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
-- Dockの位置で再調整
set fullsize to factoringDockSize(fullsize)
set bounds of __window to fullsize
return
end if
set bounds of __window to halfsize
else
-- Dockの位置で再調整
set fullsize to factoringDockSize(fullsize)
set bounds of __window to fullsize
end if
return
end switchWindowSize
さて、僕の環境ではこれで充分だったのですがお気づきの通りこのコードDockを左側に配置している方には有効でありません。上記のやり方ではDockの{x1,y1}のしか取得できないようでDockを左に配置している場合は(僕の環境ではx1y1={0,361}でした)。{x2,y2}が取得できないとx1の位置決めができません。...まあ、そもそもDockは絶対右にあった方がカーソルの移動量が少なくていいと思うのですがどうでしょうか?(Mac OSX 10.4.9)










Comments
1日使ってみて気づいたのだけれど、一度Dockがアクティブになるのでウィンドウをクリックしてあげないとアクティブにならないのはいまひとつかなぁ