Take the 2-minute tour ×
Ask Different is a question and answer site for power users of Apple hardware and software. It's 100% free, no registration required.

Is there an app that will let me automatically resize all my open windows when I switch between working on my laptop screen and my external monitor?

I spend my time either working on an external monitor connected to my mbp or just my mbp. When I switch from monitor to laptop, all my fullscreen (the old definition) apps have windows that are bigger than my laptop resolution. I have to resize all of them, but then when I reconnect to the external monitor they are all smaller then I would like them.

I've tried moon, but have only been able to resize windows on a single space at a time, I typically have multiple applications in fullscreen mode (the old definition) open across multiple spaces.

share|improve this question
add comment

2 Answers

There are endless ways to do this, so here are a few:

  • Before you unplug the external monitor open up the Displays Preference Pane in System Preferences and click on the "Gather Windows" button.

    [or if you already unplugged]

  • Hold the Option key down and choose "Arrange in Front" from the Window menu.

    [or]

  • Use the Option key and click the (+) at the top of any Finder window and it will resize them all automatically.


This Applescript script might also work:

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

Of course there's also the paid alternative, which might include Stay, Divy, Arrange, etc.

share|improve this answer
    
The Gather Windows and Arrange in front seem helpful if I was using multiple monitors at the same time. Option + will definitely help me when I need to resize windows. I have not gotten to try the Applescript yet, but I will update when I do. –  Nico Oct 10 '11 at 16:13
add comment

You might give Stay a try. It lets you set window sizes/arrangements based on attached displays, and has Spaces support. I'm not sure if it has the exact behaviour you're looking for with Spaces (the FAQ is unclear), but it's probably worth checking the demo out at least.

share|improve this answer
    
I'm trying out the Stay demo. It seems to do what I want, so long as I give it a pre arranged layout of windows for each display. It does not seem to recognize and adjust new windows that were not part of the original layout. This is definitely headed in the right direction for me. –  Nico Oct 10 '11 at 16:15
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.