2

I want to use a tiling window manager on Windows 10. Using my keyboard for everything but window management has become tiresome.

  • Must support Windows 10 (Integrating with the new virtual desktops would be a big +)
  • Open source is preferred but not required. (I'm also okay with paying if the product is very good.)
  • Lightweight options are preferred.
  • A usable keybinding system is required.

Notes:

  • Seven years ago, a similar question was asked on SO, but it was closed as "not constructive". Now that there is a dedicated community for this type of question and the software world has changed quite a bit, I'd like to see if there are any new answers to add.

  • I've already tried AquaSnap, and a compatibility issue with Cygwin multiwindow is keeping me from using it. (I've contacted their support—we'll see how that goes.) I've also tried bug.n but I haven't figured out how to be productive with it yet

1

can't you just use the windows + arrow keys? Left and right snaps to the left and right side, up and down after that is a corner snap. Up maximizes. Down sizes back to normal, and a second time minimises. This behaviour (except for the corner snapping) has been around since Windows 7.

But if you're looking for alternatives to the native windows management, it is discussed a bit in this one year old reddit thread: https://www.reddit.com/r/windows/comments/2rn775/best_tiled_window_manager_for_windows/

Linux has far too many options, but that doesn't help us too much, so I thought I'd make a thread of our own. Does anyone have any recommendations, experience, or suggestions? Wikipedia has a list of programs for windows here, which has been reproduced below.

  • AquaSnap — Tiles and arranges windows by "drag & drop" or hotkeys, can "snap" windows side by side like magnets. Supports multi-monitor setups
  • SplitView — Tiles windows using caption buttons and keyboard shortcuts, optionally maximizing windows to a screen part (commercial)
  • Mosaico — Tiles windows using "drag&go" feature or keyboard shortcuts. Saves windows position and size in a snapshot and can restore up to 8 snapshots (commercial)
  • HashTWM — Tiling window manager with automatic tiling
  • GridMove — Tiles and arranges windows on sophisticated layouts with hotkeys and multi-monitor support
  • bug.n — Amongst other flavours is a dynamic, tiling window manager, which tries to clone the functionality of dwm
  • Windawesome — A highly customizable dynamic window manager written in C#
  • MaxTo — Tiles windows on user-defined grid by intercepting windows that are maximized or using hotkeys. Supports multi-monitor setups
  • Twinsplay — Tiles windows using keyboard shortcuts
  • Plumb — Automatically aligns windows for you while you work
  • Python-windows-tiler — Very basic tiler
  • Divvy — (Commercial)

But personally I think all of them lack something, especially if you have a multi monitor setup with different needs for every monitor.

  • 3
    We don't like long lists of everything here. Either you have tried it yourself, have experience with and you can really recommend it or the answer is not worth more than a Google search. For me that gives 8 downvotes for 8 items in the list that don't work well and 2 upvotes for 2 items of the list that are good plus 2 downvotes for 2 items that OP has already tried but you list it anyways. Did you get what I mean? – Thomas Weller Aug 24 '16 at 19:18
  • 1
    I read this ~6 months ago: softwarerecs.stackexchange.com/questions/13338/… and it works well for me... might fit the bill for you too. – Dimblefeck Feb 22 '17 at 15:54
0

I get by with an auto-hot-key script that adds a little to the standard Windows Alt-Arrow arrangement.

Windows 7 and up have Alt-Left and Alt-Right that move the window to the left and right edges. My AHK script (below) makes Alt-Up and Alt-Down move to the top and bottom edges, while Alt-PgUp and Alt-PgDown maximize and minimize, respectively.

; from https://autohotkey.com/board/topic/69464-how-to-determine-a-window-is-in-which-monitor/
; Tells you which monitor a window is on (given a windowhandle)
GetMonitorIndexFromWindow(windowHandle)
{
    ; Starts with 1.
    monitorIndex := 1

    VarSetCapacity(monitorInfo, 40)
    NumPut(40, monitorInfo)

    if (monitorHandle := DllCall("MonitorFromWindow", "uint", windowHandle, "uint", 0x2)) 
        && DllCall("GetMonitorInfo", "uint", monitorHandle, "uint", &monitorInfo) 
    {
        monitorLeft   := NumGet(monitorInfo,  4, "Int")
        monitorTop    := NumGet(monitorInfo,  8, "Int")
        monitorRight  := NumGet(monitorInfo, 12, "Int")
        monitorBottom := NumGet(monitorInfo, 16, "Int")
        workLeft      := NumGet(monitorInfo, 20, "Int")
        workTop       := NumGet(monitorInfo, 24, "Int")
        workRight     := NumGet(monitorInfo, 28, "Int")
        workBottom    := NumGet(monitorInfo, 32, "Int")
        isPrimary     := NumGet(monitorInfo, 36, "Int") & 1

        SysGet, monitorCount, MonitorCount

        Loop, %monitorCount%
        {
            SysGet, tempMon, Monitor, %A_Index%

            ; Compare location to determine the monitor index.
            if ((monitorLeft = tempMonLeft) and (monitorTop = tempMonTop)
                and (monitorRight = tempMonRight) and (monitorBottom = tempMonBottom))
            {
                monitorIndex := A_Index
                break
            }
        }
    }

    return monitorIndex
}

; Windows monitors are numbered from 1 up.
; Find the windowhandle for the 'active' window 
; (might be none!)
GetMonitorIndexForActiveWindow()
{
    winHand := WinExist("A")
    if !winHand 
        return 0

    return GetMonitorIndexFromWindow(winHand)
}



; Maximize current window
#PgUp::
WinMaximize, A
return

; Minimize current window
#PgDn::
WinMinimize, A
return

; Make active window take up top half of active monitor
#Up::
;Get the index of the monitor the active window is on (1, 2, etc. 0 if no active wind)
monIdx := GetMonitorIndexForActiveWindow()
if (monIdx)
{
    ; Get bounding box of that monitor
    SysGet, MonBnd, Monitor, %monIdx%
    ; monitor height
    monHi := (MonBndBottom-MonBndTop)
    ; monitor width
    monWid := (MonBndRight - MonBndLeft)
    ; half height
    newHi := monHi/2
    WinMove, A, , %MonBndLeft%, %MonBndTop%, %monWid%, %newHi%
}
return

#Down::
;Get the index of the monitor the active window is on (1, 2, etc. 0 if no active wind)
monIdx := GetMonitorIndexForActiveWindow()
if (monIdx)
{
    ; Get bounding box of that monitor
    SysGet, MonBnd, Monitor, %monIdx%
    monHi := (MonBndBottom-MonBndTop)
    ; monitor width
    monWid := (MonBndRight - MonBndLeft)
    newTop := MonBndTop + (monHi/2)
    newHi := monHi/2
    WinMove, A, , %MonBndLeft%, %newTop%, %monWid%, %newHi%
}
return

Also, in a comment on another answer, Dimblefeck references Another AHK script which uses the num pad for window tiling control. I love that idea, but I can't personally bear to give up the number pad.

  • 1
    The use of that script does require a modifier namely the Windows key such that the number pad is still available as a number pad. – Dimblefeck May 9 '17 at 14:03
0

I've been using GridMove until recently, but it was never updated since 2011, and does not support HiDPI. Switched to Stack, which is similar.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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