Fancy Zones, a tiling window manager
github.com
github.com
I use xmonad on my linux machines, and wanted something similar for Window, so workspacer trys to replicate that style of window manager (configurable via writing C#, dynamic layouts, etc).
I've been using it every day for about a year, but its still pretty early, there are some applications for which it freaks out, but for the most part it works! What it really needs is a good set of docs and a bunch of examples, but I haven't had any time to flesh it out.
I was hoping to see some unique tricks in the source for Fancy Zones, but it looks like it more or less does the same thing as workspacer, managing the set of open windows and occasionally calling SetWindowPos.
I'll definitely give this a try!
I like it when the config file is explicit - as in that there are no defaults outside of what is specified in the config file. This way it's very easy for a new user (like me) to edit things like keybinds, colors, etc. without having to basically recreate the default config to then edit it.
Also, since I'm an i3 user, I'd like if there was the possibility of navigating windows using directions instead of in a sequence, and to create layouts on the fly by doing splits and resizing. Maybe this is already possible by writing some code in the code though?
Nothing too important, but thought I'd voice my initial thoughts. Thanks for your work!
I'll go ahead and plug my dmenu equivalent[0], since that's also something I use when on Windows and which someone might find useful.
On direction changes, I've gotten this request a few times. It should be pretty easy, but I haven't gotten around to it: https://github.com/rickbutton/workspacer/issues/43
On the fly layouts would be neat. Since layouts are just an instance of ILayoutEngine, you could probably just write a bunch of custom code to allow you to make splits however you want. I would be super interested in seeing what this looks like!
wlines is awesome! There is a feature in workspacer similar to dmenu called "menus", but there are a few bugs, mostly around it sometimes not showing up in focus, which is a pain. I have some config on my work machine that lets me press alt-shift-p and navigate to a bunch of work projects I maintain, only typing the first few characters of the project I'm looking for.
So you can do updates to the defaults but if users wanted to specify specific customisations those would be preserved. Also users can browser the defaults config and copy/paste chunks of that config into the user config file.
Those files are often named differently and/or located in different parts of the file system hierarchy; but the concept is the same.
right now, configuring workspacer is a very imperative, mutable process, because you just setup instances of objects, and call functions that setup some state. some care would need to be taken to design an API that could be "layered" in that it could be easily overridden by the user. this is a good idea!
[0] https://askubuntu.com/questions/365840/compare-differences-w...
[1] https://raphaelhertzog.com/2010/09/21/debian-conffile-config...
https://gist.github.com/Fusion/8ad05ac05948b3397516aa836f0a1...
fancy zones allows you to define a static layout, and then drag windows into the zones you create.
layouts in workspacer are defined in code, and are "always on", in that the window position/size is always handled by workspacer, instead of only when you ask for it.
For the few cases where it doesn't work right now, I have ignore routes setup in my config file (so workspacer will just ignore any matching window). I should probably make a list of the few common apps that are weird.
https://winscp.net/forum/viewforum.php?f=2&sid=5a9eada96b43f...
Why?
$ which scp
C:\WINDOWS\System32\OpenSSH\scp.exe
So no need for WinSCP if you just want to use the terminal.The main problem was that, as far as I could tell, the window manager couldn't really preempt the windows and force them to show up in a certain way. Instead it basically asked them "pretty please, could you show up at this location with these dimensions?". As a result frozen apps (such as graphical apps that triggered a breakpoint in code or are simply misbehaving) or apps running as admin would refuse to obey and stay stuck. IIRC one workaround was to run the window manager with admin privilege but even that didn't help with frozen apps I think. Besides I wasn't really comfortable running such an application with administrator privileges.
Of course that was a long time ago and it was a non-MS project, hopefully this one works better. I really can't see myself working without a tiling WM anymore, "conventional" desktops feel terribly clunky and inefficient to me.
Also normal apps can’t send messages to elevated apps because there are ways to take over apps by sending the messages that you can’t really defend against.
This experience actually made me wary of Wayland and other X11 replacements because, as far as I understand, they behave similarly. I could be completely wrong about that though because I still haven't completely figured out how Wayland actually works and every time I looked for infos on this particular topic I ended up more confused than when I started.
When I’m on Linux I love using xmonad/i3, but on other platforms I’ve learned to accept the defaults; otherwise you just end up using things that work most of the time, but not really, and it’s really infuriating when you expect your workflows to be snappy and consistent.
Not surprised that more sophisticated alternate window-layout systems would also fail badly.
It's extremely difficult to make any significant change to the paradigm of how Win32 apps are managed and presented and have it work consistently for arbitrary apps - for example they recently tried to add a feature to Windows that allowed arbitrary native apps to be switched and managed via a tab strip like web apps. Worked fine for UWP apps, but when they tried to extend it to arbitrary Win32 they got mired in edge cases and eventually dropped the feature.
Played with it a bit. It has some good ideas, but hopefully they keep adding features. Some things it's missing (that most or all tiling WMs have):
- Custom keyboard shortcuts
- ability to switch focus quickly with keyboard shortcuts (move to window to right/left, instead of alt-tabbing through all open windows for example)
- virtual desktop keyboard shortcuts to quickly switch to a numbered Virtual Desktop and move windows to them (I have a autohotkey script for this), but would be nice for it to be built-in to this.
- an option to auto-tile when new windows are opened. As it is, it floats new windows, and you have to manually move them into position. This is fairly cumbersome.
It has its quirks and I had to spent some time adding exceptions and the auto resizing it does is certainly not the fastest thing in the world, but I'm more than willing to put up with it for the auto tiling.
On the whole, it's more reminiscent of xmonad than i3, but wasn't too bad to learn since you can bind what ever keys you want to whatever operations.
You can do this with DexPot (https://www.dexpot.de/?lang=en) and even send windows to a specific virtual desktop. It uses i3's key binds by default.
On Windows you're better off trying to find specific functionality from i3 across different tools.
For example, you can also use http://keypirinha.com/ to launch apps by fuzzy matching. In some ways it's better than d-menu and in other ways it's worse, but it's a decent tool.
And you can also use AutoHotKey to remap and set global hotkeys (as you may do in i3's config).
The only missing thing is actually tiling windows unfortunately.
At last, I use a similar setup with Autohotkey script. I remap the winkey to some unused key in order to disable default winkey behavior, so that I could use binding like win + 1 for virtual desktop 1, win + shift + 1 to move window to virtual desktop 1, and so on.
It was tough to work on other OS once you get used to tilting manager. It feels backward to manually moving around multiple stacking windows.
F1 - Run or switch to Outlook
F2 - Run or switch to Firefox
F3 - Run or switch to Emacs
...
F9 - Cycle windows in app
F10 - previous window (alt+tab)
F11 - maximize / restore
F12 - Kill window
It's not tiling, but it's a potent workflow.
Win+1 Explorer
Win+2 Firefox
Win+...
I really hope this catches on. It's a fantastic productivity booster that I feel is on-par with having a second monitor.
edit: Just checked. It has a hotkey to switch between saved layouts. And you can set it so a newly opened program goes to its last known zone. That's pretty cool. I'll have to try it.
If this product is able to change that, then that could outweigh the pain of the awkward configuration for me.
It's sort of like saying "the problem with cars is that they don't make effective use of the horse".
i3 doesn't do anything to prevent you using the mouse for whatever application you like.
For extra stuff i'd like using the wheel up/down on a title bar to minimize/restore a zone, drag-dropping a window over another window to create a zone made out of tab-like title bars, ctrl+clicking multiple titlebars to select multiple windows (so that, e.g, drag-dropping them to another zone would put all of them as tabbed windows in there or being able to close all of them either via a shortcut or via a popup menu command, and/or commands to merge them in one tabbed zone, or split tabbed zone(s) to individual zones), right clicking on a zone separator to offer a popup with commands to split/merge the zone, move the splitter at some specific percentage, etc, drag-dropping one or more windows at the edge of the screen to create a new zone (or set of zones for multiple windows).
There are so many things you can add with a mouse, especially if instead of thinking of it as a car vs horse you think of it as what it actually is: an additional input device that is right next to your keyboard and unlike the keyboard it provides precise analog input for 2D motion.
As a starting point you can check what pretty much every IDE with support for tiling does (e.g. the recent versions of Visual Studio - not VSCore, the real one).
It's really quite a powerful and easily configurable tool, so much so that I consider it to be an absolutely indispensable part of my day-to-day computing experience (working on a Mac, for example, is just depressing in comparison).
I know other window managers allow you to use focus-follow-mouse, but I haven't found any that make it nearly as effective as i3.
This is the most frustrating problem I have with Microsoft Windows, which frequently needs a reboot (to satisfy update obligations, or just to try to fix degraded performance).
After more than twenty years having my preferred desktop environment (KDE) bring back all my application windows, laid out as they were prior to reboot, across multiple virtual desktops, it's profoundly frustrating to have to spend several minutes each time trying to recreate my layout on Microsoft Windows 10.
Yes, tiling WMs etc may solve (for small values) this in different ways, but the fact remains that after a reboot on Microsoft Windows I'm back to a pristine desktop each and every time.
Incumbents are pretty strong, though. Windows 10 introduced Snap, which easily breaks your screen into halves or quadrants
https://support.microsoft.com/en-us/help/4027324/windows-10-...
Sysinternals, well known for simple powerfull tools, makes a program called Desktops. It creates a total of 4 sets of desktops you can hotkey between.
https://docs.microsoft.com/en-us/sysinternals/downloads/desk...
sysinternals desktops multiplies my 3 monitors and gives me 12, and a few are quartered or halved. 16 "sections" in use pretty commonly with no extra software or hardware cost.
It should be noted that my work computer has 8gb ram and an i5, so if i can do it you can too : )
This was the featured that made me go "okay, Windows 10 is doing some good things, I'll upgrade from 7", and now I hate it.
Desktops is fast and seamless. Task View is very slow and awkward. Win+Tab takes nearly a second to load and the default focus starts in your current desktop, instead of the desktop switcher. Process to Task View from desktop 1 to 4: win+tab > shift+tab > right arrow > right arrow > right arrow > enter. You can ctrl+win+left|right to move a desktop at a time, but it doesnt wrap so to go desktop 1 to desktop 4, I have to swipe through 2&3 to get there. The cutesy swipe animation takes a half-second, so it takes ~2 seconds to get from 1 to 4. Do you think people managing multiple virtual desktops via hotkeys are interested in cutesy animations at noticeable performance cost, Microsoft?
Task View is worse than alt-tabbing through 20 open windows without any virtual desktops at all. Sysinternals Desktops takes the win, and not by a little bit.
There are three thing I'd like regarding window layout:
1) the WM remembers the last placement of each app (and child window, and second or 3rd instance), and put them there when relaunched.
2) since I use a huge 4k monitor, I almost never want a window to drag beyond any edge of the screen. I dont need snapping, just a large hysteresis (in one direction) at the edge of the screen.
3) an easy way to set which thing launch at login. This may want to be in one of the common menus, not off in a config tool or .login file.
BTW I use gnome (on wayland), so if you know how I can get any of these behaviors I'd like that.
[1] https://github.com/ssokolow/quicktile [2] https://www.spectacleapp.com/
https://bitbucket.org/joshua_wilding/windowgrid-binaries/src...
WindowGrid: Drag window with left+right mouse buttons brings up a customizable grid. Release RMB to set first corner, and LMB to set opposite corner.
WinNumpad Position: Win key+Numpad key to snap window into corresponding position (eg- 7 for top left corner). Hit number multiple times to cycle through sizes. https://pbrs.weebly.com/win-numpad-positioner.html
Both are basically abandoned, but they work well along side the built in Aero Snap features.
Other old alternatives that have various levels of functionality (and clearly inspired many of the tools posted in this thread):
GridMove (free): Used to be my go to, but hdpi scaling and the Modern UI window elements borked it. Based on AutoHotKey, but surprisingly responsive, extremely customizable (though not very user friendly). Would love to see this make a comeback. http://www.dcmembers.com/jgpaiva/ https://github.com/jgpaiva/GridMove
MaxTo (paid): User friendly and pretty, but less useful since Aero Snap. Rarely updated, but alive. Nice if all you want is a slightly more control over the built in Aero Snap. https://maxto.net/
AquaSnap (paid): Very similar to MaxTo, but more refined. Free personal version is limited to single display functions. Updated rarely, but alive. https://www.nurgo-software.com/products/aquasnap
Windock (free): Crashes for me but works for some. https://www.ivanyu.ca/#/windock/
Freesnap (free): Not maintained, but used to be great. Haven't tried it in a while, but thought it deserved mentioning. https://mike-ward.net/freesnap/
There are some very cool things coming in the next release: - support for different triggers, that lets you run specific commands in response to windows events. Basically our recipes feature extended quite a bit. - WinSplit-like hotkeys for those who liked those. Configurable. - lots of these small quality of life improvements
We are getting closer to a public preview of this, but shoot me an e-mail for a private preview.
Download it at http://www.soulidstudio.com
Any feedback welcome!
Do you still actively develop it? The digital signature in your .exe says 2017 and your website footer says 2015.
(Obviously not trying to compete in your space, just want to know if selling apps you've written is a worthwhile business.)
another commenter mentioned maxto so i tried it out as well. it looks like maxto is exactly what fancy zones will be once it's finished.
See my comment above for details, or shoot me an e-mail at the support address for a preview.
If anyone is looking for an i3-like tiling window manager (a Linux tiling wm) Fanzy Zones isn't it. This one requires pre-setting a bunch of layouts up front, unlike i3 where you can just seamlessly open and move windows that auto-split as you go with zero window configuration up front.
IMO the mods should change the title of this post to define what type of tiling window manager it is, such as "Fancy Zones, a pre-defined layout based tiling window manager from Microsoft". In the title's current form it's borderline clickbait.
The usual classification is static vs. dynamic: static managers maintain a certain fixed layout of slots which they then fill windows into, while dynamic ones adjust the number, layout and size of those slots on the fly as new windows are spawned.
While I don't usually see them classified this way, there is also pre-defined vs. on-the-fly (manual?) layout. This is pretty much what it says on the tin; pre-defined managers have pre-defined zones (for static managers) or algorithms (for dynamic managers); generally you can customize these in some way if you wish. On-the-fly managers let you create custom layouts as you go.
Examples of various combinations: static, pre-defined: Fancy Zones, Slate, most simple tools for windows / mac static, on-the-fly: stumpwm/ratpoison, emacs (not really a window manager but the paradigm is familiar to many) dynamic, pre-defined: dwm, awesomewm, xmonad dynamic, on-the-fly: i3
All of these models have strengths and weaknesses. Dynamic/pre-defined (e.g. dwm) is well suited for a workflow leaning on traditional unix tools (vi, sed, awk, lots of shell magic) where one tends to frequently spawn and despawn terminals (i3 is probably also decent here), but tends to fall down if you have a lot of windows to manage (workspaces can sometimes help with this, but they aren't always the answer). Static/on-the-fly (e.g. stumpwm) works really well if you have a lot of windows to manage, but only want to display a few of them at a time in some ad-hoc manner --- but isn't so great if you want to constantly adjust your layout. Static/pre-defined usually have a control system that is less automatic (more overhead on the user) but play nicer in environments that are traditionally dominated by stacking managers (so also less headache for the user). i3 is kind of it's own beast; it has a lot of power in creating whatever specific layout you might find optimal at the moment; downsides include evolved complexity as your layout develops, and simple lack of the specific strengths of other approaches.
You seem to have found happiness with i3, which is great. I currently prefer the approach of dwm or stumpwm, depending. Others have other preferences, but all of the above are valid approaches to tiling. While I agree that more detail in the title could be a good thing, I definitely wouldn't call it clickbait.
Heck the 6 minute Youtube tutorial in the README is just 6 minutes of trying to explain the convoluted configuration to set up and use layouts. There's not even 1 second of video showing 2 tiled windows together when the project is supposed to be the official Microsoft tiled window manager.
This isn't something that's really a feature request. It would require changing how the whole entire application works at a fundamental level, or really building 2 applications in 1.
That's why you have 2 different sets of tiling window managers on Linux. You either have fixed layout ones where it's automatic after configuration or manual tiling window managers instead of 1 tool trying to do both.
I must be missing something, because the 'dynamic' tiling window managers are 1 tool doing both fixed and floating (or stacking) layouts.
i3 acts much differently because if you open 1 window it takes up your whole screen and if you open another window it will be split 50/50 (the direction depends on what hotkey you hit). And it keeps going like this. You can just naturally use your system and let the tiling window manager worry about resizing things and you can fine tune the sizes with hotkeys on the spot if you desire to have non-symmetrical splits.
This is why i3 is classified as a manual tiling window manager. You get to control how the splits happen on the spot, rather than it being automatic as long as you pre-configure the layouts beforehand.
i3 also lets you optionally choose to make windows floating on demand with hotkeys or even pre-configure certain apps or window titles to be floating by default. There's stacking as well.
This video does a good job showing how i3 works and feels: https://www.youtube.com/watch?v=GKviflL9XeI (and how it's drastically different than Fancy Zones).
This may come as a shock to you, but some of us prefer our highly-tailored pre-configured tiling setups to the ad-hoc interaction that is i3.
Yes, that's why i3 and other wms exist on Linux and everyone is happy using the tool they prefer.
I'm more upset about the title of the post being clickbait because like you said, some people prefer different styles of tiled window managers.
Having it defined as "tiling window manager" is going to make the 50% of the people who prefer i3 feel they got baited into clicking the link. I know I went from "omg best software day ever" to "..." between reading the title and clicking the link.
I get the baited feeling. But you know as well as me that any sort of tiling interaction with Windows beyond snap left/snap right is progress.
It's not exactly the "zero configuration" the parent wants, but it's close, and aligned with how some tiling managers work. (As the other arguments get into, tiling window manager is a wide field with a variety of solutions and opinions differ.)
NB: Virtuawin seems like OSS abandon-ware (last build ~2017, iirc) but it works great (so far), while AquaSnap is trialware (I bought it after two days of use) and is still shipping releases.
I also hack the registry to enable focus-follows-mouse without autoraise. (Powertoys could enable the first capability but not the latter, hence the registry mod.)
I'm primarily a Windows SE, but I fell in love with these capabilities in X when I was learning my way around Linux and just had to have the same experience on Windows <grin>.
Direct link to PowerToys inc Fancy Zones: https://github.com/Microsoft/powertoys/releases
- You probably want to turn on 'On Override Windows Snap hotkeys (win+arrow) to move windows between zones'.
- Default zone is boring, I like 'Priority grid' which is two thin columns and a thick one.
After a while you don't really think about window management.
PS 'jenmsft' in the thread below is a Software Engineer & Community Manager for Microsoft.
Mulitple desktops with windows nicely arranged on each is even better.
I use it on my 34" monitor.
I'm not too worried about the competition here; MaxTo's feature set is expanding and will remain quite a bit more powerful than FancyZones for the overseeable future. :)
https://github.com/adamsmith/WindowsLayoutSnapshot
Wonder if this tool would perform the same general function.
BTW: For any MS folks listening, please fix this bug, it's dreadful! :(
I'll stick with i3 though.
I think it also borrows a bit from “Kai’s Power Tools”
Great productivity booster!
I had some difficulty using it on multiple monitors though.
What a project name :P
Boomers are retired, Xers are the corporate old guard, and the up-and-comers right out of college are Generation Z (Zoomers) or whatever they come to be called.
also: i'm not sure i agree with <19 yrs old people being ... "old"
Millennial were born 1981-1996 ;) There's no <19 year old millennial's left, I'm afraid.
/Edit
I'm going to assume all these downvoters work for my IT department.