(* A little script to gather any application windows that are partially offscreen in some way and shift them back to the desktop. This is particularly useful if you use a MacBook with an external display. *) tell application "Finder" -- get desktop dimensions (dw = desktop width; dh = desktop height) set db to bounds of window of desktop set {dw, dh} to {item 3 of db, item 4 of db} end tell tell application "System Events" repeat with proc in application processes tell proc repeat with win in windows -- get window dimensions (w = width; h = height) set {w, h} to size of win -- get window postion (l = left of window; t = top of window) set {l, t} to position of win -- nh = new window height; nw = new window width set {nh, nw} to {h, w} -- window width is bigger than desktop size, -- so set new window width to match the desktop if (w > dw) then set nw to dw -- window height is bigger than the desktop size (minus menu bar), -- so set new window height to be desktop height - 22 pixels if (h > dh - 22) then set nh to dh - 22 -- r = right coordinate of window; b = bottom coordinate of window set {r, b} to {l + nw, t + nh} -- nl = new left coordinate; nt = new top coordinate set {nl, nt} to {l, t} -- left coordinate is off screen, so set new left coordinate -- to be 0 (at the left edge of the desktop) if (l < 0) then set nl to 0 -- top coordinate is above bottom of menu bar (22 pixels tall), -- so set new top coordinate to be 22 if (t < 22) then set nt to 22 -- right coordinate extends beyond desktop width, -- so set new left coordinate to be desktop width - window width if (r > dw) then set nl to dw - nw -- bottom coordinate extends beyond desktop height, -- so set new top coordinate to be desktop height - window height if (b > dh) then set nt to dh - nh -- if we have calculated a new top or left coordinate, reposition window if (l > nl or t > nt) then set position of win to {nl, nt} -- if we have calculated a new height or width, resize window if (h > nh or w > nw) then set size of win to {nw, nh} end repeat end tell end repeat end tell