Jon Aquino's Mental Garden

Engineering beautiful software jon aquino labs | personal blog

Sunday, July 02, 2006

Dual-Monitor Theory and Practice

I'd like to record here (and in the comments) some tips for organizing your desktop for use with dual monitors. The productivity gains of having a second monitor are well known--what isn't so well known are best practices for using two monitors (window layout, etc.)

A couple of suggestions that come to mind are (and these are purely experimental--only time will bear out their effectiveness):

* Placing the second monitor above the first, rather than to the side. I'm trying this with my laptop monitor and my external monitor, and it seems to be working well as I don't need to turn my head to see either of the screens.

* Moving the taskbar to the left of the screen rather than keeping it at the bottom. This allows us to see the full titles of all our open windows (and having dual screens, we usually have a lot more windows open). I prefer to open separate Firefox windows and text-editor windows, rather than use tabs (so I can see documents side-by-side), so having a list of the titles of open windows will probably prove extremely handy.

* Install TopDesk. This is an Expose clone for Windows--it's a $10 program that shows you thumbnails of all open windows. I'm not sure how valuable this will be in the long run (it's certainly pleasing eye-candy). Moreover it won't let you search the titles of open windows, but that's easily solved with my Find Window macro.

What are other best practices for computing in a multimonitor world?

23 Comments:

  • Another very useful capability is the ability to send windows to the other monitor with a click or keypress, and to resize the window with a keypress.

    My computer came with software to send the window to the other monitor; unfortunately there is no shortcut key for this function so I made one using an AutoHotKey macro.

    By Blogger Jonathan, at 7/02/2006 11:31 p.m.  

  • Here are AutoHotKey macros for moving windows to the top monitor, to the bottom monitor, and resizing windows to be 640x480, 800x600, 1024x768:

    ; Up (Ctrl+Alt+Shift+1)
    ^!+1::
    WinGetActiveTitle, Title
    WinMove,%Title%,,300,100
    return

    ; Down (Ctrl+Alt+Shift+2)
    ^!+2::
    WinGetActiveTitle, Title
    WinMove,%Title%,,100,1300
    return

    ; 640 (Ctrl+Alt+Shift+3)
    ^!+3::
    WinGetActiveTitle, Title
    WinMove,%Title%,,,,640,480
    return

    ; 800 (Ctrl+Alt+Shift+4)
    ^!+4::
    WinGetActiveTitle, Title
    WinMove,%Title%,,,,800,600
    return

    ; 1024 (Ctrl+Alt+Shift+5)
    ^!+5::
    WinGetActiveTitle, Title
    WinMove,%Title%,,,,1024,768
    return

    By Blogger Jonathan, at 7/02/2006 11:52 p.m.  

  • I have my external monitor above my laptop screen too (for now). The one thing that bugs me with that setup (which I've been running for about 4 months now) is having to take the mouse off the *side* of the laptop screen to get it on to the screen *above*.
    Have you found a workaround for that, or do you do the same?

    By Anonymous Anonymous, at 7/03/2006 2:47 a.m.  

  • I really didn't "get" why having two monitors was useful until after I saw a friend running UltraMon. All the sudden it was perfectly clear. I went out and bought two DELL LCD's installed UltraMon and have never been happier.

    Do a google search for ultramon. I think you will be very pleased with it.

    By Anonymous Anonymous, at 7/03/2006 8:58 a.m.  

  • Derek--My IBM laptop came with a configuration utility that lets me specify that the external monitor is above the laptop rather than to the left--hopefully yours has something similar.

    Gavin--I'll definitely check out UltarMon--thanks for the pointer.

    By Blogger Jonathan, at 7/03/2006 12:02 p.m.  

  • I have two side-by-side monitors with my windows task bars (I run a VM on one monitor nearly 100% of the time) on the right side of the left monitor & the left side of the right monitor... so as I move the mouse between screens, both task bars are at the mid point between screens. I think this reduces the time to switch between tasks.

    By Blogger graham, at 7/03/2006 10:35 p.m.  

  • graham--clever!

    By Blogger Jonathan, at 7/04/2006 9:37 a.m.  

  • Another tip: use new windows rather than tabs. Your vast screen real estate affords you this luxury!

    With the plethora of new windows, you need a way to easily find and access them. Install the iswitchw script (an AutoHotKey script that lets you do incremental searching of window titles). I describe this in another post on my blog.

    By Blogger Jonathan, at 7/04/2006 9:39 a.m.  

  • For some apps - particularly IDEs like Eclipse - the maximise window is not your friend. Instead you can resize the window manually to fit both screens at once.

    For many apps the windows will need to be side by side though.

    I'm not sure if the research on multiple monitor productivity supports the screens being one above another to get the best results?

    Right next stop TopDesk site - and I second the use of UltraMon

    By Anonymous Anonymous, at 7/06/2006 1:48 a.m.  

  • hi metafeather--yeah, I've got a smaller and a larger screen, so the one-above-the-other approach works well for my setup. I'm guessing you have two equally sized screens?

    But yeah, this is all just experimental, given the lack of research on this published on the internet. It's people helping people :-)

    By Blogger Jonathan, at 7/06/2006 11:48 p.m.  

  • Please post pictures of your multi-screen setups.

    By Anonymous Anonymous, at 7/16/2006 11:03 a.m.  

  • Hmm--I'm trying side-by-side monitors again. I was using my laptop keyboard to type, but now I'm using an external keyboard, and so I need to elevate the laptop.

    Having two differently sized monitors, I am actually using the smaller one as my main one, with the larger one to the side. This might actually be a theorem in our Dual-Monitor Theory And Practice--given two monitors of different sizes, use the smaller one as the main one (straight ahead), and put the larger one to the side.

    This is so you can have several (2-4) browser windows open side-by-side on the secondary screen, while you do your coding on the primary. Usually in programming work you have one window for coding and several windows showing the results of that coding.

    Other possible tips:
    - keep the primary facing you directly, and the secondary angled to face you, rather than both angled or both straight.
    - push the primary over a bit to bring the secondary a bit more into view

    By Blogger Jonathan, at 7/16/2006 11:17 a.m.  

  • Another tip: Install MultiMonitor. It is a freeware alternative to UltraMon. It puts a Left/Right button in your windows that you can use to shift the window to the other monitor.

    By Blogger Jonathan, at 7/30/2006 11:23 a.m.  

  • Jonathan

    Sometimes it's useful to switch from single to dual monitor mode. I've setup two scripting words using ActiveWords, twoon and twooff. When I run these I can enable or disable the second monitor.

    Despite having the setup for about 2 years now, I'm still not comfortable with monitor positioning, one always seems easier to use that the other. These are older 21-inch monitors both set at 1600x1200.

    Maybe I just need to get two flatscreens and accept a slightly lower resolution. Or maybe it's a left brain, right brain thing?

    By Blogger Bernard, at 8/08/2006 3:58 a.m.  

  • Hi Bernard--interesting idea about left-brain/right-brain!

    Perhaps this means email on the left and browser on the right. Or vice versa...

    :-)

    By Blogger Jonathan, at 8/13/2006 10:01 p.m.  

  • Here's an AutoHotKey script that'll switch the active window to the other monitor in the same spot it was already on. It only works for 2 monitors, but should work however they're arranged.

    ; Swap Monitor (Windows+1)
    #1::
    WinGetActiveStats, Title, Width, Height, X, Y

    SysGet, MonCount, MonitorCount
    SysGet, Mon1, Monitor

    IfGreater, MonCount, 1
    SysGet, Mon2, Monitor, 2
    Else
    SysGet, Mon2, Monitor

    WinGet, Max, MinMax, %Title%
    if(Max)
    WinRestore, %Title%

    MiddleX := (X + (Width/2))
    MiddleY := (Y + (Height/2))

    Transform, MidX, Round, MiddleX
    Transform, MidY, Round, MiddleY

    if((%MidX% >= %Mon2Left% and %MidX% <= %Mon2Right%) and (%MidY% >= %Mon2Top% and %MidY% <= %Mon2Bottom%))
    {
    ; Active window is inside monitor 2
    RelX = %X% - %Mon2Left%
    RelY = %Y% - %Mon2Top%
    EndX = %Mon1Left% + %RelX%
    EndY = %Mon1Top% + %RelY%
    }
    else
    {
    ; Active window is inside monitor 1
    RelX = %X% - %Mon1Left%
    RelY = %Y% - %Mon1Top%
    EndX = %Mon2Left% + %RelX%
    EndY = %Mon2Top% + %RelY%
    }

    WinMove, %EndX%, %EndY%

    IfGreater, Max, 0)
    {
    WinMaximize, %Title%
    }
    IfLess, Max, 0
    {
    WinMinimize, %Title%
    }

    return

    By Anonymous Anonymous, at 10/31/2006 11:50 p.m.  

  • Beauty - thanks Anon.upup

    By Blogger Jonathan, at 11/01/2006 12:41 a.m.  

  • The monitor switching tool was a very good starting point. With a dual monitor setup in which the secondary mon is left of the primary the coordinates go below zery (e.g. -1024,0) which brakes the script as %Mon2Left% is reported as an illegal variable name of "-1024"... below you find the version which worked for me better in such scenarios. I changed the WinMove command to include %Title%. Without it the Win did not move at all...

    Hope tis works for you as well ;-)
    Cheers - X


    ; Swap Monitor (Windows+1)

    #1::
    WinGetActiveStats, Title, Width, Height, X, Y

    SysGet, MonCount, MonitorCount
    SysGet, Mon1, Monitor

    IfGreater, MonCount, 1
    SysGet, Mon2, Monitor, 2
    Else
    SysGet, Mon2, Monitor

    WinGet, Max, MinMax, %Title%
    if(Max)
    WinRestore, %Title%

    MiddleX := (X + (Width/2))
    MiddleY := (Y + (Height/2))

    Transform, MidX, Round, MiddleX
    Transform, MidY, Round, MiddleY

    if(((MidX >= Mon2Left) and (MidX <= Mon2Right)) and ((MidY >= Mon2Top) and (MidY <= Mon2Bottom)))
    {
    ; MsgBox Mon2
    ; Active window is inside monitor 2
    RelX := X - Mon2Left
    RelY := Y - Mon2Top
    EndX := Mon1Left + RelX
    EndY := Mon1Top + RelY
    }
    else
    {
    ; MsgBox Mon1
    ; Active window is inside monitor 1
    RelX := X - Mon1Left
    RelY := Y - Mon1Top
    EndX := Mon2Left + RelX
    EndY := Mon2Top + RelY
    }

    WinMove, %Title%, ,%EndX%, %EndY%

    IfGreater, Max, 0)
    {
    WinMaximize, %Title%
    }
    IfLess, Max, 0
    {
    WinMinimize, %Title%
    }

    return

    By Anonymous Anonymous, at 2/16/2007 1:33 a.m.  

  • Nice one, Anon - thx.

    By Blogger Jonathan, at 2/16/2007 6:34 p.m.  

  • Some time back, someone mentioned wanting to set the relative position of one monitor to the other. In xp (and vista I believe) this can be done by dragging the second monitor to the desired position in the 'Display Properties'!Settings tab.

    By Anonymous Anonymous, at 4/26/2007 9:53 p.m.  

  • Anon - thx for the tip.

    By Blogger Jonathan, at 4/27/2007 11:55 p.m.  

  • bernhard wrote: Sometimes it's useful to switch from single to dual monitor mode. I've setup two scripting words using ActiveWords, twoon and twooff. When I run these I can enable or disable the second monitor.

    I wonder wether there's a function call to windows XP with which I could change the relative positioning of the secondary monitor to e.g. -1024,0 (left of the primary). Problem is that my laptop always forgets the positioning and puts the secondary to the right of primary which is in contradiction to my real world setup...
    Any Idea? Thanx in advance.

    By Blogger bloxxer, at 7/24/2007 1:05 a.m.  

  • Funny - I think I have the same problem. My external monitor is to the left of my laptop, but I must tell Windoes that it is on the right, as it gets it the wrong way round.

    By Blogger Jonathan, at 7/24/2007 9:58 p.m.  

Post a Comment

<< Home