スクリプトの都合により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)

この記事のトラックバックURL:

http://hippos-lab.com/blog/trackback/154

Comments

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